Xilinx基于QEMU系統(tǒng)模擬器Xilinx/QEMU可用于模擬運(yùn)行Zynq Linux的運(yùn)行與調(diào)試。其使用可以是:
(1)利用GitHub上的Xilinx/QEMU源代碼進(jìn)行編譯得到QEMU軟件模擬器
(2)利用Xilinx提供的PetaLinux工具包,PetaLinux工具包已經(jīng)包括了QEMU emulator.
一、下載Xilinx/QEMU源碼并編譯
1. 建立GitHub賬戶并連接
(a)注冊(cè)github.com賬戶
(b)安裝git,在REHL-6下使用
yum install git
(c)使用ssh-keygen生成迷匙
ssh-keygen -t rsa -C”email@address.com” -f ~。/ssh/Huatong-github
參數(shù)意義如下:
-t 指定密匙算法類型,默認(rèn)即為rsa
-C 設(shè)置注釋文字
-f 指定密匙文件存儲(chǔ)文件名,上例會(huì)生成/home/hhdong/.ssh/huatong-github和/home/hhdong/.ssh/huatong-github.pub兩個(gè)密匙文件
(d)將SSH公匙添加到github
在瀏覽器輸入https://github.com/settings/ssh點(diǎn)擊添加Add ssh key,然后將huatong-github.pub這個(gè)文件內(nèi)容拷貝添加。
(e)新建/home/hhdong/.ssh/config文件,其內(nèi)容如下:
Host huatong-github
User git
Hostname github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/huatong-github
注意:其中的用戶名為git,而不是github.com網(wǎng)站上的用戶名。
(f)連接github.com網(wǎng)站
使用 ssh -T git@github.com或者 ssh -vT git@github.com
其最后會(huì)顯示:You‘ve successfully authenticated, but GitHub does not provide shell access.這就表示連接成功了。
如果出現(xiàn)連接錯(cuò)誤,可以嘗試如下解決方法:
(1)是不是正確的拷貝公鑰到github.com,注意不要拷貝錯(cuò)誤,包含了不必要的字符,空格,回車等
(2)修改.ssh目錄屬性和其下的文件讀寫(xiě)屬性。
chmod 700 ~/.ssh
chmod 600 ~/.ssh/*
2. 下載Xilinx/QEMU源代碼并編譯
(a) git clone git://github.com/Xilinx/qemu.git
然后將其更新到master trunk.
(b) cd qemu
git checkout Xilinx-master
(c)配置QEMU
。/configure --target-list=”arm-softmmu” --enable-fdt --disable-kvm
(d)編譯make
我在編譯過(guò)程中,出現(xiàn)
ERROR: DTC(libfdt) not present
可以根據(jù)提示下載sub model解決,git submodule update --init dtc
另外一個(gè)問(wèn)題是在編譯過(guò)程中提示:
/home/hhdong/qemu/qemu-img.c:73 : undefined reference to ‘g_sequence_lookup’
collect2: ld return 1 exit status
出現(xiàn)錯(cuò)誤的原因是g_sequence_lookup是在glibc 2.28上才加入的,而使用的Host REHL-Server-6上的glibc版本為2.12. 由于g_sequence_lookup是用于檢查一些情況下,重復(fù)的寫(xiě)入了信息。則workaround可以是:
- if (!g_sequence_lookup(seq, (gpointer)fmt_name, compare_data, NULL)) {
g_sequence_insert_sorted(seq, (gpointer)fmt_name, compare_data, NULL);
- }
即不調(diào)用g_sequence_lookup進(jìn)行判斷。
3. 運(yùn)行QEMU,并加載Xilinux預(yù)編譯好的zImage和system.dtb
/arm-softmmu/qemu-system-arm -M arm-generic-fdt -nographic -smp 2 -machine linux=on -serial mon:stdio -dtb /home/hhdong/Xilinx-ZC706-2014.2/images/linux/system.dtb -kernel /home/hhdong/Xilinx-ZC706-2014.2/pre-built/linux/images/zImage
其會(huì)提示:
qemu: fatal: Trying to execute code outside RAM or ROM at 0xfffffff0
然后就是register dump,如下:
R00=00000000 R01=00000000 R02=00000000 R03=00000000
R04=00000000 R05=00000000 R06=00000000 R07=00000000
R08=00000000 R09=00000000 R10=00000000 R11=00000000
R12=00000000 R13=00000000 R14=00000000 R15=fffffff0
PSR=400001d3 -Z-- A svc32 CPU#:1
s00=00000000 s01=00000000 d00=0000000000000000
到目前為止,還沒(méi)有查出出錯(cuò)的原因。猜想可能是Xilinx/QEMU與預(yù)編譯的system.dtb之間配合的問(wèn)題吧。
二、使用PetaLinux工具包提供的QEMU
使用Xilinx提供的PetaLinux工具包包含的QEMU就非常簡(jiǎn)單了。
從Xilinx網(wǎng)站下載petalinux-v2014.2-final-installer.run和Xilinx-ZC706-v2014.2-final.bsp。查看文檔ug976-petalinux-installation.pdf即可。
使用PetaLinux提供的qemu加載上述的預(yù)編譯zImage和system.dtb則不會(huì)出錯(cuò)。如下:
/opt/pkg/petalinux-v2014.2-final/tools/linux-i386/petalinux/bin/qemu-system-arm -M arm-generic-fdt -nographic -smp 2 -machine linux=on -serial mon:stdio -dtb /home/hhdong/Xilinx-ZC706-2014.2/images/linux/system.dtb -kernel /home/hhdong/Xilinx-ZC706-2014.2/pre-built/linux/images/zImage
則能夠正常運(yùn)行。
此時(shí),可以嘗試不同的qemu參數(shù)了。例如將--serial file:/temp/serial.txt加入到命令中,如
/opt/pkg/petalinux-v2014.2-final/tools/linux-i386/petalinux/bin/qemu-system-arm -M arm-generic-fdt -nographic -smp 2 -machine linux=on -dtb /home/hhdong/Xilinx-ZC706-2014.2/images/linux/system.dtb -kernel /home/hhdong/Xilinx-ZC706-2014.2/pre-built/linux/images/zImage --serial file:/temp/serial.txt
則輸出的信息就不會(huì)出現(xiàn)在console中斷,而是寫(xiě)入到文件/tmp/serial.txt中了。
-
Linux
+關(guān)注
關(guān)注
87文章
11225瀏覽量
208911 -
模擬器
+關(guān)注
關(guān)注
2文章
867瀏覽量
43161 -
qemu
+關(guān)注
關(guān)注
0文章
57瀏覽量
5331
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論