用busybox构建最小根文件系统详解

1、busybox源码获取

(1)busybox官网下载地址:https://busybox.net/
(2)建议下载busybox的版本:尽量和你使用的编译环境(比如:Ubuntu)的版本相近,版本差太多可能需要解决一些编译时候的兼容问题;

2、busybox原理分析

参考博客:《busybox的实现原理分析(C语言实现简易版的busybox)》

3、busybox编译

3.1、配置busybox

Busybox Settings--->
	Build Options--->
		[*]Build BusyBox as a static binary(no shared libs)

		
Busybox Library Tuning--->
	[*]vi-style line editing commands
	[*]Fancy shell prompts
	
	
Linux Module Utilities--->
	[ ]Simplified modutils
	[*]insmod
	[*]rmmod
	[*]lsmod
	[*]modprobe
	[*]depmod

	
Linux System Utilities--->[*]mdev
	[*]Support /etc/mdev.conf
	[*]Support subdirs/symlinks
	[*]Support regular expressions substitutions when renaming dev
	[*]Support command execution at device addition/removal
	[*]Support loading of firmwares

3.2、编译

root@Ubuntu:~$ ls
busybox-1.24.1  busybox-1.24.1.tar.bz2
root@Ubuntu:~$
root@Ubuntu:~$ cd busybox-1.24.1/
root@Ubuntu:~$ make ARCH=arm CROSS_COMPILE=arm-linux-

解压开busybox源码后,在编译时指定CPU架构和交叉编译工具链

4、busybox构建根文件系统

Busybox Settings--->
	Installation Options ("make install" behavior)--->

在这里插入图片描述

(1)配置安装目录:"make menuconfig"里可以按照上面的选项去选择busybox安装目录;
(2)配置好安装目录,执行"make install"就会将busybox、链接文件、linuxrc等拷贝到指定目录,构成文件夹形式的最小文件系统;

5、完善根文件系统

5.1、添加inittab文件

#first:run the system script file
::sysinit:/etc/init.d/rcS
::askfirst:-/bin/sh
::ctrlaltdel:-/sbin/reboot
#umount all filesystem
::shutdown:/bin/umount -a -r
#restart init process
::restart:/sbin/init

在这里插入图片描述
在这里插入图片描述

(1)在未添加inittab文件前,系统可以起来,可以进入命令行,但是系统起来后会不停的刷报错的打印;
(2)在添加上面的inittab文件后,系统不会再刷"can’t open /dev/tty3: No such file or directory";
(3)inittab文件的内容解读可以参考博客:《嵌入式系统开发——文件系统中inittab文件、rcS文件、fstab文件、profile文件详解》

5.2、添加fstab文件

# /etc/fstab: static file system information.
#
# Use 'vol_id --uuid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# 	<file system> 	<mount point> 	<type> 	<options> 	<dump> 	<pass>
	proc 			/proc 			proc 	defaults 	0 		0
	sysfs 			/sys 			sysfs 	defaults 	0 		0
	tmpfs 			/var 			tmpfs 	defaults 	0 		0
	tmpfs 			/tmp 			tmpfs 	defaults 	0 		0
	tmpfs 			/dev 			tmpfs 	defaults 	0 		0

fstab是开启自动挂载文件系统的,需要在文件系统中手动创建好根目录下的"sys、proc、dev等"挂载点;

5.3、添加rcS文件

#!/bin/sh
# 设置PATH变量
PATH=/sbin:/bin:/usr/sbin:/usr/bin

# 将系统设置为单用户模式
runlevel=S
prevlevel=N

# 设置umask的值,和创建文件的默认权限相关
umask 022

# 到处为环境变量
export PATH runlevel prevlevel

#解析/etc/fstab文件并挂载分区;
mount -a

# 开启mdev,和驱动在/dev目录下生成设备节点有关
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s

#指定主机名保存在/etc/sysconfig/HOSTNAME文件中
/bin/hostname -F /etc/sysconfig/HOSTNAME

#设置eth0的ip为192.168.1.10
ifconfig eth0 192.168.1.10

5.4、设置主机名

在这里插入图片描述

(1)创建/etc/sysconfig/HOSTNAME 文件,里面保存主机名,可以用hostname命令查看;
(2)这个文件名和路径是与rcS文件中的设置相对应的;

5.5、添加profile文件

# Ash profile
# vim: syntax=sh

# No core files by default
ulimit -S -c 0 > /dev/null 2>&1

USER="`id -un`"
LOGNAME=$USER
PS1='[\u@\h \W]\# '
PATH=$PATH

HOSTNAME=`/bin/hostname`

export USER LOGNAME PS1 PATH

在这里插入图片描述

添加上面的profile文件后,可以在终端的命令行看到设置的主机名和登录的账户名;

5.6、增加用户登录

参考博客:《嵌入式设备文件系统构建——增加用户登录功能》

5.7、动态链接库的拷贝

(1)将程序运行需要依赖的动态库拷贝到/lib或者/usr/lib目录下;
(2)最少是需要将交叉编译工具链的动态库拷贝到/lib目录下,不然编译的程序都没法在板子上运行;

6、用NFS挂载构建的根文件系统

参考博客:《用NFS挂载根文件系统详解(带nfs版本不兼容问题的解决方法)》

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

正在起飞的蜗牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值