Busybox,BuildRoot,Yocto有什么区别

当前有多种通用MPU芯片都可以运行Linux,也被作为芯片平台的系统软件“标配”。虽然都称为Linux系统,但应用开发者有时候发现自己的应用并不能直接使用,即便是同样的芯片平台,系统提供的基础或第三方的开发库版本也是有差别的。

这里有个概念要理解,Linux严谨解释属于操作系统的核心,也仅仅是实现了对芯片功能的管理,提供进程调度,内存管理,外设驱动操作和接口等核心必备的功能。要让各类应用都能通畅的运行在Linux核心下,还需要一些基础工具和基础库,才能让用户使用外设硬件功能,操作核心上的配置,实现自己需要的功能。

Linux上实现这类基础工具和基础库的软件,当年大部分都是从unix系统下移植过来,这么多年已经很完善了。但需要把这些软件组合在一起,也需要管理和构建工具。现在用的比较多的有三种

  • Busybox
  • BuildRoot
  • Yocto

Busybox是最早的实用工具和库的提供软件,通过它可以构建出符合Linux需要的RootFS文件系统结构。早期都是靠Busybox来手动或脚本方式来构建出基础可用的文件系统环境。

随便软件开发的需求提升,需要一款可以构建各类第三方的软件,最终打包为镜像的工具。BuildRoot实现了这些功能,同时提供了同Linux的kconfig配置工具,可以让开发者文本可视化的添加自己需要的工具到目标镜像内,极大的提供了系统构建效率。此时Busybox是作为内置的实用工具包提供给开发者使用,也有其他的实用工具包可以替代Busybox,一般还是会把Busybox添加到系统内。

对于公司产品开发,很多时候是同一个芯片平台开发多款产品。那么可以共享大量的软件包和构建方式,甚至可以定制一个属于特定产品的Linux分发版系统,这样多款产品的软件管理也更方便了。Yocto的目标是创建属于自己的发行版,相对于Buildroot来说,缺点是配置复杂度高,纯代码控制,没有简便的文本界面来选择软件包。优点是对软件包或镜像的操作颗粒度更小了,可以实现更多细致的定制需求。

对于应用开发者,建议使用基于Buildroot或Yocto系统的开发工具比较合适,下面举个例子,就能明白三种系统的差别。

举一个应用开发需求,使用Qt图形库和JSON开发库,实现一个Qt界面可以解析JSON数据的应用。要实现这个应用,首先要有目标平台的Qt和JSON开发库,其次编译器,调试器需要是交叉编译的版本。

Busybox只有基础的库,所以需要手动编译Qt和JSON,然后才能开始应用开发。

BuildRoot已经支持了这些库,直接选中后编译出来,最后可以生成SDK目录。SDK目录下,有包含Qt和JSON的开发库文件。

Yocto同样也支持了开发库,构建镜像后,可以构建出shell脚本的SDK安装包,应用开发者安装后,也可以直接开发应用,同样很方便。

现在还有一些开发板是安装Ubuntu系统,Ubuntu的运行和开发环境跟上面会有些区别,如果应用的依赖比较复杂,跟上面的并不能通用,一般更建议在Ubuntu x86下开发应用,开发后在ARM平台下重新编译即可。

相关新闻

联系我们

029-89197679

技术咨询:support@i2som.tech

商务合作:market@i2som.tech

工作时间:周一至周五,9:30-18:30,节假日休息