
先前由前所有者开发的产品使用了英特尔的SoC,其官方评估委员会推荐了两个测试系统: yocto和timesys(后来发现这两个都是基于yocto构建的),因此我们还必须使用yocto进行构建系统.
Yocto的前身应该是OpenEmbedded,使用bitbake作为核心工具,bitbake解析程序包配置(配方),处理程序包相关性,并分叉任务以下载,解压缩,修补,编译,安装和制作映像. bitbake用python编写. Yocto用于直接构建重量级分配系统,还可以生成软件包管理系统以支持安装.
一开始嵌入式系统的构建,我认为这件事太荒谬了. 有了它,大部分令人头疼的工作都为您完成. 您只需要配置参数并执行编译即可获得系统映像dd对于USB驱动器,您将获得安装盘!但是惊喜只是一小会儿. 在随后的开发中,我发现使用Yocto带来许多不便:
实际上,这些缺陷归根结底是因为Yocto太复杂了,并且想要考虑所有方面,这使得编写文档来描述或实际定制文档非常令人沮丧.

作为一个面向嵌入式的构建系统,buildroot使我像被Yocto讨厌的人一样感到自在和有针对性.
buildroot麻雀虽小,但具有所有内部器官. 还有许多重要功能:
以上只是我使用后的个人经历. 我觉得在构建中小型嵌入式系统时,buildroot比Yocto更好. 甚至对于大型系统,Yocto都很容易使用吗?我很怀疑. 因为最重要的一点是您不能期望在开发过程中下载构建系统,因此,在进行简单的配置然后编译之后,就可以满足产品要求. 在开发过程中,由于各种原因,您将需要修改和定制构建系统. Yocto是一个具有复杂代码,抽象和概念的层次很多,文档不清晰以及编译时间长的系统,让人感到噩梦.
已经讲了很多,下面简要介绍一下buildroot的使用,这里使用的buildroot版本是2015.08.1.

从官方网站下载后,首先检查docs / manual / manual.pdf文档,该文档从浅入深地介绍了buildroot,从整体到细节,您可以在后续的开发过程中找到相关的细节. . 通过本文档,在了解了buildroot构建系统中的概念之后,您基本上可以直接上手了.
make help // 查看编译命令的帮助说明
make menuconfig // 配置构建系统,包括平台属性、指定内核和uboot等
make linux-menuconfig // 调用内核的menuconfig
make busybox-menuconfig // 调用busybox的menuconfig
make <package-name>; // 单独构建package
make // 开始构建整个系统
其中,make menuconfig可用于配置构建系统,直接复制Linux内核的工具集(带有一些补丁),并可配置内核代码路径,目标平台体系结构,交叉编译链和生成文件系统映像格式.嵌入式系统的构建,非常简洁方便,不知道它比Yocto高.
添加软件包也非常方便. 有关详细信息,请参阅手册第17章向Buildroot添加新软件包,其中详细介绍了各种方法和变量. 这是一个栗子,用于解释buildroot如何对嵌入式开发友好.

Embedded通常会编写自己的驱动程序模块,编译为ko文件,然后在内核启动后根据实际需求进行动态加载. 手册中的第17.14章“用于构建内核的软件包的基础结构”介绍了如何在板上添加自己的内核驱动程序模块. 这是一个示例配置文件:
#################################################################
# foobar driver
# refer to buildroot manual chapter 17.14
#################################################################
FOOBAR_VERSION = 1
FOOBAR_SITE_METHOD = local
FOOBAR_SITE = $(TOPDIR)/$(call qstrip,$(BR2_PACKEG_FOOBAR_SRCPATH))
FOOBAR_INSTALL_IMAGES = NO
FOOBAR_INSTALL_TARGET = YES
FOOBAR_MODULE_SUBDIRS=src
FOOBAR_CFG_DIR=$(TARGET_DIR)/etc/modprobe.d
define FOOBAR_INSTALL_TARGET_CMDS
install -d $(FOOBAR_CFG_DIR)
install -m 644 $(@D)/foobar.conf $(FOOBAR_CFG_DIR)
endef
$(eval $(kernel-module))
$(eval $(generic-package))
配置的最后两行表示使用的模板:
有了这两个模板,只需要一个简单的配置:

在编译过程中,内核源代码树KERDIR,交叉工具CROSS_COMPILE和平台ARCH均由buildroot处理;编译后,模块文件会自动安装在/ lib / modules对应的内核版本目录中,并且depmod缓存也会更新.
如果需要安装其他文件,例如在上面的/etc/modprobe.d目录中安装foobar.conf,则只需定义FOOBAR_INSTALL_TARGET_CMDS并添加相应的安装Shell命令即可添加其他安装命令.
此外,由于buildroot本身编译迅速且具有高度定制性,因此即使不用于构建整个系统,但作为交叉编译平台,编译一两个工具软件并执行它也非常方便. 在板上.
本文仅简要介绍了此示例,因为手动文档的详细信息以及buildroot本身的简单性和清晰度,buildroot的用户即使遇到问题也可以通过使用shell的经验快速入门. 和内核Kconfig,还可以快速定位并解决问题.
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-259173-1.html
这个人还是教授吗
果断要找一个会踢球的老公呀~
那蛆就绝对不会只“傻呼呼的”呆在一个“房子”里
股市跳水