buildroot 交叉编译
最后更新于:2022-04-02 03:07:46
[TOC]
> [home](https://buildroot.org/download.html)
> [github](https://github.com/buildroot/buildroot)
## 概述
Buildroot是Linux平台上一个开源的嵌入式Linux系统自动构建框架。
可用于 C++,CGO 等的交叉编译
## buildroot目录结构
```
arch: CPU架构相关的配置脚本
board: 在构建系统时,board默认的boot和Linux kernel配置文件,以及一些板级相关脚本
boot: uboot配置脚本目录
configs: 板级配置文件,该目录下的配置文件记录着该机器平台或者方案使用的工具链,boot, kernel,各种应用软件包的配置
dl: download的简写,下载一些开源包。第一次下载后,下次就不会再去从官网下载了,而是从dl/目录下拿开源包,以节约时间
docs: 文档
fs: 各种文件系统的自动构建脚本
linux: 存放Linux kernel的自动构建脚本
package: 第三方开源包的自动编译构建脚本,用来配置编译dl目录下载的开源包
support:
system: 存放文件系统目录的和设备节点的模板,这些模板会被拷贝到output/目录下,用于制作根文件系统rootfs
toolchain: 目录中存放着各种制作工具链的脚本
output:
images/存储所有映像(内核映像,引导加载程序和根文件系统映像)的位置。这些是您需要放在目标系统上的文件。
build/构建所有组件的位置(包括主机上Buildroot所需的工具和针对目标编译的软件包)。该目录为每个组件包含一个子目录。
host/包含为主机构建的工具和目标工具链。
staging/是到内部目标工具链host/的符号链接
target/它几乎包含了目标的完整根文件系统。除了设备文件/dev/(Buildroot无法创建它们,因为Buildroot不能以root身份运行并且不想以root身份运行)之外,所需的一切都存在。
```
## buildroot常用make命令
```
make menuconfig:进行图形化配置
make:编译
make clean:清除编译缓存
make distclean: 等于make clean+删除配置
show-targets:显示出本次配置所要编译所有的目标
pkg-target:单独编译某个pkg模块
pkg-rebuild:重新编译pkg
pkg-extract:只下载解压pkg,不编译,pkg解压后放在 output/build/对应的pkg-dir目录下
pkg-source:只下载某pkg,然后不做任何事情
```
## 常用配置
### target options
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/df/09/df09ea33669d577b90ee769140e584de_535x348.png)
### Toolchain
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/3e/90/3e90732294ff830fc53390d456d7b6d0_455x240.png)
选择外部的交叉编译器,以及选择你的版本。
### System configuration
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/08/e9/08e928a6db045747711b9893161b4df3_524x246.png)
文件系统标志以及root登录密码以及相关一些配置。
### Target packages
提供很多服务以及软件以及库,如 mysql ,python,vim , git
## 快速入门
0. 安装依赖
```
sudo apt-get install libncurses5-dev
```
1. 启动图形选项界面
```
cd buildroot/
make menuconfig
```
2. 查看目标机的查看
```
> readelf -a /bin/echo
ISA: MIPS64r2
GPR size: 64
CPR1 size: 64
CPR2 size: 0
FP ABI: 硬浮点 (单精度)
ISA Extension: 无
ASEs:
```
2. 设置需要编译的目标linux
```
Target options -> Target Architecture
Target options -> Target Architecture Variant
Target options -> Target ABI (一般为 n64)
Target options -> Use soft-float
```
3. 编译
```
make
```
';