EmbedFire i.MX 6ull开发板学习笔记(九)---使用buildroot构建rootfs

EmbedFire i.MX 6ull开发板学习笔记(九)---使用buildroot构建rootfs

  • 一、buildroot介绍
  • 二、编译步骤
  • 三、整合uboot和kernel

一、buildroot介绍

使用buildroot制作rootfs非常简单,容易,仅需做个简单的配置便可编译出所需的rootfs。
buildroot可到官网下载https://buildroot.org/,主要目录介绍:

arch:			#与处理器架构有关的配置
board:			#板级文件夹,存放与板级有关的文件,脚本等。
boot:			#bootloader相关配置
configs:		#项目配置文件
dl:			#编译过程中,下载的源码。
docs:			#帮助文档
fs:			#文件系统相关配置
linux:			#内核源码相关配置
output:		#编译输出目录
package:		#第三方库配置文件
support: 		#编译所需支持文件,库等存放目录
system:		#根文件系统目录创建相关配置
toolchain:		#交叉编译工具
utils:			#编译所需脚本存放目录

二、编译步骤

  • 1、复制一份configs下的imx6ullevk_defconfig命名为:imx6ull_embedfire_defconfig
cp configs/imx6ullevk_defconfig configs/imx6ull_embedfire_defconfig
  • 2、配置buildroot
make imx6ull_embedfire_defconfig
make menuconfig

A、Target options:配置与处理器架构有关的设置

B、Toolchain:配置交叉编译环境,我选择从网络自动下载,也可手动设置已有的。

	C library      					#选择glibc
	Kernel Headers  				#与自己所用内核版本保持一直
 	GCC compiler Version 			#GCC编译器版本,建议与编译uboot,kernel保持一致
 	Enable C++ support				#选中
 	Enable MMU support 				#选中

C、System configuration: 系统配置,如登录名,密码

	System hostname  								#系统登陆名
 	System banner 									#登录欢迎语
 	Enable root login with password  
	Root password 		 							#密码
	Init system  									#选择busybox
	/dev management 								#选择Dynamic using devtmpfs + mdev
	Use symlinks to /usr for /bin, /sbin and /lib  	#选中

D、Kernel: 内核配置,取消不要选择

E、Filesystem images :文件系统配置


	ext2/3/4 root filesystem --->
 		ext2/3/4 variant  							#选择ext4
 	tar the root filesystem --->
 		Compression method							#选择bzip2

F、bootloaders: 不要配置

仅配置以上几项即可

  • 3、以root权限开始编译,请勿设置多线程编译
sudo make

编译过程很慢,需要从网络下载源码,一般五六个小时即可编译完成。然后可以在output\images找到打包好的rootfs.tar.bz2根文件系统,使用mfgtools烧录验证下即可。

三、整合uboot和kernel

每次都单独编译uboot,kernel、app和rootfs有点太麻烦了,我将其整合到一起,编写脚本,自动编译。借鉴RV1126的方式,采用如下组织目录:
EmbedFire i.MX 6ull开发板学习笔记(九)---使用buildroot构建rootfs_第1张图片
在device目录新建如下两个文件,用于配置uboot、kernel、buildroot的defconfig,如有新项目增加,仅需再配置一个.mk即可。
BoardConfig.mk

#!/bin/bash

# Target arch
export IMX_ARCH=arm

# target chip
export IMX_TARGET_PRODUCT=imx6ull

# Set rootfs type, including ext2 ext4 
export IMX_ROOTFS_TYPE=tar.bz2

# rootfs image path
export IMX_ROOTFS_IMG=out/rootfs.${IMX_ROOTFS_TYPE}

embedfire_imx6ull.mk

#!/bin/bash

CMD=`realpath $BASH_SOURCE`
CUR_DIR=`dirname $CMD`

source $CUR_DIR/BoardConfig.mk

# U-boot defconfig
export IMX_UBOOT_DEFCONFIG=mx6ull_embedfire

# Kernel defconfig
export IMX_KERNEL_DEFCONFIG=imx6ull_embedfire_defconfig

# Kernel dts
export IMX_KERNEL_DTS=imx6ull-embedfire

# Buildroot config
export IMX_CFG_BUILDROOT=imx6ull_embedfire_defconfig

编译build.sh脚本,实现自动话编译。

#!/bin/bash

export LC_ALL=C
export LD_LIBRARY_PATH=


err_handler(){
   
	ret=$?
	[ "$ret" -eq 0 ] && return
	
	echo "ERROR: Running ${FUNCNAME[1]} failed!"
	echo "ERROR: exit code $ret from line ${BASH_LINENO[0]}:"
	echo "		$BASH_COMMAND"
	exit $ret
}
trap 'err_handler' ERR
set -eE

function finish_build(){
   
	echo "Running ${FUNCNAME[1]} succeeded."
	cd 

你可能感兴趣的:(Linux移植,学习,bash,linux)