转自CSDN ,记录是为了作者小编学习需要

作者:xixihaha331

什么是buildroot

Buildroot是Linux平台上一个构建嵌入式Linux系统的框架。整个Buildroot是由Makefile脚本和Kconfig配置文件构成的。你可以和编译Linux内核一样,通过buildroot配置,menuconfig修改,编译出一个完整的可以直接烧写到机器上运行的Linux系统软件(包含boot、kernel、rootfs以及rootfs中的各种库和应用程序)。

buildroot目录结构

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

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

3.buildroot/dl存放下载的源码包及应用软件的压缩包

4.buildroot/fs放各种文件系统的源代码

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

6.buildroot/linux/ 存放着Linux kernel的自动构建脚本。

7.buildroot/configs放置开发板的一些配置参数。

8.buildroot/dl/目录存在从官网上下载的开源软件包,第一次下载后,下次就不会再去从官网下载了,而是从dl/目录下拿开源包,以节约时间。

9.buildroot/docs/ 存放相关的参考文档。

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

buildroot工作原理

Buildroot原则上是一个自动构建框架,虽然说u-boot、linux kernel这些经典的开源软件包的构建脚本,官方社区都在帮你实现了,但是有时候你还是需要加入你自己特有的app_pkg软件包,用以构建自己的应用。

Buildroot提供了函数框架和变量命令框架(下一篇文章将介绍细节),采用它的框架编写的app_pkg.mk这种Makefile格式的自动构建脚本,将被package/pkg-generic.mk 这个核心脚本展开填充到buildroot主目录下的Makefile中去。最后make all执行Buildroot主目录下的Makefile,生成你想要的image。

package/pkg-generic.mk中通过调用同目录下的pkg-download.mk、pkg-utils.mk文件,已经帮你自动实现了下载、解压、依赖包下载编译等一系列机械化的流程。你只要需要按照格式写Makefile脚app_pkg.mk,填充下载地址,链接依赖库的名字等一些特有的构建细节即可。

总而言之,Buildroot本身提供构建流程的框架,开发者按照格式写脚本,提供必要的构建细节,配置整个系统,最后自动构建出你的系统。

buildroot/packages里面有丰富的应用软件的配置文件,可以通过make menuconfig,出现图形化界面进行选择丰富的开源软件包的编译和构建。

在Buildroot论坛中,了解到关于STM32F4系列芯片运行Nuttx系统的相关介绍:

In case anyone is interested....

I modified buildroot to create a distribution for the STM32F4 processor. (It should be fairly portable to different Cortex-M processors though, the STM32F4 is the only one I've tested so far).

So far it:

Builds the toolchain

Builds a modified Nuttx RTOS

Builds the icsp tools for programming and debugging (openocd/gdb)

It also integrates the filesystem buildroot generates into the Nuttx kernel so it shows up in Nuttx's filesystem.

It still has a ways to go, but right now it builds everything and works on my hardware.

So far I've tested it on hardware I built, and on the STM32F407 discovery board with the attached baseboard.

You can find instructions here

http://www.vxmdesign.com/STM32.html

The git repo is

https://github.com/vxmdesign/prjpluto.git

and vdsc_defconfig is the config for the discovery board.

Happy programming!

-Chris

感谢完成阅读,我是喜欢打篮球的写代码的篮球球痴,这个是我的公众号,感谢你关注并支持。我从大学开始接触电子和嵌入式软件知识,至今,已经毕业工作了9年,我喜欢嵌入式,也愿意从事这个行业。不管是从技术还是职场经验,都积累了足够多的经验,目前在一个非常优秀的团队中做开发工作。

很高兴认识每一个对技术努力,对人用心的朋友。

初识Buildroot相关推荐

  1. 随便聊聊,Linux 中的环境变量

    大家好,今晚说点简单的. 环境变量 环境变量在进行linux开发过程中经常碰到,那什么是环境变量呢?很多朋友在刚学习Linux的时候对环境变量不是特别理解,变量不应该是在编程语言中类似于全局变量和局部 ...

  2. day3----编码-集合-深浅copy-文件操作-函数初识

    day3----编码-集合-深浅copy-文件操作-函数初识 本文档主要内容: 一 编码 二 集合 三 深浅copy 四 文件操作 五 函数初识 首先,我们来看看两个字符串的比较 打开cmd,进入do ...

  3. ⑥python模块初识、pyc和PyCodeObject

    一.模块初识(一) 模块,也叫库.库有标准库第三方库. 注意事项:文件名不能和导入的模块名相同 1. sys模块 import sys print(sys.path) #打印环境变量 print(sy ...

  4. 初识java类的接口实现

    初识java类的接口实现 如果两个类之间不存在继承关系,且两个类都想实现同一个接口,两个类都必须实现接口中全部方法,否则报语法错误 如果两个类之间存在继承关系也想实现同一个接口,父类如果实现了某个接口 ...

  5. vba 编辑combobox内容_初识Visual Basic编辑器并建立一段简单的代码

    大家好,从今日开始我正式推出"VBA之EXCEL应用"教程,这个教程是面向初学人员的教程,教程一共三册,十七个章节,从简单的录制宏实现一直讲到窗体的搭建,都是我们在利用EXCEL工 ...

  6. 16.1、python初识面向对象(1)

    初识面向对象 楔子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏,你就思考呀,人狗作战,那至少需要2个角色,一个是人, 一个是狗,且人和狗都有不同的技能,比如人 ...

  7. buildroot httpd php

    /********************************************************************* buildroot httpd php* 说明:* 在bu ...

  8. 精通Python网络爬虫:核心技术、框架与项目实战.1.1 初识网络爬虫

    摘要 网络爬虫也叫做网络机器人,可以代替人们自动地在互联网中进行数据信息的采集与整理.在大数据时代,信息的采集是一项重要的工作,如果单纯靠人力进行信息采集,不仅低效繁琐,搜集的成本也会提高.此时,我们 ...

  9. 初识mysql数据字段属性_MySQL数据库~~~~初识、基础数据类型

    一 数据库初识 1.1 什么是数据库 数据库(DataBase,简称DB),简而言之可视为电子化的文件柜----存储电子文件的处所,用户可以对文件中的数据运行新增,截取,更新,删除等操作. 所谓数据库 ...

最新文章

  1. Oracle Cloud Native Framework推出云原生解决方案
  2. 多线程方式实现Socket通信
  3. SAP FICO年结
  4. SQL注入法攻击一日通
  5. c++ map 多线程同时更新值 崩溃_深入理解并发安全的 sync.Map
  6. iOS开发内存管理总结
  7. python中的tkinter_基于python中tkinter的计算机实现
  8. 写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。
  9. mysql 存储过程 is_Mysql存储过程语法问题...
  10. JavaScript Tree 功能强大,包含checkbox,自动选择子节点和父节点.
  11. 利用Linux系统实现VLAN间的单臂路由及安全网关的功能
  12. win10删除开机密码_教你电脑如何设置开机密码_win10教程
  13. js基础知识汇总02
  14. 图像分割标注数据labelme解析时报错【Python已停止工作Windows正在检查该问题的解决方案...】【ValueError: Too many dimensions: 3 > 2】
  15. qq安全使用NTFS权限设置法
  16. 渗透测试(PenTest)基础指南
  17. mac chrome更新错误12
  18. 将一个3*3的矩阵转置,用一个实现。在主函数中用scanf函数输入以下矩阵元素
  19. 关于加密解密有哪些你需要知道知识?一篇文章告诉你
  20. 手机link.php,PHP中通过HTTP_USER_AGENT判断是否为手机移动终端的函数代码

热门文章

  1. 并发无锁队列学习(单生产者单消费者模型)
  2. tomcat jdbc SlowQueryReport的实现解读
  3. linux禁止ping
  4. 属性动画基础之ValueAnimator
  5. linux 开启防火墙的指定端口
  6. 关于××× 相关收集资料
  7. 真格量化——GFTD策略
  8. 《操作系统》OS学习(四):计算机体系结构、内存层次和地址生成
  9. Python第三方库的安装及路径查看总结
  10. 关于无法加载已创建的布局文件的问题的解决方案以及已布局在对应的R文件中未生成相应ID的问题的解决