Ubuntu20.04 编译Buildroot(支持Qt编译)

平台

  • Ubuntu 20.04(x64)
  • Buildroot 2021.02
  • Qt 5.15.2

关于Buildroot

buildroot使用介绍
The Buildroot user manual
通过buildroot+qemu搭建ARM-Linux虚拟开发环境

目标

简单描述:

  1. buildroot的下载编译过程
  2. 支持QT的配置说明及步骤

模拟环境


在开始编译之前, 查询了一些资料, 对模拟器的支持如下:
ubuntu下使用qemu-system-arm模拟arm环境
Buildroot and QEMU – the quickest receipe for your own Linux

$ sudo apt-get install qemu-system-arm
$ qemu-system-arm --version
QEMU emulator version 4.2.1 (Debian 1:4.2-3ubuntu6.14)
Copyright (c) 2003-2019 Fabrice Bellard and the QEMU Project developers

而在成功编译完成后, 生成了output/images/start-qemu.sh, 并且可以直接运行

上面的步骤是否可以省略?


Buildroot下载解压

Downloads

$ll buildroot-2021.02.tar.gz
-rw-rw-r--  1 anson anson 6797744 3月  15 11:37 buildroot-2021.02.tar.gz

#解压后(仅参考,其中已包含一些编译后的文件)
$ll
drwxrwxr-x   16 anson anson   4096 3月  16 15:14 ./
drwxrwxr-x    6 anson anson   4096 3月  15 11:37 ../
drwxrwxr-x    2 anson anson   4096 3月   7 05:16 arch/
drwxrwxr-x   69 anson anson   4096 3月   7 05:16 board/
drwxrwxr-x   22 anson anson   4096 3月   7 05:16 boot/
-rw-rw-r--    1 anson anson 416183 3月   7 05:16 CHANGES
-rw-r--r--    1 anson anson 108253 3月  16 15:13 .config
-rw-rw-r--    1 anson anson  28043 3月   7 05:16 Config.in
-rw-rw-r--    1 anson anson 126066 3月   7 05:16 Config.in.legacy
-rw-r--r--    1 anson anson 108095 3月  16 14:55 .config.old
drwxrwxr-x    2 anson anson  20480 3月   7 05:16 configs/
-rw-r--r--    1 anson anson  98729 3月  16 15:14 ..config.tmp
-rw-rw-r--    1 anson anson  18767 3月   7 05:16 COPYING
-rw-rw-r--    1 anson anson   1198 3月   7 05:16 .defconfig
-rw-rw-r--    1 anson anson  68473 3月   7 05:16 DEVELOPERS
drwxr-xr-x   56 anson anson   4096 3月  16 15:52 dl/
drwxr-xr-x    5 anson anson   4096 3月   7 05:24 docs/
-rw-rw-r--    1 anson anson     96 3月   7 05:16 .flake8
drwxrwxr-x   19 anson anson   4096 3月   7 05:16 fs/
-rw-rw-r--    1 anson anson    125 3月   7 05:16 .gitignore
-rw-rw-r--    1 anson anson    557 3月   7 05:16 .gitlab-ci.yml
drwxrwxr-x    2 anson anson   4096 3月   7 05:16 linux/
-rw-rw-r--    1 anson anson  45530 3月   7 05:16 Makefile
-rw-rw-r--    1 anson anson   2292 3月   7 05:16 Makefile.legacy
drwxrwxr-x    6 anson anson   4096 3月  16 16:45 output/
drwxrwxr-x 2495 anson anson  69632 3月   7 05:16 package/
-rw-rw-r--    1 anson anson   1079 3月   7 05:16 README
drwxrwxr-x   13 anson anson   4096 3月   7 05:16 support/
drwxrwxr-x    3 anson anson   4096 3月   7 05:16 system/
drwxrwxr-x    5 anson anson   4096 3月   7 05:16 toolchain/
drwxrwxr-x    3 anson anson   4096 3月   7 05:16 utils/

Buildroot配置编译

# 加载默认ARM模拟配置
$ make qemu_arm_vexpress_defconfig
#编译
$ make
# 编译完成的一些LOG
Filesystem UUID: 68f5438c-6ab0-4b9b-9dbf-ec8856ea50ed
Superblock backups stored on blocks: 
	8193, 24577, 40961, 57345

Allocating group tables: done                            
Writing inode tables: done                            
Copying files into the device: done
Writing superblocks and filesystem accounting information: done

ln -snf /home/anson/codes/buildroot-2021.02/output/host/arm-buildroot-linux-uclibcgnueabihf/sysroot /home/anson/codes/buildroot-2021.02/output/staging
>>>   Executing post-image script board/qemu/post-image.sh

运行模拟环境

$ output/images/start-qemu.sh 
VNC server running on ::1:5900
Booting Linux on physical CPU 0x0
Linux version 5.10.7 (anson@server4) (arm-buildroot-linux-uclibcgnueabihf-gcc.br_real (Buildroot 2021.02) 9.3.0, GNU ld (GNU Binutils) 2.35.2) #1 SMP Tue Mar 16 16:37:25 CST 2021
CPU: ARMv7 Processor [410fc090] revision 0 (ARMv7), cr=10c5387d
CPU: PIPT / VIPT nonaliasing data cache, VIPT nonaliasing instruction cache
OF: fdt: Machine model: V2P-CA9
Memory policy: Data cache writeback
Reserved memory: created DMA memory pool at 0x4c000000, size 8 MiB
OF: reserved mem: initialized node vram@4c000000, compatible id shared-dma-pool
cma: Reserved 16 MiB at 0x6f000000
Zone ranges:
  Normal   [mem 0x0000000060000000-0x000000006fffffff]
Movable zone start for each node
Early memory node ranges
  node   0: [mem 0x0000000060000000-0x000000006fffffff]
Initmem setup node 0 [mem 0x0000000060000000-0x000000006fffffff]
CPU: All CPU(s) started in SVC mode.
percpu: Embedded 19 pages/cpu s46156 r8192 d23476 u77824
Built 1 zonelists, mobility grouping on.  Total pages: 65024
Kernel command line: console=ttyAMA0,115200 rootwait root=/dev/mmcblk0
printk: log_buf_len individual max cpu contribution: 4096 bytes
printk: log_buf_len total cpu_extra contributions: 12288 bytes
printk: log_buf_len min size: 16384 bytes
printk: log_buf_len: 32768 bytes
printk: early log buf free: 14792(90%)
Dentry cache hash table entries: 32768 (order: 5, 131072 bytes, linear)
Inode-cache hash table entries: 16384 (order: 4, 65536 bytes, linear)
mem auto-init: stack:off, heap alloc:off, heap free:off
Memory: 231920K/262144K available (7168K kernel code, 583K rwdata, 1748K rodata, 1024K init, 181K bss, 13840K reserved, 16384K cma-reserved)
SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1
rcu: Hierarchical RCU implementation.
rcu: 	RCU event tracing is enabled.
rcu: 	RCU restricting CPUs from NR_CPUS=8 to nr_cpu_ids=4.
rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies.
rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=4
NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
GIC CPU mask not found - kernel will fail to boot.
GIC CPU mask not found - kernel will fail to boot.
L2C: platform modifies aux control register: 0x02020000 -> 0x02420000
L2C: DT/platform modifies aux control register: 0x02020000 -> 0x02420000
L2C-310 enabling early BRESP for Cortex-A9
L2C-310 full line of zeros enabled for Cortex-A9
L2C-310 dynamic clock gating disabled, standby mode disabled
L2C-310 cache controller enabled, 8 ways, 128 kB
L2C-310: CACHE_ID 0x410000c8, AUX_CTRL 0x46420001
random: get_random_bytes called from start_kernel+0x384/0x538 with crng_init=0
sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 89478484971ns
clocksource: arm,sp804: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 1911260446275 ns
Failed to initialize '/bus@4000000/motherboard/iofpga@7,00000000/timer@12000': -22
smp_twd: clock not found -2
Console: colour dummy device 80x30
Calibrating local timer... 99.83MHz.
Calibrating delay loop... 427.62 BogoMIPS (lpj=2138112)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
CPU: Testing write buffer coherency: ok
CPU0: Spectre v2: using BPIALL workaround
CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
Setting up static identity map for 0x60100000 - 0x60100060
rcu: Hierarchical SRCU implementation.
smp: Bringing up secondary CPUs ...
smp: Brought up 1 node, 1 CPU
SMP: Total of 1 processors activated (427.62 BogoMIPS).
CPU: All CPU(s) started in SVC mode.
devtmpfs: initialized
VFP support v0.3: implementor 41 architecture 3 part 30 variant 9 rev 0
clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
futex hash table entries: 1024 (order: 4, 65536 bytes, linear)
NET: Registered protocol family 16
DMA: preallocated 256 KiB pool for atomic coherent allocations
cpuidle: using governor ladder
hw-breakpoint: debug architecture 0x4 unsupported.
Serial: AMBA PL011 UART driver
irq: type mismatch, failed to map hwirq-75 for interrupt-controller@1e001000!
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
Advanced Linux Sound Architecture Driver Initialized.
clocksource: Switched to clocksource arm,sp804
NET: Registered protocol family 2
tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 6144 bytes, linear)
TCP established hash table entries: 2048 (order: 1, 8192 bytes, linear)
TCP bind hash table entries: 2048 (order: 2, 16384 bytes, linear)
TCP: Hash tables configured (established 2048 bind 2048)
UDP hash table entries: 256 (order: 1, 8192 bytes, linear)
UDP-Lite hash table entries: 256 (order: 1, 8192 bytes, linear)
NET: Registered protocol family 1
RPC: Registered named UNIX socket transport module.
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
RPC: Registered tcp NFSv4.1 backchannel transport module.
hw perfevents: enabled with armv7_cortex_a9 PMU driver, 5 counters available
workingset: timestamp_bits=30 max_order=16 bucket_order=0
squashfs: version 4.0 (2009/01/31) Phillip Lougher
jffs2: version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
9p: Installing v9fs 9p2000 file system support
io scheduler mq-deadline registered
io scheduler kyber registered
i2c i2c-0: Added multiplexed i2c bus 2
physmap-flash 40000000.flash: physmap platform flash device: [mem 0x40000000-0x43ffffff]
40000000.flash: Found 2 x16 devices at 0x0 in 32-bit bank. Manufacturer ID 0x000000 Chip ID 0x000000
Intel/Sharp Extended Query Table at 0x0031
Using buffer write method
physmap-flash 40000000.flash: physmap platform flash device: [mem 0x44000000-0x47ffffff]
40000000.flash: Found 2 x16 devices at 0x0 in 32-bit bank. Manufacturer ID 0x000000 Chip ID 0x000000
Intel/Sharp Extended Query Table at 0x0031
Using buffer write method
Concatenating MTD devices:
(0): "40000000.flash"
(1): "40000000.flash"
into device "40000000.flash"
physmap-flash 48000000.psram: physmap platform flash device: [mem 0x48000000-0x49ffffff]
libphy: Fixed MDIO Bus: probed
libphy: smsc911x-mdio: probed
smsc911x 4e000000.ethernet eth0: MAC Address: 52:54:00:12:34:56
isp1760 4f000000.usb: bus width: 32, oc: digital
isp1760 4f000000.usb: NXP ISP1760 USB Host Controller
isp1760 4f000000.usb: new USB bus registered, assigned bus number 1
isp1760 4f000000.usb: Scratch test failed.
isp1760 4f000000.usb: can't setup: -19
isp1760 4f000000.usb: USB bus 1 deregistered
usbcore: registered new interface driver usb-storage
ledtrig-cpu: registered to indicate activity on CPUs
usbcore: registered new interface driver usbhid
usbhid: USB HID core driver
NET: Registered protocol family 17
9pnet: Installing 9P2000 support
oprofile: using arm/armv7-ca9
Registering SWP/SWPB emulation handler
aaci-pl041 10004000.aaci: ARM AC'97 Interface PL041 rev0 at 0x10004000, irq 32
aaci-pl041 10004000.aaci: FIFO 512 entries
mmci-pl18x 10005000.mmci: Got CD GPIO
mmci-pl18x 10005000.mmci: Got WP GPIO
mmci-pl18x 10005000.mmci: mmc0: PL181 manf 41 rev0 at 0x10005000 irq 33,34 (pio)
10009000.uart: ttyAMA0 at MMIO 0x10009000 (irq = 37, base_baud = 0) is a PL011 rev1
printk: console [ttyAMA0] enabled
1000a000.uart: ttyAMA1 at MMIO 0x1000a000 (irq = 38, base_baud = 0) is a PL011 rev1
1000b000.uart: ttyAMA2 at MMIO 0x1000b000 (irq = 39, base_baud = 0) is a PL011 rev1
1000c000.uart: ttyAMA3 at MMIO 0x1000c000 (irq = 40, base_baud = 0) is a PL011 rev1
rtc-pl031 10017000.rtc: registered as rtc0
rtc-pl031 10017000.rtc: setting system clock to 2021-03-16T09:37:19 UTC (1615887439)
mmc0: new SD card at address 4567
drm-clcd-pl111 1001f000.clcd: assigned reserved memory node vram@4c000000
drm-clcd-pl111 1001f000.clcd: using device-specific reserved memory
drm-clcd-pl111 1001f000.clcd: core tile graphics present
drm-clcd-pl111 1001f000.clcd: this device will be deactivated
drm-clcd-pl111 1001f000.clcd: Versatile Express init failed - -19
mmcblk0: mmc0:4567 QEMU! 64.0 MiB 
drm-clcd-pl111 10020000.clcd: DVI muxed to daughterboard 1 (core tile) CLCD
input: AT Raw Set 2 keyboard as /devices/platform/bus@4000000/bus@4000000:motherboard/bus@4000000:motherboard:iofpga@7,00000000/10006000.kmi/serio0/input/input0
drm-clcd-pl111 10020000.clcd: initializing Versatile Express PL111
drm-clcd-pl111 10020000.clcd: found bridge on endpoint 0
drm-clcd-pl111 10020000.clcd: Using non-panel bridge
[drm] Initialized pl111 1.0.0 20170317 for 10020000.clcd on minor 0
Console: switching to colour frame buffer device 128x48
drm-clcd-pl111 10020000.clcd: [drm] fb0: pl111drmfb frame buffer device
ALSA device list:
  #0: ARM AC'97 Interface PL041 rev0 at 0x10004000, irq 32
input: ImExPS/2 Generic Explorer Mouse as /devices/platform/bus@4000000/bus@4000000:motherboard/bus@4000000:motherboard:iofpga@7,00000000/10007000.kmi/serio1/input/input2
random: fast init done
EXT4-fs (mmcblk0): mounted filesystem without journal. Opts: (null)
VFS: Mounted root (ext4 filesystem) readonly on device 179:0.
devtmpfs: mounted
Freeing unused kernel memory: 1024K
Run /sbin/init as init process
random: crng init done
EXT4-fs (mmcblk0): re-mounted. Opts: (null)
ext4 filesystem being remounted at / supports timestamps until 2038 (0x7fffffff)
Starting syslogd: OK
Starting klogd: OK
Running sysctl: OK
Saving random seed: OK
Starting network: Generic PHY 4e000000.ethernet-ffffffff:01: attached PHY driver [Generic PHY] (mii_bus:phy_addr=4e000000.ethernet-ffffffff:01, irq=POLL)
smsc911x 4e000000.ethernet eth0: SMSC911x/921x identified at 0x908b0000, IRQ: 30
udhcpc: started, v1.33.0
udhcpc: sending discover
udhcpc: sending select for 10.0.2.15
udhcpc: lease of 10.0.2.15 obtained, lease time 86400
deleting routers
adding dns 10.0.2.3
OK
Initializing postgresql data base...
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale "C".
The default database encoding has accordingly been set to "SQL_ASCII".
The default text search configuration will be set to "english".

Data page checksums are disabled.

fixing permissions on existing directory /var/lib/pgsql ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... 
UTC
creating configuration files ... ok
running bootstrap script ... 2021-03-16 09:38:36.554 UTC [137] FATAL:  could not write to file "pg_wal/xlogtemp.137": No space left on device
child process exited with exit code 1
initdb: removing contents of data directory "/var/lib/pgsql"
pg_ctl: database system initialization failed
done
Starting postgresql: pg_ctl: directory "/var/lib/pgsql" is not a database cluster directory
OK

Welcome to Buildroot
buildroot login: root

# ls -la /
total 25
drwxr-xr-x   18 root     root          1024 Mar 16 08:45 .
drwxr-xr-x   18 root     root          1024 Mar 16 08:45 ..
drwxr-xr-x    2 root     root          2048 Mar 16 08:45 bin
drwxr-xr-x    7 root     root          2900 Mar 16 09:37 dev
drwxr-xr-x    6 root     root          1024 Mar 16 08:45 etc
drwxr-xr-x    3 root     root          1024 Mar 16 08:45 lib
lrwxrwxrwx    1 root     root             3 Mar 16 07:25 lib32 -> lib
lrwxrwxrwx    1 root     root            11 Mar 16 07:39 linuxrc -> bin/busybox
drwx------    2 root     root         12288 Mar 16 08:45 lost+found
drwxr-xr-x    2 root     root          1024 Mar  6 21:16 media
drwxr-xr-x    2 root     root          1024 Mar  6 21:16 mnt
drwxr-xr-x    2 root     root          1024 Mar  6 21:16 opt
dr-xr-xr-x  106 root     root             0 Mar 16 09:37 proc
drwx------    2 root     root          1024 Mar 16 09:40 root
drwxr-xr-x    3 root     root           160 Mar 16 09:37 run
drwxr-xr-x    2 root     root          1024 Mar 16 08:45 sbin
dr-xr-xr-x   12 root     root             0 Mar 16 09:37 sys
drwxrwxrwt    2 root     root            80 Mar 16 09:37 tmp
drwxr-xr-x    6 root     root          1024 Mar 16 08:45 usr
drwxr-xr-x    4 root     root          1024 Mar 16 08:45 var

一些问题:

尝试运行menuconfig报错:

$ make menuconfig
/usr/bin/gcc -I/usr/include/ncursesw -DCURSES_LOC=""  -DNCURSES_WIDECHAR=1 -DLOCALE  -I/home/anson/work/codes/buildroot-2021.02/output/build/buildroot-config -DCONFIG_=\"\"   /home/anson/work/codes/buildroot-2021.02/output/build/buildroot-config/mconf.o /home/anson/work/codes/buildroot-2021.02/output/build/buildroot-config/zconf.tab.o /home/anson/work/codes/buildroot-2021.02/output/build/buildroot-config/lxdialog/checklist.o /home/anson/work/codes/buildroot-2021.02/output/build/buildroot-config/lxdialog/util.o /home/anson/work/codes/buildroot-2021.02/output/build/buildroot-config/lxdialog/inputbox.o /home/anson/work/codes/buildroot-2021.02/output/build/buildroot-config/lxdialog/textbox.o /home/anson/work/codes/buildroot-2021.02/output/build/buildroot-config/lxdialog/yesno.o /home/anson/work/codes/buildroot-2021.02/output/build/buildroot-config/lxdialog/menubox.o  -o /home/anson/work/codes/buildroot-2021.02/output/build/buildroot-config/mconf
/usr/bin/ld: /home/anson/work/codes/buildroot-2021.02/output/build/buildroot-config/mconf.o: in function `show_help':
mconf.c:(.text+0x1862): undefined reference to `stdscr'
/usr/bin/ld: mconf.c:(.text+0x186e): undefined reference to `stdscr'
/usr/bin/ld: /home/anson/work/codes/buildroot-2021.02/output/build/buildroot-config/lxdialog/checklist.o: in function `print_item':
checklist.c:(.text+0x8a): undefined reference to `wattrset'
/usr/bin/ld: checklist.c:(.text+0xa0): undefined reference to `wmove'
....省略....
/usr/bin/ld: /home/anson/work/codes/buildroot-2021.02/output/build/buildroot-config/lxdialog/menubox.o:menubox.c:(.text+0x1300): more undefined references to `delwin' follow
collect2: error: ld returned 1 exit status
make[2]: *** [Makefile.br:28: mconf] Error 1
rm /home/anson/work/codes/buildroot-2021.02/output/build/buildroot-config/zconf.tab.c
make[1]: *** [Makefile:969: /home/anson/work/codes/buildroot-2021.02/output/build/buildroot-config/mconf] Error 2
make: *** [Makefile:84: _all] Error 2

解决 Solution for “make menuconfig” Error in Linux PC

# 无效
#$ sudo apt-get install build-essentials
$ sudo apt-get install libncurses5  libncurses5-dev

以下为PC内存的问题, 此问题忽略

$ make
cc: internal compiler error: Segmentation fault signal terminated program as
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-9/README.Bugs> for instructions.
make[4]: *** [Makefile:488: lucnum2_ui.lo] Error 1
make[4]: *** Waiting for unfinished jobs....
libtool: compile:  /usr/bin/gcc -DHAVE_CONFIG_H -I. -I.. -D__GMP_WITHIN_GMP -I.. -I/home/anson/work/codes/buildroot-2021.02/output/host/include -O2 -I/home/anson/work/codes/buildroot-2021.02/output/host/include -c mul_si.c  -fPIC -DPIC -o .libs/mul_si.o
libtool: compile:  /usr/bin/gcc -DHAVE_CONFIG_H -I. -I.. -D__GMP_WITHIN_GMP -I.. -I/home/anson/work/codes/buildroot-2021.02/output/host/include -O2 -I/home/anson/work/codes/buildroot-2021.02/output/host/include -c n_pow_ui.c  -fPIC -DPIC -o .libs/n_pow_ui.o
libtool: compile:  /usr/bin/gcc -DHAVE_CONFIG_H -I. -I.. -D__GMP_WITHIN_GMP -I.. -I/home/anson/work/codes/buildroot-2021.02/output/host/include -O2 -I/home/anson/work/codes/buildroot-2021.02/output/host/include -c mul_ui.c  -fPIC -DPIC -o .libs/mul_ui.o
make[3]: *** [Makefile:997: all-recursive] Error 1
make[2]: *** [Makefile:787: all] Error 2
make[1]: *** [package/pkg-generic.mk:250: /home/anson/work/codes/buildroot-2021.02/output/build/host-gmp-6.2.1/.stamp_built] Error 2
make: *** [Makefile:84: _all] Error 2

make[2]: /home/rohit/workplace/rp/buildroot/output/host/usr/bin/arm-buildroot-linux-uclibcgnueabihf-gcc

Getting arm-buildroot-linux-uclibcgnueabihf-gcc: Command not found


如何支持 Qt

前面编译出来的系统, 并没有对QT的支持, 仅仅用于验证开发环境的一些尝试

make menuconfig
Ubuntu20.04 编译Buildroot(支持Qt编译)_第1张图片
Ubuntu20.04 编译Buildroot(支持Qt编译)_第2张图片
Ubuntu20.04 编译Buildroot(支持Qt编译)_第3张图片
默认的模拟配置并不支持勾选QT选项

*** Qt5 needs host g++ >= 5.0, and a toolchain w/ gcc >= 5.0, wchar, NPTL, C++, dynam ***

估计是问题有些太低级, 所以, 不管GOOGLE还是BAIDU,
没有文章可以给出很好的答案来说明, 如何让QT选项可以勾选.

解决:
修改Toolchain后, 终于可以用QT的选项了:
Ubuntu20.04 编译Buildroot(支持Qt编译)_第4张图片
Ubuntu20.04 编译Buildroot(支持Qt编译)_第5张图片
Ubuntu20.04 编译Buildroot(支持Qt编译)_第6张图片


重新编译

# 清除, 不清除编译会有报错
$ make clean
# 重新编译
$ make

编译完成后, 可以找到qmake

$ output/build/qt5base-5.15.2/bin/qmake -v
QMake version 3.1
Using Qt version 5.15.2 in /home/anson/codes/buildroot-2021.02/output/host/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/lib

也可以找到相应的examples, 如 analogclock

output/build/qt5base-5.15.2/examples/widgets/widgets$ ll
total 116
drwxr-xr-x 27 anson anson 4096 11月 13 01:24 ./
drwxr-xr-x 25 anson anson 4096 11月 13 01:24 ../
drwxr-xr-x  2 anson anson 4096 11月 13 01:24 analogclock/
drwxr-xr-x  2 anson anson 4096 11月 13 01:24 calculator/
drwxr-xr-x  2 anson anson 4096 11月 13 01:24 calendarwidget/
drwxr-xr-x  2 anson anson 4096 11月 13 01:24 charactermap/
drwxr-xr-x  2 anson anson 4096 11月 13 01:24 codeeditor/
drwxr-xr-x  2 anson anson 4096 11月 13 01:24 digitalclock/
drwxr-xr-x  2 anson anson 4096 11月 13 01:24 elidedlabel/
drwxr-xr-x  2 anson anson 4096 11月 13 01:24 groupbox/
drwxr-xr-x  3 anson anson 4096 11月 13 01:24 icons/
drwxr-xr-x  2 anson anson 4096 11月 13 01:24 imageviewer/
drwxr-xr-x  2 anson anson 4096 11月 13 01:24 lineedits/
drwxr-xr-x  2 anson anson 4096 11月 13 01:24 mousebuttons/
drwxr-xr-x  2 anson anson 4096 11月 13 01:24 movie/
-rw-r--r--  1 anson anson  477 10月 27 16:02 README
drwxr-xr-x  2 anson anson 4096 11月 13 01:24 scribble/
drwxr-xr-x  2 anson anson 4096 11月 13 01:24 shapedclock/
drwxr-xr-x  2 anson anson 4096 11月 13 01:24 sliders/
drwxr-xr-x  2 anson anson 4096 11月 13 01:24 spinboxes/
drwxr-xr-x  3 anson anson 4096 11月 13 01:24 styles/
drwxr-xr-x  5 anson anson 4096 11月 13 01:24 stylesheet/
drwxr-xr-x  3 anson anson 4096 11月 13 01:24 tablet/
drwxr-xr-x  2 anson anson 4096 11月 13 01:24 tetrix/
drwxr-xr-x  3 anson anson 4096 11月 13 01:24 tooltips/
drwxr-xr-x  2 anson anson 4096 11月 13 01:24 validators/
-rw-r--r--  1 anson anson  725 10月 27 16:02 widgets.pro
drwxr-xr-x  2 anson anson 4096 11月 13 01:24 wiggly/
drwxr-xr-x  2 anson anson 4096 11月 13 01:24 windowflags/


如何在Buildroot中编译Qt请参考:
[哇酷网 whycan.cn]Buildroot成功后如何编译Qt应用程序

尝试执行qmake生成Makefile文件时报错:

失败的尝试 1

buildroot-2021.02$ output/build/qt5base-5.15.2/bin/qmake output/build/qt5base-5.15.2/examples/widgets/widgets/analogclock/analogclock.pro
Info: creating stash file /.qmake.stash
/home/anson/codes/buildroot-2021.02/output/build/qt5base-5.15.2/mkspecs/features/toolchain.prf:73: Cannot write cache file /.qmake.stash: Permission denied
Info: creating stash file /.qmake.stash
/home/anson/codes/buildroot-2021.02/output/build/qt5base-5.15.2/mkspecs/features/toolchain.prf:73: Cannot write cache file /.qmake.stash: Permission denied
Info: creating stash file /.qmake.stash
/home/anson/codes/buildroot-2021.02/output/build/qt5base-5.15.2/mkspecs/features/toolchain.prf:73: Cannot write cache file /.qmake.stash: Permission denied
Info: creating stash file /.qmake.stash
/home/anson/codes/buildroot-2021.02/output/build/qt5base-5.15.2/mkspecs/features/toolchain.prf:73: Cannot write cache file /.qmake.stash: Permission denied
Info: creating stash file /.qmake.stash
/home/anson/codes/buildroot-2021.02/output/build/qt5base-5.15.2/mkspecs/features/toolchain.prf:76: Cannot write cache file /.qmake.stash: Permission denied
Info: creating stash file /.qmake.stash
/home/anson/codes/buildroot-2021.02/output/build/qt5base-5.15.2/mkspecs/features/toolchain.prf:409: Cannot write cache file /.qmake.stash: Permission denied
Info: creating stash file /.qmake.stash
/home/anson/codes/buildroot-2021.02/output/build/qt5base-5.15.2/mkspecs/features/toolchain.prf:411: Cannot write cache file /.qmake.stash: Permission denied
Project ERROR: Unknown module(s) in QT: gui widgets

失败的尝试 2

output/build/qt5base-5.15.2/examples/widgets/widgets/analogclock$ /home/anson/codes/buildroot-2021.02/output/build/qt5base-5.15.2/bin/qmake analogclock.pro
Project ERROR: Unknown module(s) in QT: gui widgets

解决: 打开QT中gui->widgets配置
Ubuntu20.04 编译Buildroot(支持Qt编译)_第7张图片
重新编译

# 清除, 不清除编译会有报错
$ make clean
# 重新编译
$ make

编译完成后, analogclock已经编译好了

output/build/qt5base-5.15.2/examples/widgets/widgets/analogclock$ ll
total 132
drwxr-xr-x  5 anson anson  4096 3月  16 16:51 ./
drwxr-xr-x 27 anson anson  4096 3月  16 16:33 ../
-rwxrwxr-x  1 anson anson 27180 3月  16 16:51 analogclock*
-rw-r--r--  1 anson anson  4675 10月 27 16:02 analogclock.cpp
-rw-r--r--  1 anson anson  2712 10月 27 16:02 analogclock.h
-rw-r--r--  1 anson anson   242 10月 27 16:02 analogclock.pro
-rw-r--r--  1 anson anson  2641 10月 27 16:02 main.cpp
-rw-rw-r--  1 anson anson 61743 3月  16 16:51 Makefile
drwxrwxr-x  2 anson anson  4096 3月  16 16:51 .moc/
drwxrwxr-x  2 anson anson  4096 3月  16 16:51 .obj/
drwxrwxr-x  2 anson anson  4096 3月  16 16:51 .pch/

尝试删除 analogclock Makefile .moc .obj .pch, 再执行qmake, 可以正常生成Makefile
执行make, 生成analogclock

—完结—


参考

Buildroot笔记
buildroot使用介绍
The Buildroot user manual
通过buildroot+qemu搭建ARM-Linux虚拟开发环境
ubuntu下使用qemu-system-arm模拟arm环境
Buildroot and QEMU – the quickest receipe for your own Linux
Getting arm-buildroot-linux-uclibcgnueabihf-gcc: Command not found
Solution for “make menuconfig” Error in Linux PC
[哇酷网 whycan.cn]Buildroot成功后如何编译Qt应用程序
通过buildroot解决需要移植QT库的问题!!!!步骤详细,需要的拿走
GCC_ARM_LINUX Downloads

你可能感兴趣的:(Linux,Buildroot,Qt,menuconfig,编译)