Chinaunix首页 | 论坛 | 博客
  • 博客访问: 582282
  • 博文数量: 199
  • 博客积分: 5087
  • 博客等级: 大校
  • 技术积分: 2165
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-26 21:53
文章存档

2010年(199)

我的朋友

分类: LINUX

2010-05-25 14:28:05

 
一、根文件系统预备知识

嵌入式Linux中都需要构建根文件系统,构建根文件系统的规则在FHS(Filesystem Hierarchy Standard)文档中,下面是根文件系统顶层目录:


bin:存放所有用户都可以使用的、基本的命令。
sbin:存放的是基本的系统命令,它们用于启动系统、修复系统等。
usr:里面存放的是共享、只读的程序和数据。
proc:这是个空目录,常作为proc文件系统的挂载点。
dev:该目录存放设备文件和其它特殊文件。
etc:存放系统配置文件,包括启动文件。
lib:存放共享库和可加载块(即驱动程序),共享库用于启动系统、运行根文件系统中的可执行程序。
boot:引导加载程序使用的静态文件
home:用户主目录,包括供服务账号锁使用的主目录,如FTP
mnt:用于临时挂接某个文件系统的挂接点,通常是空目录。也可以在里面创建空的子目录。
opt:给主机额外安装软件所摆放的目录。
root:root用户的主目录
tmp:存放临时文件,通常是空目录。
var:存放可变的数据。

二、建立根文件系统目录

有一些工作目录可以省略,如/home、/mnt、/opt、/root。/boot目录在一些情况下可以省略。
为建立根文件系统,先进入我们先前建立的文件夹:
$cd ${PRJROOT}/rootfs
$mkdir bin dev etc lib proc sbin tmp usr var
$chmod 1777 tmp
这里修改了tmp目录的权限,确保在tmp目录下建立的文件,只有建立它的用户有权删除。

接着建立/usr的目录结构:
$mkdir usr/sbin usr/bin usr/lib

最后建立/var的目录结构:
$mkdir var/lib var/lock var/run var/tmp var/log
$chmod 1777 var/tmp

三、建立链接库
在前面制作交叉编译工具的时候,我们已经制作了glibc的链接库,在${TARGET_PREFIX}/lib目录中。将目录中的这些链接库复制到我们将要制作的根文件系统的lib目录中。
$ cd ${TARGET_PREFIX}/lib
$ cp *-*.so ${PRJROOT}/rootfs/lib
$ cp -d *.so.[*0-9] ${PRJROOT}/rootfs/lib
$ cp libSegFault.so libmemusage.so libpcprocfile.so ${PRJROOT}/rootfs/lib

四、创建/dev目录下的文件
为各种设备创建好挂载点:
$cd ${PRJROOT}/rootfs/dev
$su -m

#mknod -m 600 mem c 1 1
#mknod -m 666 null c 1 3
#mknod -m 666 zero c 1 5
#mknod -m 644 random c 1 8
#mknod -m 600 tty0 c 4 0
#mknod -m 600 tty1 c 4 1
#mknod -m 600 ttyS0 c 4 64
#mknod -m 666 tty c 5 0
#mknod -m 600 console c 5 1

五、交叉编译Bosybox

Bosybox是一个遵循GPL v2协议的开源项目,它在编写过程总对文件大小进行优化,并考虑了系统资源有限(比如内存等)的情况,使用Busybox可以自动生成根文件系统所需的bin、sbin、usr目录和linuxrc文件。

1、下载busybox

下载busybox-1.10.2,并放到${PRJROOT}/sysapps/目录中,解压。

2、配置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)Linux System Utilities --->             

[*]Support /etc/mdev.conf       

[*]Support command execution at device addition/removal



3、编译busybox

$ make TARGET_ARCH=ppc CROSS=powerpc-603-linux-gnu- PREFIX=${PRJROOT}/rootfs all install

在rootfs目录下会生成目录bin、sbin、usr和文件linuxrc的内容。



六、建立etc目录下的配置文件

1、etc/profile文件:

可以使用etc/profile文件为所有的shell用户定义全局变量。

文件内容:

#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、拷贝主机etc目录下的passwd、group、shadow文件到rootfs/etc目录下。

3、内核最后一个初始化动作就是启动init程序,它在/sbin目录下,是/bin/busybox的符号链接,所以busybox是目标板系统上执行的第一个应用程序。



欲使用安装在目标板上根文件系统上的init,需要加入适当的/etc/inittab文件,以及在/etc/rc.d目录中填入适当的文件。

/etc/inittab将会为系统定义运行级别,/etc/rc.d目录中的文件则是用来定义每个运行级别将会执行哪些服务。

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

#安装/proc文件系统

mount /proc

#启动网络端口

/sbin/ifconfig eth0 192.168.172.10



6、etc/fstab文件

上面这个初始化命令行要能够正常执行,目标板的根文件系统中必须存在etc/fstab文件。

#device mount-point type option dump fsck

proc /proc proc defaults 0 0

none /tmp ramfs defaults 0 0

sysfs /sys sysfs defaults 0 0

mdev /dev ramfs defaults 0 0
阅读(801) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~