在 qemu 中运行 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值