一步一步制作yaffs/yaffs2根文件系统(四)

时间:2022-06-02 19:20:11

一步一步制作yaffs/yaffs2根文件系统(四)---构建etc、dev等剩余目录

2927人阅读 评论(6)收藏举报 本文章已收录于: 一步一步制作yaffs/yaffs2根文件系统(四)分类: 作者同类文章X

                                开发环境:Ubuntu 12.04

                                开发板:mini2440  256M NandFlash   64M SDRAM

                                 交叉编译器:arm-linux-gcc 4.4.3 点此可下载

                                 BusyBox版本:busybox-1.13.3  点此可下载

                                yaffs制作工具:mkyaffsimage

                                yaffs2制作工具:mkyaffs2image(适合64M)、mkyaffs2image-128(适合128M以上)

    紧接上一节:http://blog.csdn.net/mybelief321/article/details/10007075

    前面两节介绍了如何安装Busybox、C库,建立了 bin/、sbin/、usr/sbin、usr/bin、lib/等目录,最小根文件系统的大部分目录、文件已经建好,本节介绍剩下的部分。

    构建 /etc目录

    19、执行命令:mkdir etc  创建一个etc目录

           执行命令:cd etc 进入该目录

    一步一步制作yaffs/yaffs2根文件系统(四)

    20、执行命令:vim mdev.conf 创建mdev.conf。前边已经介绍mdev是一个udev的简化版本,主要用来支持一些热插拔设备。我们可以通过文件mdev.conf自定义一些设备节点的名称或链接来满足特定的需要,但在此处让它为空。

    一步一步制作yaffs/yaffs2根文件系统(四)

    21、在启动过程中bootloader会传递参数init=/linuxrc给内核的main( )函数,所以在文件系统被挂载后,运行的第一个程序是linuxrc,而linuxrc是一个指向/bin/busybox的链接文件,也就是说文件系统被挂在后运行的第一个程序是busybox。Busybox首先会解析文件/etc/inittab,这个文件中存放的是系统的配置信息,这些配置信息指明了接下来将要启动那些程序。

       执行命令:vim inittab 创建 inittab文件

    一步一步制作yaffs/yaffs2根文件系统(四)

       内容如下:

       #/etc/inittab
       ::sysinit:/etc/init.d/rcS
       s3c2410_serial0::askfirst:-/bin/sh
       ::ctrlaltdel:/sbin/reboot
       ::shutdown:/bin/umount -a -r

    一步一步制作yaffs/yaffs2根文件系统(四)

     /etc/inittab 文件中每个条目用来定义一个子进程,并确定它的启动方法,格式如下 

         <id>:<runlevels>:<action>:<process>

    <id>:表示这个进程要使用的控制台(即标准输入、标准输出、标准错误设备)。如果省 略,则使用与init进程一样的控制台。
    <runlevels>:对于Busybox init程序,这个字段滑意义,可以省略。
    <action>:表示init程序如何控制这个子进程,
    <process>: 要执行的程序,它可以是可执行程序,也可以是脚本


      文件etc/inittab配置条目说明如下:

      ::sysinit:/etc/init.d/rcS    启动系统初始化文件/etc/init.d/rcS。字段sysinit表明文件/etc/init.d/rcS在系统启动后最先执行,并且只执行一次,init进程等待它结束才继续执行其它动作。(脚本文件名一般为rc,后缀S代表单用户运行级别脚本)

      s3c2410_serial0::askfirst:-/bin/sh   在串口s3c2410_serial0上启动askfirst动作的shell。S3C2410的串口名在/dev下是s3c2410_serialx。在mini2440移植内核时定义的串口名为s3c2410_serial0。需要注意的是,开发板上通过mdev生成的/dev目录中,S3C2410、S3C2440的串口名是s3c2410_serial0、s3c2410_serial1、s3c2410_serial2,不是 ttySAC0、ttySAC1、ttySAC2。当静态创建设备文件时,这里要将s3c2410_serial0 修改为 ttySAC0 。askfirst表明init进程先输出“Please press Enter to actvie this console”,等用户输入回车键之后才启动-/bin/sh。

      ::ctrlaltdel:/sbin/reboot  当按下Ctrl+Alt+Delete组合键时,init重启执行程序。字段ctrlaltdel表明当按下Ctrl+Alt+Delete组合键时,执行相应的进程。

      ::shutdown:/bin/umount -a -r   告诉init在关机时运行umount命令卸载所有的文件系统,如果卸载失败,试图以只读方式重新挂载。字段shutdown表明在重启关闭系统命令时执行相应进程。

    22、当解析完文件etc/inittab后就将启动这些进程,首先要执行的是启动脚本etc/init.d/rcS。

          执行命令:mkdir init.d  创建一个init.d文件夹

          执行命令:cd init.d  进入该文件夹

    一步一步制作yaffs/yaffs2根文件系统(四)

    23、执行命令:vim rcS  编写rcS可执行文件,这是一个脚本文件,可以在里面添加想自动执行的命令。

    一步一步制作yaffs/yaffs2根文件系统(四)

    内容如下

    #!/bin/sh
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    runlevel=S
    prevlevel=N
    umask 022 
    export PATH runlevel prevlevel
    mount -a
    echo /sbin/mdev>/proc/sys/kernel/hotplug
    mdev -s

    详解:

    #!/bin/sh    #用busybox的shell

    PATH=/sbin:/bin:/usr/sbin:/usr/bin  #shell命令的搜索路径

    runlevel=S   #运行在单用户模式

    prevlevel=N  #前一个级别,为N则表示没有前一个级别

    umask 022   #权限位掩码

    export PATH runlevel prevlevel   #将环境的变量导出到环境中

    mount -a   #将文件 /etc/fstab 中指明的文件挂载到对应的挂载点上

    echo /sbin/mdev>/proc/sys/kernel/hotplug  #当有热插拔事件产生时, 内核就会调用位于/sbin目录的 mdev。 这时 mdev通过环境变量中的 ACTION 和 DEVPATH,(这两个变量是系统自带的)来确定此次热插拔事件的动作以及影响了/sys 中的那个目录。接着会看看这个目录中是否有“dev”的属性文件,如果有就利用这些信息为 这个设备在/dev 下创建设备节点文件。
    mdev -s   #建立dev目录。以‘-s’为参数调用位于/sbin 目录写的 mdev(其实是个链接,作用是传递参数给/bin目录下的busybox 程序并调用它) ,mdev扫描 /sys/class和/sys/block中所有的类设备目录,如果在目录中含有名为“dev”的文件,且文件中包含的是设备号,则 mdev 就利用这些信息为这个设备在/dev下创建设备节点文件。一般只在启动时才执行一次  “mdev -s” 。

    24、执行命令:chmod +x rcS 改变rcS的属性,使它可执行。

    一步一步制作yaffs/yaffs2根文件系统(四)

    25、执行命令:cd .. 返回上一级目录

            执行命令:vim fstab  ,创建fstab文件。

    一步一步制作yaffs/yaffs2根文件系统(四)

       内容如下

      #device   mount-point     type      option     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  

    一步一步制作yaffs/yaffs2根文件系统(四)

    编写好之后,保存退出。

    26、执行命令:cd ..  返回根文件系统目录

    27、执行命令: mkdir  dev 创建dev目录 

    一步一步制作yaffs/yaffs2根文件系统(四)

    28、执行命令:cd dev 进入该目录,准备创建设备节点

    29、先后执行命令:sudo mknod console c 5 1

                                         sudo mknod null c 1 3

    一步一步制作yaffs/yaffs2根文件系统(四)

    因为mdev是通过init进程来启动的,在使用mdev构造 /dev 目录之前,init 进程至少要用到设备文件 /dev/console、/dev/null,所以要建立这两个设备文件。

    30、执行命令:cd ../  返回上一级目录

    31、执行命令:mkdir proc mnt tmp sys root home  创建剩余的目录

    一步一步制作yaffs/yaffs2根文件系统(四)

    到这里,在rootfs下就是一个非常小的根文件系统。我将这个根文件系统打包传上去了,如有需要,请自行下载

    下一节:http://blog.csdn.net/mybelief321/article/details/10027917



    1
    0
       

    我的同类文章

    http://blog.csdn.net 更多文章