分类: 嵌入式
2010-10-16 23:51:11
嵌入式Linux中都需要构建根文件系统,构建根文件系统的规则在FHS(Filesystem Hierarchy Standard)文档中,下面是根文件系统顶层目录。
目录 |
内容 |
bin |
存放所有用户都可以使用的、基本的命令。 |
sbin |
存放的是基本的系统命令,它们用于启动系统、修复系统等。 |
usr |
里面存放的是共享、只读的程序和数据。 |
proc |
这是个空目录,常作为proc文件系统的挂载点。 |
dev |
该目录存放设备文件和其它特殊文件。 |
etc |
存放系统配置文件,包括启动文件。 |
lib |
存放共享库和可加载块(即驱动程序),共享库用于启动系统、运行根文件系统中的可执行程序。 |
boot |
引导加载程序使用的静态文件 |
home |
用户主目录,包括供服务账号锁使用的主目录,如FTP |
mnt |
用于临时挂接某个文件系统的挂接点,通常是空目录。也可以在里面创建空的子目录。 |
opt |
给主机额外安装软件所摆放的目录。 |
root |
root用户的主目录 |
tmp |
存放临时文件,通常是空目录。 |
var |
存放可变的数据。 |
进入到/opt/studyarm目录,新建建立根文件系统目录的脚本文件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 opt mkdir etc/init.d etc/rc.d etc/sysconfig mkdir usr/sbin usr/bin usr/lib usr/modules mkdir mnt/usb mnt/nfs mnt/sd 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的权限来执行,因此需要遵照根文件系统权限位的基本规定来设计。
动态链接库直接用友善之臂的,先解压友善之臂的根文件包,拷贝lib的内容到新建的根文件目录lib内。
cd /mnt/hgfs/share
tar –zxvf root_qtopia.tgz –C /opt/studyarm
cp –rfd /opt/studyarm/root_qtopia/lib/* /opt/studyarm/rootfs/lib/*
Bosybox是一个遵循GPL v2协议的开源项目,它在编写过程总对文件大小进行优化,并考虑了系统资源有限(比如内存等)的情况,使用Busybox可以自动生成根文件系统所需的bin、sbin、usr目录和linuxrc文件。
1、解压busybox
cd /mnt/hgfs/share
tar –zxvf busybox-
2、进入源码,修改Makefile文件:
cd /opt/studyarm/busybox-
修改:
CROSS_COMPILE ?=arm-linux- //第164行
ARCH ?=arm //第189行
3、配置busybox
输入make menuconfig进行配置
(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 buffer size ,in kilobytes
[*]Use ioctl names rather than hex values 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消耗大量的内存。
udev:它是个用户程序,能根据系统中硬件设备的状态动态的更新设备文件,包括设备文件的创建、删除等。它的操作相对复杂,但灵活性很高
mdev是busybox自带的一个简化版的udev,适合于嵌入式的应用埸合。其具有使用简单的特点。它的作用,就是在系统启动和热插拔或动态加载驱动程序时,自动产生驱动程序所需的节点文件。在以busybox为基础构建嵌入式linux的根文件系统时,使用它是最优的选择。下面的选项将增加对mdev的支持。
Linux System Utilities --->
[*]Support /etc/mdev.conf
[*]Support command execution at device addition/removal
mdev的配置参考bosybox目录下decs/mdev.txt,首先mdev有两个主要的应用:初始化对象和动态更新,两个应用都需要内核sysfs的支持,且必须挂载到/sys,所以系统初始化脚本中必须包含"mount -n -t sysfs sysfs /sys"。为实现动态更新,还必须在内核配置时增加热拔插支持(hotplugging),初始化代码中必须包含“echo /bin/mdev>/proc/sys/kernel/hotplug”,该命令似的内核的在增删设备时执行/bin/mdev,使设备文件被创建和删除。脚本中用“mdev -s”在系统启动时穿件所有的节点,另外注意在执行mdev前就要挂载/sys。如果文件系统在flash外运行,还必须创建/dev/pts挂载点在/dev/pts挂载devpts文件系统。
4、 编译busybox
编译busybox到指定目录:
cd /opt/studyarm/busybox-
make CONFIG_PREFIX=/opt/studyarm/rootfs install