构建linux根文件系统(一)

来源:互联网 发布:软件服务龙头股 编辑:程序博客网 时间:2024/05/17 23:12

Linux内核启动后运行的第一个init进程、给用户提供操作交互的shell程序、应用程序依赖的库等。这些必需的,基本的文件合称为根文件系统,他们存放在一个分区中。Linux系统启动之后首先要挂载这个分区,也称为挂载根文件系统。
Linux中并没有C、D、E等盘符的概念,它是以树状的结构管理所有的目录,文件。其他分区挂在到某个目录上,这个目录就被称作为挂接点或者安装点。然后就可以通过这个目录来访问这个分区的文件了。比如根文件系统就挂在 “/”上之后,在根文件系统下就会有根文件系统的各个目录。再将其他分区挂载到 /mnt目录下,该目录下就会有这个分区的各个目录和文件。
在一个分区上存储文件时,要遵循一定的格式,这种格式就成为文件系统类型。比如fat16、fat32、NTFS、ext2、yaffs等。除了这些拥有实实在在分区的文件系统类型外,Linux还有几种虚拟的文件系统类型,比如proc、sysfs等,他们的文件并不是直接存储在实际的设备上,而是有内核临时生成的。
Linux文件系统目录中又一下几个目录,分别简单解析:
1. /bin目录
该目录存放所有用户都能够使用的基本命令,这些命令在挂接其他根文件系统之前就可以使用。所以/bin目录必须同根文件系统在同一个分区。这儿说的挺正式的,其实我觉得吧,也就是根文件系统管辖了那么一部分空间。咱们再这个空间里存放/bin目录里面的内容。否则你如果存到了其他空间,那么另外一个空间肯定也是一种文件存储格式,也会有属于自己的文件系统来进行管理。如果你还想在根文件系统中呈现出来,那么你需要做的就是先挂载。牛逼吹的高大上,不如唱个民间小调,乐呵呵。这个目录里面经常有的指令譬如,cat、ls、cp…..
2./sbin目录
该目录存放的是系统命令,只有管理员才能够使用的命令,系统命令还可以存放在/usr/sbin和usr/local/sbin目录下。sbin目录中存储的都是一些基本的系统命令,他们用于启动和修复系统等。与/bin目录一样,系统在启动之前就可以使用,所以也要放到同根文件系统,同一个分区。
3./dev目录
该目录存放的是设备文件,Linux下是以文件的方式访问各种外设,即通过读写文件的形式来操作各种外设。比如通过“/dev/ttySAC0”文件就可以控制串口0,通过“/dev/mtdblock1”就可以操作MTD(Nandflash或者Norflash或者SPIflash)的第二个分区。
设备文件可以使用mknod命令进行创建,比如
mknod /dev/ttySAC0 c 4 64
mknod /dev/hda1 b 3 1
/dev的创建有三种方法,但是目前我只会去udev的方法,其他的不会在这儿啰嗦。
udev是个用户程序,user space device 他能够根据系统中硬件设备的状态动态的更新设备文件,包括设备文件的创建和删除。
使用udev机制时,不需要在/dev目录下mknod,她需要一些用户程序的支持,并且内核需要支持sysfs文件系统。busyboxzhong youyige mdev命令这是udev的简化版。
感觉这儿说的挺牛逼的,这个medev就是那么牛逼,自动去更新?是的不过这是有条件的。首先你的驱动层里面得有这个mknod的信息吧?写过驱动的都知道,不在这里赘述,其次你什么时候开始调用这个mdev应用程序进行扫描一波呢?那就需要这个mdev -s 这个指令放到rcS脚本中即可。我们看着,这个东西貌似还有能支持热拔插的作用,甚是牛逼。那该怎么支持呢?我们应该给这个mdev应用程序设定什么参数呢?echo /sbin/mdev > /proc/sys/kernel/hotplug干上这一句话就行了。如果你还是好奇为啥干上这句话就能好使呢?我操…扯不完的犊子了,不过这才是一个工程师应该有的特点!!那些不求甚解的人永远都不可能登上科技的顶峰。那说明玩的解释还是不够准确完全,我贴一份从别地方偷来的资料,贴上:
1, busybox 添加mdev支持
2, 在/etc/rc.d/rcS中添加

#mount filesystem/bin/mount -a#start mdevecho /sbin/mdev > /proc/sys/kernel/hotplug    #设置系统的hotplug程序为mdevmdev –s/etc/fstab的内容如下:proc    /proc   proc    defaults    0   0none    /tmp    ramfs   defaults        0       0mdev    /dev    ramfs   defaults        0       0sysfs   /sys    sysfs   defaults        0       0

执行mdev -s :以‘-s’为参数调用位于 /sbin目录写的mdev(其实是个链接,作用是传递参数给/bin目录下的busybox程序并调用它),mdev扫描 /sys/class 和 /sys/block 中所有的类设备目录,如果在目录中含有名为“dev”的文件,且文件中包含的是设备号,则mdev就利用这些信息为这个设备在/dev 下创建设备节点文件。一般只在启动时才执行一次 “mdev -s”。

热插拔事件:由于启动时运行了命令:echo /sbin/mdev > /proc/sys/kernel/hotplug ,那么当有热插拔事件产生时,内核就会调用位于 /sbin目录的mdev。这时mdev通过环境变量中的 ACTION 和 DEVPATH,来确定此次热插拔事件的动作以及影响了/sys中的那个目录。接着会看看这个目录中是否有“dev”的属性文件,如果有就利用这些信息为 这个设备在/dev 下创建设备节点文件。

解决使用mdev时“cannot create /proc/sys/kernel/hotplug:nonexistent directory”错误

确保编译内核时编译如下选项:

CONFIG_PROC_FS=y

CONFIG_PROC_SYSCTL=y

CONFIG_HOTPLUG=y

CONFIG_NET=y

如果CONFIG_HOTPLUG和CONFIG_NET不选或没全选上的话,/proc/sys/kernel下将不会创建hotplug文件.(参见kernel/sysctl.c)
是不是看了这个解释就恍然明白了??如果再好奇,那就去揪住内核不放吧!不过目前我还达不到那个水平,就不在这儿献丑了,当然我并不好奇哈哈!!!
先到这儿吧,下一集再播

原创粉丝点击