一 让带操作系统的嵌入式软件开发流程变得简单
通常情况下带操作系统的嵌入式软件系统由bootloader(u-boot),内核(Linux),文件系统组成。
对于bootloader和内核。嵌入式最大的特点之一就是平台比较多,各种架构的cpu(arm x86 mips.......)。对于不同的cpu架构有不同的交叉编译器。另外,就算cpu定下来,还可以有不同的外设。
对于文件系统灵活性更强,首先文件系统有jffs2,yaffs2,logfs,ubifs......,产生不同的文件系统需要用不同的工具,还有不同的参数配置。另外,对于做出来的文件系统可能又不同的需求,有的是音视频方案,有的是考勤机方案,有的是行车记录仪方案.....这个时候对借助busybox做出来的文件系统功能又有了不同的需求。这个时候的做不同版本的文件系统,哪个版本有什么应用,有什么库,有哪些启动参数,配置参数。
一个两个项目可能没有多大关系,假设你是芯片厂商,要把芯片卖给不同的产品客户并给他们提供方案,此时,是不是要崩溃了。
此时,就有一个需求。在PC上能否有个管理软件,对不同平台,不同需求的bootloader,内核,文件系统进行管理。程序员存在的使命就是让事情变得简单。其实国外的大牛们早已做了这件事请。一个神奇的软件工具诞生了-----builtroot(当然还有其他类似工具)
二 初次尝试Builtroot的甜头(Buildroot - Making Embedded Linux Easy)
打开https://buildroot.org/ builtroot的官网。就可以看到builtroot的广告词::Buildroot - Making Embedded Linux Easy(是不是特步的广告词就是在这产生的灵感?>_<)。其中有个很醒目的Button叫DOWNLOAD,点一下,完事之后就能得到一个类似叫buildroot-2016.08.tar.bz2或者buildroot-2016.08.tar.gz的东西。是他,是他,就是他。我们的主角闪亮登场了。先把他解压 到你认为比较合适的地方。
大概先瞄一眼这东西里面到底有什么:
我的妈呀,这么多文件夹,文件夹下面还有文件夹,蒙了不干了。不能这样干,没有苦哪来甜(有点类似追女孩,第一次一看这女的脾气太大,还是算了,那她永远成不了你太太........)。还得往下走,啃,啃。
在此应该介绍一下目录结构及其存放的是什么东西。介绍了会更蒙,这些文件都是满足实现自动配置功能产生的, 是被动产生的。不如先放一放,后续在详细介绍。在解压的buildroot-2016.08目录下面make menuconfig(跟linux内核差不多,Linux 的内核很多机制还是很极致,现在最新的U-Boot也开始模仿kernel 的配置方法make menuconfig)一下。在Linux kernel 目录下使用make menuconfig的过程是读取.config文件然后图形展示的过程。更改之后把相应的修改存入.config文件的过程。
结果如下图:
经常做Linux内核开发的小伙伴是不是好像看到了自己多年的老情人,很亲切。
先简单的介绍一下老朋友(LInux 的make menuconfig)的朋友。通过make menuconfig跳出来的界面就是我们日后管理我们配置的接口。
在Linux源码./arch/体系结构/configs的目录下 存放这已经保存的.config。原理就是将配置好的内核.config 重命名保存在了此文件夹下面(比如经典的三星2410配置 arch/arm/configs/s3c2410_defconfig)。在 Kernel根目录下可以通过“make 某配置”来选择当前项目,比如make s3c2410_defconfig。原理就是把arch/arm/configs/s3c2410_defconfig文件复制一份覆盖.config;builtroot也是使用的这种原理,它把配置文件放在了buildroot-2016.08/configs下面。有些厂商把自己的配置提交给了builtroot工程师,从而提高自己品牌的知名度。比如
如飞思卡尔 还有瑞芯微rk3288(firefly厂商二次开发)等等。
就拿firefly_rk3288_demo_defconfig为例,切换到buildroot-2016.08/ 根目录下,敲命令“make firefly_rk3288_demo_defconfig” 。此时make menuconfig 就可以看到基于firefly_rk3288_demo_defconfig配置的参数。具体配置下节在分析。
三 使用现成的配置体验一把
执行命令make ,可能需要几个小时。如果顺利的话可以在output/images目录下看到最终的果实
其中:
u-boot-spl-dtb.bin uboot可执行文件
uImage Linux 内核镜像
rootfs.ext2 ext2的文件系统
其他目录还有下载好的uboot,linux源代码,busybox。。。。。
哈哈,嵌入式软件相关的东西全在这里