根文件系统制作

Linux启动时,第一个必须挂载的是根文件系统;将基本的初始化脚本和服务等加载到内存中去运行

若系统不能从指定设备上挂载根文件系统,则系统会出错而退出启动。成功之后可以自动或手动挂载其他的文件系统。

linux 下的根文件系统制作主要采用busybox来进行制作

下载busybox: https://busybox.net/downloads/busybox-1.6.0.tar.bz2

解压busybox
# tar -xvf busybox-1.6.0.tar.bz2 .

编译busybox: 怎么编译在INSTALL中有说明

根文件系统制作_第1张图片

在进行编译时需要指定编译器和编译平台

# vi Makefile

# make menuconfig

在 make  menuconfig  选择了静态编译,指令了安装路径

根文件系统制作_第2张图片

根文件系统制作_第3张图片

具体项的配置说明可参考百度文库中的这个链接,大神写的很详细

https://wenku.baidu.com/view/5d25420602020740be1e9b0b.html

# make && make install 

编译时出现了两个错误

根文件系统制作_第4张图片

修改文件 applets/applets.c 第 21 行, 将 #error Aborting compilation. 注释

根文件系统制作_第5张图片

这个是编译工具链 netfilter.h 中少头文件 添加头文件:#include

这样就解决了busybox的编译问题

# make ARCH= arm CROSS_COMPILE=arm-linux-  这条命令中指定编译平台和编译器

# make CONFIG_PREFIX=/home/book/workspace/rootfs install  指定安装路径,

编译安装完成后在/home/book/workspace/rootfs会生成 bin, sbin linuxrc软连接文件(dev文件我后来创建的)

根文件系统制作_第6张图片

创建成功后接下来还需做什么工作呢?(借鉴大神图http://blog.csdn.net/czg13548930186)

根文件系统制作_第7张图片

mdev作用是在系统启动和热插拔或动态加载驱动程序时,自动创建设备节点。文件系统中的/dev目录下的设备节点都是由mdev创建的,mdev是通过init进程来启动的,在使用mdev构造/dev目录之前,init至少要用到设备文件/dev/console, dev/null,所以需要事先建立这两个设备文件

1,创建设备节点dev/console,dev/null

mkdir dev

cd dev

sudo mknod console c 5 1 

sudo mknod null c 1 3 

为什么主次设备号为5,1 和1,3 我们可以查看linux系统中的这两设备号

2. 创建必要的文件目录

# mkdir etc lib proc  sys root mnt tmp 

3. 构造/etc/inittab

 添加文件(可以参照busybox中的example)

根文件系统制作_第8张图片

vi  etc/inittab 
#/etc/inittab 

::sysinit:/etc/init.d/rcS        /* 具体含义参考 http://blog.sina.com.cn/s/blog_aa9fb81a0102wbbe.html */

ttySAC0::askfirst:-/bin/sh   /* /bin/sh是一个程序,会把标准输出、标准输入、标准错误定位到ttySAC0里面去,0号串号*/

::ctrlaltdel:/sbin/reboot

::shutdown:/bin/umount -a -r 

4. 添加库文件(我们的库文件是基于编译器的,所以拷贝的是编译器的库文件)

将编译器中此目录的库文件拷贝到lib中

cp *.so*  ~/workspace/rootfs/lib -d   // -d含义是带软连接拷贝

根文件系统制作_第9张图片

接下来就是来配置etc目录了:

touch etc/inittab etc/fstab

touch etc/init.d/rcS -p

既然/etc/inittab 是第一个执行的文件 ,那么从此文件中我们看到有个sysinit ,所以我们需要在/etc 下创建一个rcS文件。

这个文件里面我们可以添加想自动执行的文件,如配置电脑的ip,挂载/etc/fstab指定的文件系统等.

#!/bin/sh

ifconfig eth0 192.168.0.100

mount -a   //mount 某一具体的文件系统也行这里是mount所有。

 mount -t tmpts mdev /dev      //使用内存文件系统,减少对flash的读写

 mkdir /dev/pts                     //用来支持外部网络链接的虚拟终端       

mount -t devpts devpts    /dev/pts   

mount -t sysfs sysfs /sys     //mdev通过sysfs文件系统获取设备信息

echo    /sbin/mdev/    > /proc/sys/kernel/hotplug  //设置内核,当有设备插拔时调用/bin/mdev程序

mdev    -s         //在/dev 目录下生成内核支持的所有设备的节点

然后给文件添加执行权限

# chmod +x  etc/init.d/rcS
# chmod 777 profile inittab profile

mount -a 到底mount是什么东西呢?

它mount的是/etc/fstab中指定的文件系统 ,所以我们需要创建一个fstab

#device      mount_point    type     options    dump    fsck    order

  proc         /proc         proc     defaults    0        0    

  tempfs       /tmp          tmpfs    default      0        0

  sysfs        /sys          sysfs      default     0        0

  tmpfs        /dev          tmpfs    default     0        0

 

创建完这个个主要的目录文件后,我们还需要创建其他的文件,他们可以为空

mkdir  proc mnt tmp sys root  

这样一个简单的根文件系统就做好了,我们可以通过网络挂载的方式去使用这个文件系统,当然也可以将这个跟问价系统烧到我们的开发板中去使用,但是烧到开发板中使用,我们就得将这个文件打包成镜像文件,需要使用到的工具: mkyaffsimage,

mkdyaffsimage rootfs rootfs.yaffs

使用tftp烧写:

tftp  0x30000000  rootfs.yaffs   

nand erase  0xA0000000   0x36000000   //擦除指定地址的空间

nand write.yaffs  0x30000000   0xA0000000  (镜像的大小)

如果在开发板的文件系统中显示出现问题

不是:

而是:[\u@\h \W] \$这种形式的

需要在menuconfig 中添加支持

根文件系统制作_第10张图片

根文件系统制作_第11张图片

根文件系统制作_第12张图片

 

 

 

 

 

你可能感兴趣的:(文件系统)