Qemu - Buildroot支持QT环境
- 平台:ubuntu-22.04-desktop-amd64.
- 对象:在buildroot中增加对Qt的支持.
- 文件:buildroot.
通过buildroot编译了一个使用Qemu启动的Linux系统,并配置了Qt环境,可以运行图形界面。
1.安装编译环境
$ sudo apt install build-essential vim bc flex bison gawk texinfo libssl-dev libncurses5-dev ssh net-tools curl wget unzip git
2.buildroot
2.1 下载
可以在官网上下载:
也可以在官方Github下载:
https://github.com/buildroot/buildroot
2.2 配置
$ cd buildroot
# 这里配置了x64虚拟机平台,主要是不用交叉编译,运行快,你也可以配置ARM、RISC-V等平台。
$ make qemu_x86_64_defconfig
$ make menuconfig
在默认配置的基础上,做如下配置:
Toolchain --->
[*] Enable WCHAR support
[*] Enable C++ support
Target packages --->
Graphic libraries and applications (graphic/text) --->
[*] Qt5 --->
-*- qt5base
[*] Compile and install examples (with code)
[*] MySQL Plugin
SQLite 3 support (Qt SQLite) --->
-*- gui module
-*- widgets module
[*] GIF support
[*] JPEG support
[*] PNG support
[*] Enable Tslib support
[*] qt5charts
-*- qt5declarative
-*- quick module
[*] qt5quickcontrols
[*] qt5quickcontrols2
-*- qt5svg
[*] qt5virtualkeyboard
Filesystem images --->
(1024M) exact size
2.3 编译
# 以下方式,任选其一:
$ make -j8
# 或者,增加时间测试:
$ time(make -j8)
# 或者,保存log,自己记住编译开始的时间,结束会自动打印结束时间
$ make -j8 2>&1 | tee build_qemu.log; date
编译的时候,会自动从网上下载需要的包并编译,直到结束。
3. 修改启动项
编译结束之后,会生成一个dl目录和output目录,dl目录是下载的包存放处,output是编译文件和生成文件的存放处。
$ cd buildroot/output/images
$ ls
bzImage rootfs.ext2 start-qemu.sh
其中,start-qemu.sh的内容如下:
#!/bin/sh
(
BINARIES_DIR="${0%/*}/"
cd ${BINARIES_DIR}
if [ "${1}" = "serial-only" ]; then
EXTRA_ARGS='-nographic'
else
EXTRA_ARGS='-serial stdio'
fi
export PATH="/home/abc/buildroot/output/host/bin:${PATH}"
exec qemu-system-x86_64 -M pc -kernel bzImage -drive file=rootfs.ext2,if=virtio,format=raw -append "rootwait root=/dev/vda console=tty1 console=ttyS0" -net nic,model=virtio -net user ${EXTRA_ARGS}
)
我们做如下修改(这样可以使用UI界面):
--- a/start-qemu.sh
+++ b/start-qemu.sh
@@ -10,5 +10,5 @@ else
fi
export PATH="/home/abc/buildroot/output/host/bin:${PATH}"
-exec qemu-system-x86_64 -M pc -kernel bzImage -drive file=rootfs.ext2,if=virtio,format=raw -append "rootwait root=/dev/vda console=tty1 console=ttyS0" -net nic,model=virtio -net user ${EXTRA_ARGS}
+exec qemu-system-x86_64 -M pc -kernel bzImage -drive file=rootfs.ext2,if=virtio,format=raw -append "rootwait root=/dev/vda console=tty1 console=ttyS0" -net nic,model=virtio -net user #${EXTRA_ARGS}
)
也就是屏蔽最后一项参数:”${EXTRA_ARGS}”。
4.运行
$ ./start-qemu.sh
VNC server running on 127.0.0.1:5900
这时,我们就可以使用VNC客户端连接这个IP地址了,因为VNC Viewer收费,我们用Ubuntu自带的Remmina,如果Ubuntu里找不到就安装一下:
$ sudo apt install remmina
打开Remmina,选择VNC协议,并输入IP和端口号。
回车就可以连接到刚刚启动的Qemu虚拟机了,进入虚拟机后,一开始还是命令行界面,我们执行如下命令:
$ cd /usr/lib/qt/examples/widgets/widgets/digitalclock/
$ ls
digitalclock digitalclock.h main.cpp
digitalclock.cpp digitalclock.pro
开启数字时钟:
$ ./digitalclock -platform linuxfb