第5章 嵌入式Linux根文件系统构造要点课件.ppt
第5章嵌入式Linux根文件系统构造,岳希,2,主要内容,根文件系统Windows文件系统类型Linux文件系统类型BusyBox根文件系统目录结构查看文件根文件系统制作要点根文件系统制作实例制作根文件系统镜像,3,根文件系统,理论上说一个嵌入式设备如果内核能够运行起来,且不需要运行用户进程的话,是不需要文件系统的。文件系统简单的说就是一种目录结构,由于 linux操作系统的设备在系统中是以文件的形式存在,将这些文件进行分类管理以及提供和内核交互的接口,就形成一定的目录结构也就是文件系统,文件系统是为用户反映系统的一种形式,为用户提供一个检测控制系统的接口。,4,根文件系统,Linux内核在系统启动期间进行的最后操作之一就是安装根文件系统。根文件系统一直都是所有类UNIX系统不可或缺的组件根文件系统的顶层目录各有其特殊的用法和目的。,5,根文件系统,根文件系统和普通的文件系统有什么区别呢?由于根文件系统是内核启动时挂载的第一个文件系统,那么根文件系统就要包括Linux启动时所必须的目录和关键性的文件例如Linux启动时都需要有init目录下的相关文件例如在Linux挂载分区时Linux一定会找/etc/fstab这个挂载文件,6,根文件系统,若Linux系统不能从指定设备上挂载根文件系统,则系统会出错而退出启动。之后可以自动或手动挂载其他的文件系统。因此,一个系统中可以同时存在不同的文件系统。Windows支持少量文件系统: FAT16、 FAT32、NTFSLinux支持多种文件系统,包括ext2、ext3、vfat、ntfs、jffs、cramfs、ramfs、romfs、yaffs、 ramdisk等 为了对各类文件系统进行统一管理,Linux引入了虚拟文件系统VFS(Virtual File System),为各类文件系统提供一个统一的操作界面和应用编程接口,7,根文件系统,8,根文件系统,不同的文件系统类型有不同的特点,因而根据存储设备的硬件特性、系统需求等有不同的应用场合。基于FLASH的文件系统 jffs2、yaffs、cramfs、romfs 基于RAM的文件系统Ramdisk、ramfs/tmpfs网络文件系统NFS,9,根文件系统,Flash作为嵌入式系统的主要存储媒介,有其自身的特性。Flash的写入操作只能把对应位置的1修改为0,而不能把0修改为1(擦 除Flash就是把对应存储块的内容恢复为1),因此,一般情况下,向Flash写入内容时,需要先擦除对应的存储区间,这种擦除是以块(block)为 单位进行的。,10,Windows文件系统类型,FATFAT文件系统主要的优点就是它可以允许多种操作系统访问,如MS-DOS、Windows9x、Windows NT和OS/2等。这一文件系统在使用时遵循8.3命名规则(即文件名最多为8个字符,扩展名为3个字符)。FAT32与FAT16区别FAT32与FAT16相比,它的一个簇的大小要比FAT16小很多,所以可以节省磁盘空间。,11,Windows文件系统类型,NTFSNTFS是Windows 2000之后的高级文件系统,它支持文件系统故障恢复,尤其是大存储媒体、长文件名。NTFS只能被Windows 所识别,虽然它可以读取FAT文件系统,但其文件却不能被FAT文件系统所存取。采用了更小的簇文件读取速度更高效磁盘自我修复功能。,12,Windows文件系统类型,NTFSNTFS是专用于Windows NT/2000操作系统的高级文件系统,它支持文件系统故障恢复,尤其是大存储媒体、长文件名。NTFS的主要弱点是它只能被Windows NT/2000所识别,虽然它可以读取FAT文件系统和HPFS文件系统的文件,但其文件却不能被FAT文件系统和HPFS文件系统所存取,因此兼容性方面比较成问题。,13,Linux文件系统类型,JFFS2文件系统JFFS2,日志闪存文件系统版本2 (Journalling Flash FileSystem v2)最早是由瑞典Axis Communications公司基于Linux2.0的内核为嵌入式系统开发的文件系统。JFFS2是RedHat公司基于JFFS开发的闪存文件系统,最初是针对RedHat公司的嵌入式产品eCos开发的嵌入式文件系统,所以JFFS2也可以用在Linux, uCLinux中。,14,Linux文件系统类型,JFFS2文件系统主要用于NOR型闪存,基于MTD驱动层,特点是:可读写的、支持数据压缩的、基于哈希表的日志型文件系统,并提供了崩溃/掉电安全保护,提供“写平衡”支持等。缺点主要是当文件系统已满或接近满时,因为垃圾收集的关系而使jffs2的运行速度大大放慢。jffs不适合用于NAND闪存主要是因为NAND闪存的容量一般较大,这样导致jffs为维护日志节点所占用的内存空间迅速增大,另外,jffs文件系统在挂载时需要扫描整个FLASH的内容,以找出所有的日志节点,建立文件结构,对于大容量的NAND闪存会耗费大量时间。,15,Linux文件系统类型,JFFS2文件系统JFFS2 较之JFFS 原型的改进包括: - 提高了系统的磨损性能以及废物收集功能. - 提高了压缩性能 - 提高了RAM 对系统内存要求的响应能力 - 改进了对并发过程的支持并支持将Flash故障挂起 - 支持硬连接,16,Linux文件系统类型,制作jffs2镜像文件: mkfs.jffs2 r rootfs o rootfs-jffs2.img 使用工具yaffs2image实现文件制作如将文件夹rootfs中的文件制作成yaffs2文件系统镜像mkyaffs2image rootfs rootfs.yaffs2,17,Linux文件系统类型,Yaffsyaffs是专为嵌入式系统使用NAND型闪存而设计的一种日志型文件系统。与jffs2相比,它减少了一些功能(例如不支持数据压缩),所以速度更快,挂载时间很短,对内存的占用较小。另外,它还是跨平台的文件系统,除了Linux和eCos,还支持WinCE, pSOS和ThreadX等。yaffs自带NAND芯片的驱动,并且为嵌入式系统提供了直接访问文件系统的API,用户可以不使用Linux中的MTD与VFS,直接对文件系统操作。当然,yaffs也可与MTD驱动程序配合使用。yaffs与yaffs2的主要区别在于,前者仅支持小页(512 Bytes) NAND闪存,后者则可支持大页(2KB) NAND闪存。同时,yaffs2在内存空间占用、垃圾回收速度、读/写速度等方面均有大幅提升。,18,Linux文件系统类型,Cramfscramfs是一个压缩式的只读文件系统,它并不需要一次性地将文件系统中的所有内容都解压缩到内存之中,而只是在系统需要访问某个位置的数据的时侯,马上计算出该数据在cramfs中的位置,将其实时地解压缩到内存之中,然后通过对内存的访问来获取文件系统中需要读取的数据。cramfs中的解压缩以及解压缩之后的内存中数据存放位置都是由cramfs文件系统本身进行维护的,用户并不需要了解具体的实现过程,因此这种方式增强了透明度,对开发人员来说,既方便,又节省了存储空间。,19,Linux文件系统类型,Cramfs拥有以下一些特性:采用实时解压缩方式,但解压缩的时侯有延迟。cramfs的数据都是经过处理、打包的,对其进先写操作有一定困难。所以cramfs不支持写操作,这个特性刚好适合嵌入式应用中使用Flash存储文件系统的场合。在cramfs中,文件最大不能超过16MB。,20,Linux文件系统类型,使用CRAMFS工具建立根文件系统的CRAMFS镜像: CRAMFS工具主要包括两个:mkcramfs和cramfsck,其中cramfsck工具是用来创建cramfs文件系统的,而mkcramfs工具则用来进行cramfs文件系统的释放以及检查。 下面是mkcramfs的命令格式:mkcramfs -h -e edition -i file -n name dirname outfile,21,Linux文件系统类型,-h:显示帮助信息-e edition:设置生成的文件系统中的版本号-i file:将一个文件映像插入这个文件系统之中(只能在Linux2.4.0以后的内核版本中使用)-n name:设定cramfs文件系统的名字dirname:指明需要被压缩的整个目录树outfile:最终输出的文件例:mkcramfs rootfs rootfs.cramfs,22,Linux文件系统类型,cramfsck的命令格式:cramfsck -hv -x dir file-h:显示帮助信息-x dir:释放文件到dir所指出的目录中-v:输出信息更加详细file:希望测试的目标文件例: cramfsck rootfs.cramfs,23,Linux文件系统类型,RamfsRamfs是Linus Torvalds开发的一种基于内存的文件系统,工作于虚拟文件系统(VFS)层,不能格式化,可以创建多个,在创建时可以指定其最大能使用的内存大小。(实际上,VFS本质上可看成一种内存文件系统,它统一了文件在内核中的表示方式,并对磁盘文件系统进行缓冲。)Ramfs/tmpfs文件系统把所有的文件都放在RAM中,所以读/写操作发生在RAM中,可以用ramfs/tmpfs来存储一些临时性或经常要修改的数据,例如/tmp和/var目录,这样既避免了对Flash存储器的读写损耗,也提高了数据读写速度。,24,BusyBox,BusyBox简介Busybox是一个集成了一百多个最常用linux命令和工具的软件。Busybox在设计上充分考虑了硬件资源受限的特殊工作环境。平时用的那些linux命令就好比是分立式的电子元件,而busybox就好比是一个集成电路,把常用的工具和命令集成压缩在一个可执行文件里,功能基本不变,而大小却小很多倍。BusyBox 可以将大约 3.5MB 的工具包装成大约 200KB 大小。 在嵌入式linux应用中,Busybox有非常广的应用。,25,BusyBox,BusyBox原理它采用一种很巧妙的办法减少自己的体积:所有的命令都通过“插件”的方式集中到一个可执行文件中,在实际应用过程中通过不同的符号链接来确定到底要执行哪个操作。例如,很多基于文件的工具(比如grep和find)都需要在目录中搜索文件的代码。当这些工具被合并到一个可执行程序中时,它们就可以共享这些相同的元素,这样可以产生更小的可执行程序。,26,BusyBox,BusyBox原理在构造文件系统时,工具包中的各个命令可以在编译时选择或不选择编入BusyBox,这样构建一个小巧的、自定义的、完整的嵌入式环境。BusyBox支持多种体系结构,可以支持静态或动态链接,以满足不同需求。,27,BusyBox,BusyBox的参考网站:http:/,28,BusyBox,编译BusyBox后会产生/bin和/sbin文件夹:存放各种命令linuxrc文件:是一个shell启动脚本文件,29,根文件系统目录结构,Linux系统的根文件中每个目录中都包含特定内容: 1. /bin目录/ bin目录包含了引导启动所需的命令或普通用户可能用的命令(可能在引导启动后)。这些命令都是二进制文件的可执行程序( b i n是b i n a r y - -二进制的简称),多是系统中重要的系统文件。,30,根文件系统目录结构,2. /sbin目录 /sbin目录类似/bin ,也用于存储二进制文件。因为其中的大部分文件多是系统管理员使用的基本的系统程序,所以虽然普通用户必要且允许时可以使用,但一般不给普通用户使用。3. /etc目录/etc目录存放着各种系统配置文件,其中包括了用户信息文件/etc/passwd,系统初始化文件/etc/rc等。Linux正是靠这些文件才得以正常地运行。4. /root目录/root 目录是超级用户的目录。,31,根文件系统目录结构,5. /lib目录/lib目录是根文件系统上的程序所需的共享库,存放了根文件系统程序运行所需的共享文件。这些文件包含了可被许多程序共享的代码,以避免每个程序都包含有相同的子程序的副本,故可以使得可执行文件变得更小,节省空间。 /lib/modules 目录包含系统核心可加载各种模块,尤其是那些在恢复损坏的系统时重新引导系统所需的模块(例如网络和文件系统驱动)。,32,根文件系统目录结构,6. /dev目录/dev目录存放了设备文件,即设备驱动程序,用户通过这些文件访问外部设备。比如,用户可以通过访问/dev/mouse来访问鼠标的输入,就像访问其他文件一样。7. /tmp目录/tmp 目录存放程序在运行时产生的信息和数据。8. /boot目录/boot目录存放引导加载器(bootloader)使用的文件,如LILO、grub,核心映像也经常放在这里,而不是放在根目录中。,33,根文件系统目录结构,9. /mnt目录/mnt目录是系统管理员临时安装(mount )文件系统的安装点。程序并不自动支持安装到/mnt 。/mnt 下面可以分为许多子目录,例如/mnt/dosa 可能是使用MSDOS文件系统的软驱,而/mnt/exta 可能是使用ext2文件系统的软驱,/mnt/cdrom 光驱等等。10. /proc, /usr,/var,/home目录其他文件系统的安装点。,34,设备文件,设备类型主要包括字符设备(Character Device)和块设备(Block Device)。字符设备主要指字符的输入输出设备如键盘、鼠标等。块设备主要指整块数据的输入输出设备,如FLASH、硬盘等存储设备,一般包含缓冲区机制。,35,设备文件,查看设备文件命令ls l例:-rw-r-r- 1 root root 2915 08-03 06:16 a,36,设备文件,第1字段: 文件属性。总共有10个字母组成第一个字符表示文件类型。 -表示该文件是一个普通文件 d表示该文件是一个目录l表示该文件是一个链接文件c表示该文件是一个字符设备文件b的表示块设备文件p表示该文件为命令管道文件,与shell编程有关s表示该文件为sock文件。与shell编程有关的文件,37,设备文件,第1字段: 文件属性。总共有10个字母组成第1字段后9个字母表示该文件或目录的权限位。 r表示读 (Read) 、w表示写 (Write) 、x表示执行 (eXecute) 前三个表示文件拥有者的权限,中间三个表示文件所属组拥有的权限,最后三个表示其他用户拥有的权限。,38,查看文件,第2字段: 链接占用的节点如果是目录,则第2字段表示该目录所含子目录的个数第3字段:文件(目录)拥有者第4字段:文件(目录)拥有者所在的组第5字段: 文件所占用的空间(以字节为单位)第6字段:文件(目录)最近访问(修改)时间第7字段:文件名,39,根文件系统制作要点,根文件系统的制作步骤构建根文件系统,并创建相关文件按需配置BusyBox编译BusyBox,并安装到指定根文件系统创建根文件系统映像文件,40,根文件系统制作要点,构建根文件系统,并创建相关文件确定根文件系统顶层目录结构 在嵌入式Linux系统中,必须有的目录包括:/bin,/dev,/etc,/lib,/proc,/sbin,和/usr,其他目录都是可选的。(增加/mnt),41,根文件系统制作要点,构建根文件系统,并创建相关文件创建设备节点设备以文件的方式存取。一个具体设备采用主设备号和次设备号来标识。主设备号标示设备类型,每种设备类型对应一个设备驱动程序,一个主设备号可以有多个具体设备对应。次设备号用于区分具体设备,42,根文件系统制作要点,只需要一些必备的条目及符号链接就可以满足系统的运行。基本的/dev条目包括:文件名 说明 类型 主编号 次编号 权限位mem 物理内存存取 字符 1 1 600 null 黑洞设备 字符 1 3 666zero 以null byte 字符 1 5 666 为数据来源random 随机数产生器 字符 1 8 644,43,根文件系统制作要点,tty0 现行的虚 字符 4 0 600 拟控制台tty1 第一个虚 字符 4 1 600 拟控制台ttyS0 第一个UART 字符 4 64 600 串行端口tty 现行的控制台 字符 5 0 666console 系统控制台 字符 5 1 600,44,根文件系统制作要点,创建/dev中的条目:(使用mknod命令)mknod 设备名 设备类型 主设备号 次设备号控制台设备,所有的输入输出都通过此设备完成 sudo mknod console c 5 1 空设备 # sudo mknod null c 1 3对于常用设备,Linux有约定俗成的编号,如硬盘的主设备号是3这些设备文件是Linux很多驱动程序正常的工作的基础,45,根文件系统制作要点,制作根文件系统的镜像 根文件系统的目录结构和内容都准备好了之后,需要把它制成一个镜像文件,以便于将其下载到开发板上。,46,47,48,根文件系统制作实例,一、创建文件系统所需的目录二、通过Busybox实现文件夹/bin、/sbin和文件linuxrc内容制作三、其他文件制作1、/dev下建立设备节点文件2、/etc下建立配置文件3、主机/etc/下面的文件passwd, group, shadow到/etc4、usr/init,49,根文件系统制作实例,一、创建文件系统所需的目录1、在/home目录下,建立rootfs的文件系统所需的目录 # sudo mkdir rootfs2、在root文件夹中建立基本的目录 #sudo mkdir dev home proc tmp var boot etc lib mnt root sys usr,50,根文件系统制作实例,二、通过Busybox实现文件夹/bin、/sbin和文件linuxrc内容制作,,51,根文件系统制作实例,1、下载 busybox,并解压。下载busybox源代码:http:/ CES-6410教学平台Linux实验第5.2节实验三解压源码:sudo tar jxvf busybox-1.15.2.tar.bz2,52,根文件系统制作实例,2、进入busybox,修改Makefile中的arch和编译工具路径。使用动态链接方式编译时需要把交叉编译动态链接库文件复制到对应目录中。CROSS COMPILE ?=/usr/local/arm/4.2.2-eabi/usr/bin/arm-linux-ARCH ?=arm,在164行,在190行,53,根文件系统制作实例,3、修改配置选项make menuconfig Busybox Setting- build option- (用共享库(动态库) 选中Build shared libbusybox,将交叉编译的动态链接库或符号链接复制到对应的目录中。,54,根文件系统制作实例,3、修改配置选项Busybox Setting- installation option- 选中Dont use /usr。否则make install 后busybox被安装到宿主系统的/usr目录下,这将覆盖掉系统原有的命令。选择该项后,make install 后会在busybox目录下生成一个叫_install的目录,里面有busybox和指向它的链接,55,根文件系统制作实例,3、修改配置选项Busybox Setting- Busybox Library Tuning -(增加 shell的一些有关操作) 其他用默认值,56,根文件系统制作实例,4、编译busybox。 # sudo make install 安装工程文件到系统中 在busybox/_install目录下生成文件夹bin、sbin和文件linuxrc,57,根文件系统制作实例,5、修改_install/bin/busybox的属性为4755。 # sudo chmod 4755 ./_install/bin/busybox chmod设置文件权限,一般三位数(后三位),第一个数字表示文件所有者的权限,第二个数字表示与文件所有者同属一个用户组的其他用户的权限,第三个数字表示其它用户组的权限。权限分为三种:读(r=4),写( w=2 ) ,执行( x=1 ),综合起来还有可读可执行( rx=5=4+1 ) 、可读可写( rw=6=4+2 ) 、可读可写可执行(rwx=7=4+2+1)。 所以chmod 755 设置用户的权限为: 1.文件所有者可读可写可执行 2.与文件所有者同属一个用户组的其他用户可读可执行 3.其它用户组可读可执行.,58,根文件系统制作实例,5、chmod 4755与chmod 755 的区别 开头多了一位,这个4表示其他用户执行文件时,具有与所有者相当的权限。 例如:root用户创建了一个上网认证程序netlogin,如果其他用户要上网也要用到这个程序,那就需要root用户运行chmod 755 netlogin命令使其他用户也能运行netlogin,但是netlogin执行时可能需要访问一些只有root用户才有权访问的文件,那么其他用户执行netlogin时可能因为权限不够还是不能上网,这种情况下,就可以用 chmod 4755 netlogin 设置其他用户在执行netlogin也有root用户的权限,从而顺利上网.,59,根文件系统制作实例,6、把busyox/_install目录下生成的文件拷到rootfs下 # sudo cp -a ./busybox-1.15.2/_install/* .-a最主要的用法是在保留原文件属性的前提下复制文件,60,根文件系统制作实例,三、其他文件制作1、/dev下建立设备节点文件dev/console,dev/null,dev/ttyS0,dev/ttySAC0。其他设备节点根据具体需要再建立。 # sudo mknod dev/console c 5 1 # sudo mknod dev/null c 1 3 # sudo mknod dev/ttySAC0 c 204 64 # sudo mknod dev/ttyS0 c 4 64.,61,根文件系统制作实例,2、/etc下建立配置文件 1)建立文件# cd etc # sudo touch fstab group inittab mdev.conf passwd profile shadow # cd . # sudo mkdir etc/init.d # sudo touch etc/init.d/rcS,创建文件,62,根文件系统制作实例,2、/etc下建立配置文件 2)编辑profile文件,加入下面内容: #!/bin/sh #/etc/profile:system-wide .profile file for the Bourne shells echo -n Processing /etc/profile. # Set search library path export LD_LIBRARY_PATH=/lib:/usr/lib # set user path export PATH=/bin:/sbin:/usr/bin:/usr/sbin #Set PS1 set USER = id -un LOGNAME=$USER export PS1=uhW$ PATH=$PATH echo Done!,63,根文件系统制作实例,2、/etc下建立配置文件 2)常见的环境变量 PATH LD_LIBRARY_PATH是环境变量,用于指定查找共享库时显示默认路径外的其他路径LOGNAME:是指当前用户的登录名。HOSTNAME:是指主机的名称,许多应用程序如果要用到主机名的话,通常是从这个环境变量中来取得的。PS1:是基本提示符,对于root用户是#,对于普通用户是$。PS2:是附属提示符,默认是“”。可以通过修改此环境变量来修改当前的命令符。,64,根文件系统制作实例,2、/etc下建立配置文件3)编辑fstab,加入下面内容: proc /proc proc defaults 0 0 none /tmp ramfs defaults 0 0 none /var ramfs defaults 0 0 sysfs /sys sysfs defaults 0 0 说明: fstab文件描述系统中各种文件系统的信息,应用程序读取该文件,根据其内容进行自动挂载。,65,根文件系统制作实例,2、/etc下建立配置文件3)编辑fstab说明第一列为设备名称、第二列为挂载点。作用是告诉mount命令,我想挂载什么分区或者什么设备,以及我所希望的挂载点在哪里。在 fstab中为某一个设备指定的挂载点是其默认挂载点,也就是当你在挂载目录的时候没有手工指定其他目录的话,系统就将该设备挂载到这个目录。第三列指示了设备或者分区的文件系统类型。它支持很多种类的文件系统,如果想了解你的kernel目前支持哪 些文件系统,可以查看/proc/filesystems的内容。如果这个字段定义为swap,这条纪录将关联到一个用于交换目的的文件或分区。如果这个 字段定义为ignored,这行将被忽略。这对于显示目前没有使用的分区非常有用。,66,根文件系统制作实例,2、/etc下建立配置文件3)编辑fstab说明第四列表示设备或者分区所需要的挂载选项,包括rw、suid、dev、exec、auto、nouser、 defaults等。defaults表示所有选项全部使用默认配置,一般用户没有特殊需求,直接使用defaults就可以了。,67,根文件系统制作实例,2、/etc下建立配置文件3)编辑fstab说明第五列是表示dump选项,是一个备份工具。dump工具通过这个选项位置上的数字来决定文件系统是否需要备份。如果是0,dump就会被忽略,事实上,大多 数的dump设置都是0。第六列是fsck选项,是一个文件系统扫描检查工具。fsck命令通过检测该字段来决定文件系统通过什么顺序来扫描检查,根文件系统对应该字段的值应该为 1,其他文件系统应该为2。若文件系统无需在启动时扫描检查,则设置该字段为0。,68,根文件系统制作实例,2、/etc下建立配置文件4)编辑inittab,加入下面内容: console:sysinit:-/etc/init.d/rcS ttyS0:respawn:-/bin/sh :ctrlaltdel:/bin/umount -a -r :shutdown:/bin umount -a -r :shutdown:/sbin/swapoff -a 说明:在启动时候,按文件的配置做一些重要的工作,如默认启动级别,69,根文件系统制作实例,2、/etc下建立配置文件4)inittab语法 :Id在执行时默认扩展为/dev/id,如ttyS0扩展为/dev/ ttyS0runlevel定义本行适用的运行等级,在busybox中被忽略process 指本项指定运行的程序,70,根文件系统制作实例,2、/etc下建立配置文件4)inittab语法,Actionrespawn,只要进程一停止,该进程就重新启动askfirst,与respawn类似,只是在程序运行前会在终端显示“Please pressEnter to activate this consolesysinit,只要系统引导,该进程便运行,优先于boot与bootwaitwait,进程只运行一次,init将一直等待它结束,再执行其它命令once,进程只运行一次ctrialdel,当init收到SIGNT信号时(按下ctrl+alt+del)时,进程运行 shutdown 关闭系统,71,根文件系统制作实例,2、/etc下建立配置文件5)编辑 rcS,加入下面内容: #!/bin/sh # set hostname, needed host file in /etc directory #./etc/host #hostname cat /etc/host source /etc/profile # mount all filesystem defined in fstab echo # mount all. /bin/mount -a #mount -t proc proc /proc #/bin/chmod 0666 /dev/null echo # starting mdev. /bin/echo /sbin/mdev /proc/sys/kernel/hotplug mdev -s echo * echo * RootFS by YAFFS2, S3C6410 * echo * Created by Haitianxiong 2009.10.27 * echo * Shenzhen Haitianxiong Electronic Co.,Ltd.(China) * echo * http:/www.ces- * echo * source /usr/init echo /bin/sh,72,2、/etc下建立配置文件5)编辑 rcS说明 rcS为启动脚本source /etc/profile;执行/bin/mount a;挂载 mdev s;调用/sbin/mdev扫描sys下的class和block中所有目录,一般启动时执行一次改变其权限: # chmod 777 etc/init.d/rcS,根文件系统制作实例,73,根文件系统制作实例,3、usr/init编辑init,加入下面内容: #!/bin/sh ifconfig eth0 192.168.0.20 up ifconfig lo 127.0.0.1 内核启动完成后运行的第一个程序是init,所有的应用程序都是它的子进程,它在系统运行期间一直驻留在内存运行,直到系统关闭。init程序启动后会根据inittab文件的内容启动指定的系统服务。eth0网卡1, eth1 网卡2up启动指定网络设备lo回环地址改变其权限: # chmod 777 usr/init,74,根文件系统制作实例,4、创建空的mdev.conf文件 # sudo vi mdev.conf,75,根文件系统制作实例,四、复制主机/etc/下面的文件passwd, group, shadow到/etc # cp /etc/group etc/ # cp /etc/passwd etc/ # cp /etc/shadow etc/,76,根文件系统制作实例,六、因为编译的时候使用的是动态链接。所以先看看/busybox/_install/bin/busybox使用了哪些lib,然后从glibc复制相应的lib到lib中。#cp /usr/local/arm/4.2.2-eabi/lib/ld* lib #cp /usr/local/arm/4.2.2-eabi/lib/libc-2.3.2.so lib #cp /usr/local/arm/4.2.2-eabi/lib/libc.so.6 lib #cp /usr/local/arm/4.2.2-eabi/lib/libm* lib #cp /usr/local/arm/4.2.2-eabi/lib/libcrypt* lib,77,根文件系统制作实例,至此,简单文件系统制作完成,78,制作根文件系统镜像,制作yaffs2镜像文件-用自己制作的根文件实现yaffs2镜像文件制作工具(生成镜像文件):mkyaffs2image (5.2节实验四)拷贝到根目录usr/sbin下修改制作工具的执行权限为777 sudo chmod 777 usr/sbin/mkyaffs2image用命令制作镜像文件 sudo mkyaffs2image rootfs rootfs.yaffs2 在当前文件下生成rootfs.yaffs2文件,此为根文件系统镜像文件,