完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
2 Buildroot介绍
Buildroot是Linux平台上一个构建嵌入式Linux系统的框架,整个Buildroot是由Makefile脚本和Kconfig配置文件构成。可以和编译Linux内核一样,通过buildroot配置,menuconfig修改,编译出一个完整的可以直接烧写到机器上运行的Linux系统软件(包含boot、kernel、rootfs以及rootfs中的各种库和应用程序)。制作的rootfs通常需要包含很多第三方软件,比如busybox,udhcpc,tftp,apache,sqlite,PHP,iptable,DNS等,为避免复杂的移植工作,在buildroot中通过menuconfig配置我们根文件系统中需要的功能,将不需要的去掉,再执行make编译,buildroot就会自动从指定的服务器上下载源码包,自动编译,自动搭建我们所需要的嵌入式根文件系统。 3 Buildroot目录 buildroot ├── arch: 存放CPU架构相关的配置脚本,如arm/mips/x86,这些CPU相关的配置,在制作工具链时,编译uboot和kernel时很关键 ├── board:在构建系统时,board默认的boot和kernel配置文件,以及一些板级相关脚本,存放一些默认开发板的配置补丁之类 ├── boot:bootloader配置脚本目录,可以选择使用uboot作为bootloader ├── build:所有源码包解压出来的文件存放目录和编译过程的发生目录 ├── configs: 板级配置文件,该目录下的配置文件记录着该机器平台或者方案使用的工具链,boot,kernel,各种应用软件包的配置 ├── dl: download的简写,一些开源包下载后存在该目录;首次下载后,下次不会再从官网下载,而从dl/目录拿开源包,以节约时间 ├── docs: 存放相关的参考帮助文档 ├── fs: 各种文件系统的自动构建脚本 ├── linux: 存放着kernel的自动构建脚本 ├── output: 是编译出来的输出文件夹 │ ├── build: 存放解压后的各种软件包编译完成后的现场,包括主机上Buildroot所需的工具和针对目标编译的软件包 │ ├── host: 存放着制作好的编译工具链,如gcc、arm-linux-gcc等工具 │ ├── images: 存放着编译好的uboot.bin, zImage, rootfs等镜像文件,可烧写到板子里, 让linux系统跑起来 │ ├── staging:是到内部目标工具链host/的符号链接 │ └── target: 用来制作rootfs文件系统,存放Linux系统基本的目录结构,以及编译好的应用库和bin可执行文件。(buildroot根据用户配置把.ko .so .bin文件安装到对应目录中) ├── package:下面放着应用软件的配置文件,每个应用软件的配置文件有Config.in和soft_name.mk ├── support:公共的支持文档(kconfig code, libtool patches, download helpers, and more) ├── system:根目录主要骨架和相关启动初始化配置,存放文件系统目录的和设备节点的模板,这些模板会被拷贝到output/目录下,用于制作根文件系统rootfs ├── toolchain:目录中存放着各种制作工具链的脚本 ├── utils:常用工具 ├── CHANGES ├── Config.in ├── Config.in.legacy ├── COPYING ├── DEVELOPERS ├── Makefile ├── Makefile.legacy └── README Buildroot是一个自动构建框架,提供函数框架和变量命令框架,采用它的框架编写的app_pkg.mk这种Makefile格式的自动构建脚本,将被package/pkg-generic.mk这个核心脚本展开并填充到Buildroot主目录下的Makefile中。最后make all执行Buildroot主目录下的Makefile,将生成的image输出到buildroot/output中。在buildroot/package/pkg-generic.mk中通过调用同目录下的pkg-download.mk、pkg-utils.mk文件,Buildroot已经帮你自动实现下载、解压、依赖包下载编译等一系列机械化的流程。你只需要按照格式编写Makefile脚本app_pkg.mk,填充下载地址,链接依赖库的名字等一些特有的构建细节即可。总而言之,Buildroot本身提供构建流程的框架,开发者按照格式写脚本,提供必要的构建细节,配置整个系统,最后自动构建出你的系统。 注意:Buildroot整体框架与kernel类似,Config.in类似于kernel中Kconfig文件,用于配置Buildroot功能模块到最终的.config中,影响后面make过程,也是make menuconfig中呈现出来的选项,xxx.mk类似于kernel中Makefile,指定相应源码包位置和下载地址之类。Buildroot的编译流程是先从dl/xxx.tar下解压出源码到output/build/xxx,然后利用本身的配置文件(如果有的话)覆盖output/build/xxx下的配置文件,在开始编译连接完成后安装到output/相应文件夹下。使用Buildroot创建一个根文件系统编译流程: Copy the skeleton to $(TARGET_DIR) --> Build/install all packages -->Run a number of cleanup steps --> Copy rootfs overlays --> Execute post-build scripts --> Create rootfs images --> Execute post-image scripts 执行命令:make list-defconfigs查看当前的Buildroot中支持的开发板 4 Buildroot配置介绍 首先通过make xxx_defconfig来选择一个defconfig,这个文件在config目录下,最终生成.config文件。然后通过make menuconfig进行配置,最终的配置更新在.config文件中。这样后Buildroot整体功能确定。 Target options ---> 选择目标板架构特性。 Build options ---> 配置编译选项。 Toolchain ---> 配置交叉工具链,使用buildroot工具链还是外部提供。 System configuration ---> 配置生成的根文件系统中所需功能 Kernel ---> 配置kernel是否编译以及编译选项 Target packages ---> 配置生成的根文件系统中的工具以及库 Filesystem images ---> 配置生成的根文件系统的格式,是ext2还是其他 Bootloaders ---> 配置使用哪种bootloader以及编译选项,uboot只是其中一种 Host utilities ---> 主机使用功能 Legacy config options ---> 以前遗留的配置选项 5 添加Qt程序 在SDK/app目录下有自带的qt程序,如果想要添加qt程序可以通过(1)qt添加项目文件自动生成xx.pro文件,其中pro文件类似makefile的功能(2)手动编写pro文件并添加相应的cpp、h文件。 下面以我自己写的qtest程序为例介绍需要添加的文件 qtest文件夹需要放在SDK/app下,buildroot根据.mk文件中的内容到这里来找文件 qtest |————qtest.pro |————main.cpp |————qtestwidget.cpp |————qtestwidget.h |————qtestwidget.desktop(/usr/share/application) |————qtestwidget.png(/usr/share/icon) 在SDK/buildroot/package/rockchip/目录下新建qtest文件夹并添加Config.in、qtest.mk #Config.in config BR2_PACKAGE_QTEST bool "qtest" depends on BR2_PACKAGE_QT5 help Rochip qtest based on QT5 #qtest.mk ################################################################################ # # qtest # ################################################################################ QTEST_VERSION = 1.0 QTEST_SITE = $(TOPDIR)/../app/qtest QTEST_SITE_METHOD = local QTEST_LICENSE = Apache V2.0 QTEST_LICENSE_FILES = NOTICE define QTEST_CONFIGURE_CMDS cd $(@D); $(TARGET_MAKE_ENV) $(HOST_DIR)/bin/qmake endef define QTEST_BUILD_CMDS $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) endef define QTEST_INSTALL_TARGET_CMDS mkdir -p $(TARGET_DIR)/usr/share/applications $(TARGET_DIR)/usr/share/icon $(INSTALL) -D -m 0644 $(@D)/designer.png $(TARGET_DIR)/usr/share/icon/ $(INSTALL) -D -m 0755 $(@D)/qtest $(TARGET_DIR)/usr/bin/ $(INSTALL) -D -m 0755 $(@D)/qtest.desktop $(TARGET_DIR)/usr/share/applications/ endef $(eval $(generic-package)) 下一步在SDK/buildroot/package/rockchip/Config.in 中添加 source "package/rockchip/qtest/Config.in" 并修改SDK/buildroot/configs/rockchip/qt_app.config添加: BR2_PACKAGE_QTEST=y 如果需要在linux设备的屏幕上显示图标需要自行在/app/qtest下添加qtest.desktop 以及qtest.png文件。 最终编译生成/buildroot/output/rockchip_rk3399pro-multi-cam/build/DawayTest-1.0 icon 生成在/buildroot/output/rockchip_rk3399pro-multi-cam/target/usr/share/icon 可执行文件生成在/buildroot/output/rockchip_rk3399pro-multi-cam/target/usr/bin$ 如果有新版本 将buildroot/output/**/build中的版本删除 然后重新build.sh 快速添加buildroot桌面应用(1206更新) 按照我的理解,上面通过更改config.in文件相当于使用buildroot在构建文件系统时编译了所添加的应用,如果自身电脑带有交叉编译工具的话(qmake、aarch64-linux-gnu-g++),可以编译好直接传到板端使用,需要准备的文件:
[Desktop Entry] Name=Hello Exec=/usr/bin/Hello Icon=/usr/share/icon/Hello.png Type=Application Name[zh_CN]=Hello.desktop
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1798 浏览 1 评论
synopsys 的design ware:DW_fpv_div,浮点数除法器,默认32位下,想提升覆盖率(TMAX),如果用功能case去提升覆盖率呢?
2237 浏览 1 评论
RK3588 GStreamer调试四路鱼眼摄像头四宫格显示报错
5070 浏览 1 评论
【飞凌嵌入式OK3576-C开发板体验】RKNN神经网络-YOLO图像识别
254 浏览 0 评论
【飞凌嵌入式OK3576-C开发板体验】SSH远程登录网络配置及CAN通讯
1336 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-18 08:16 , Processed in 0.509731 second(s), Total 40, Slave 33 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号