Linux文件系统制作


1、概述
文件系统就是管理外存上数据的逻辑结构,是存储、组织计算机文件和数据的一种方法,更严格地说,是一套实现了数据的存储、分级组织、访问和获取等操作的抽象数据类型(Abstract data type),通过它来访问、查找文件和数据很容易。外存数据在硬盘就是具体位置,用代码表述的话就是起始地址,但是看着不直观,操作也不方便,有文件系统弄出文件及目录的概念来翻译转换这些数据区域操作更方便。打个比方:一本书中就好比文件系统,目录及内容就是被文件系统管理的正文,有了目录,读写查找书的内容才方便。
hello.txt ---文件系统 翻译--->扇区0 扇区1 ....(扇区或是块都描述大小的单位是xxx字节,32位系统一般是4K)

Linux管理分区的是目录挂的形式,就是通过目录来读写分区。根文件系统就是内核启动好后挂载的第一个文件系统,挂在位置是'/',就是根目录。

2、制作过程
制作文件系统得分为两个方面来讲:内容和格式。
(1)、文件系统内容
A、系统命令及软件
/bin/*、/sbin/*、/usr/bin/*、/usr/sbin/*、/linuxrc
上述命令怎么来呢?一般使用开源的busybox编译出来,步骤如下:
(a)、下载源码
BusyBox各版本下载:
(b)、修改顶层目录下的Makefile
解压后,如果默认编译出来的是x86系统下的命令,如果要编译arm平台下的命令,就得交叉编译。修改Makefile指定交叉编译工具链和体系平台,或是通过Make menuconfig中的选项来指定。
修改Makefile的示例:
CROSS_COMPILE ?= arm-linux-
...
ARCH ?= arm

make menuconfig示例:
$ make menuconfig
Busybox Settings  --->
    (arm-linux-)  Cross Compiler prefix
上述方法选一即可。

(c)、选配命令
$ make menuconfig
Busybox Settings  --->
    [ ] Build BusyBox as a static binary (no shared libs)    --->busybox使用共享库
    Installation Options  --->
    (./_install) BusyBox installation prefix        --->busybox编译出来的命令安装路径
其他大多是关于命令的选项,可以根据需求来选择

(d)、编译安装
$ make
$ make install
完成后就会在源码目录下出现一个新目录_install,里面就是命令。

B、共享库
共享库来自于交叉编译工具链,一般在交叉编译工具链目录的arm-xxx目录下找,把需要的共享库*.so.*拷贝到_install目录下的lib目录下。

C、脚本及配置文件
在_install目录下创建一个etc目录,用于编写存放脚本和配置文件。
内核初始化好后会加载系统的第一个进程init守护进程,该进程需要读/etc/inittab文件
inittab示例内容如下:
#是注释
#指定初始化脚本
::sysinit:/etc/init.d/rcS
#指定终端
::askfirst:/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/sbin/swapoff -a

根据inittab的配置就需要etc/init.d/rcS
etc/init.d/rcS示例如下:
#挂载/etc/fstab指定的设备
mount -a
#支持热插拔设备
#根文件系统会自动生成设备文件
/bin/mount -t tmpfs mdev /dev
echo /sbin/mdev > /proc/sys/kernel/hotplug
/sbin/mdev -s

根据etc/init.d/rcS初始化脚本的内容,就需要etc/fstab
etc/fstab示例内容如下:
#device        mount-point    type    options        dump    fsck    order
proc        /proc        proc    defaults    0    0
none        /tmp        ramfs    defaults    0    0
sysfs        /sys        sysfs    defaults    0    0
mdev        /dev        ramfs    defaults    0    0
var        /dev        tmpfs    defaults    0    0

系统配置文件profile,一般用来指定环境变量,终端提示符等
profile示例内容如下:
USER="root"
LOGNAME=$USER
PS1='[root@\h\W]\# '
PATH=/sbin:/bin:$PATH

准备空目录
/dev        --->设备文件所在目录,etc/init.d/rcS中的mdev自动生成
/sys        --->设备信息所在目录,运行时驱动自动导出
/proc        --->设备信息所在目录,运行时内核自动导出
/tmp        --->临时文件所在目录
/var        --->日志文件所在目录

这样文件系统的基本内容就出来。

  • 1
  • 2
  • 下一页

相关内容