1、根文件系统包括内容
内容:
/bin 、/sbin、/usr/bin 、/usr/sbin---> 命令 由busybox软件来生成
/dev ---> 设备文件
/proc---> 导出系统信息
只在系统运行时才具有,存放系统运行时的信息。
/sys ---> 导出设备信息
在内核运行时,设备运行时,才会将设备信息存放在这里。
/lib ---> 共享库
例如系统很多地方会调用printf,每调用一次会创建栈,当同时使用
很多时存在很大的栈空间被使用,而采用共享库,大家都使用同一
个空间,这样不存在空间被浪费。
/etc ---> 脚本及配置文件
系统启动时会从这里读取脚本文件执行,因此将init.d/rsC存放在这
里,etc/inittab/profile
/var ---> 系统日志
/tmp ---> 临时文件
挂载点
/
内核完成挂载
2、根文件系统制作
(姜先钢笔记有具体步骤但是采用的是生成文件系统镜像后烧写,老潘的是采用将本地板子的NANDflash作为设备挂载到本地/mnt目录,然后将做好的文件系统全部拷贝到nandflash中,这就相当于烧写进nand,方便)
A、命令
使用busybox编译出来 例如在终端输入busybox ls 命令 会显示当前文件夹里面内容 :首先是将busybox这个字符给shell,让shell解析命令,然后调用busybox软件,将ls命令传给busybox软件,从而显示文件夹内容。说明ls是busybox里面支持的命令。
(1)、指定交叉编译工具链
修改源码顶层目录Makefile
CROSS_COMPILE ?= arm-linux-
ARCH = arm
(2)、选配 通过命令make menuconfig 显示出界面
Busybox Settings --->
[ ] Build BusyBox as a static binary (no shared libs) (NEW) 编译时作为静态库,当应用程序使用的库与文件系统编译出来的库不一致时会导致应用软件不能运行。
(3)、编译
# make
(4)、安装
# make install
首先在 busybox目录下 打开#cd _install 会见到已经生成了命令文件
bin linuxrc sbin usr
再手动在这个文件夹下面创建以下目录
#mkdir dev etc mnt proc var tmp sys root
(5)、共享库lib
此库是用的编译工具的lib库,将编译工具的lib库拷贝到_install文件中,
cp (路径)arm-cortex_a8/arm-cortex_a8-linux-gnueabi/lib/ ./ -a
全部拷贝
将库中静态文件 及lib/libstdc++*删除
(6)、配置启动脚本(可参见姜的笔记)
BootLoader--加载内核-->kernel--mountfs(挂载文件系统)--> 加载执行init--解析inittab-->sh(sh解释执行rcS)
初始化脚本rcS
在etc下添加文件inittab 文件内容见姜
创建init.d文件夹,在init.d下创建rcS文件
在etc下添加文件fstab
在etc下添加profile文件
当以上步骤完成后#mknod dev/console c 5 1
(7)、测试根文件系统
测试根文件系统内容正确性
#cd /nfs
#mkdir rootfs 新建立一个文件夹来保存新生成的根文件系统
#cp _install/* rootfs –a 将新的根文件系统拷贝到rootfs中
#chmod 777 /nfs/rootfs/ //挂载后不能在里面创建文件。 原因是权限问题
(8)、烧写根文件系统到nand中(老潘特有)
==================================================
烧写根文件系统的内容
1、挂载拷贝
A、u-boot
擦除fs分区
在u-boot下擦除内核分区从400000 10000000
B、然后重新启动,加载网络文件系统(nfs)
C、nfs共享目录下准备两个目录(在目标板和PC机共享的目录下再创建一个文件jffs,将新的根文件系统拷贝到这里面来)
Mnt(目标板上的)用于挂载nand fs分区
jffs目录用于存放要烧写的根文件系统内容
确定之前内核jffs2被选中 makemenuconfig中选择
Filesystems --->
[*]Miscellaneous filesystems --->
<*> Journalling Flash File System v2 (JFFS2) support
D、挂载
#mount -t jffs2 /dev/mtdblock2 /mnt 将nand中第二分区以jffs2格式挂载到目标板上/mnt上。
E、拷贝
#cp -a /jffs/* /mnt 将jffs文件中的全部内容拷贝到/mnt文件,相当于烧写到nand中
F、u-boot设置内核启动参数 注意内核从哪里启动
$ set bootargs init=/linuxrc console=ttySAC0,115200root=/dev/mtdblock2 rootfstype=jffs2 设置根文件系统在nand中第二分区
3、将PC机作为客服端,将PC机中文件挂载到目标板上的一个文件中
# mount -t nfs -o nolock 10.0.0.111:/home/fstest /mnt
PC机IP 需要挂载的目录 目标板的目录
4、制作yaffs
给内核打补丁,以支持yaffs文件系统格式
(1、没有加;2、原有,改动后替换)
A、解压源码
# tar xvf yaffs2-8e93b99.tar.gz
B、给内核源码打补丁(追加功能代码)
yaffs2-8e93b99# ./patch-ker.sh c m/media/work/kernel/linux-3.9.8
内核功能选配
#make menuconfig
File systems --->
[*] Miscellaneous filesystems --->
<*> yaffs2 file system support
-*- 512 byte / page devices
-*- 2048 byte (or larger) / page devices
[*] Autoselect yaffs2 format
编译完成则内核支持yaffs文件系统格式
VxWorks 与linux实时性比较?