关于buildroot移植的思考

buildroot是一个成熟的SDK框架,基于它有了openwrt。linux

 

曾经有一个项目,须要将原有的OpenWrt SDK改造,而且将软件框架从新定义。尝试精简原来的OpenWrt,而且删除全部的软件包,留下rootfs、busybox这些基本的东西,可是仍是有不少地方不如人意,难以修改(定制的过于深刻)。因而找到它的前身,buildroot,进行修改。架构

 

拿到buildroot后。发现和OpenWrt的一大区别就是耦合性低。在OpenWrt里面一些自动编译的操做,须要在buildroot里面手动编译。好比make busybox-rebuild。对于linux内核来讲,在make linux-menuconfig以后,须要将.config手动拷贝回来,而不是自动同步。虽然麻烦一点,可是我以为这样是一个比较好的作法,毕竟以前作OpenWrt的时候发现整个流程太过于自动化,修改个内核配置以后一串内核的配置文件被修改合并而让人摸不着头脑。框架

 

另外,将OpenWrt的SDK移植到buildroot也是使人愉快的,拷贝toolchain,busybox和内核,再花功夫研究文件系统image的生成,写一个post-build脚本,配置CPU架构等一些参数,image就能够下载运行了。固然须要根据本身的需求精简、修改一些东西。好比你想把平台有关的东西塞到一些文件夹里面,再添加一些文件夹做为其余平台的根文件夹,多个-平台存在于同一份SDK里面,这样都是能够的。不过修改的时候不要定制过分,把一些之后有用的东西给删了,到最后要用的时候仍是要改回来。固然了,只要你有toolchain、内核和文件系统layout就能够作移植了,不必定要给出很好的原版SDK。post

 

buildroot的定制是比较便捷快速的,好比你移动一些文件夹,像fs,arch这些,只须要修改Config.in和makefile就能够了。由于它耦合性程度低的优势,修改起来较为容易,不会出现牵一发而动全身的现象,因此本身修改的时候也不要增长太多的关联,给后续的维护带来麻烦。学习

 

buildroot的框架比较清晰。首先它软件包的定义和OpenWrt相似,不含有其余的冗余成分,作SDK该作的事,规定软件到哪里编译,传递哪些编译选项,安装到哪里。对于每个组件,即便是toolchain也是一个软件包,这样一来,只须要修改Config.in和相关的makefile就能够定义本身想要的东西。若是你还不明白,buildroot提供了一个pdf说明文档,仔细看一遍再继续研究。而OpenWrt的文档大而全,这是不可避免的,由于二者的定位不一样。ui

 

buildroot可让人更加清晰地学习linux。学习linux的编译运行流程,buildroot比当前热门的OpenWrt好得多。OpenWrt这个发行版定制了不少东西,你一个make就完成的事情,可能浑然不知里面发生了什么。当你拿到buildroot,即便是别人作好的,只要你仔细看一下里面的流程就会明白一个linux是怎么生成的,由于它的框架比较简单。固然buildroot也是一个大而全的东西,由于它是一个开源的软件,它支持不少体系结构,能够适当按照本身须要精简。若纯粹本身用,不精简也不要紧。lua

 

buildroot没有暗示你使用什么。对于OpenWrt来讲,使用了uhttpd,你可能就须要libubox和luci,lua这一堆东西,若是你不用这些,你使用OpenWrt可能就意义不大了。而使用了buildroot,你会选择本身要用什么,从busybox开始逐渐搭建你本身的王国。固然了你也可使用uhttpd这一堆东西。ci

相关文章
相关标签/搜索