buildroot官方教材4

本文介绍了Buildroot项目的组织结构,包括源码目录布局、工具链选择及配置等关键信息,并详细阐述了内部工具链与外部工具链的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

buildroot官方教材
buildroot官方的教程training

buildroot源码和组织树:

  • Makefile <顶层Makefile文件>
  • config.in <顶层的Config.in,包含了许多其它的Config.in文件>
  • arch/
    • Config.in.* <定义了架构变量,如处理器类型,ABI,浮点,等>
    • Config.in,Config.in.arm,Config.in.x86,Config.in.microblaze,等等。
  • toolchain/
    • 用来产生和使用工具链的包
    • toolchain/ <以来于toolchain-buildroot或toolchain-external的虚拟包>
    • toolchain-buildroot/ <构建内部工具链的虚拟包>
    • toolchain-external/ <处理外部工具链的包>
  • system/
    • skeleton/ <rootfs 骨架>
    • Config.in <系统级特性的选项,如初始化系统,/dev 处理,等>
  • linux/
  • package/
  • fs/
    • 产生不同格式的文件系统映像的逻辑代码
    • common.mk <通用逻辑代码>
    • cpio/,ext2/,squashfs/,tar/,ubifs/,等
  • boot/
    • bootloader包
    • at91bootstrap3/, barebox/, grub2/,syslinux/,uboot/,等
  • configs/
    • 不同硬件平台下的默认的配置文件
    • 与内核的defconfigs相似
    • atmel_xplained_defconfig,beaglebone_defconfig,raspberrypi_defconfig,等
  • board/
    • 特定板卡的文件(内核配置文件,内核补丁,映像烧写Flash的脚本,等)
    • 通常与configs/中的defconfig一起使用
  • support/
    • 其它工具 <kconfig代码,libtool补丁,下载的helpers,等>
  • utils/
    • 便利于Buildroot开发者的各种工具
    • brmake,都为make封装的形式,且带logging功能
    • get-developers <知道补丁应该发给谁>
    • test-pkg <验证包是否正确地构建了>
    • scanpipy,scancpan <生成Python/Perl包的.mk文件>
  • docs/
    • Buildroot文档
    • 可由make manual命令产生。
    • 也可通过https://buildroot.org/downloads/manual/manual.html获取

下面介绍一下构建的组织目录树(Build tree)

  1. output/ <总的生成文件夹,可以通过O=< dir >来自定义。BASE_DIR>
    • build/ <所有的源码压缩包都在这里解压;每一个包在这里构建;除了源码包和目标文件,Buildroot还创建了stamp文件。BUILD_DIR>
      • buildroot-config/
      • busybox-1.22.1/
      • host-pkgconf-0.8.9/
      • kmod-1.18/
      • build-time.log
    • host/ <包括为主机(交叉编译器等)和工具链的根文件系统构建的工具。根文件系统在host/< tuple >/sysroot/usr中,< tuple >为架构,开发商、操作系统、C库和ABI的标识(例如:arm-unknown-linux-gnueabihf)。HOST_DIR,根文件系统文件夹:STAGING_DIR>
      • lib
      • bin
      • sbin
      • < tuple >/sysroot/bin
      • < tuple >/sysroot/lib
      • < tuple >/sysroot/usr/lib
      • < tuple >/sysroot/usr/bin
    • staging/ <与根文件系统,比如host/< tuple >/sysroot的链接符号>
    • target/ <目标根文件系统;Linux层次;还缺少权限,设备文件等,不能直接用于目标硬件;用来生成最终的根文件系统映像:images/。TARGET_DIR>
      • bin/
      • etc/
      • -lib/
      • usr/bin/
      • usr/lib/
      • usr/share/
      • usr/sbin/
      • THIS_IS_NOT_YOUR_ROOT_FILESYSTEM
    • images/ <包括最终的映像文件:内核映像,bootloader映像,根文件系统映像。BINARIES_DIR>
      • zImage
      • armada-307-mirabox.dtb
      • rootfs.tar
      • rootfs.ubi
    • graphs/ < Buildroot操作的可视化:包之间的依赖关系,构建不同包的时间。由如下命令生成:make graph-depends make graph-build make graph-size。GRAPHS_DIR>
  2. legal-info/ <包的许可证(license),源码等;由make legal-info命令生成。LEGAL_INFO_DIR>
    • manifest.csv
    • host-manifest.csv
    • licenses.txt
    • licenses/
    • sources/

Buildroot的工具链
什么是交叉编译工具链?
3. 用来构建和调试目标硬件源码的一系列的工具。
交叉编译工具链
Buildroot为工具链提供了两种选择,称为工具链后台:

  1. 内部工具链,Buildroot完全从源码构建整个工具链。
  2. 外部工具链,Buildroot可以使用已经构建好的工具链。
    通过Toolchain -> Toolchain type来选择。

内部的工具链
提供了灵活的配置,如:

  • 内核头文件的版本;

  • C库,支持uClibc,(e)glibc和musl。

    • 其中glibc是标准的C库,>= 10MB。
    • uClibc-ng和musl,为较小的C库,uClibc-ng支持无MMU的架构,适用于非常小的系统(< 10MB)。
  • 大量的工具链的可选项:C++,LTO,OpenMP,libmudflap,graphite等。
    构建工具链大约需要15-20分钟的时间。

内部工具链生成的文件:

  • host/bin/< tuple >-< tool >中,交叉编译工具,包括:编译器,链接器,汇编器等,其中编译器隐藏在一个封装的程序中。
  • host/< tuple >/
    • sysroot/usr/include/ ,内核头文件和C库头文件。
    • sysroot/lib/和 sysroot/usr/lib/,C库和gcc运行环境。
    • include/c++/,C++库头文件。
    • lib/,gcc/binutils所需要的主机上的库。
  • target/
    • lib/和usr/lib/,C和C++库。
  • 编译器被配置为:硬件平台专用的;在根文件目录中查找库和头文件;不需要传递那些怪异的gcc的选项参数(flag)。

外部的工具链
Buildroot允许使用预构建好的工具链:

  1. 使用Buildroot已知的现有工具链配置文件(profile)
  2. 下载和安装自定义的外部工具链
  3. 直接使用预安装的自定义的外部工具链
    Buildroot已知的大量的公开发行的工具链可供选择,包括ARM(ARM和AArch64),Mentor Graphics(ARM,AArch64,MIPS,NIOS-II,x86-64),Imagination Technologies(MIPS),Synopsys(ARC)。
    选择以上的已知工具链时,Buildroot能够下载和自动使用这些工具链。
    也可以轻松地添加新的工具链配置文件(profile)。
    如果你使用的是自定义的工具链,则在Toolchain中选择Custom toolchain。
    也可以通过Toolchain origin中的Pre-installed toolchain选项选择预安装好的工具链。
    以上所有的情况,你都需要告诉Buildroot这些工具链的配置情况,包括:C库,内核头文件版本,等。

外部工具链的生成文件:

  • host/opt/ext-toolchain,原始的工具链压缩包解压的位置
  • host/bin/< tuple >-< tool >,交叉编译工具的符号链接。不过编译器指向了一个封装程序。
  • host/< tuple >/
    • sysroot/usr/include/ ,内核头文件和C库头文件。
    • sysroot/lib/和 sysroot/usr/lib/,C库和gcc运行环境。
    • include/c++/,C++库头文件。
  • target/
    • lib/和usr/lib/,C和C++库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值