目录
利用Buildroot交叉编译出emmc.img文件和配置Qt需要的文件
交叉编译方法和过程
进入由100ask提供的Buildroot的源码目录:
cd /home/book/100ask_imx6ull-sdk/Buildroot_2020.02.x
目录Buildroot_2020.02.x未进行编译操作前我已压缩进行备份,百度网盘下载链接:
https://pan.baidu.com/s/1_1bUKQsHb9LUxpqZx1hUjw?pwd=iief

然后依次运行下面的命令:
make clean

make 100ask_imx6ull_pro_ddr512m_systemV_qt5_defconfig
这句命令是进行交叉编译前的配置:

然后make
make all -j4
-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下有在博文 https://blog.youkuaiyun.com/wenhao_ir/article/details/144422140 中直接利用内核源码生成过的内核镜像文件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的详细介绍,请参见我的另一篇博文 https://blog.youkuaiyun.com/wenhao_ir/article/details/145367399
如果你现在的开发板上没有配置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*"
结果如下:
/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
从 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的所在目录就是在博文 https://blog.youkuaiyun.com/wenhao_ir/article/details/144326545 中的 PATH值:

即:
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin
填写完成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
下次设置C编译器就可以直接复制上面这个路径填上了,就不用像上面这样通过其所在目录和Browser去查找了。
接下来设置Make path,也就是Ubuntu系统中的make工具对应的程序所在的路径,怎么样找到这个路径呢? 用下面这个命令就可以找到:
whereis make

book@100ask:~$ whereis make
make: /usr/bin/make /usr/share/man/man1/make.1.gz
上面的运行结果中:
/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

接下来设置ABI的属性,关于ABI的介绍,见我的另一篇博文:
https://blog.youkuaiyun.com/wenhao_ir/article/details/145419488
具体的设置见下面这幅图:

然后点击右下角的Apply→OK,完成对C编译器的配置:

设置C++编译器
因为Qt 是一个基于 C++ 的跨平台应用开发框架,它主要使用 C++ 作为核心编程语言,所以我们还需要设置C++编译器。
在 QtCreator 界面中,依次点击 tools -> Options:

然后在Options中,选择 Kits→Compilers

添加自定义的C++编译器:
Add→Custom→C++

Name填写为Custom_C++

Compiler path的所在目录就是在博文 https://blog.youkuaiyun.com/wenhao_ir/article/details/144326545 中的 PATH值:

即:
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin
填写完成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++

接下来设置Make path,也就是Ubuntu系统中的make工具对应的程序所在的路径,怎么样找到这个路径呢? 用下面这个命令就可以找到:
whereis make

book@100ask:~$ whereis make
make: /usr/bin/make /usr/share/man/man1/make.1.gz
上面的运行结果中:
/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

接下来设置ABI的属性,关于ABI的介绍,见我的另一篇博文:
https://blog.youkuaiyun.com/wenhao_ir/article/details/145419488
具体的设置见下面这幅图:

然后点击右下角的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++编译器中的设置一样,先填上在博文 https://blog.youkuaiyun.com/wenhao_ir/article/details/144326545 中的 PATH值:

即:
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin

然后点击Browser,找到arm-buildroot-linux-gnueabihf-gdb

如果下次配置时,相关路径没有变的话,可以直接复制下面的路径填写上:
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/arm-buildroot-linux-gnueabihf-gdb

然后点击右下方的OK

设置"Qt versions"的qmake【添加之前用Buildroot交叉编译出的Qt的SDK(qmake)】
先找出编译出的Qt的SDK在哪里(即qmake文件在哪里),运行下面的命令:
cd /home/book/100ask_imx6ull-sdk/Buildroot_2020.02.x/output
find -name qmake

./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
上面运行结果中的:
./host/bin/qmake
为了得到完整路径,我们继续运行下面的命令:
cd host/bin/
pwd

得到qmake文件所在目录如下:
/home/book/100ask_imx6ull-sdk/Buildroot_2020.02.x/output/host/bin
在 QtCreator 界面中,依次点击 tools -> Options:

然后在Options中,选择 Kits→Qt Versions

点击右侧的Add:

在上面截图的界面中选择下面这个目录:
/home/book/100ask_imx6ull-sdk/Buildroot_2020.02.x/output/host/bin

选择上面截图中的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):
注意:后来我在博文 https://blog.youkuaiyun.com/wenhao_ir/article/details/145459006 编译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


正是因为这里设置了没用,所以要注意,请保证下面三者的版本号相同。
①Buildroot中使用的Linux的版本;
②gcc交叉编译工具中的版本;
③开发板上运行的Linux系统的版本;
实际上最重要是要保证①和③的版本号相同,因为Buildroot会构建生成gcc交叉编译工具,如果你现在用的gcc交叉编译工具的版本号与①和③不一致,那么你就使用Buildroot构建生成的gcc交叉编译工具就行了,这样②和①的版本号就一致了。
这三个版本号的查看方法见博文:https://blog.youkuaiyun.com/wenhao_ir/article/details/145475132
从上面这篇博文中可以看出对于我的开发环境而言,①②③所使用的Linux版本都是4.9.88。
如果按照开发板商提供的教程需要按下面设置(注意:根据上面的叙述,实际上是不需要设置Sysroot的):
它就是在博文 https://blog.youkuaiyun.com/wenhao_ir/article/details/144326545 中的 PATH值:
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin
对应的目录/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
填上上面这个路径,如下图所示:

然后是Compiler的选择,就是之前自己添加的C编译器和C++编译器:

再然后是Debugger的选择,也是我们之前设置的:

设置Qt version,也是前面我们在设置的Qt的SDK时设置的:

Qt mkspec不用设置。

CMake Tool不用设置,因为我们在后面新建工程时会选择使用qmake进行构建项目,所以CMake Tool不用设置。

以上设置完成后,点击右下方的OK,就行了!
备注:在新建工程时会提示选示哪个构建系统,那时我们选择qmake,如下图所示:

至此,Qt开发环境QtCreator的安装、配置就完成了。
用实例进行测试
第1个实例链接 https://blog.youkuaiyun.com/wenhao_ir/article/details/145420998
工程换位置后一定要更换一下Build directory的位置
详情见 https://blog.youkuaiyun.com/wenhao_ir/article/details/145458743

1085

被折叠的 条评论
为什么被折叠?



