前几天情绪有点低落,经过周末的调整重新恢复状态,谢谢有爱的朋友们留言和点赞,有你们的陪伴我会更加努力,让我们一起开心写程序.....

 

buildroot简介:

  引用官方的简述:

    Buildroot是一个简单,高效且易于使用的工具,用于生成嵌入式 Linux系统通过交叉编译。

  buildroot官方(git托管库):https://github.com/maximeh/buildroot.

 

buildroot相关结构:

  参考资料——WIKI:http://wiki.t-firefly.com/Firefly-PX3-SE/buildroot_introduction.html.

  buildroot/arch:目录存放CPU架构相关的配置脚本,如arm、mips、x86 ,这些CPU相关的配置,在制作工具链,编译boot和内核时很关键。  

  buildroot/docs:存放相关的参考文档(其中包括大量的参考资料和图标等)。

  buildroot/configs:放置开发板的一些配置参数(其中包括内核配置,root filesystem等)。

  buildroot/linux:存放着Linux kernel的自动构建脚本(其中包括Config.in,*.mk等)。

  buildroot/fs:放各种文件系统的源代码(其中包括jffs2,ext2等)。

  buildroot/fs/skeleton/skeleton:放生成文件系统镜像的地方,及板子里面的系统。

  buildroot/dl:存放下载的源码包及应用软件的压缩包(一般情况下,开发商把dl目录移植到与buildroot同级或与linux内核同级目录)。

  buildroot/output:是编译出来的输出文件夹,里面的build/目录存放着解压后的各种软件包编译完后的现场。host/目录放着制作好的编译工具链,target/ 目录是用来制作rootfs的,里面放着Linux系统基本的目录结构,以及各种编译好的应用库和bin可执行文件。Images/目录下就是最终生成的可烧写到板子上的各种image。

  buildroot/package:下面放着应用软件的配置文件,每个应用软件的配置文件有Config.in和soft_name.mk其中soft_name.mk(这种其实就Makefile脚本的自动构建脚本)文件可以去下载应用软件的包。

  简单概要:

     开发商会根据实际的产品情况对上述目录进行调整(比如移动到与kernel同级或更外层),buildroot在实际项目中负责文件系统的编译,最后结合相关定制产品(比如后台程序,ui,emmc,.dtb等)一起打包成.img文件。

 

回归正题(buildroot自带程序(库)编译并安装):

  本篇采用"poco"库程序作为示例,描述程序的位置添加,增加编译及下载选项等.

  示例采用的是定制产品与实际位置可能有所不同,参考增加方法即可。

  1. 增加程序:

     首先进入buildroot/package文件夹,创建poco文件夹并放入所有文件,下载地址(根据实际需要,下载指定版本)https://github.com/maximeh/buildroot/tree/47cc1600a0653f30a52b37b65ae846ba99ca50bb/package/poco.

     如果package文件夹内已经存在poco文件夹,只需要替换"poco.hash"与"poco.mk"即可(我这么替换下载以及安装成功了,如果不可以再替换所有文件)。

 

2. 检查程序目录是否指定:

    打开buildroot/package/Config.in文件,这里用来配置package指定工具(应用)的Config.in方式;

    搜索"poco" 如果找到source "package/poco/Config.in",把#去掉,如果没有找到可以这样增加:

      menu " poco "      # 引号内的信息可以任意添加,保证不与文件中相同即可
          source "package/poco/Config.in"
      endmenu

3.  打开(增加)程序编译选项:

    打开toolchain/configs/config.***.demo.bak(实际项目可能以*_defconfig命名配置文件或者存放在buildroot/configs文件夹下(一般不会在这里修改),或者在buildroot/package/*.mk内配置,这里只能参考增加配置),并增加:

       BR2_PACKAGE_POCO=y
       BR2_PACKAGE_POCO_XML=y
       BR2_PACKAGE_POCO_UTIL=y
       BR2_PACKAGE_POCO_NET=y
       BR2_PACKAGE_POCO_CRYPTO=y
       BR2_PACKAGE_POCO_NETSSL_OPENSSL=y
       BR2_PACKAGE_POCO_ZIP=y
       BR2_PACKAGE_POCO_DATA=y
       BR2_PACKAGE_POCO_DATA_SQLITE=y
       BR2_PACKAGE_POCO_DATA_MYSQL=y

这里只有"BR2_PACKAGE_POCO=y"属于必增项,下面的几个可以根据功能需要进行指定(用不到的不用增加)。

上面的选项可以参考buildroot/package/poco/Config.in文件。

 

增加完成后,进行编译,在buildroot***/output***/target/usr/lib路径下找到"libPoco***.so"表示编译成功。