如何制作Linux根文件系统

根文件系统一直是所有类Unix操作系统的重要组成部分,也可以认为是嵌入式Linux系统区别于其他传统嵌入式操作系统的重要特征。它给Linux带来了许多强大而灵活的功能,但也带来了一些复杂性。我们需要清楚地了解根文件系统的基本结构,仔细选择所需的系统库、内核模块和应用程序,并配置各种初始化脚本文件,以及选择合适的文件系统类型并将其放在实际存储设备的适当位置。

Linux的根文件系统以树形结构组织,包括内核和系统管理所需的各种文件和程序。一般来说,根目录“/”下的顶级目录都有一些固定的名称和用途。

下面列出了Linux根文件系统中常见的目录结构:

/bin存储二进制可执行命令的目录。

该目录包含所有用户都可以使用的基本命令。这些命令可以在挂载其他文件系统之前使用,因此/bin目录必须与根文件系统在同一个分区中。

/bin目录下常用的命令有:cat、chgrp、chmod、CP、ls、sh、kill、mount、umount、mkdir、mknod、[、test和其他"["命令其实就是测试命令。当我们使用Busybox制作根文件系统时,在生成的bin目录中可以看到一些可执行文件,也就是一些可用的命令。

存储设备文件的/dev目录。

设备文件存储在这个目录中,这是Linux中特有的文件类型。在Linux系统下,各种设备都是以文件的形式访问的,即通过读写一个设备文件来操作一个特定的硬件。比如串口0可以通过“dev/ttySAC0”文件操作,MTD设备的第二个分区可以通过“/dev/mtdblock1”访问。

/etc存储系统管理和配置文件的目录。

各种配置文件都存储在这个目录中。对于PC上的Linux系统,/etc目录下有很多文件和目录。这些目录文件是可选的,它们取决于系统中的应用程序以及这些程序是否需要配置文件。在嵌入式系统中,这些内容可以大大减少。

/home用户的主目录,比如用户的主目录是/home/user,可以用~user来表示。

用户目录,这是可选的。对于每一个普通用户来说,在/home目录下都有一个以用户名命名的子目录,存放用户相关的配置文件。

/lib是动态链接* * *享库的目录。

这个目录存储* * *共享库和可加载(驱动),* * *共享库用于启动系统。运行根文件系统中的可执行程序,比如/bin /sbin目录中的程序。

/sbin是存储系统管理员使用的hypervisor的目录。

该目录存储系统命令,即只能由管理员使用的命令。系统命令也可以存储在/usr/sbin、/usr/local/sbin目录中。/sbin目录存储基本的系统命令,这些命令用于启动系统和修复系统。与/bin目录类似,/sbin可以在挂载其他文件系统之前使用,因此/sbin目录必须与根文件系统位于同一位置。

/sbin目录下的常用命令有:shutdown reboot fdisk fsck等。本地用户安装的系统命令放在/usr/local/sbin目录中。

/tmp通用的临时文件存储点

用于存储临时文件,通常是一个空目录,位于某些需要生成临时文件的程序所使用的/tmp目录下,所以/tmp目录必须存在并且可以访问。

/root系统管理员的主目录

root用户的目录,对应的,普通用户的目录是/home下的子目录。

/mnt system为用户临时挂载其他文件系统提供此目录。

用来临时挂载文件系统的挂载点通常是一个空的目录,也可以在里面创建一个空的子目录,比如/mnt/cdram /mnt/hda1。用于临时安装CD和硬盘。

/proc虚拟文件系统,可以直接访问它来获取系统信息。

这是一个空目录,通常用作proc文件系统的挂载点。proc文件系统是一个虚拟文件系统,它没有实际的存储设备。里面的目录和文件是内核临时生成的,用来指示系统的运行状态,也可以操作文件控制系统。

/usr是最大的目录,几乎所有要用的应用程序和文件都在这个目录里。

/usr目录的内容可以存储在另一个分区中,然后在系统启动后链接到根文件系统中的/usr目录。其中存储的程序和数据是* * *共享的,只读的,说明/usr目录中的内容可以在多台主机之间共享,这主要是符合FHS标准的。/usr中的文件应该是只读的,与其他主机相关的变量文件应该保存在其他目录中,比如/var。/usr目录可以在嵌入式系统中细化。

/var一些大文件的溢出区。

与/usr目录相反,/var目录存储可变数据,例如假脱机目录(邮件、新闻)、日志文件和临时文件。

-

一、移植环境:

1,Ubuntu 10.10分配

2、优步. bin

3.目标机器:FS_S5PC100平台。

4.交叉编译器ARM-Cortex _ A8-Linux-GNUEABI-GCC

-

二、移植步骤

1,源代码下载

我们选择的版本是busybox-1.17.3 . tar . bz2 .下载路径是:

/下载/

2.解压缩源代码

$ tar xvf busybox-1.17.3 . tar . bz2

3.输入源目录

$ cd busybox-1.17.3

4.配置源代码

$ make menuconfig

Busybox设置-& gt;

构建选项-& gt;

[*]将BusyBox构建为静态二进制文件(没有共享库)

[ ]强制NOMMU构建

[ ]支持大文件构建(用于访问文件& gt2 GB)

(arm-cortex_a8-linux-gnueabi-)交叉编译器前缀

()附加CFLAGS

5.编制

$ make

6.装置

busybox的默认安装路径是源目录中的_install。

$进行安装

7.输入安装目录。

$ cd _install

$ ls

bin linuxrc sbin usr

8.创建其他所需的目录。

$ mkdir dev等管理进程变量tmp系统根

9.添加库

在_install目录下创建一个lib文件夹,将工具链中的库复制到lib目录下。

$ mkdir库

$ CP/home/Linux/x-tools/arm-cortex _ A8-Linux-gnueabi/arm-cortex _ A8-Linux-gnueabi/lib/*。/lib/

删除所有目录,。o文件和。a文件下的lib和slim down库,以减少文件系统的大小。

$ rm *。o *。a

$ arm-cortex _ A8-Linux-gnueabi-strip lib/*

10,添加系统启动文件

在etc下添加文件inittab。

$ vim /etc/inittab

该文件的内容如下:

#除了在单用户模式下启动之外,它首先运行。

* sysinit:/etc/init . d/rcS

所选tty上的# /bin/sh调用

#在控制台上启动一个“ask first”shell(不管是什么)

* ask first:-/bin/sh

#重新启动初始化进程时要做的事情

* restart:/sbin/init

#重启前要做的事情

* ctrl altdel:/sbin/reboot

在etc下添加文件fstab。

$ vim /etc/fstab

该文件的内容如下:

#设备挂载点类型选项转储fsck顺序

过程/过程过程默认值0 0

tmpfs /tmp tmpfs默认值0 0

sysfs /sys sysfs默认值0 0

tmpfs /dev tmpfs默认值0 0

这里有三个文件系统:proc、sysfs和tmpfs。在内核中,默认情况下proc和sysfs都受支持,但tmpfs不受支持。我们需要添加tmpfs支持。

修改内核配置:

$ make menuconfigFile系统-& gt;

伪文件系统-& gt;

[*]虚拟内存文件系统支持(以前的shm fs)

[*] Tmpfs POSIX访问控制列表

重新编译内核

$ make zImage

在etc下创建init.d目录,在init.d下创建rcS文件。

$ mkdir /etc/init.d -p

$ vim /etc/init.d/rcS

rcS文件的内容是:

#!/bin/sh

#这是init进程调用的第一个脚本

/bin/mount -a

为rcS添加可执行权限:

$ chmod +x init.d/rcS

在etc下添加配置文件。

$ vim /etc/profile

文件内容是:

#!/bin/sh

导出主机名=远视

导出用户=root

导出主页=根

# export PS 1 = " \[\ u @ \ h \ W \]\ $ "

export PS 1 = "[$ USER @ $ HOSTNAME \ W]\ # "

PATH =/bin:/sbin:/usr/bin:/usr/sbin

LD _ LIBRARY _ PATH =/lib:/usr/lib:$ LD _ LIBRARY _ PATH

导出路径LD_LIBRARY_PATH

11,设备文件创建

根文件系统中必须有一个设备节点。在dev下创建一个控制台节点。

$ mknod开发/控制台c 5 1

重要提示:如果新创建的文件系统的大小超过8M,请删除不必要的库文件。