zoukankan      html  css  js  c++  java
  • buildroot

    http://buildroot.uclibc.org/downloads/snapshots/buildroot-snapshot.tar.bz2

    简介

    buildroot是一个Makefiles和patches的命令集,它可以非常简单的为你的目标系统产生一个交叉编译工具链和根文件系统。除了buildroot本身外,它还可以用来配置编译linux, busybox, u-boot以及uClibc库。(uclibc库比GNU libc库小,适合于嵌入式系统)

    buildroot拥有内嵌的编译工具链,也可以通过配置指定外部的编译工具链。通过指定linux的源码路径和内核配置选项,调用交叉编译器编译内核镜像(可以指定内核镜像的存放路径、文件名、压缩格式等);同时,编译busybox用来生成根文件系统,可以指定根文件系统的格式(cramfs/squashfs/ubifs/jffs2/ext2等)和压缩格式(gzip/bzip2/lzma等),最后生成rootfs.tar文件。

    编译

    make menuconfig 配置buildroot以及其他组建的配置选项,在根目录生成.config配置文件

    make 编译

    make BR2_JLEVEL=N 编译每个单独的package时启用多线程编译 (不能用make -jN命令)

    编译生成的文件位于output目录下,其中output/images目录存放最终的镜像文件,比如内核镜像、bootloader镜像以及根文件系统镜像等;output/build目录是编译目录; output/staging目录包含了根文件系统的层次结构,但是它不是真正的根文件系统;output/target目录存放了几乎完整的根文件系统文件,除了/dev下的设备节点,同时也没有正确的读写权限,真正的根文件系统镜像位于output/images下; output/host下包含了主机需要的工具。

     常用命令

    make help 查看帮助信息

    make show-targets 查看全部编译目标

    make V=1 <target> 显示编译时执行的所有命令

    make <pkg-target> 编译指定目标

    make <pkg-target>-rebuild 重新编译指定目标

    make O=/tmp/build 指定输出目录

    make UCLIBC_CONFIG_FILE=/my/uClibc.config 指定uClibc配置

    make BUSYBOX_CONFIG_FILE=/my/busybox.config 指定busybox配置

    make list-defconfigs 显示拥有默认配置的单板列表

    make busybox-menuconfig

    make linux-menuconfig

    make uclibc-menuconfig

    make barebox-menuconfig

    make uboot-menuconfig

    make clean

    make distclean 同时清除配置文件

    make clean all 完整的重新编译

    生成帮助手册,当前在docs/manual下,编译生成的在output/dosc/manual下

    make manual-clean

    make manual

    make -s printvars 显示内部编译变量

    make graph-depends 图形化查看依赖关系

    make <pkg>-graph-depends 查看某个package的依赖关系

    init进程

    init进程是内核加载的第一个用户空间的进程,PID为1,负责加载用户空间的服务和程序。Buildroot提供了三种init的解决方案:

    1) Busybox 使能BR2_INIT_BUSYBOX选项,启动时读取/etc/inittab(默认inittab文件位于buildroot/system/skeleton/etc/inittab),inittab除了做一些简单的任务和文件系统挂载之外,还负责加载/etc/init.d/rcS脚本(主要的任务都在该脚本中实现),此外,还负责加载getty程序(提供login功能)

    Busybox

    通过设置BR2_PACKAGE_BUSYBOX_CONFIG可以指定busybox配置文件(在busybox源码包下通过make menuconfig可以生成自定义配置文件,也可以在buildroot根目录执行make busybox-menuconfig命令创建配置文件)

    uClibc

    同busybox配置一样,也可以通过BR2_UCLIBC_CONFIG指定uClibc配置,或者通过make uclibc-menuconfig生成

    Linux Kernel

    通过BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG指定默认内核配置文件,可以通过在buildroot根目录执行make linux-menuconfig命令或者在linux内核源码根目录执行make menuconfig生成配置文件

    U-Boot

    通过BR2_TARGET_UBOOT_USE_CUSTOM_CONFIG指定uboot默认配置文件,在buildroot根目录执行make uboot-menuconfig或者在uboot源码根目录执行make menuconfig生成配置文件

    Package

    make <package>-<target>

     Buildroot对单个package的处理过程通常包括:下载tarball,解压,配置,编译,安装。源码解压到output/build/<package>-<version>目录,这是个临时目录,当执行make clean命令时,该目录会被删除,下一次执行make时重新创建。

    但是,如果我们希望自己指定源代码,比如内核源码,上述方式就不适用,因为我们无法实现代码的修改和修改记录的保存。针对这种情况,buildroot给我们提供了<pkg>_OVERRIDE_SRCDIR机制,buildroot首先读取override文件,如果用户指定了特定package的代码路径,就不去执行下载tarball和解压的操作。该override文件默认为buildroot根目录的local.mk文件,也可以通过BR2_PACKAGE_OVERRIDE_FILE指定override文件。

    在override文件中,buildroot希望找到如下的行:

    <pkg1>_OVERRIDE_SRCDIR = /path/to/pkg1/sources
    <pkg2>_OVERRIDE_SRCDIR = /path/to/pkg2/sources

    比如

    LINUX_OVERRIDE_SRCDIR=/home/bob/linux/

    BUSYBOX_OVERRIDE_SRCDIR=/home/bob/busybox/

    编译的时候,buildroot会用rsync命令从<pkg>_OVERRIDE_SRCDIR目录拷贝源码到output/build/<package>-custom目录,可以使用make <pkg>-rebuild和make <pkg>-reconfigure命令,或者make <pkg>-rebuild all。

    根文件系统定制

    buildroot最常用的功能是创建根文件系统,所以重点记录根文件系统的定制,包括:

    1) 添加或者覆盖文件(BR2_ROOTFS_OVERLAY)

    2) 修改或者删除文件(BR2_ROOTFS_POST_BUILD_SCRIPT)

    3) 在创建根文件系统之前执行特定的命令(BR2_ROOTFS_POST_BUILD_SCRIPT)

    4) 设置权限和属组关系(BR2_ROOTFS_DEVICE_TABLE)

    5) 添加指定的设备节点(BR2_ROOTFS_STATIC_DEVICE_TABLE)

    6) 添加用户账户(BR2_ROOTFS_USERS_TABLES)

    7) 生成文件系统之后执行特定的命令(BR2_ROOTFS_POST_IMAGE_SCRIPT)

    8) 给指定的package打补丁(BR2_GLOBAL_PATCH_DIR)

    9) 添加工程指定的packages

  • 相关阅读:
    spring事务详解(一)初探讨
    spring事务详解(二)实例
    mysql删除重复数据只保留一条
    jdk1.8源码Synchronized及其实现原理
    jdk1.8源码Thread与Runnable区别
    动态创建类并添加属性赋值
    c# 当代热门技术
    c# 开源框架
    极限并发带来的思考(12306 抢票)
    ASP.NET Core 使用外部登陆提供程序登陆的流程,以及身份认证的流程 (Challenge)
  • 原文地址:https://www.cnblogs.com/justin-y-lin/p/9166853.html
Copyright © 2011-2022 走看看