在 qemu 中運行 AWTK

在 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章