简介
最近正在制作关于yaffs2
的最小文件系统。
组成
zhou@ubuntu:~/weidongshan/fs/fsroot$ ls
bin dev etc lib linuxrc mnt proc root sbin sys tmp usr
etc文件
etc目录下面放置配置文件
init进程会根据inittab文件创建子进程。比如调用脚本文件配置IP地址挂载其他文件系统最后会启动shell等。需要注意的是ubuntu下面没有inittab文件。
zhou@ubuntu:~/weidongshan/fs/fsroot/etc$ ls
fstab init.d inittab
zhou@ubuntu:~/weidongshan/fs/fsroot/etc$ cat inittab
# /etc/inittab
::sysinit:/etc/init.d/rcS
console::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
inittab的语法
identifier : run_level : action : process
zhou@ubuntu:~/weidongshan/fs/fsroot/etc$ cat init.d/rcS
#!/bin/sh
#ifconfig eth0 192.168.1.17
mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
调用rcS
脚本完成一系列的挂载。
mount -a [-t|-O] … : mount all stuff from /etc/fstab
zhou@ubuntu:~/weidongshan/fs/fsroot/etc$ cat fstab
# device mount-point type options dump fsck order
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
- proc
proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。 - sys
sys文件夹。Sysfs文件系统是一个类似于proc文件系统的特殊文件系统,用于将系统中的设备组织成层次结构,并向用户模式程序提供详细的内核数据结构信息。其实,就是在用户态可以通过对sys文件系统的访问,来看内核态的一些驱动或者设备等。 - dev
dev文件夹。dev目录中包含了所有Linux系统中使用的外部设备
sbin
zhou@ubuntu:~/weidongshan/fs/fsroot/sbin$ ls
acpid devmem getty ifup lsmod mkfs.minix poweroff slattach syslogd
adjtimex fbsplash halt init makedevs mkfs.vfat raidautorun start-stop-daemon tunctl
arp fdisk hdparm insmod man mkswap reboot sulogin udhcpc
blkid findfs hwclock klogd mdev modinfo rmmod swapoff vconfig
blockdev freeramdisk ifconfig loadkmap mkdosfs modprobe route swapon watchdog
bootchartd fsck ifdown logread mke2fs nameif runlevel switch_root zcip
depmod fsck.minix ifenslave losetup mkfs.ext2 pivot_root setconsole sysctl
/sbin 下的命令属于基本的系统命令。其中init创建就是PID为1的著名init进程。
可以使用
zhou@ubuntu:~/weidongshan/fs/fsroot/sbin$ sudo strace init
追踪一下init的调用过程。
- linuxrc
lrwxrwxrwx 1 zhou zhou 11 Dec 18 2012 linuxrc -> bin/busybox
内核启动完之后,运行/linuxrc。这里使用的是称为瑞士军刀的busybox
。