添加包:ffmpeg python git make cvs check tree yasm nfs kmod watchdog qemu dhcped
https://buildroot.org/downloads/manual/manual.html
Buildroot 是 Linux 平台上一个开源的嵌入式 Linux 系统自动构建框架。
Buildroot
arch/ 目录存放CPU架构相关的配置脚本,如arm/mips/x86 ,这些CPU相关的配置,在制作工具链,编译boot和内核时很关键。
board/ 目录存放各种board 特有的一些配置脚本,在构建系统时,board默认的boot和Linux kernel配置文件,以及一些板相关特殊构建流程的脚本,都在该目录下,等待自动构建时调用。
boot/ 目录存在各种boot软件的自动构建脚本,不只是u-boot,还有grub等,也可以通过Buildroot来构建。
configs/ 目录存放这每种方案上层的全局配置文件,之前的make mini2440_defconfig实际上就是调用了该目录下的mini2440方案的配置。该目录下的配置文件记录着该机器平台或者方案使用的工具栏,boot, kernel,各种应用软件包的配置和是否编译选择的状态,之前所说的某个特殊开发板整个系统的配置文件,就在configs/目录下。
dl/ 目录存在从官网上下载的开源软件包,第一次下载后,下次就不会再去从官网下载了,而是从dl/目录下拿开源包,以节约时间。
docs/ 存放相关的参考文档。
fs/ 存放着各种文件系统的自动构建脚本。
linux/ 存放着Linux kernel的自动构建脚本。
output/ 是编译出来的输出文件夹,里面的build/目录存放着解压后的各种软件包编译完后的现场。host/目录放着制作好的编译工具链,target/ 目录是用来制作rootfs的,里面放着Linux系统基本的目录结构,以及各种编译好的应用库和bin可执行文件。Images/目录下就是最终生成的可烧写到板子上的各种mage。
package/ 目录存放着各种第三方开源应用软件包的自动编译构建脚本,这些构建脚本一般都是经过测试,能够构建出相应的软件包的。
support/ 目录存放着一些固定的流程脚本,以备构建时调用执行。
system/ 目录存放着文件系统目录的和设备节点的模板,这些模板会被拷贝到 output/ 目录下,用于制作根文件系统rootfs。
toolchain/ 目录中存放着各种制作工具链的脚本,buildroot可以选择从0开始,用gcc和linux 内核,glibc、uclibc库等原材料制作一个自己工具链,也可以下载第三方制作好的开源工具。
Config.in: menuconfig中需要显示的数据格式存在该文件中。
**.config:**编译时需要调用的选项配置文件。
buildroot用户指南
搜索指令在menuconfig中按/;在xconfig按+
make distclean 清楚所有配置信息和构建信息
6.1 Cross-compilation toolchain
工具链:工具+链
Internal toolchain backend
交叉编译工具链 目标嵌入式系统的应用程序和库;
该后端支持多个 C 库:uClibc-ng、glibc 和 musl。
External toolchain backend
允许使用现有的预构建 交叉编译工具链;
可通过Internal toolchain backend 的make sdk指令,通过External toolchain backend调用自定义工具链。
相对于internal toolchain,external toolchain有如下优点:
a.省去编译toolchain的时间,加快编译速度
b.避免编译工具链时出错
c.可以同时保存多个不同的工具链,根据实际情况进行构建不同的固件或者多个项目共用一套toolchain而不在需要重新编译
6.2 /dev管理
Static using device table
老版本kernel使用。设备文件被持久地存储在根文件系统中(也就是说,它们在重新引导后也一直存在),并且当硬件设备被添加或从系统中删除时,没有任何东西会自动创建和删除这些设备文件。
Dynamic using devtmpfs only
基于虚拟根文件系统 需要是能CONFIG_DEVTMPFS和CONFIG_DEVTMPFS_MOUNT 但是没搜到在哪 ,buildroot会保证它被使能,如果内核在buildroot外部的话需要自己使能。可以自动识别设备的添加和删除。
Dynamic using devtmpfs + mdev
类似于上面,但是增加了mdev用户空间,Mdev可用于在系统上出现设备时自动加载内核模块。如果您的设备需要固件,那么Mdev也很重要,因为它将负责将固件内容推送到内核。
Dynamic using devtmpfs + eudev
类似于上面,但是比mdev更重量化,并且功能更多。
6.3 init system
init程序是内核启动的第一个用户空间程序(其PID号为1),负责启动用户空间服务和程序(例如:web服务器、图形应用程序、其他网络服务器等)。
BusyBox:默认初始化系统
systemV:在桌面化系统中
systemd:存在于较为复杂的系统
7.Configuration of other components
关于以下组件的配置:
BusyBox
uClibc
Linux kernel
Barebox
U-Boot
8.General Buildroot usage
8.1make tips
清理:当任何体系结构或工具链配置选项发生更改时,需要显式清理。删除所有构建产品(包括构建目录、主机、暂存和目标树、映像和工具链)。及清除/output下的所有文件
make clean
重置新目标的构建根:删除所有构建产品以及配置:
make distclean
8.2. Understanding when a full rebuild is necessary
8.3. Understanding how to rebuild packages
最简单的方式是:
sudo make <package>-dirclean //删除包
sudo make //使用 make rebuild 或者make reconfigure并不会改变根文件系统中的镜像。
8.4. Offline builds
8.4. Offline builds
8.5. Building out-of-tree 可以指定文件的输出路径。
8.6. Environment variables
8.7. Dealing efficiently with filesystem images
在编译主机上可以使用稀疏文件传输以及压缩指令,但是在目标机上不行。
8.8. Details about packages
为了帮助理解依赖关系,从而更好地理解嵌入式Linux系统中不同组件的角色,builroot能够生成依赖关系图。
8.9. Graphing the dependencies between packages
当系统的构建需要很长时间时,了解哪些包的构建时间最长,看看是否可以做些什么来加快构建速度,有时是有用的。
8.10. Graphing the build duration
8.11. Graphing the filesystem size contribution of packages
8.12. Top-level parallel build
8.13. Advanced usage
8.13.1. Using the generated toolchain outside Buildroot
8.13.2. Using gdb
in Buildroot
8.13.3. Using ccache
in Buildroot
8.13.4. Location of downloaded packages
8.13.5. Package-specific make targets
8.13.6. Using Buildroot during development
常用指令
Cleaning: - 清理
make clean - 删除编译产生的文件
make distclean - 删除所有非源码文件—(包括.config)
Build: - 编译
make all - 编译所有
make toolchain - 编译工具链
make sdk - 编译sdk(Software Development Kit)
Configuration: - 配置
make menuconfig - 基于curses的buildroot配置界面(常用)
make nconfig - 基于ncursesbuildroot配置界面
make xconfig - 基于Qt的buildroot配置界面
make gconfig - 基于GTK的buildroot配置界面
make oldconfig - 解决所有.config中未解决的符号问题(symbols)
make syncconfig - 和oldconfig类似,但会额外更新依赖
make olddefconfig - 和syncconfig类似,但会将新的symbols设为默认值
make randconfig - 所有选项随机配置
make defconfig - 所有选项都询问,如果设置有BR2_DEFCONFIG,则使用它的配置
make savedefconfig - 把当前配置保存到BR2_DEFCONFIG
make update-defconfig - 类似savedefconfig
make allyesconfig - 所有配置选项都选择yes
make allnoconfig - 所有配置选项都选择no
make alldefconfig - 所有配置选项都选择default
make randpackageconfig - 软件包选项都选择随机
make allyespackageconfig - 软件包选项都选择yes
make allnopackageconfig - 软件包选项都选择no
Package-specific: - 具体的包操作
make <pkg> - 编译、安装该pkg以及其依赖
make <pkg>-source - 下载该pkg所有文件
make <pkg>-extract - 解压该pkg(解压后放在output/build/pkg名字目录下)
make <pkg>-patch - 给该pkg打补丁
make <pkg>-depends - 编译pkg的依赖
make <pkg>-configure - 编译pkg到配置这一步
make <pkg>-build - 编译pkg到构造这一步
make <pkg>-show-depends - 显示该pkg的所有依赖
make <pkg>-show-rdepends - 显示依赖该pkg的所有包
make <pkg>-show-recursive-depends - 递归显示该pkg的所有依赖
make <pkg>-show-recursive-rdepends - 递归显示依赖该pkg的所有包
make <pkg>-graph-depends - 图形化显示该pkg的所有依赖
make <pkg>-graph-rdepends - 图形化显示依赖该pkg的所有包
make <pkg>-dirclean - 清除该pkg目录(清除解压目录output/build/pkg名字)
make <pkg>-reconfigure - 从配置这一步开始重新编译pkg
make <pkg>-rebuild - 从构造这一步开始重新编译pkg
busybox: - busybox相关
make busybox-menuconfig - 配置busybox界面
uclibc: - uclibc相关
make uclibc-menuconfig - 配置uclibc界面
linux: - linux相关
make linux-menuconfig - 配置linux内核界面
make linux-savedefconfig - 保存linux内核配置
make linux-update-defconfig - 保存配置到BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE指定路径
Documentation: - 文档
make manual - 生成各种格式的帮助手册
make manual-html - 生成HTML格式的帮助手册
make manual-split-html - 生成split HTML格式的帮助手册
make manual-pdf - 生成PDF格式的帮助手册
make manual-text - 生成text格式的帮助手册
make manual-epub - 生成ePub格式的帮助手册
make graph-build - 生成图形化查看编译时间文件
make graph-depends - 生成图形化查看所有依赖文件
make graph-size - 生成图形化查看文件系统大小文件
make list-defconfigs - 显示拥有的默认配置的单板列表
Miscellaneous: - 杂项
make source - 下载所有要离线编译的源码到dl路径
make external-deps - 列出使用的所有外部包(make show-targets的详细版)
make legal-info - 显示所有包的license合规性
make printvars - 打印所有内部指定的变量值
make V=0|1 - 设置编译打印信息(0:安装编译 1:打印编译信息)
make O=dir - 指定所有文件(包括.config)输出目录
make xxx_defconfig - 将对应的默认配置导入