/dev device的简写,意思是这个目录存放的全部是设备文件,linux将所有设备都抽象成文件放在这个目录,通过对文件的操作就可以控制设备,比如说硬盘,一般是sda打头的,可以通过 mount /dev/sda /mnt来挂载硬盘
/root 这个是系统管理员专用的目录,这里存放了一些引导系统的备份文件,文件系统挂载信息,系统修复工具备份工具等
/usr 这个目录存放的是共享、只读的程序和数据。
/var variable的简写,存放的是一些可变的数据,日志文件,临时文件什么的
/home 家目录,大家用过Linux应该都知道这个目录是干嘛的,这个目录相当于windows的我的文档,一般工作都在这个目录里进行。
/proc这是一个空目录,不过系统跑起来之后就不是空的了,里面的目录文件都是由系统生成的,但他并不在物理存储设备上有数据,是系统在内存上构建的,所有是个虚拟的家伙。里面包含了一些系统信息,cpu信息什么的
/bin 存放的普通命令的可执行文件
/sbin 存放的是系统命令的可执行文件
/etc 存放了很多配置文件,比如系统初始化脚本,挂载文件的配置文件等等
/boot 存放的是系统的bootloader和内核及其配置文件,一般嵌入式系统不需要这个目录,因为嵌入式bootloder都是单独放的一个分区
/lib 系统的库文件
/initrd 这个目录是空的,用来启动时挂载initrd.img镜像的,initrd.img镜像也是一种根文件系统,一般发行版得linux使用两阶段挂载根文件系统,第一次阶段使用initrd.img根文件系统,根文件直接在内存里运行,速度快,然后挂载硬盘上的根文件系统,这样可以加快速度,嵌入式一般不需要这个目录。
/tmp 临时文件目录
/mnt 临时挂载点
三,yaffs2文件系统的构建
Yaffs2能很好的支持flash,在嵌入式领域应用广泛,所以我们选择yaffs2
1 首先我们要根据需要创建一个根文件系统框架
参考上面的目录结构,我们不需要的是boot,initrd这两个目录,并增加一个sys目录,这个sys目录是busyBox的一个支持热拔插的程序mdev需要的目录
首先建一个总目录我命名为root_fs,然后建立好子目录
mkdir root_fs
cd root_fs
mkdir bin dev etc home lib mnt proc root sbin sys tmp
2 安装好busybox
进入busybox目录
Make menuconfig
进入busybox setting->
Build options->
选中 build busybox as a static binary和bulid with lager file support选项
表示使用静态库编译,支持大文件
再进入 busybox library tuning
选中vi-style line editing commands和fancy shell prompts设置命令行风格
然后编译,
Make
安装 make install
然后拷贝安装目录 _install下的所有文件 到我们先前建的root_fs目录下
cp _install/* ../root_fs -rf
3 在dev目录下创建两个设备节点
mknod console c 5 1
mknod null c 1 3
这两个是系统运行第一个初始化进程必需要使用的使用的俩个设备
C表示字符设备 再后面是主设备号和次设备号 用来指示操作系统找到驱动的
拷贝busybox的实例配置文件到etc下面
Cp ../busybox-1.15/examples/bootfloopy/etc/* ./
这里面有四个文件
Fstab init.d inittab profile
Busybox构建的根文件系统启动流程是这样的,先根据命令行参数init=linuxrc
启动linuxrc程序
Linurc根据inittab配置文件来启动相应的脚本或进程
Inittab格式:<id>::<runlevels>:<action>:<process>
现在我们修改inittab如下
这表示
运行的rcS脚本,运行级别为sysinit,该脚本要使用使用控制台
运行shell解释器,运行级别为askfirst,该进程要使用串口一
这个名字是由busybody产生的,s3c2410 s3c2440都是这个名
运行umount -a -r当按下ctr alt del组合键的时候
这里可以看到linuxrc通过inittab启动了rcS脚本
现在我们修改init.d目录下的rcS文件为
这文件是先设置PATH变量
再设置runlevel 和 prelevel变量
Mount -a会根据fstab挂载目录,修改fstab如下
挂载所需的文件系统
然后设置文件默认属性
然后挂载devpts文件系统 这个是用来支持外部网络链接虚拟中端得
重定向mdev输出到内核的hotplug文件来支持热拔插
运行mdev -s在/dev目录下生成内核支持的所有设备文件
从HOSTNAME文件读取主机名
所以
在/dev/下创建sysconfig目录再在此目录下创建HOSTNAME文件
修改HOSTNAME文件为JustDo
最好
修改profile
这是你登陆命令解释器的配置文件,他能够改变你命令行前面显示的内容
/W是当前目录名
最后一步:将所需的库文件全部拷贝到lib目录下,这个库文件在你所使用的交叉工具链中
cp /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib/* ./lib
好了 完成上面所有的步骤之后
使用mkyaffs2image工具编译好之后下载到开发板的根文件分区就可以跑了
如果出现
"Failed to execute /linuxrc. Attempting defaults...
Kernel panic - not syncing: No init found. Try passing init= option to kernel. "
有可能是你使用的mkyaffs2image工具不支持128M的flash
我的另外一篇博客已经提到怎么解决了
综上 系统启动的流程大概是这个样子的到处必要的环境变量,Mount上所需的分区,最后运行脚本解释器