开发环境: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 进入该目录
20、执行命令:vim mdev.conf 创建mdev.conf。前边已经介绍mdev是一个udev的简化版本,主要用来支持一些热插拔设备。我们可以通过文件mdev.conf自定义一些设备节点的名称或链接来满足特定的需要,但在此处让它为空。
21、在启动过程中bootloader会传递参数init=/linuxrc给内核的main()函数,所以在文件系统被挂载后,运行的第一个程序是linuxrc,而linuxrc是一个指向/bin/busybox的链接文件,也就是说文件系统被挂在后运行的第一个程序是busybox。Busybox首先会解析文件/etc/inittab,这个文件中存放的是系统的配置信息,这些配置信息指明了接下来将要启动那些程序。
执行命令:vim inittab 创建 inittab文件
内容如下:
#/etc/inittab
::sysinit:/etc/init.d/rcS
s3c2410_serial0::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
/etc/inittab文件中每个条目用来定义一个子进程,并确定它的启动方法,格式如下
<id>:<runlevels>:<action>:<process>
<id>:表示这个进程要使用的控制台(即标准输入、标准输出、标准错误设备)。如果省 略,则使用与init进程一样的控制台。
<runlevels>:对于Busyboxinit程序,这个字段滑意义,可以省略。
<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进程先输出“PleasepressEntertoactviethisconsole”,等用户输入回车键之后才启动-/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 进入该文件夹
23、执行命令:vim rcS 编写rcS可执行文件,这是一个脚本文件,可以在里面添加想自动执行的命令。
内容如下
#!/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的属性,使它可执行。
25、执行命令:cd .. 返回上一级目录
执行命令:vim fstab ,创建fstab文件。
内容如下
#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
编写好之后,保存退出。
26、执行命令:cd .. 返回根文件系统目录
27、执行命令: mkdir dev 创建dev目录
28、执行命令:cd dev 进入该目录,准备创建设备节点
29、先后执行命令:sudo mknod console c 5 1
sudo mknod null c 1 3
因为mdev是通过init进程来启动的,在使用mdev构造 /dev 目录之前,init 进程至少要用到设备文件 /dev/console、/dev/null,所以要建立这两个设备文件。
30、执行命令:cd ../ 返回上一级目录
31、执行命令:mkdir proc mnt tmp sys root home 创建剩余的目录
到这里,在rootfs下就是一个非常小的根文件系统。我将这个根文件系统打包传上去了,如有需要,请自行下载
下一节:http://blog.csdn.net/mybelief321/article/details/10027917
分享到:
相关推荐
一步一步制作yaffs2根文件系统,一步一步制作yaffs2根文件系统,
2.解压后,进入到yaffs2目录下,通过yaffs2目录下的脚本文件patch-ker.sh来给内核打补丁 使用命令即可实现./patch-ker.sh c /home/linux-2.6.32.2 上面这个命令完成了三件事情(也可以手动修改实现) (1)修改内核fs/...
给内核打yaffs2文件系统的补丁 cd /mnt/hgfs/share tar –zxvf /mnt/hgfs/share/cvs-root.tar.gz –C /opt/studyarm cd /opt/stdudyarm/cvs/yaffs2/ ./patch-ker.sh c /opt/studyarm/linux-2.6.29.1/ 上面命令...
s/yaffs2/yaffs_vfs.c: In function 'yaffs_read_super': fs/yaffs2/yaffs_vfs.c:2383:2: error: implicit declaration of function 'get_sb_bdev' fs/yaffs2/yaffs_vfs.c: At top level: fs/yaffs2/yaffs_vfs.c:...
压缩包包含三个适用于Tiny6410的yaffs2根文件系统,mini_rootfs.yaffs2是最小的根文件系统,不是很完整的根文件系统,fix_mount_mini_rootfs.yaffs2添加了自动挂载功能,fix_udev_rootfs.yaffs2在添加了自动挂载功能...
s3c2440下 yaffs2文件系统制作详解,本人实践成功
期刊论文,介绍了一种制作YAFFS2嵌入式文件系统的方法, 详细介绍了在ARM处理器S3SC2440和嵌入式Linux 平台上建立YAFFS2 根文件系统的方法步骤。
实验环境的搭建: 交叉编译工具,内核源代码,根文件系统压缩包,yaffs2文件夹,Busybox源代码包,mkyaffs2image-128M工具 实验内容: 1.对标准Linux2.6.32内核源代码的修改,加上s3c2440的特性,配置,编译,烧写...
busybox编译,ok6410开发板yaffs2文件系统的制作和烧写。
yaffs yaffs2 文件系统正确补丁包 移植LINUX常用 CSDN有的下载的编译不正确,特发布正确的。
2.2、构建根文件按系统... 19 2.2.1、建立根文件系统目录... 19 2.2.2、建立动态链接库... 21 2.2.3 交叉编译Bosybox. 21 2.2.4 建立etc目录下的配置文件... 24 2.2.5 制作根文件系统映像文件... 26
在utu2440开发板上制作yaffs2根文件系统的详细步骤
YAFFS意义为‘yet another flash file system... YAFFS是目前为止唯一一个专门为NAND flash设计的文件系统,目前有YAFFS 和YAFFS2 两个版本,两个版本的主要区别之一在于YAFFS2 能够更好的支持大容量的NAND FLASH芯片。
yaffs 文件系统制作 解压工具
对在构建yaffs文件系统时出现的一些错误解决方法或建议
很详细的介绍yaffs2的数据结构,初始化,挂载,内存分布等。新手必看,老手回顾。
另一个yaffs根文件系统工具包,有时候工具没用对,制作出来的文件系统没法用
Yaffs2文件系统是转为Nand Flash设计的文件系统,是基于日志式的文件系统
YAFFS2文件系统的加载过程,具普遍性
YAFFS文件系统性能优越且易于移植,已经成功应用于linux、uClinux和Windows CE等嵌入式操作系统上。 YAFFS是目前为止唯一一个专门为NAND flash设计的文件系统,目前有YAFFS 和YAFFS2 两个版本,两个版本的主要区别...