搭建QEMU環(huán)境

QEMU是一款模擬嵌入式的開發(fā)環(huán)境,下面文章列舉了搭建arm9架構(gòu)開發(fā)環(huán)境的流程,具體操作起來還有幾個小問題,這里記錄一下。
地址: 從零使用qemu模擬器搭建arm運行環(huán)境 -海楓

  • 下載linux內(nèi)核:
    采用 vexpress_defconfig 單板的配置,很多搭建QEMU環(huán)境的筆記都是這個單板。這里需要內(nèi)核版本高一點,文中用了3.16,當然是可以的,我開始用了2.6.38就不行。

  • 編譯內(nèi)核:
    內(nèi)核編譯中有一個報錯: return_address函數(shù) redefinition
    看了下代碼 編譯時不帶下面條件,這個函數(shù)應該是無用的,直接定義為了空。
    #if defined(CONFIG_FRAME_POINTER) && !defined(CONFIG_ARM_UNWIND)
    函數(shù)定義在 gedit arch/arm/kernel/return_address.c 中,
    gedit arch/arm/include/asm/ftrace.h 中又包含了一次
    但當函數(shù)定義成空時,上面頭文件中卻又自己定義了一次,就導致了重復定義。
    處理很簡單,把頭文件中的定義刪了,還用包含就行。

#else
/*
extern inline void *return_address(unsigned int level)
{
    return NULL;
}
*/
void *return_address(unsigned int);
#endif
  • 安裝QEMU:
    ubuntu系統(tǒng)的話可以不用下載安裝了,直接apt install 就行

  • 編譯busyBox:
    make install CROSS_COMPILE=arm-linux-gnueabi-
    最好換下順序:
    make CROSS_COMPILE=arm-linux-gnueabi- install
    不換順序的話我這里生成不了 _install 目錄,費解。。。
    編譯中報錯誤: RLIMIT_FSIZE 未定義
    在 include\libbb.h 再包含一個頭文件可以解決:
    include <sys/resource.h>

  • 完善文件系統(tǒng)
    編譯出來的文件系統(tǒng)還不完整,需要創(chuàng)建 proc sys etc等目錄
    新建 /etc/init.d/rcS文件,至少包含以下內(nèi)容:

#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
mdev -s
  • 生成文件系統(tǒng)
    這里用下面命令生成 .gz的文件系統(tǒng),然后用-initrd 加載比較好,
    這樣文件 系統(tǒng)是可讀寫的。
    find . | cpio -o -H newc | gzip -9 > ../rootfs.gz
    用文中ext3的文件系統(tǒng),掛載后是只讀的。

  • 最后,啟動

#!/bin/sh
if [ $# != 2 ]
then
    echo 'usage: go [path to zImage] [path to fileSystem]'
    exit
fi
qemu-system-arm -m 128M -M vexpress-a9 -kernel $1 -serial stdio -initrd $2 -append "console=ttyAMA0 root=/dev/mmcblk0 rdinit=/sbin/init"

附另一篇參考:
QEMU模擬ARM嵌入式LINUX系統(tǒng)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容