简介
所有的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