嵌入式Linux根文件系统制作

本文详细介绍了嵌入式Linux根文件系统的重要性和组成,包括根目录的创建、busybox工具集的使用、初始化文件的创建,以及镜像制作的过程。通过实验环境的设定,讲解了从创建必要的系统目录到利用busybox编译安装,再到配置初始化文件如inittab、rcS等,最后制作根文件系统镜像的方法。文章还提及了设备节点的管理,推荐使用mdev来动态创建设备文件。
摘要由CSDN通过智能技术生成


1. 引言

根文件系统作为类unix系统至关重要的一部分,服务于用户层和操作系统,相信很多接触这类操作系统的工程师知道这个概念的存在,并且随时在和它打交道,但相当一部分人对它知之甚少。本文通过目录说明、busybox工具集、初始化脚本、镜像制作等几部分简单说明一下根文件系统的组成及挂载后的系统初始化过程。

实验环境:

主机系统--ubuntu 12.04

busybox版本—1.25.0

arm交叉编译工具链—arm-linux-gnueabi

目标平台--qemu模拟arm平台vexpress-a9开发板

2. linux根文件系统目录概述

linux文件系统中每个目录都有自己的使命,对它们的定义和使用规范来自于FHS(filesystem hierarchy standard),该文档是根文件系统基本指导思想,这里不做过多描述。本文主要是应用方面的说明,我在linux的用户手册里摘抄并翻译了这些目录的描述,部分常见目录的描述如下:

/

整个目录树的起点,根目录

/boot

包含bootloader需要的静态文件。该目录只包含在系统引导过程中需要的文件,映射安装工具和配置文件应该在/sbin和/etc目录中。

/dev

特定文件或设备文件,比如物理设备文件

/etc

包含本机的配置文件。比较大的软件包,例如X11,也可以在该目录下创建单独的子目录。

所有的配置文件可能在该目录或是/usr/etc目录。但是程序应该在该目录定位配置文件,你可以链接/usr/etc中的文件到该目录中。

/home

直接或间接的存放不同机器不同用户的家目录。该目录结构取决于本地系统管理员的决定。

/lib

该目录下存放共享库和可加载驱动程序,共享库用于启动系统。运行根文件系统中的可执行程序

/media

该目录包含可移动存储设备的挂载点,例如CD、DVD或USB设备

/mnt

该目录是一个用于临时挂载的文件系统的挂载点,在一些linux发行版中,含有若干子目录,目的是为不同的临时文件系统提供挂载点。

/opt/

该目录应该存放包含静态文件的软件包。

/proc

proc文件系统的挂载点,proc文件系统提供了运行中的进程和内核的信息。

/root

root用户的家目录。

/sbin

类似于/bin,包含系统引导所需要的命令,这些命令普通用户不能执行。

/tmp

该目录用于存储临时性的文件,可能是不需要通知用户所删除的文件,常规性处理或系统引导时所产生的文件。

/usr

该目录通常挂载一个单独的分区,他应该只包含可分享的,只读的的数据,这样才能让运行linux的不同机器挂载。

/usr/bin

该目录是可执行程序的主目录。大多数程序用于普通用户执行,这些程序不用于引导系统或是修复系统,而且也不是本地安装的。

/usr/etc

分享到全站的配置文件可能存储在这个目录。然后,所有命令都应该在/etc目录中索引这些配置文件,在/etc/中的链接文件应该指向该目录中的配置文件

/usr/include

C编译器所用的头文件

/usr/lib

该目录存放目标库,包括动态库或不直接调用的增强程序。复杂程序可能有单独的子目录。

/usr/local

用于系统管理员安装软件的目录

/usr/local/bin

存储本地的二进制程序

/usr/local/doc

存储本地文档

/usr/local/etc

存储本地安装程序的配置文件

/usr/local/lib

存储本地安装程序的相关库文件

/usr/local/include

本地C编译器的头文件

/usr/local/info

本地安装程序的信息页

/usr/local/man

本地安装程序的用户手册

/usr/local/sbin

系统管理员安装系统程序到这个目录

/usr/local/share

本地应用数据,用于不同架构相同系统共享数据

/usr/sbin

该目录包含用于系统管理的二进制可执行程序,但不是用于引导、修复系统的基础程序

/usr/share

该目录存储特定应用程序数据的子目录,可用于不同架构相同os的机器之前实现分享。

/var

用于存储可能会有大小变化的文件,例如spool或log文件

/var/cache

程序数据缓存

/var/lib

程序的可变的状态信息

/var/lock

用于存储lock文件

/var/log

存储各种各样的log

/var/run

运行时可变文件,像存储进程PID或者是记录用户信息的文件

/var/spool

存储不同程序的spooled文件

 

更详细的说明请参考https://linux.die.net/man/7/hier

3.  创建文件系统必要的目录

创建根目录

mkdir rootfs

cd rootfs

创建系统目录

mkdir bin boot  dev  etc lib  mnt  proc root  sbin  sys tmp  usr  var

创建一些常用二级目录

mkdir etc/init.d etc/rc.d

mkdir usr/sbin usr/bin usr/lib usr/modules

mkdir var/lib var/lock var/run /tmp

4. busybox工具集

busybox下载

wgethttp://www.busybox.Net/downloads/busybox-1.25.0.tar.bz2 –no-check-certificate

编译器安装

sudo apt-get install gcc-arm-linux-gnueabi

环境变量设置

export ARCH=arm

export CROSS_COMPILE=arm-linux-gnueabi-

 

另外还可以使用下面的方法设置,只针对busybox设置,不影响其他的编译环境,在busybox根目录的Makefile中做如下修改:

CROSS_COMPILE ?= arm-linux-gnueabi-
#ARCH ?= $(SUBARCH)
ARCH ?= arm

配置busybox

make defconfig

执行make menuconfig定制自己的busybox,然而,可能会遇到的下面的问题:


                        图 4.1 busybox的menuconfig问题

 

这是你的主机系统没安装过ncurses软件包导致的,该软件包用于终端显示,menuconfig必须用到的,我们这里安装下好了:

sudo apt-get install libncurses5-dev libncursesw5-dev

尽管这里说明了可以通过menuconfig定制busybox,但是我们的实验中不需要做任何修改,默认配置已经满足需求。

在配置busybox的同时,有一个重要的部分需要说明,就是根文件系统下/dev目录下设备节点的创建,通过互联万网罗一下常见方法,其中有一篇文章写的比较清楚,基本有三种方法可以胜任这个工作,原文摘抄如下:

1. 手动创建:在制作根文件系统的时候,就在dev目录下

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值