Qemu仿真----(6)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 下载

可以在官网上下载:

[https://buildroot.org/]

也可以在官方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

效果如下:

 我在开发板上测试也是OK的.

posted @ 2023-04-23 15:42  this毛豆  阅读(509)  评论(0编辑  收藏  举报