在之前的 以 QEMU 加速嵌入式系統開發 裡,利用了 buildroot 來快速建立系統軟體。而最近工作上又有需要運行圖型環境,原來打算自己找各個套件編譯,無奈相關的文件不多。而比較推荐的方式,是此buildroot此類型境來建立系統。
由於流程跟上次環境差不多,本文僅著重變更部份,與套用可運作的設定檔。
本文是以 Ubuntu 18.04 測試,來建立 ARM 的程式。
範本檔案
為了簡化示範的流程,本文會用一個預先建立的目錄結構與script,來解說命令,檔案會附在文末。請先下載下來後,放在 ubuntu 內。用以下命令解壓縮。
1 2 |
tar zvxf qemu_sys_arm_xwin_template.tar.gz cd qemu_sys_arm_xwin_template |
下載編譯 Buildroot 以建立檔案系統與Toolchain
執行下列命令,下載 buildroot 套件,解壓縮並進入設定畫面
1 2 3 4 |
wget https://buildroot.org/downloads/buildroot-2020.02.11.tar.gz tar zvxf buildroot-2020.02.11.tar.gz cd buildroot-2020.02.11 make menuconfig |
接著直接跳出,如果buildroot編譯後想重新設定,建議將 output 目錄整個刪除,會比較沒有問題。
ARM 設定
將 buildroot 範本設定檔複蓋設定檔,最後下達 make 來編譯。
1 2 |
cp ../buildroot_arm_xwin_config .config make |
解壓 rootfs
完成後,會產生下列檔案
- rootfs : output/images/rootfs.tar
- toolchain 執行檔 : output/host/bin
為了符合範例script的設定,請下達下面命令,將 rootfs.tar 解開
1 2 3 4 |
export PATH=`pwd`/output/host/bin:$PATH cd .. cd sim/rootfs tar vxf ../../buildroot-2020.02.11/output/images/rootfs.tar |
頭一行命令,會先指定 toolchain 的路徑,以方便後面的kernel編譯。
下載並編譯 Kernel 4.4
接下來要下載並編譯 kernel 4.4,編譯器會使用剛 buildroot 所產生的編譯器。
1 2 3 4 |
cd ../devtool wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.4.1.tar.xz tar Jvxf linux-4.4.1.tar.xz cd linux-4.4.1 |
複制範本設定檔,並開始編譯
1 2 |
cp ../kernel_arm_xwin_config .config make ARCH=arm CROSS_COMPILE=arm-linux- bzImage dtbs -j `nproc` |
啟動 QEMU 開機
當完成上面的動作後,基本上就具備了 rootfs / kernel,就可以準備開機了。此時在 ubuntu 的圖型環境裡,下達下面的命令,來使用script開機。
1 |
../runqemu arm |
與之前不同的是,此時啟動會跳出一個虛擬的螢目。在登入 Linux 後,可以透過下面命令來執行 xterm 程式在 XWindow 上
1 2 |
export DISPLAY=:0 xterm |
範本檔案變更
這個範本檔案主要提供了4個變更
- buildroot 的設定檔: 加入 X11, xterm, mesa … 的編譯
- kernel 的設定檔: 加入虛擬GPU, 圖型類支援
- runqemu: 產生虛擬螢目, 將 console 單獨輸出
- rcS: 在開始就執行 mdev -s 以免 XOrg 啟動時無適當裝置檔案
結語
編譯簡單的 X11 和 xterm 程式單然只是一個開始,後續準備讓 firefox 運行其上,當做一個 Kiosk 環境。後續的挑戰可能還不少~~ 加上 X11 的 rootfs.img 也僅僅只有 17MB,也算是蠻輕量的了,我猜 firefox 會遠遠超過這個大小。
附件
qemu_sys_arm_xwin_template.tar 範本檔案