8 构建linux根文件系统
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/opt/crosstool/4.9.4/arm-sice-linux-gnueabi/sysroot/lib/
其他函数库
jpeg库 png库 Qt库 需要移植(获取源码、并且交叉编译这些源码来得到对应的库)
添加系统配置文件
系统配置文件,一般需要自己编写,是linux系统在
引导是需要读取的,如果没有系统配置文件,将会导
/sbin: root用户能执行的基本程序 ▶int, insmod, route, mkfs, rmmod, ifconfig
/usr/bin: 更多非必须的用户程序 ▶autorun, bibtex, latex, biff, ftp, wc, whereis, whoami
/usr/sbin: 更多非必须的root工具程序 ▶automount, httpd, in.telnetd, in.talkd, sendmai
/proc
虚拟文件系统,用于内核和进程通讯
/sbin
基本的系统管理程序
/tmp
临时文件目录
/usr
更多的用户程序,包括X server
/sys
虚拟文件系统 sysfs 挂载点
/var
可变信息储存,如log等
程序文件的放置
程序文件目录
/bin: 普通用户和root用户都能执行的基本程序 ▶ping, mknod, mount, tar, grep, gzip, etc
BusyBox inittab文件
Action 类型 sysinit respawn askfirst wait once ctrlaltdel shutdown restart
描述 provide init with the path to the initialization script 程序终止后重新执行 同 respawn, 程序执行前会询问,要求按 ENTER 键 init 等待执行的程序结束后再继续执行 只运行程序一次,并且不等待程序运行完就继续执行 当按下 Ctrl-Alt-Delete 组合键时执行的程序 系统关机时执行的程序 系统重新启动时执行的程序, 通常是 init 程序
文件中,以”#”开头的是注释
文件中只有4行规则,如红色部分。
系统配置文件实例
/etc/init.d/rcS 文件样例如下:
#!/bin/bash # mount /etc/fstab spcified device # 开头的是注释 /bin/mount -a # mount devpts in order to use telnetd /bin/mkdir /dev/pts /bin/mount -t devpts devpts /dev/pts
致系统启动错误。下面是Linux系统的引导过程。
上电,启动u-boot
u-boot将内核从emmc 加载到RAM中启动
内核启动最后,挂载“/”, 任后启动1号进程(init)
u-boot zImage
init
inittab
init启动时,会读取配置文件 ”inittab”。 init进程是1号进程,是linux系统中所 有进程的祖先。 init进程是根据inittab文件来初始化整 个环境的。包括启动shell。
先看看嵌入式系统的典型分区
bootloader安装在mmc的最前面 ;
然后是内核 然后有一个分区专门做根文件系
统;
根文件系统
ext
根文件系统
mmc
内核 bootloader
制作嵌入式根文件系统的过程
制作嵌入式根文件系统的过程:
(1)新建一个目录,用于制作根文件系统
/home/sice/rootfs
配置Busybox
和配置Linux内核选项一样,在Busybox源码根 目录中输入make menuconfig命令:
编译并安装Busybox
配置如下:
Busybox Settings --->
将busybox静态链接
▶Build Options --->
➢[*] Build BusyBox as a static binary 指(n定o 交sh叉ar编ed译l器ibs)
➢(arm-linux-) Cross Compiler prefix
▶Installation Options ("make install" b指eh定av编io译r)后-的--安> 装路径
➢(/home/sice/rootfs) BusyBox installation prefix
配置好后,编译安装
构建linux根文件系统
根文件系统主要目录结构 基本的根文件系统上存放的内容
制作一个基本的根文件系统的方法
教学内容
了解嵌入式根文件系统的内容 掌握构建嵌入式根文件系统的方法
教学要求
什么是根文件系统
根文件系统(“/”)是存放运行、维护系统所必须 的各种工具软件、库文件、脚本、配置文件和其他特 殊文件的地方,也可以安装各种软件包。 "/"根目录下,各个文件应该怎样存放?
init程序的启动流程
init程序的启动流程如下:
读取文件inittab 执行 inittab 中所有action 为sysinit的命令 执行 inittab 中所有action 为wait 的命令 执行 inittab 中所有action 为 once的命令 循环运行
▶运行 inittab中所有action 为 respawned 的命令 ▶运行 inittab中所有action 为 askfirst的命令
系统配置文件实例
inittab文件样例如下:
# 注释 系统初始化时,执行/etc/init.d/rcS文件. ::sysinit:/etc/init.d/rcS # 执行一个shell程序,并且监控这个程序(sh退出时,自动启动sh) ::respawn:-/bin/bash # 在重启系统时,执行init ::restart:/sbin/init # 在安装ctrl + alt + del组合键时,执行reboot命令 ::ctrlaltdel:/sbin/reboot
添加系统配置文件
init 程序
/sbin/init 是默认的第一个用户空间程序 启动系统服务程序,自动运行的程序等 (sshd, X server...) 嵌入式linux系统使用busybox 的 init 程序 init程序是由内核启动的1号程序,在启动过程中, 会读取系统配置文件inittab,根据这个文件来启动系 统。 下面介绍inittab文件的格式
系统配置文件实例
样例中init程序启动流程
u-boot
zImage
init
init根据inittab,启动 rcS,任何启动bash。
/etc/init.d/rcS
/bin/mout -a
rcS执行mount -a, mdev命令,mount -a 需要fstab文件。
/sbin/mdev
/bin/bash bash需要profile文件
dump 0 0 0 0 0
fsck order 0 0 0 0 0
系统配置文件实例
inittab在执行完rcS后,启动一个shell程序bash程序
。shell程序会读取profile文件来设置shell的环境变量
profile文件的样例如下:
#!/bin/bash export HOSTNAME=sice export USER=root export HOME=root export PS1="[$USER@$HOSTNAME \W]# " export PATH=/bin:/sbin:/usr/bin:/usr/sbin export LD_LIBRARY_PATH=/lib:/usr/lib
#begin /etc/fstab
#filesystem
mount-point
proc
/proc
sysfs
/sys
mdev
/dev
tmpfs
/var
tmpfs
/tmp
type proc sysfs tmpfs tmpfs tmpfs
options defaults defaults defaults defaults defaults
make
make install
安装后,查看安装的东西
添加设备文件
手动添加
mknod命令
使用一个应用程序来统一管理,busybox提供了一个 mdev的程序,这个程序能够帮我们生成设备文件。
添加动态库
标准C库
标准C函数库在交叉编译器的目录下 例如我们的交叉编译器在/opt/crosstool 那么标准C库所在的目录:
安装 BusyBox
BusyBox 可以编译成一个静态可执行程序,也可 以使用glibc 或者 uClibc编译成一个使用动态库的可 执行程序 编译Busybox步骤
下载代码,解压代码 配置Busybox
▶$ cd $PRJROOT ▶$ make menuconfig ▶ 主要配置有哪些命令等
交叉编译和安装
系统配置文件 /etc/inittab /etc/fstab
/etc/mdev.conf /etc/profile
通过 NFS 测试做好的根文件系统
如果你的系统支持网络,可以通过nfs测试做好的根文件系 统 备份原 NFS root 挂载新做好的NFSroot
课堂小结
一个操作系统能够启动起来,处理启动内核外,还需 要必要的系统工具、库文件、系统配置文件等;而这 些文件都是存放在根文件系统中的。
在linux系统中,目录(文件)的名字表示了该目录 (文件)的含义,指定了该目录应该存放什么内容。 因此在linux系统中,目录的命名非常重要。
文件系统层次结构标准
在linux 文件系统层次结构标准 (FHS)
FHS标准是众多的Linux发布包有了可以遵循的标准,使得 软件和用户可以预测已经安装了的文件和目录的位置。它定 义了如下的内容
函数库文件的放置
/lib: 启动系统和运行基本命令时需要的动态库文件; /usr/lib: 所有的其他库 /usr/lib/xxx: 一些工具包的私有库
如:/usr/lib/perl5
构建根文件系统
怎样构建嵌入式的根文件系统 嵌入式linux系统有3部分构成
bootloader 内核 根文件系统
基本命令--busybox
BusyBox 项目是由Bruce Perens in 在1996创建的,是在 GNU GPL 许可协议下发行的开源软件。
http://www.busybox.net/
Busybox是一个UNIX系统工具集,它将很多普通的 UNIX工具集成到一个很小的可执行文件中,为普通用户 提供大多数常用的命令;
定义了文件系统中每个区域的用途
/”根下的目录结构
根文件系统主要目录结构
根目录下的结构如下:
目录
内容
/bin
可执行程序
/dev
块、字符设备节点文件
/etc
主要配置文件和初始化执行文件
/lib
基本的库文件, 茹:C 库,和内核模块(modules)
/mnt
挂载点,临时挂载文件系统用
/opt
附加的软件包
(2) 在这个目录下创建各个子目录
bin sbin usr dev etcБайду номын сангаасlib proc sys tmp var
(3)填入基本 (4)填入设备 (5)填入系统 (6)填入系统
命令程序
文件
配置文件 动态函数库
(7)将这个目录制作成一个映像文件
/home/sice/rootfs.cramfs 这个映像就可以烧写到开发板的mmc分区中!
inittab 文件格式
inittab 文件中,每一行是一条启动规则,文件由多条启动规则组合而 成,每一条的启动规则如下:
id : runlevels : action : process 由三个”:”号,分成4个段,每一个段的含义如下:
id: 此处id指明程序的控制台如(ttySAC0),如果程序不需要交互, 则 ID为空 runlevels : 不支持runlevel, 被忽略 process : 将执行的命令和命令的命令行参数 action : 动作类型,决定process启动的时机,启动类型等。action的 值只有8个,如下表。
# start mdev /bin/echo /sbin/mdev > /proc/sys/kernel/hotplug /sbin/mdev –s
rcS文件中,执行命令”/bin/mount -a”这个命令需要
fstab文件来挂载文件系统。
然后启动mdev程序来生成设备文件。
系统配置文件实例
fstab文件样例如下:
其他函数库
jpeg库 png库 Qt库 需要移植(获取源码、并且交叉编译这些源码来得到对应的库)
添加系统配置文件
系统配置文件,一般需要自己编写,是linux系统在
引导是需要读取的,如果没有系统配置文件,将会导
/sbin: root用户能执行的基本程序 ▶int, insmod, route, mkfs, rmmod, ifconfig
/usr/bin: 更多非必须的用户程序 ▶autorun, bibtex, latex, biff, ftp, wc, whereis, whoami
/usr/sbin: 更多非必须的root工具程序 ▶automount, httpd, in.telnetd, in.talkd, sendmai
/proc
虚拟文件系统,用于内核和进程通讯
/sbin
基本的系统管理程序
/tmp
临时文件目录
/usr
更多的用户程序,包括X server
/sys
虚拟文件系统 sysfs 挂载点
/var
可变信息储存,如log等
程序文件的放置
程序文件目录
/bin: 普通用户和root用户都能执行的基本程序 ▶ping, mknod, mount, tar, grep, gzip, etc
BusyBox inittab文件
Action 类型 sysinit respawn askfirst wait once ctrlaltdel shutdown restart
描述 provide init with the path to the initialization script 程序终止后重新执行 同 respawn, 程序执行前会询问,要求按 ENTER 键 init 等待执行的程序结束后再继续执行 只运行程序一次,并且不等待程序运行完就继续执行 当按下 Ctrl-Alt-Delete 组合键时执行的程序 系统关机时执行的程序 系统重新启动时执行的程序, 通常是 init 程序
文件中,以”#”开头的是注释
文件中只有4行规则,如红色部分。
系统配置文件实例
/etc/init.d/rcS 文件样例如下:
#!/bin/bash # mount /etc/fstab spcified device # 开头的是注释 /bin/mount -a # mount devpts in order to use telnetd /bin/mkdir /dev/pts /bin/mount -t devpts devpts /dev/pts
致系统启动错误。下面是Linux系统的引导过程。
上电,启动u-boot
u-boot将内核从emmc 加载到RAM中启动
内核启动最后,挂载“/”, 任后启动1号进程(init)
u-boot zImage
init
inittab
init启动时,会读取配置文件 ”inittab”。 init进程是1号进程,是linux系统中所 有进程的祖先。 init进程是根据inittab文件来初始化整 个环境的。包括启动shell。
先看看嵌入式系统的典型分区
bootloader安装在mmc的最前面 ;
然后是内核 然后有一个分区专门做根文件系
统;
根文件系统
ext
根文件系统
mmc
内核 bootloader
制作嵌入式根文件系统的过程
制作嵌入式根文件系统的过程:
(1)新建一个目录,用于制作根文件系统
/home/sice/rootfs
配置Busybox
和配置Linux内核选项一样,在Busybox源码根 目录中输入make menuconfig命令:
编译并安装Busybox
配置如下:
Busybox Settings --->
将busybox静态链接
▶Build Options --->
➢[*] Build BusyBox as a static binary 指(n定o 交sh叉ar编ed译l器ibs)
➢(arm-linux-) Cross Compiler prefix
▶Installation Options ("make install" b指eh定av编io译r)后-的--安> 装路径
➢(/home/sice/rootfs) BusyBox installation prefix
配置好后,编译安装
构建linux根文件系统
根文件系统主要目录结构 基本的根文件系统上存放的内容
制作一个基本的根文件系统的方法
教学内容
了解嵌入式根文件系统的内容 掌握构建嵌入式根文件系统的方法
教学要求
什么是根文件系统
根文件系统(“/”)是存放运行、维护系统所必须 的各种工具软件、库文件、脚本、配置文件和其他特 殊文件的地方,也可以安装各种软件包。 "/"根目录下,各个文件应该怎样存放?
init程序的启动流程
init程序的启动流程如下:
读取文件inittab 执行 inittab 中所有action 为sysinit的命令 执行 inittab 中所有action 为wait 的命令 执行 inittab 中所有action 为 once的命令 循环运行
▶运行 inittab中所有action 为 respawned 的命令 ▶运行 inittab中所有action 为 askfirst的命令
系统配置文件实例
inittab文件样例如下:
# 注释 系统初始化时,执行/etc/init.d/rcS文件. ::sysinit:/etc/init.d/rcS # 执行一个shell程序,并且监控这个程序(sh退出时,自动启动sh) ::respawn:-/bin/bash # 在重启系统时,执行init ::restart:/sbin/init # 在安装ctrl + alt + del组合键时,执行reboot命令 ::ctrlaltdel:/sbin/reboot
添加系统配置文件
init 程序
/sbin/init 是默认的第一个用户空间程序 启动系统服务程序,自动运行的程序等 (sshd, X server...) 嵌入式linux系统使用busybox 的 init 程序 init程序是由内核启动的1号程序,在启动过程中, 会读取系统配置文件inittab,根据这个文件来启动系 统。 下面介绍inittab文件的格式
系统配置文件实例
样例中init程序启动流程
u-boot
zImage
init
init根据inittab,启动 rcS,任何启动bash。
/etc/init.d/rcS
/bin/mout -a
rcS执行mount -a, mdev命令,mount -a 需要fstab文件。
/sbin/mdev
/bin/bash bash需要profile文件
dump 0 0 0 0 0
fsck order 0 0 0 0 0
系统配置文件实例
inittab在执行完rcS后,启动一个shell程序bash程序
。shell程序会读取profile文件来设置shell的环境变量
profile文件的样例如下:
#!/bin/bash export HOSTNAME=sice export USER=root export HOME=root export PS1="[$USER@$HOSTNAME \W]# " export PATH=/bin:/sbin:/usr/bin:/usr/sbin export LD_LIBRARY_PATH=/lib:/usr/lib
#begin /etc/fstab
#filesystem
mount-point
proc
/proc
sysfs
/sys
mdev
/dev
tmpfs
/var
tmpfs
/tmp
type proc sysfs tmpfs tmpfs tmpfs
options defaults defaults defaults defaults defaults
make
make install
安装后,查看安装的东西
添加设备文件
手动添加
mknod命令
使用一个应用程序来统一管理,busybox提供了一个 mdev的程序,这个程序能够帮我们生成设备文件。
添加动态库
标准C库
标准C函数库在交叉编译器的目录下 例如我们的交叉编译器在/opt/crosstool 那么标准C库所在的目录:
安装 BusyBox
BusyBox 可以编译成一个静态可执行程序,也可 以使用glibc 或者 uClibc编译成一个使用动态库的可 执行程序 编译Busybox步骤
下载代码,解压代码 配置Busybox
▶$ cd $PRJROOT ▶$ make menuconfig ▶ 主要配置有哪些命令等
交叉编译和安装
系统配置文件 /etc/inittab /etc/fstab
/etc/mdev.conf /etc/profile
通过 NFS 测试做好的根文件系统
如果你的系统支持网络,可以通过nfs测试做好的根文件系 统 备份原 NFS root 挂载新做好的NFSroot
课堂小结
一个操作系统能够启动起来,处理启动内核外,还需 要必要的系统工具、库文件、系统配置文件等;而这 些文件都是存放在根文件系统中的。
在linux系统中,目录(文件)的名字表示了该目录 (文件)的含义,指定了该目录应该存放什么内容。 因此在linux系统中,目录的命名非常重要。
文件系统层次结构标准
在linux 文件系统层次结构标准 (FHS)
FHS标准是众多的Linux发布包有了可以遵循的标准,使得 软件和用户可以预测已经安装了的文件和目录的位置。它定 义了如下的内容
函数库文件的放置
/lib: 启动系统和运行基本命令时需要的动态库文件; /usr/lib: 所有的其他库 /usr/lib/xxx: 一些工具包的私有库
如:/usr/lib/perl5
构建根文件系统
怎样构建嵌入式的根文件系统 嵌入式linux系统有3部分构成
bootloader 内核 根文件系统
基本命令--busybox
BusyBox 项目是由Bruce Perens in 在1996创建的,是在 GNU GPL 许可协议下发行的开源软件。
http://www.busybox.net/
Busybox是一个UNIX系统工具集,它将很多普通的 UNIX工具集成到一个很小的可执行文件中,为普通用户 提供大多数常用的命令;
定义了文件系统中每个区域的用途
/”根下的目录结构
根文件系统主要目录结构
根目录下的结构如下:
目录
内容
/bin
可执行程序
/dev
块、字符设备节点文件
/etc
主要配置文件和初始化执行文件
/lib
基本的库文件, 茹:C 库,和内核模块(modules)
/mnt
挂载点,临时挂载文件系统用
/opt
附加的软件包
(2) 在这个目录下创建各个子目录
bin sbin usr dev etcБайду номын сангаасlib proc sys tmp var
(3)填入基本 (4)填入设备 (5)填入系统 (6)填入系统
命令程序
文件
配置文件 动态函数库
(7)将这个目录制作成一个映像文件
/home/sice/rootfs.cramfs 这个映像就可以烧写到开发板的mmc分区中!
inittab 文件格式
inittab 文件中,每一行是一条启动规则,文件由多条启动规则组合而 成,每一条的启动规则如下:
id : runlevels : action : process 由三个”:”号,分成4个段,每一个段的含义如下:
id: 此处id指明程序的控制台如(ttySAC0),如果程序不需要交互, 则 ID为空 runlevels : 不支持runlevel, 被忽略 process : 将执行的命令和命令的命令行参数 action : 动作类型,决定process启动的时机,启动类型等。action的 值只有8个,如下表。
# start mdev /bin/echo /sbin/mdev > /proc/sys/kernel/hotplug /sbin/mdev –s
rcS文件中,执行命令”/bin/mount -a”这个命令需要
fstab文件来挂载文件系统。
然后启动mdev程序来生成设备文件。
系统配置文件实例
fstab文件样例如下: