目录
利用Buildroot交叉编译出emmc.img文件和配置Qt需要的文件
交叉编译方法和过程
进入由100ask提供的Buildroot的源码目录:
cd /home/book/100ask_imx6ull-sdk/Buildroot_2020.02.x
- 1
目录Buildroot_2020.02.x
未进行编译操作前我已压缩进行备份,百度网盘下载链接:
https://pan.baidu.com/s/1_1bUKQsHb9LUxpqZx1hUjw?pwd=iief
然后依次运行下面的命令:
make clean
- 1
make 100ask_imx6ull_pro_ddr512m_systemV_qt5_defconfig
- 1
这句命令是进行交叉编译前的配置:
然后make
make all -j4
- 1
-j4 参数指定使用4个线程并行编译以加快速度。
这里要花很久的时间(我第1次构建用了7个小时,所以最后晚上睡觉前进行),并且因为用的是4个线程并行编译,所以CPU负荷比较重,建议开始前用家用风扇对准主机吹。
2025-01-26 14:26:07 开始启动编译…
2025-01-26 21:57:25 编译结束
用时7个小时…,所以下次重新构建的话还是晚上睡觉前进行吧。幸运的是,Buildroot采用的是增量构建机制,所以后面编译时,它只会重新编译修改了代码的部分。
构建完成的Buildroot_2020.02.x目录我进行了压缩并上传到了百度网盘,下载链接如下:
https://pan.baidu.com/s/1pkdRznvSRhyR7kZkzbLQkA?pwd=puz4
这个压缩文件有点大,9.79GB~
编译完成后的最后几条信息如下图所示:
构建完成的Buildroot_2020.02.x目录我进行了压缩并上传到了百度网盘,下载链接如下:
https://pan.baidu.com/s/1pkdRznvSRhyR7kZkzbLQkA?pwd=puz4
这个压缩文件有点大,9.79GB~
最后构建编译出的文件在目录 ./Buildroot_2020.02.x/output
中,如下图所示:
目录/output/images
下的文件的说明
目录Buildroot_2020.02.x/output/images
的截图如下:
在目录Buildroot_2020.02.x/output/images
下有在博文 http://iyenn.com/rec/1709284.html 中直接利用内核源码生成过的内核镜像文件zImage、基于IMX6ULL的各个型号的开发板的设备树二进制文件(dtb文件)、
此外还有u-boot文件、根文件系统、进行eMMC烧写时需要的img文件100ask-imx6ull-pro-512d-systemv-v1.img
。
这里要重点说明下进行eMMC烧写时需要的img文件100ask-imx6ull-pro-512d-systemv-v1.img
:
emmc.img文件说明
文件100ask-imx6ull-pro-512d-systemv-v1.img
是进行eMMC烧写时需要的img文件,它里面包含着一个完整的系统,相当于它是把加载程序(boot)、内核(zImage)、设备树文件、根文件系统合到一个文件中了,这样我们在烧写只需要把这个文件烧写到我们的eMMC设备,然后整个嵌入式系统就能完整在开发板上运行了。
关于emmc.img和eMMC的详细介绍,请参见我的另一篇博文 http://iyenn.com/rec/1709263.html
如果你现在的开发板上没有配置Qt运行环境,那么就需要把文件100ask-imx6ull-pro-512d-systemv-v1.img
烧录到开发板上,相当于更新开发板的加载程序(boot)、内核(zImage)、设备树文件、根文件。
如果需要具体的烧录img文件的方法,请参考下面这个视频【3分20秒开始看】:
https://www.bilibili.com/video/BV1HT421k7GW?vd_source=8fb767d1739ea6b35c7177ba909eed36&p=5
那么如何判断开发板上有没有配置Qt运行环境呢?
运行下面的命令:
find /usr/lib /usr/local/lib -name "libQt5*"
- 1
结果如下:
/usr/lib/libQt5Bluetooth.so.5
/usr/lib/libQt5Bluetooth.so.5.12
/usr/lib/libQt5Bluetooth.so.5.12.7
/usr/lib/libQt5Charts.so.5
/usr/lib/libQt5Charts.so.5.12
/usr/lib/libQt5Charts.so.5.12.7
/usr/lib/libQt5Concurrent.so.5
/usr/lib/libQt5Concurrent.so.5.12
/usr/lib/libQt5Concurrent.so.5.12.7
/usr/lib/libQt5Core.so.5
/usr/lib/libQt5Core.so.5.12
/usr/lib/libQt5Core.so.5.12.7
/usr/lib/libQt5DBus.so.5
/usr/lib/libQt5DBus.so.5.12
/usr/lib/libQt5DBus.so.5.12.7
/usr/lib/libQt5ExtSerialPort.so.1
/usr/lib/libQt5ExtSerialPort.so.1.2
/usr/lib/libQt5ExtSerialPort.so.1.2.0
/usr/lib/libQt5Gui.so.5
/usr/lib/libQt5Gui.so.5.12
/usr/lib/libQt5Gui.so.5.12.7
/usr/lib/libQt5Location.so.5
/usr/lib/libQt5Location.so.5.12
/usr/lib/libQt5Location.so.5.12.7
/usr/lib/libQt5Multimedia.so.5
/usr/lib/libQt5Multimedia.so.5.12
/usr/lib/libQt5Multimedia.so.5.12.7
/usr/lib/libQt5MultimediaGstTools.so.5
/usr/lib/libQt5MultimediaGstTools.so.5.12
/usr/lib/libQt5MultimediaGstTools.so.5.12.7
/usr/lib/libQt5MultimediaQuick.so.5
/usr/lib/libQt5MultimediaQuick.so.5.12
/usr/lib/libQt5MultimediaQuick.so.5.12.7
/usr/lib/libQt5MultimediaWidgets.so.5
/usr/lib/libQt5MultimediaWidgets.so.5.12
/usr/lib/libQt5MultimediaWidgets.so.5.12.7
/usr/lib/libQt5Network.so.5
/usr/lib/libQt5Network.so.5.12
/usr/lib/libQt5Network.so.5.12.7
/usr/lib/libQt5OpenGL.so.5
/usr/lib/libQt5OpenGL.so.5.12
/usr/lib/libQt5OpenGL.so.5.12.7
/usr/lib/libQt5Positioning.so.5
/usr/lib/libQt5Positioning.so.5.12
/usr/lib/libQt5Positioning.so.5.12.7
/usr/lib/libQt5PositioningQuick.so.5
/usr/lib/libQt5PrintSupport.so.5
/usr/lib/libQt5PositioningQuick.so.5.12
/usr/lib/libQt5PositioningQuick.so.5.12.7
/usr/lib/libQt5PrintSupport.so.5.12
/usr/lib/libQt5PrintSupport.so.5.12.7
/usr/lib/libQt5Qml.so.5
/usr/lib/libQt5Qml.so.5.12
/usr/lib/libQt5Qml.so.5.12.7
/usr/lib/libQt5Quick.so.5
/usr/lib/libQt5Quick.so.5.12
/usr/lib/libQt5Quick.so.5.12.7
/usr/lib/libQt5QuickControls2.so.5
/usr/lib/libQt5QuickControls2.so.5.12
/usr/lib/libQt5QuickControls2.so.5.12.7
/usr/lib/libQt5QuickParticles.so.5
/usr/lib/libQt5QuickParticles.so.5.12
/usr/lib/libQt5QuickParticles.so.5.12.7
/usr/lib/libQt5QuickShapes.so.5
/usr/lib/libQt5QuickShapes.so.5.12
/usr/lib/libQt5QuickShapes.so.5.12.7
/usr/lib/libQt5QuickTemplates2.so.5
/usr/lib/libQt5QuickTemplates2.so.5.12
/usr/lib/libQt5QuickTemplates2.so.5.12.7
/usr/lib/libQt5QuickTest.so.5
/usr/lib/libQt5QuickTest.so.5.12
/usr/lib/libQt5QuickTest.so.5.12.7
/usr/lib/libQt5QuickWidgets.so.5
/usr/lib/libQt5QuickWidgets.so.5.12
/usr/lib/libQt5QuickWidgets.so.5.12.7
/usr/lib/libQt5Script.so.5
/usr/lib/libQt5Script.so.5.12
/usr/lib/libQt5Script.so.5.12.7
/usr/lib/libQt5ScriptTools.so.5
/usr/lib/libQt5ScriptTools.so.5.12
/usr/lib/libQt5ScriptTools.so.5.12.7
/usr/lib/libQt5Scxml.so.5
/usr/lib/libQt5Scxml.so.5.12
/usr/lib/libQt5Scxml.so.5.12.7
/usr/lib/libQt5Sensors.so.5
/usr/lib/libQt5Sensors.so.5.12
/usr/lib/libQt5Sensors.so.5.12.7
/usr/lib/libQt5SerialBus.so.5
/usr/lib/libQt5SerialBus.so.5.12
/usr/lib/libQt5SerialBus.so.5.12.7
/usr/lib/libQt5SerialPort.so.5
/usr/lib/libQt5SerialPort.so.5.12
/usr/lib/libQt5SerialPort.so.5.12.7
/usr/lib/libQt5Sql.so.5
/usr/lib/libQt5Sql.so.5.12
/usr/lib/libQt5Sql.so.5.12.7
/usr/lib/libQt5Svg.so.5
/usr/lib/libQt5Svg.so.5.12
/usr/lib/libQt5Svg.so.5.12.7
/usr/lib/libQt5Test.so.5
/usr/lib/libQt5Test.so.5.12
/usr/lib/libQt5Test.so.5.12.7
/usr/lib/libQt5VirtualKeyboard.so.5
/usr/lib/libQt5VirtualKeyboard.so.5.12
/usr/lib/libQt5VirtualKeyboard.so.5.12.7
/usr/lib/libQt5WebChannel.so.5
/usr/lib/libQt5WebChannel.so.5.12
/usr/lib/libQt5WebChannel.so.5.12.7
/usr/lib/libQt5WebKit.so.5
/usr/lib/libQt5WebKit.so.5.9
/usr/lib/libQt5WebKit.so.5.9.1
/usr/lib/libQt5WebKitWidgets.so.5
/usr/lib/libQt5WebKitWidgets.so.5.9
/usr/lib/libQt5WebKitWidgets.so.5.9.1
/usr/lib/libQt5WebSockets.so.5
/usr/lib/libQt5WebSockets.so.5.12
/usr/lib/libQt5WebSockets.so.5.12.7
/usr/lib/libQt5Widgets.so.5
/usr/lib/libQt5Widgets.so.5.12
/usr/lib/libQt5Widgets.so.5.12.7
/usr/lib/libQt5Xml.so.5
/usr/lib/libQt5Xml.so.5.12
/usr/lib/libQt5Xml.so.5.12.7
/usr/lib/libQt5XmlPatterns.so.5
/usr/lib/libQt5XmlPatterns.so.5.12
/usr/lib/libQt5XmlPatterns.so.5.12.7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
从 find
命令输出结果来看,开发板上已经安装了丰富的 Qt-5.1 库,包括核心模块 (libQt5Core
)、图形模块 (libQt5Gui
和 libQt5Widgets
)、网络模块 (libQt5Network
)、多媒体模块 (libQt5Multimedia
) 以及其他常用模块(如 libQt5WebKit
、libQt5Charts
等)。这些库是支持 Qt 应用程序运行的必要条件。那既然这样,就没必要去烧写含Qt的emmc.img文件了。
目录output/host/bin
下的文件的说明
这个目录下的/home/book/100ask_imx6ull-sdk/Buildroot_2020.02.x/output/host/bin/qmake
是我们后面配置QtCreator需要的文件:
Qt-5.12.9(QtCreator)的下载
百度网盘下载链接:
https://pan.baidu.com/s/1uDkzyU_HGy7hYsGrLcQMnA?pwd=3h2
在Ubuntu上安装QtCreator(QT-Developer and Desinger Tools)
把安装文件复制到Ubuntu中:
右键→Run
下图中点击Next…
在下图红框中的位置填写注册帐号的注册信息:
验证邮箱:
同意使用条款:
下图中击点Next…
确认安装位置:
不妨就用默认的安装位置 /home/book/Qt5.12.9
下图中不用勾选Qt 5.12.9
,Qt 5.12.9
的意思是在Ubuntu中安装Qt
的运行环境。继续Next…
下图中同意License使用条款:
下图中点击Install
:
安装中…
下图中取消“Launch Qt Creator”,然后点击Finish
然后点击左下角的程序目录,就能发现Qt
的开发工具了:
至此,就成功完成QtCreator(QT-Developer and Desinger Tools)的安装了,然后我们需要对这个工具进行配置,不过配置前可以把安装包先删除,毕竟安装包还是有1.31GB的大小,没必要在那里占据我们的磁盘空间。
配置Qt开发工具(QT-Developer and Desinger Tools)
启动QtCreator
找到QtCreator…
启动QtCreator…
设置C编译器
在 QtCreator 界面中,依次点击 tools -> Options:
然后在Options
中,选择 Kits→Compilers
添加自定义的C编译器:
Add→Custom→C
上图的Name不妨写为Custom_C
;
Compiler path
的所在目录就是在博文 http://iyenn.com/rec/1709220.html 中的 PATH
值:
即:
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin
- 1
填写完成Compiler path
后把对话框往右展开得到Browser
:
展开后的截图如下:
点击上图中的Browser
,去目录/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin
中选择具体的C编译器:
据此,我们可以复制得到C编译器的完整路径为:
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/arm-buildroot-linux-gnueabihf-gcc
- 1
下次设置C编译器就可以直接复制上面这个路径填上了,就不用像上面这样通过其所在目录和Browser
去查找了。
接下来设置Make path
,也就是Ubuntu系统中的make工具对应的程序所在的路径,怎么样找到这个路径呢? 用下面这个命令就可以找到:
whereis make
- 1
book@100ask:~$ whereis make
make: /usr/bin/make /usr/share/man/man1/make.1.gz
- 1
- 2
上面的运行结果中:
/usr/bin/make
是make
可执行文件的路径,即 make
程序本身的位置。
/usr/share/man/man1/make.1.gz
:make
命令的 man 手册页(即用户手册),它存储在 /usr/share/man
目录下,具体来说:
man1/
:表示该手册页属于 section 1(用户命令)。在 man 手册中,section 1 主要用于用户可以直接执行的命令,如ls
、make
等。make.1.gz
:make.1
:代表make
的 man 手册页,属于 section 1。.gz
:表示该文件经过gzip
压缩,以节省磁盘空间。
所以在Make path
这里填:
/usr/bin/make
- 1
接下来设置ABI的属性,关于ABI的介绍,见我的另一篇博文:
http://iyenn.com/rec/1709285.html
具体的设置见下面这幅图:
然后点击右下角的Apply→OK,完成对C编译器的配置:
设置C++编译器
因为Qt 是一个基于 C++ 的跨平台应用开发框架,它主要使用 C++ 作为核心编程语言,所以我们还需要设置C++编译器。
在 QtCreator 界面中,依次点击 tools -> Options:
然后在Options
中,选择 Kits→Compilers
添加自定义的C++编译器:
Add→Custom→C++
Name填写为Custom_C++
Compiler path
的所在目录就是在博文 http://iyenn.com/rec/1709220.html 中的 PATH
值:
即:
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin
- 1
填写完成Compiler path
后把对话框往右展开得到Browser
:
展开后的截图如下:
点击上图中的Browser
,去目录/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin
中选择具体的C++编译器,找到arm-buildroot-linux-gnueabihf-g++
如果路径不变的话,以后可以直接复制下面的路径进行填写:
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/arm-buildroot-linux-gnueabihf-g++
- 1
接下来设置Make path
,也就是Ubuntu系统中的make工具对应的程序所在的路径,怎么样找到这个路径呢? 用下面这个命令就可以找到:
whereis make
- 1
book@100ask:~$ whereis make
make: /usr/bin/make /usr/share/man/man1/make.1.gz
- 1
- 2
上面的运行结果中:
/usr/bin/make
是make
可执行文件的路径,即 make
程序本身的位置。
/usr/share/man/man1/make.1.gz
:make
命令的 man 手册页(即用户手册),它存储在 /usr/share/man
目录下,具体来说:
man1/
:表示该手册页属于 section 1(用户命令)。在 man 手册中,section 1 主要用于用户可以直接执行的命令,如ls
、make
等。make.1.gz
:make.1
:代表make
的 man 手册页,属于 section 1。.gz
:表示该文件经过gzip
压缩,以节省磁盘空间。
所以在Make path
这里填:
/usr/bin/make
- 1
接下来设置ABI的属性,关于ABI的介绍,见我的另一篇博文:
http://iyenn.com/rec/1709285.html
具体的设置见下面这幅图:
然后点击右下角的Apply→OK,完成对C编译器的配置:
检查C和C++编译器是否配置好
在 QtCreator 界面中,依次点击 tools -> Options:
Kits→Compilers:
从上面的截图中我们可以看出,我们已经添加了Manual下的C和C++编译器,名称分别为Custom_C和Custom_C++。
设置调试器(Debuggers)
在 QtCreator 界面中,依次点击 tools -> Options:
然后在Options
中,选择 Kits→Debuggers
点击右边的Add:
Name那里不妨填为Debugger_01
Path那里和C编译器和C++编译器中的设置一样,先填上在博文 http://iyenn.com/rec/1709220.html 中的 PATH
值:
即:
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin
- 1
然后点击Browser
,找到arm-buildroot-linux-gnueabihf-gdb
如果下次配置时,相关路径没有变的话,可以直接复制下面的路径填写上:
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/arm-buildroot-linux-gnueabihf-gdb
- 1
然后点击右下方的OK
设置"Qt versions"的qmake【添加之前用Buildroot交叉编译出的Qt的SDK(qmake)】
先找出编译出的Qt的SDK在哪里(即qmake文件在哪里),运行下面的命令:
cd /home/book/100ask_imx6ull-sdk/Buildroot_2020.02.x/output
- 1
find -name qmake
- 1
./build/qt5base-5.12.8/tests/auto/tools/qmake
./build/qt5base-5.12.8/examples/qmake
./build/qt5base-5.12.8/bin/qmake
./build/qt5base-5.12.8/qmake
./build/qt5base-5.12.8/qmake/doc/snippets/qmake
./build/qt5base-5.12.8/qmake/qmake
./build/qt5webkit-5.9.1/Tools/qmake
./host/bin/qmake
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
上面运行结果中的:
./host/bin/qmake
- 1
为了得到完整路径,我们继续运行下面的命令:
cd host/bin/
- 1
pwd
- 1
得到qmake文件所在目录如下:
/home/book/100ask_imx6ull-sdk/Buildroot_2020.02.x/output/host/bin
- 1
在 QtCreator 界面中,依次点击 tools -> Options:
然后在Options
中,选择 Kits
→Qt Versions
点击右侧的Add
:
在上面截图的界面中选择下面这个目录:
/home/book/100ask_imx6ull-sdk/Buildroot_2020.02.x/output/host/bin
- 1
选择上面截图中的qmake
:
然后点击右下角的OK
配置Kits标签
在 QtCreator 界面中,依次点击 tools -> Options:
然后在Options
中,选择 Kits→Kits
点击右侧的Add:
点击Add后的界面如下:
Name那里不妨填为qt_kit_swh_01
接下来的File system name
不用填。
Device type
那里就按教程先设置为Desktop,这个应该只是标记下这个Kits标签的设备类型,应该没有什么实质性的作用。当然,如果是我来设置的话,这里肯定选择Generic Linux Device
了,但是因为我是第一次用Qt,所以需要比较严格地按教程来设置,以避免不期待的异常。
设置Sysroot(注意:根据下面的叙述,实际上不需要设置Sysroot):
注意:后来我在博文 http://iyenn.com/rec/1709286.html 编译QtCreator的工程时查看工程的Makfile文件发现并没有用到我设置的Sysroot,而是根据前面设置的qmake自动解析出了其在Buildroot中生成的gcc交叉编译工具中的sysroot目录,然后使用了这个目录,所以这里并不需要设置,留空就好,设置了实测在编译工程时也没用到你设置的这个。
QtCreator的工程中的Makefile中使用的是下面这个sysroot目录:
/home/book/100ask_imx6ull-sdk/Buildroot_2020.02.x/output/host/arm-buildroot-linux-gnueabihf/sysroot
- 1
正是因为这里设置了没用,所以要注意,请保证下面三者的版本号相同。
①Buildroot中使用的Linux的版本;
②gcc交叉编译工具中的版本;
③开发板上运行的Linux系统的版本;
实际上最重要是要保证①和③的版本号相同,因为Buildroot会构建生成gcc交叉编译工具,如果你现在用的gcc交叉编译工具的版本号与①和③不一致,那么你就使用Buildroot构建生成的gcc交叉编译工具就行了,这样②和①的版本号就一致了。
这三个版本号的查看方法见博文:http://iyenn.com/rec/1709287.html
从上面这篇博文中可以看出对于我的开发环境而言,①②③所使用的Linux版本都是4.9.88
。
如果按照开发板商提供的教程需要按下面设置(注意:根据上面的叙述,实际上是不需要设置Sysroot的):
它就是在博文 http://iyenn.com/rec/1709220.html 中的 PATH
值:
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin
- 1
对应的目录/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/
下的目录:arm-buildroot-linux-gnueabihf/sysroot
即完整路径为:
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot
- 1
填上上面这个路径,如下图所示:
然后是Compiler的选择,就是之前自己添加的C编译器和C++编译器:
再然后是Debugger的选择,也是我们之前设置的:
设置Qt version,也是前面我们在设置的Qt的SDK时设置的:
Qt mkspec不用设置。
CMake Tool不用设置,因为我们在后面新建工程时会选择使用qmake
进行构建项目,所以CMake Tool不用设置。
以上设置完成后,点击右下方的OK,就行了!
备注:在新建工程时会提示选示哪个构建系统,那时我们选择qmake
,如下图所示:
至此,Qt开发环境QtCreator的安装、配置就完成了。
用实例进行测试
第1个实例链接 http://iyenn.com/rec/1709288.html
工程换位置后一定要更换一下Build directory的位置



评论记录:
回复评论: