我好像每年都要倒騰一次這種東西。由於需要學習KVM在ARM上的虛擬化技術,缺乏必要的硬件支持,所以必須在PC上模擬ARM平臺。。大約是安裝若干個操作系統,然後模擬下看性能。。。
參考http://www.virtualopensystems.com/media/kvm-resources/kvm-arm-guide.pdf進行配置。
平臺搭建,是個極其需要耐心的活兒==|
1、安裝所需要的工具鏈
2、安裝FastModels。直接去ARM官方網站下載。解壓之後運行./setup.bin即可。注意需要註冊獲得license,是個evaluate的,沒有破解的方法。。。
3、運行sgcanvas
之前要首先進行環境變量的設置:
首先是liscense.dat的位置
exportARMLMD_LICENSE_FILE=/home/himiko/IBM/ARM/license.dat
路徑寫你自己的license.dat的路徑
其次是FastModelsTools_7.1的安裝地址
exportMAXCORE_HOME=/home/himiko/ARM/FastModelsTools_7.1
同樣的,寫你自己的FastModelsTools_7.1的安裝路徑~
然後是Protfolio那個地址的設置
exportPVLIB_HOME=/home/himiko/ARM/FastModelsPortfolio_7.1
最後終於可以運行了
建議同志們直接將setup_all.sh添加到~/.bashrc的最後一句中。如下
gedit ~/.bashrc
source~/ARM/FastModelsTools_7.1/etc/setup_all.sh
4、按照那個Guide裏面的指示,選取已有的Examples進行編譯~
選擇/home/himiko/ARM/FastModelsPortfolio_7.1/examples/RTSM_VE/Build_Cortex-A15x1/裏面那個唯一的項目加載到FastModels中,加載完成的結果是這個樣子的(至少我加載出來是這樣。。。)
5、Project->BuildSystem
顯然出現了GCC錯誤的信息。設置GCC爲GCC,不要指定版本
設置完畢之後再Project->BuildSystem
然後傳說中的Arm-CoretexA15就模擬編譯好了,接下來就是裝Linux的任務了
6、首先安裝arm上的gcc4.6之類的crosscompiler環境
sudo apt-getinstall gcc-4.6-arm-linux-gnueabi binutils-arm-linux-gnueabilibc6-armel-cross linux-libc-dev-armel-cross libncurses5-devgcc-arm-linux-gnueabi libc6-dev-armel-cross cpp-arm-linux-gnueabi
然後等他裝就好了,看你網速了
7、下載kvm映像
wgethttp://www.virtualopensystems.com/media/kvm-resources/uImage
8、下載git然後需要git下KVM代碼
下載git
sudo apt-getinstall git
git clonegit://github.com/virtualopensystems/linux-kvm-arm.git
此步時間相當長,做好心裏準備……
cd ~/linux-kvm-arm
9、下載uboot製作image
sudo apt-getinstall uboot-tools
10、設置ARCHCROSS_COMPILE變量。文檔中的意思是直接使用已經有的那個
先裝curl
sudo apt-getinstall curl
然後獲得配置文件
curlhttp://www.virtualsystems.com/media/kvmresources/kernel-config>.config
下面生成配置文件
CROSS_COMPILE=arm-linux-gnueabi-ARCH=arm make menuconfig
執行完畢後如下:
我打開了networking和virtualization~反正要是不夠的話下次再進來配置好了~
最後編譯hostkernel(等~)。好吧,沒多久就會有問題的。。。
百度一下,我就知道。。。。直接執行這個命令,因爲缺少了mkimage工具
sudo apt-get install uboot-mkimage
然後再編譯吧
CROSS_COMPILE=arm-linux-gnueabi-ARCH=arm make uImage
很快就結束了。。。
11、然後抓FDT
git clonegit://github.com/virtualopensystems/arm-dts.git
./scripts/dtc/dtc-O dtb -o host-a15.dtb./arm-dts/fast_models/rtsm_ve-cortex_a15x1.dts
./scripts/dtc/dtc-O dtb -o guest-a15.dtb./arm-dts/versatile_express/vexpress-v2f-2xv6-ca15x2.dts
12、抓新的bootloader
git clonegit://github.com/virtualopensystems/boot-wrapper.git
clean之後make
make clean
CROSSS_COMPILE=arm-linux-gnueabi-ARCH=arm make
13、這個bootwrapper是後面啓動host時候需要使用的
make clean
CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm make
會生成linux-semi-system.axf文件,是semihost啓動方式下需要的
14、通過nfs server方式搭建host的root文件
sudo apt-get install nfs-kernel-server nfs-common
再/etc/exports最後一行添加
/srv/nfsroot 192.168.0.0/255.255.0.0(rw,sync,no_root_squash,no_subtree_check,insecure)
每次修改完成這個文件之後必須重新啓動nfs server
sudo /etc/init.d/nfs-kernel-server restart
15、準備linux的文件系統
wget http://www.virtualopensystems.com/media/kvm-resources/fs-alip-armel.cramfs
所謂的cramfs是一個ram的file system,是一個簡單的文件系統,linux在啓動的時候會首先將其加載到內存當中。Android的文件系統格式是yaffs2,其實這個和我們所熟知的ext3/4/2沒有本質上的區別~~
sudo mount -o loop -t cramfs fs-alip-armel.cramfs /mnt
sudo cp -a /mnt/* /srv/nfsroot/
sudo umount /mnt
解壓出來之後就可以清楚的看出來實際上就是一個很小的文件系統,只包括必要的命令。
16、編寫fast models的啓動參數。cd到剛剛編譯出來的Cortex-a15下
cd ~/ARM/FastModelsPortfolio_7.1/examples/RTSM_VE/Build_Cortex-A15x1/Linux-Release-GCC-4.1
gedit params
在params文件中寫以下參數
motherboard.smsc_91c111.enabled=1
motherboard.hostbridge.userNetworking=1
cluster.cpu0.semihosting-cmd_line="--kernel /home/himiko/uImage --dtb /home/himiko/linux-kvm-arm/host-a15.dtb -- earlyprintk console=ttyAMA0 mem=2048M root=/dev/nfs nfsroot=192.168.63.117:/srv/nfsroot/ rw ip=dhcp"
保持再當前的目錄,執行命令
model_shell cadi_system_Linux-Release-GCC-4.1.so -f params ~/boot-wrapper/linux-system-semi.axf
注意,路徑需要根據自己的實際情況進行修改!!!!