根文件系统制作
1.创建目录:
a) 一级目录:mkdir rootfs(该文件名可随便取)
b) 二级目录:mkdir usr bin dev mnt etc proc sbin sys tmp var lib
c) 三级目录:mkdir usr/bin usr/lib usr/sbin lib/modules
d) 注意:二三级目录是固定的。
2.在/dev目录下创建设备文件
a) mknod -m 666 console c 5 1
b) mknod -m 666 null c 1 3
3.在/etc 目录下加入启动配置文件
a) fstab
b) init.d
c) inittab
d) profil
4.添加内核模块
a) 进入内核源码目录
b) make modules ARCH=arm CROSS_COMPILE=arm-linux-
c) make modules_install ARCH=arm INSTALL_MOD_PATH=所建根目录
5.制作busybox 工具,安装到bin 目录下
a) 配置busybox
i. 使用静态链接
ii. 交叉编译工具:arm-linux-
iii. 不适用 /usr目录,填写installation Prefix(需要安装在哪个目录下)
b) 编译
i. make
c) 安装
i. make install
d) 效果:在sbin 和 bin 目录下生成相依的 可执行文件
6.挂载根文件系统
a) 基于内存的文件系统:
i. Ramdisk
ii. Initramfs
b) 基于网络
i. NFS:
ii. 原理:开发板启动内核时启动NFS网络系统与PC机实时通讯,只要修改PC机器文件上的内容,既可修改开发板上的内容
c) Initramfs制作:
i. 在所制作的根文件的目录下创建软链接,将busybox 链接成init文件
1. ln -s ./bin/busybox init
2. 进入内核源码目录,配置 make menuconfig
3. 在GERNEL SETTING中选中支持 initramfs,并修文件系统所在路径
4. 编译内核
5. 启动开发板。配置环境:bootargs 将参数传给内核
a) setenv bootargs noinitrd consol=ttySAC0 115200
NFS 文件系统制作
d) make menuconfig 进入文件系统
e) 选中 ROOT FILE SYSTEM ON NFS
f) 启动宿主机器的 NFS 服务
i. 安装nfs服务器:
1. 挂载光盘。或者在/media 中的Package 目录下 我用的是红帽企业版6.3的
2. 执行以下命令
rpm -ivh keyutils-1.4-4.el6.x86_64.rpm
rpm -ivh libevent-1.4.13-4.el6.x86_64.rpm
rpm -ivh libgssglue-0.1-11.el6.x86_64.rpm
rpm -ivh libtirpc-0.2.1-5.el6.x86_64.rpm
rpm -ivh rpcbind-0.2.0-9.el6.x86_64.rpm
rpm -ivh nfs-utils-lib-1.1.5-4.el6.x86_64.rpm nfs-utils-1.2.3-26.el6.x86_64.rpm (此2个包同时安装)
ii. 配置PC机 vi /etc/export
1. /共享目录 192.168.1.*(rw,sync,no_root_squash)
iii. 启动 /init.d/nfs restart
g) 启动uboot.配置环境变量
i. setenv bootargs noinitrd //给内核传递参数
ii. console=ttySAC0,115200 //串口0当做控制台
iii. init=/init //初始化工具
iv. root=dev/nfs rw
v. nfsroot=192.168.1.10:/nfs服务目录,proto=tcp,nfseveres=3
vi. ip=192.168.1.6:192.168.1.10:192.168.1.1:255.255.255.0::eth0:off
Yaffs2文件系统应用及制作
制作步骤:
1、建立根目录文件,步骤和NFS文件系统制作一样。
2、使用镜像生成工具:mkyaff2image工具执着生成镜像文件。
3、下载到NandFlash 对应的分区中去
如何下载到对应的分区呢?关键点查看MTD子系统,既对mtd_partition 结构体的搜索,每个开发板的FLASH驱动都会对应该结构体,TQ210在s3c_nand.c文件中,这个结构体里面对应分区。所以下载的时候应该要把文件系统的镜像文件下载到指定的位置中去,这样内核在启动时就可以在flash 中把下载好的代码搬运到内存中去运行。
这里又引出一个问题,uboot 如何将代码搬运的呢?这个我们在裸机时候就知道,CPU上电时候,先运行固话在SROM中的代码,再判断启动位置,(假设启动位置是Nandflash)之后自动将启动位置的前16K代码搬运到SRAM中运行...
第一段运行的是Uboot,很明显,如果想要CPU自行启动内核,那么启动参数应该要在启动时设置好,也就是在Uboot的某个文件中配置,uboot中的某个驱动文件将这些这些参数作为代码搬运的依据,当代码搬运完成后,将指针跳转到内存中运行,既能正常启动我们的内核了。(uboot的作用就是支持前期初始化,提供命令操作,既下载、代码搬运。)
说完启动流程,关键的还是Flash中存在代码才行啊!
下载可以多种方式,可以直接使用Uboot 下载,将每个模块下载到内存地址中去,在将内存数据转移到NandFlash中去,这样是不是多此一举啊?
说这么多,配置文件在哪?在 uboot/include/configs/目录中对应的头文件
如果不知道,启动下载好的uboot ,打印环境变量,之后在选择其中一个进行检索
grep “哪个标志” -rn ./configs/
找到之后配置启动命令:
配置其中的 CONFIG_BOOTARGS
CONFIG_BOOTCOMMAND
nandread <内存地址> <Nandflash分区地址起始> <Nandflash分区地址结束>
这里可以看到,uboot启动时只是搬运内核代码,并没有搬运文件系统,那么就可以说文件系统是在内核启动后,内核自动将其挂载
jffs2文件系统制作和以上差不多
mkfs.jffs2 [options] -r 根目录 -o 输出文件名
等等的文件系统制作工具
TMPFS文件系统
1、tmpfs是以虚拟内存为基础的文件系统,它的大小可以根据实际的内容缩放。但是它的内容会在重新开机后丢失,可适当用来存放临时文件。如/tmp目录。权限 777
2、内核启动挂载,可在/etc/init.d/rcS文件中配置:mount -t tmpfs none /tmp -o size=4m (size指明大小)