1
根文件系统
嵌入式Linux中都需要构建根文件系统,构建根文件系统的规则在FHS(Filesystem Hierarchy
Standard)文档中,下面是根文件系统顶层目录。
目录
内容
bin
存放所有用户都可以使用的、基本的命令。
sbin
存放的是基本的系统命令,它们用于启动系统、修复系统等。
usr
里面存放的是共享、只读的程序和数据。
proc
这是个空目录,常作为proc文件系统的挂载点。
dev
该目录存放设备文件和其它特殊文件。
etc
存放系统配置文件,包括启动文件。
lib
存放共享库和可加载块(即驱动程序),共享库用于启动系统、运行根文件系统中的可执行程序。
boot
引导加载程序使用的静态文件
home
用户主目录,包括供服务账号锁使用的主目录,如FTP
mnt
用于临时挂接某个文件系统的挂接点,通常是空目录。也可以在里面创建空的子目录。
opt
给主机额外安装软件所摆放的目录。
root
root用户的主目录
tmp
存放临时文件,通常是空目录。
var
存放可变的数据。
2、构建根文件按系统
2.1、建立根文件系统目录
进入到/opt/st
yarm目录,新建建立根文件系统目录的脚本文件create_rootfs_bash,使用命令chmod +x
create_rootfs_bash改变文件的可执行权限,./create_rootfs_bash运行脚本,就完成了根文件系统目录的创建。
#!/bin/sh
echo "------Create
rootfs directons start...--------"
mkdir
rootfs
cd
rootfs
echo
"--------Create root,dev....----------"
mkdir root dev etc
boot tmp var sys proc lib mnt home
mkdir etc/init.d
etc/rc.d etc/sysconfig
mkdir usr/sbin
usr/bin usr/lib usr/modules
echo "make node in
dev/console dev/null"
mknod -m 600
dev/console c 5 1
mknod -m 600
dev/null
c 1 3
mkdir mnt/etc
mnt/jffs2 mnt/yaffs mnt/data mnt/temp
mkdir var/lib
var/lock var/run var/tmp
chmod 1777
tmp
chmod 1777
var/tmp
echo "-------make
direction done---------"
改变了tmp目录的使用权,让它开启sticky位,为tmp目录的使用权开启此位,可确保tmp目录底下建立的文件,只有建立它的用户有权删除。尽管嵌入式系统多半是单用户,不过有些嵌入式应用不一定用root的权限来执行,因此需要遵照根文件系统权限位的基本规定来设计。
2.2、建立动态链接库
动态链接库直接用友善之臂的,先解压友善之臂的根文件包,拷贝lib的内容到新建的根文件目录lib内。
cd
/mnt/hgfs/share
tar
–zxvf root_qtopia.tgz –C /home
cp –rfd
/hmoe/root_qtopia/lib/* /fs/rootfs/lib/*
2.3
交叉编译Bosybox
Bosybox是一个遵循GPL v2协议的开源项目,它在编写过程总对文件大小进行优化,并考虑了系统资源有限(比如内存等)的情况,使用Busybox可以自动生成根文件系统所需的bin、sbin、usr目录和linuxrc文件。
1、解压busybox
cd
/mnt/hgfs/share
tar
–zxvf busybox-1.13.3.tar.tgz –C /home
2、进入源码,修改Makefile文件:
cd
/home/busybox-1.13.3
修改:
CROSS_COMPILE
?=arm-linux-
//第164行
ARCH
?=arm
//第189行
3、配置busybox
输入make men
onfig进行配置
(1)、Busybox
Settings--->
General Configuration--->
[*] Show verbose applet usage messages
[*] Store applet usage messages in compressed form
[*] Support –install [-s] to install applet links at
runtime
[*] Enable locale support(system needs locale for this to
work)
[*] Support for –long-options
[*] Use the devpts filesystem for unix98 PTYs
[*] Support writing pidfiles
[*] Runtime SUID/SGID configuration via
/etc/busybox.config
[*] Suppress warning message if
/etc/busybox.conf is not readable
Build
Options--->
[*] Build BusyBox as a static binary(no shared libs)
[*] Build with Large File Support(for accessing
files>2GB)
Installation
Options->
[]Don’t use /usr
Applets links (as soft-links) --->
(./_install) BusyBox installation prefix
Busybox Library
Tuning --->
(6)Minimum password legth
(2)MD5:Trade Bytes for Speed
[*]Fsater /proc scanning code(+100bytes)
[*]Command line editing
(1024)Maximum length of input
[*] vi-style line
editing commands
(15) History size
[*] History
saving
[*] Tab
completion
[*]Fancy shell prompts
(4) Copy b?r size ,in
kilobytes
[*]Use ioctl names
rather than hex vals in error messages
[*]Support
infiniband HW
(2)、Linux Module
Utilities--->
(/lib/modules)Default directory containing modules
(modules.dep)Default name of modules.dep
[*]
insmod
[*]
rmmod
[*]
lsmod
[*]
modprobe
-----options common to multiple modutils
[ ]
support version 2.2/2.4 Linux kernels
[*]Support tainted module checking with new
kernels
[*]Support for module .aliases file
[*]
support for modules.symbols file
(3)、在busybox中配置对dev下设备类型的支持
dev的创建有三种方法:
手动创建:在制作根文件系统的时候,就在dev目录下创建好要使用的设备文件,系统挂接根文件系统后,就可以使用dev目录下的设备文件了。
使用devfs文件系统:这种方法已经过时,具有不确定的设备映射、没有足够的主/次设备号、devfs消耗大量的内存。
ev:它是个用户程序,能根据系统中硬件设备的状态动态的更新设备文件,包括设备文件的创建、删除等。它的操作相对复杂,但灵活性很高
mdev是busybox自带的一个简化版的 ev,适合于嵌入式的应用埸合。其具有使用简单的特点。它的作用,就是在系统启动和热插拔或动态加载驱动程序时,自动产生驱动程序所需的节点文件。在以busybox为基础构建嵌入式linux的根文件系统时,使用它是最优的选择。下面的选项将增加对mdev的支持。
Linux System
Utilities
--->
[*]Support
/etc/mdev.conf
[*]Support command execution at device addition/removal
4、 编译busybox
编译busybox到指定目录:
cd
/home/busybox-1.13.3
make
CONFIG_PREFIX=/fs/rootfs install
在rootfs目录下会生成目录bin、sbin、usr和文件linuxrc的内容。
2.4
建立etc目录下的配置文件
1、etc/mdev.conf文件,内容为空。
2、拷贝主机etc目录下的passwd、group、shadow文件到rootfs/etc目录下。
3、etc/sysconfig目录下新建文件HOSTNAME,内容为”MrHung”。
4、etc/inittab文件:
#etc/inittab
::sysinit:/etc/init.d/rcS
::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a –r
5、etc/init.d/rcS文件:
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask
022
export PATH
runlevel prevlevel
echo
"----------munt all----------------"
mount
-a
echo
/sbin/mdev>/proc/sys/kernel/hotplug
mdev -s
echo
"***********************************************"
echo
"****************St ying ARM*********************"
echo "Kernel
version:linux-2.6.32.2"
echo "St
ent:Huang"
echo
"Date:2011.07.9"
echo
"***********************************************"
/bin/hostname -F
/etc/sysconfig/HOSTNAME
使用以下命令改变rcS的执行权限:
Chmod
+x rcS
6、etc/fstab文件:
#device
mount-point
type
option
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
7、 etc/profile文件:
#Ash
profile
#vim:syntax=sh
#No core file by
defaults
#ulimit -S -c
0>/dev/null
2>&1
USER="id
-un"
LOGNAME=$USER
PS1='[\u@\h
\W]#'
PATH=$PATH
HOSTNAME='/bin/hostname'
export USER
LOGNAME PS1 PATH
2.5
制作根文件系统映像文件
使用以下命令安装好yaffs文件系统制作工具:
tar
–zxvf mkyaffs2image.tgz –C /
在/目录下,使用命令mkyaffs2image-128M
rootfs rootfs.img生成根文件系统映像文件。