声明:文章来自于韦东山老师的课程006_u-boot_内核_根文件系统(新1期_2期间的衔接)(1)\视频\第004课_根文件系统
因为不小心把虚拟机弄炸了,打不开了,所以直接删了虚拟机,重新构件最小跟文件系统:
1. 解压打补丁配置编译内核
book@www.100ask.org:/work/nfs_root$ cd /work/
book@www.100ask.org:/work$ ls
busybox lost+found nfs_root system tools
book@www.100ask.org:/work$ cd system/
book@www.100ask.org:/work/system$ ls
linux-2.6.22.6_jz2440_v2v3.patch linux-2.6.22.6.tar.bz2 u-boot-1.1.6_jz2440.patch u-boot-1.1.6.tar.bz2
book@www.100ask.org:/work/system$ tar xjf linux-2.6.22.6.tar.bz2
book@www.100ask.org:/work/system$ cd linux-2.6.22.6/
book@www.100ask.org:/work/system/linux-2.6.22.6$ patch -p1 < …/linux-2.6.22.6_jz2440_v2v3.patch
cp config_ok .config
make menuconfig
make uImage
因为以前做过了,很熟悉,不想详细解释了
2. 创建最小跟文件系统
2.1 inti busybox
cd /work/busybox
tar -xjf busybox-1.7.0-patch.tar.bz2
vi Makefile
CROSS_COMPILE ?=arm-linux-
mkdir -p /work/nfs_root/first_fs //-p的作用是递归创建目录
make CONFIG_PREFIX=/work/nfs_root/first_fs install
cd /work/nfs_root/first_fs/
ls
bin linuxrc sbin usr
2.2 跟文件系统
建立dev目录
book@www.100ask.org:/work/nfs_root/first_fs$ mkdir dev
book@www.100ask.org:/work/nfs_root/first_fs$ ls
bin dev linuxrc sbin usr
book@www.100ask.org:/work/nfs_root/first_fs$ cd dev
book@www.100ask.org:/work/nfs_root/first_fs/dev$ ls
book@www.100ask.org:/work/nfs_root/first_fs/dev$ ls /dev/null /dev/console -l
crw------- 1 root root 5, 1 6月 25 14:54 /dev/console
crw-rw-rw- 1 root root 1, 3 6月 25 14:54 /dev/null
book@www.100ask.org:/work/nfs_root/first_fs/dev$ sudo mknod console c 5 1
[sudo] password for book:
book@www.100ask.org:/work/nfs_root/first_fs/dev$ sudo mknod null c 1 3
book@www.100ask.org:/work/nfs_root/first_fs/dev$ ls null console -l
crw-r--r-- 1 root root 5, 1 6月 25 15:28 console
crw-r--r-- 1 root root 1, 3 6月 25 15:28 null
建立etc目录
cd /work/nfs_root/first_fs
mkdir etc
vi /work/busybox/busybox-1.7.0/examples/inittab
::askfirst:-/bin/sh //复制这一句话
vi etc/inittab
console::askfirst:-/bin/sh //标准输出,标准输入,标注错误就定位到console中去
建立C库
cd /work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib
mkdir /work/nfs_root/first_fs/lib
cp *.so* /work/nfs_root/first_fs/lib -d //-d是将链接一起拷贝过来,要不然就太大了
建立proc目录
proc的作用是查看当前有哪些应用程序在跑,是内核提供的一个虚拟文件系统
mkdir proc
即使创建了proc,此时ps仍旧看不见有哪些应用程序在运行,除非:
mount -t proc none /proc
ps
cd /proc
ls
这个时候就可以看见进程了
上面是手动挂载,要是不愿意手动挂载可以添加一个配置文件(脚本):
vi /work/busybox/busybox-1.7.0/examples/inittab
vi etc/inittab
::sysinit:/etc/init.d/rcS
:wq
chmod +x etc/init.d/rcS //给其加上可执行属性
第二种方法:
mount -a //作用是读出/etc/fstab,根据配置文件里面的内容来挂载跟文件系统
vi etc/init.d/rcS
##mount -t proc none /proc
mount -a
vi etc/fstab
#device mount-point type options dump fsck order
proc /proc proc defaults 0 0 //自动挂载proc
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
完善dev
在linux中有一种机制,自动创建dev目录下的节点,在busybox中有一个mdev,是udev的简化版本
vi /work/busybox/busybox-1.7.0/docs/mdev.txt
17 Here's a typical code snippet from the init script:
18 [1] mount -t sysfs sysfs /sys
19 [2] echo /bin/mdev > /proc/sys/kernel/hotplug
20 [3] mdev -s
21
22 Of course, a more "full" setup would entail executing this before the previous
23 code snippet:
24 [4] mount -t tmpfs mdev /dev
25 [5] mkdir /dev/pts
26 [6] mount -t devpts devpts /dev/pts
[1][2]前面 已经做了,然后将[2][3][5][6]加入rcS中去:
vi etc/init.d/rcS
cat etc/init.d/rcS
book@www.100ask.org:/work/nfs_root/first_fs$ vi etc/init.d/rcS
book@www.100ask.org:/work/nfs_root/first_fs$ cat etc/init.d/rcS
#mount -t proc none /proc
mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug //注意一下, 这个是sbin,bin目录下没有mdev
mdev -s
解释一下下面两句话:
echo /sbin/mdev > /proc/sys/kernel/hotplug //自动加载驱动或插入u盘,内核就调用hotplug指向/sbin/mdev,自动创建节点
mdev -s的作用是将内核那些现有的驱动都创建出来
自动挂载跟文件系统:
条件: 服务器允许被挂接;
单板去挂接
服务器允许被挂接:
sudo vi /etc/exports //注意是/etc,不是etc
/work/nfs_root/first_fs *(rw,nohide,insecure,no_subtree_check,async,no_root_squash) //加上这句话服务器就可以被挂接了
book@www.100ask.org:/work/nfs_root/first_fs$ sudo /etc/init.d/nfs-kernel-server restart //重启nfs服务
[ ok ] Restarting nfs-kernel-server (via systemctl): nfs-kernel-server.service.
book@www.100ask.org:/work/nfs_root/first_fs$ sudo mount -t nfs 192.168.1.100:/work/nfs_root/first_fs /mnt //尝试挂载自己,
book@www.100ask.org:/work/nfs_root/first_fs$ //挂载到/mnt上。输出结果说明已经成功挂载
单板去挂载:
set bootargs noinitrd root=/dev/nfs nfsroot=192.168.1.100:/work/nfs_root/first_fs ip=
192.168.1.103:192.168.1.100:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0