buildroot制作 stm32mp157根文件系统,交叉编译工具链,内核及uboot

1、 开发环境:ubuntu 18.04 buildroot-2020.02.7.tar

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

## 2、下载buildroot

直接从官网下载最新的源码包:http://buildroot.net/downloads/

3、安装依赖库、软件包
(http://buildroot.net/downloads/manual/manual.html#requirement-mandatory)

which
sed
make (version 3.81 or any later)
binutils
build-essential (only for Debian based systems)
gcc (version 4.8 or any later)
g++ (version 4.8 or any later)
bash
patch
gzip
bzip2
perl (version 5.8.7 or any later)
tar
cpio
unzip
rsync
file (must be in /usr/bin/file)
bc
Source fetching tools:
wget
python
ncurses5
4、解压buildroot压缩包
5、 进入源码目录,ls configs/
挑选一个与你板子最相近的配置
6、make stm32mp157c_dk2_defconfig
7、make menuconfig配置

在这里插入图片描述
Target Architecture —> 用于选择目标的架构,这里自动选择ARM (little endian)
arget Architecture Variant —> 内核类型(cortex-A7)
Target ABI (如图) —> 目标使用的应用程序二进制接口,其中有两个选择

Build options —> 主要是一些编译时用到的选项,比如dl的路径,下载代码包使用的路径,同时运行多个编译的上限,是否使能编译器缓冲区等等,这里按照默认就行了.
在这里插入图片描述
工具链选项在这里插入图片描述
系统的一些配置,基本不需要修改,默认即可在这里插入图片描述
需不需要让他生成内核(注意:这地方生成的是zImage,zImage和uImage区别,请看附件一)
在这里插入图片描述
按自己需求增加或裁剪Target packages,里面包含了一大堆第三方的开源工具和库,包括常用的busybox的选用、音频、网络等。一切都是按自己需求来配置。
在许多程序中,BusyBox具有基本init程序的实现,这对于大多数嵌入式系统来说已经足够了。启用BR2_INIT_BUSYBOX将确保BusyBox将构建和安装其init程序。这是Buildroot中的默认解决方案。BusyBox init程序将/etc/inittab在启动时读取文件以了解如何操作。
在这里插入图片描述

Filesystem images —> 默认
在这里插入图片描述

Bootloaders —> u-boot
在这里插入图片描述

Host utilities —> 默认
在这里插入图片描述

Legacy config options 默认

6、保存退出,生成.config 文件
7、编译
make

使用make命令之后会执行下面几个步骤:
     ①下载源文件(所要求的)
     ②配置,编译和安装cross-compiling toolchain(如果使用内部工具链),或者输出一个toolchain(如果一个外部工具链使用)
     ③构建/安装杯选择的目标包
     ④构建内核镜像(如果有选择)
     ⑤构建启动代码镜像(如果有选择)
     ⑥创建根文件系统(如果有选择)

8、输出文件介绍
输出文件全部在output/目录下:

images/ — 存放编译后产生的所有镜像文件( 内核镜像 , 加载引导镜像 和 根文件系统镜像)
build/ — 存放所有的组件除了构建交叉编译工具链的组件 , 在这个目录里面每一个功能对应一个子目录存放他们各自的组件.
staging/ — 包含一个类似于根文件系统等级层次的层级 . 这个目录包含了 安装的交叉编译工具链 和 所有被选择用于目标板的所有用户空间包.
target/ — 包含了根文件系统,但不能用于你的开发板的
host/ — 包含了我们需要的交叉编译工具集

9、修改环境变量
vi ~/.bashrc (sudo)

export PATH=$PATH:/home/wu/tool_buildroot/buildroot-2020.02.7/output/host/usr/bin

source .bashrc
10、测试
终端直接 打 arm-
然后按两下Tab键,能自动补齐
或者是

arm-linux-gcc -v

出现,说明成功在这里插入图片描述

完结:
注意,buildroot编译效率很低,一次编译完成后,如果你想修改某些东西,则必须重新全部编译!!也即先make clean 再 make。

附件一:区别
内核EIF文件;嵌入式系统部署时烧录的一般不是这个vmlinuz/vmlinux,而是要用 objcopy 工具去制作成烧录镜像格式,经过制作加工成烧录镜像的文件就叫 Image (这个制作烧录镜像主要目的就是缩减大小,节省磁盘)。原则上Image就可以直接被烧录到Flash上进行启动执行(类似于u-boot.bin),但是实际上并不是这么简单。实际上linux的作者们觉得Image还是太大了所以对Image进行了压缩,并且在image压缩后的文件的前端附加了一部分解压缩代码,构成了一个压缩格式的镜像就叫 zImage。
uboot为了启动linux内核,还发明了一种内核格式叫 uImage 。 uImage 是由 zImage 加工得到的, uboot 中有一个工具,可以将 zImage 加工生成uImage。注意:uImage不关linux内核的事,linux内核只管生成zImage即可,然后uboot中的mkimage工具再去由zImage加工生成uImage来给uboot启动。这个加工过程其实就是在zImage前面加上64字节的uImage的头信息即可。
如果直接在kernel底下去make uImage会提示mkimage command not found。解决方案是去uboot/tools目录下执行cp mkimage /usr/local/bin/,复制mkimage工具到系统目录下。再去make uImage即可。

附:
修改uboot的基本思路:

因为官方目前基本都是SD卡或者eMMC。所以,如果存储设备有SD卡。可以先用SD卡,修改下内存和串口参数,让板子先运行起来。跑起来再去添加网络功能。网络功能添加后,再根据需求,是否在uboot中添加显示驱动。基本就这几个了,其余的功能uboot也不太需要。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值