使用busybox构建根文件系统

简介

所有的linux发行版在对根文件系统布局上都遵循FHS标准的建议规定。该标准规定了根目录下各个子目录的名称及其存放的内容:


目录名 存放的内容

/bin 基础的用户命令,例如ls、cp等

/sbin 必备的系统管理员命令,例如ifconfig、reboot等

/dev 设备文件,例如mtdblock0、tty1等

/etc 系统配置文件,包括启动文件,例如inittab等

/lib 必要的链接库,例如C链接库、内核模块

/home 普通用户主目录

/root root用户主目录

/usr/bin 非必备的用户程序,例如find、du等

/usr/sbin 非必备的管理员程序,例如chroot、inetd等

/usr/lib 库文件

/var 守护程序和工具程序所存放的可变,例如日志文件

/proc 用来提供内核与进程信息的虚拟文件系统,由内核自动生成目录下的内容

/sys 用来提供内核与设备信息的虚拟文件系统,由内核自动生成目录下的内容

/mnt 文件系统挂接点,用于临时安装文件系统

/tmp 临时性的文件,重启后将自动清除


BusyBox 是一个集成了一百多个最常用linux命令和工具的软件。编译完busybox将会得到如下文件和目录:

linuxrc bin sbin usr


一般情况下,linux的启动流程:

linuxrc挂载/etc目录为ramfs,复制相应文件到/etc,启动/sbin/init->

init进程,根据/etc/inittab执行相应动作(初始化、重启、关机、启动shell)->

执行/etc/init.d/rcS脚本(挂载文件系统、系统环境变量设置)->

执行/usr/etc/rc.local脚本(如安装核心模块、进行网络配置、运行应用程序、启动图形界面、用户环境变量设置等)->


1.解压busybox安装包

tar xjvf busybox-1.22.1.tar.bz2


2.修改Makefile文件:

ARCH ?= arm

CROSS_COMPILE ?= arm-linux-


3.配置busybox:

make menuconfig

注释:

make menuconfig需要libncurses5-dev:

sudo apt-get install libncurses5-dev


4.编译busybox:

make && make install

将会产生_install文件夹,里面有如下目录:

bin  linuxrc sbin  usr


5.添加其他所需目录:

mkdir dev etc mnt proc var tmp sys root lib opt home


6.添加动态库到lib目录下,从交叉编译器的libc/lib目录下复制:

cd lib

cp -a /opt/4.4.1/arm-none-linux-gnueabi/libc/lib/libc-2.10.1.so .

cp -a /opt/4.4.1/arm-none-linux-gnueabi/libc/lib/libc.so.6 .

cp -a /opt/4.4.1/arm-none-linux-gnueabi/libc/lib/libm-2.10.1.so .

cp -a /opt/4.4.1/arm-none-linux-gnueabi/libc/lib/libm.so.6 .

cp -a /opt/4.4.1/arm-none-linux-gnueabi/libc/lib/ld-linux.so.3 .

cp -a /opt/4.4.1/arm-none-linux-gnueabi/libc/lib/ld-2.10.1.so .

注释:

cp -a表示复制硬链接,而不是复制文件。由于libxxx.so.xxx都是指向libxxx-xxx.so的软连接

这里只复制了busybox需要的三个动态库,其余的库可根据需要再添加


7.建立/etc/inittab文件,输入如下内容:

::sysinit:/etc/init.d/rcS

::askfirst:-/bin/sh

::ctrlaltdel:/sbin/reboot

::shutdown:/bin/umount -a –r


8.建立/etc/init.d/rcS文件,并添加可执行权限(chmod +x rcS),输入如下内容:

#!/bin/sh

#This is the firstscript called by init process

/bin/mount -a

/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug

mdev -s

注释:

需要telnet服务可添加如下命令:

mkdir /dev/pts

mount -t devpts devpts /dev/pts


9.建立/etc/fstab文件,输入如下内容:

#device    mount-point     type options     dump    fsch order

proc /proc proc defaults  0       0

sysfs /sys sysfs defaults   0       0

tmpfs /tmp tmpfs defaults   0       0

tmpfs /dev tmpfs defaults   0       0


10.建立/etc/profile文件,输入如下内容:

#!/bin/sh 

export PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib


11.在/dev下创建设备节点:

sudo mknod -m 666 dev/console c 5 1

sudo mknod -m 666 dev/null c 1 3


12.完成,将_install所有文件复制到nfs根目录,运行


问题解决:

1.Kernel panic - not syncing: No init found

原因是缺少busybox启动所需的库,将交叉编译器/libc/lib中所有库复制到/lib下即可(用cp -a)


附加:

设置密码

/etc/passwd文件格式

用户名:密码:用户ID:组ID:注释:初始工作目录:初始shell


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值