在 qemu 中運行 AWTK
雖然在 VMware 中也可以跑 awtk-linux-fb 版本,但是 qemu 能模擬一個更接近開發板的 arm-linux 環境。另外用來調試和學習一下 framebuffer 的驅動,也是很有意思的事。這裏寫個文檔供大家參考。
在 Ubuntu 20 上測試運行。
構建 arm-linux 運行環境
手工從頭構建 linux 系統還是挺麻煩的(以前幹過這活), 現在有 buildroot 這個神器,從頭構建 linux 系統,實在太方便了。
- 確定工作目錄
我們把工作目錄固定到/opt/qemu 下,方便後面說明。
sudo mkdir /opt/qemu
sudo chown yourusername.yourgroup /opt/qemu
cd /opt/qemu
- 下載 buildroot
wget https://buildroot.org/downloads/buildroot-2021.02.2.tar.gz
tar xf buildroot-2021.02.2.tar.gz
cd buildroot-2021.02.2
- 配置
make qemu_arm_vexpress_defconfig
make menuconfig
在缺省配置下,修改 toolchain 的配置,增加 glibc/c++/gdb 三個配置項目。
保存退出。
- 編譯
make -j4
時間比較久,請耐心等待。
構建 awtk-linux-fb
進入 awtk-linux-fb 目錄:
- 配置
修改 awtk_config.py 中的 toolchain:
TOOLS_PREFIX='/opt/qemu/buildroot-2021.02.2/output/host/bin/arm-linux-'
TSLIB_LIB_DIR=''
- 編譯
scons
- release
./release.sh
將 AWTK 加入 rootfs
- 回到 buildroot 的生成結果目錄:
cd /opt/qemu/buildroot-2021.02.2/output/images
- 將 awtk 可執行文件拷貝到 rootfs
mkdir root
sudo mount -o loop rootfs.ext2 ./root
cd root/opt/
sudo cp -rf /opt/qemu/awtk-linux-fb/release .
cd -
運行
- 啓動 qemu
./start-qemu.sh
- 進入 qemu 的中終端下啓動 AWTK:
用戶名 root 密碼爲空
cd /opt/release
./bin/demoui
- 在 Linux 主機的終端下啓動 VNC Viewer
vncviewer localhost
可以看到並操作 AWTK 應用程序了:
附
修改分辨率
- 增加配置
vi /etc/fb.modes
mode "640x480-0"
# D: 0.000 MHz, H: 0.000 kHz, V: 0.000 Hz
geometry 640 480 640 480 16
timings 0 48 16 33 10 96 2
accel true
rgba 5/11,6/5,5/0,0/0
endmode
- 使其生效
fbset 640x480-60
debug kernel
畫蛇添足一下,如果希望調試 linux 內核,比如 framebuffer,可以這樣:
修改 start-qemu.sh,增加啓動參數主機-s -S,讓 qemu 啓動 gdbserver,並等待 gdb 連接。然後啓動 qemu。
#!/bin/sh
(
BINARIES_DIR="${0%/*}/"
cd ${BINARIES_DIR}
if [ "${1}" = "serial-only" ]; then
EXTRA_ARGS='-nographic'
else
EXTRA_ARGS='-serial stdio'
fi
export PATH="/opt/qemu/buildroot-2021.02.2/output/host/bin:${PATH}"
exec qemu-system-arm -M vexpress-a9 -smp 1 -m 256 -kernel zImage -dtb vexpress-v2p-ca9.dtb -drive file=rootfs.ext2,if=sd,format=raw -append "console=ttyAMA0,115200 rootwait root=/dev/mmcblk0" -net nic,model=lan9118 -net user ${EXTRA_ARGS} -s -S
)
- 使用 arm-linux-gdb 連接到 qemu。
export PATH=$PATH:/opt/qemu/buildroot-2021.02.2/output/host/bin
cd output/build/linux-5.10.7
arm-linux-gdb vmlinux
target remote :1234
設置斷點並調試
b start_kernel
c