您的位置:首页 > 运维架构 > Linux

linux根文件系统制作

2012-07-19 09:11 330 查看
转自:http://blog.163.com/dong_box/blog/static/26259778200956114858764/

根文件系统制作(Busybox1.9.2)(2009-05-21 09:02:22)

1 建一个目录rootfs用来装文件系统

2 # mkdir bin dev etc home lib mnt proc root sbin tmp usr var

# mkdir usr/bin usr/sbin

# mkdir mnt tmp var

# chmod 1777 tmp

# mkdir mnt/etc mnt/jffs2 mnt/yaffs mnt/data mnt/temp

# mkdir var/lib var/lock var/log var/run var/tmp

# chmod 1777 var/tmp

# mkdir home root boot

3 到系统 /dev 把所有的device打一个包,拷贝到 dev

下面(最省事的做法);或者使用mknod来自己建所需要的device,

举例:

# mknod -m 600 dev/console c 5 1

# mknod -m 666 dev/null c 1 3

4 应用程序定制

标准的Linux发行版本具有功能种类比较多的应用程序,这些应用程序占用的空间也很大,这对存储容量空间有限的开发板来说就不是理想的选择,在嵌入式开发过程中,经常用BusyBox来定制应用程序。BusyBox具有shell的功能,它能提供系统所需要的大部分工具,包括编辑工具、网络工具、模块加载工具、压缩解压缩工具、查找工具、帐号密码管理工具和进程相关工具等。目前BusyBox的最新版本是BusyBox-1.9.2版本,下载解压,切换到BusyBox的

根目录下,修改Makefile,找到ARCH和CROSS COMPILE修改如下:

ARCH ?= arm

CROSS_COMPILE ?=/usr/local/arm/3.4.1/bin/arm-linux-

5 修改编译配置选项。

#make defconfig

#make menuconfig

在默认的选项前提之下,选项设置如下:

Build Options->

Build BusyBox as a static binary (no shared libs)

Force NOMMU build

Build shared libbusybox

Build with Large File Support (for accessing file>2GB)

如果选择 Build BusyBox as a static binary (no shared libs) 方式进行编译时,所需的库已经与程序静态地链接在一起,这些程序不需要额外的库就可以单独运行,但是自己编写的程序在文件系统上运行必须采用静态编译,否则会报诸如:bin/sh: hello :not found的错误。

静态编译如:

arm-linux-gcc –static hello.c –o hello

 如果选择Build shared libbusybox方式进行编译时,要将交叉编译的动态库或符号链接复制到对应的目录中,否则程序不能运行。同时在配置时应去掉Build shared libbusybox目录下的两项:如下 

Build shared libbusybox->

 Produce binary for each applet,linked against libbusybox

Produce additional busybox binary linked against libbusybox

同时去掉

Build with Large File Support (for accessing file>2GB)

否则编译会报错。

BusyBox Settings --->

Build Options ---> (采用静态编译)

[*] Build BusyBox as a static binary (no shared libs)

Install optin-->

[*] Don't use /usr //

Busybox Library Tuning --->

(2) MD5: Trade Bytes for Speed

[*] Faster /proc scanning code (+100 bytes)

[*] Support for /etc/networks

[*] Support for /etc/networks

[*] Additional editing keys

[*] vi-style line editing commands

[*] History saving

[*] Tab completion

[*] Username completion

[*] Fancy shell prompts

Linux Module Utilities --->

[ ] Support version 2.2.x to 2.4.x Linux kernels //不能选

[*] Support version 2.6.x Linux kernels

Linux System Utilities --->

[*] Support for the old /etc/mtab file //不确定

Miscellaneous Utilities --->

[*] devfs(obsolete) //不确定

[*] Use devfs names for all device(obsolete) //不确定

Shell --->

Choose your default shell(ash)-->

---ash //下面的选项全部选择

//使用“空格”键选中。只有选中了ash,这样生成的时候才会生成bin/sh文件

//在linuxrc脚本的头一句:#!/bin/sh是由bin/sh来解释执行的。

//不选中会报错:can not run -bin/sh

#make

#make install

在busybox/_install 目录下会生成我们需要的文件。

修改_install/bin/busybox 的属性。为4755

chmod 4755 ./_install/bin/busybox

必须要修改属性,否则在busybox 中很多命令会受限

将编译好的busybox拷贝到/bin下面。拷贝时带上参数-arf或者-dpR。

(即将busybox/_install 目录下的bin目录和sbin目录拷到根文件系统目录下)

除了busybox外,所有其他的命令都是他的link

/sbin下面也是busybox的link,

/usr/bin下面也是busybox的link,

/usr/sbin下面放着所有编译完的可执行文件,具体就不多说了

7 非常重要之/lib,务必重视

/lib的库其实就是进行busybox编译的库,即交叉编译器的库,我们这里使用的是3.4.5(

位置 /usr/local/arm/gcc-3.4.5-glibc-2.3.2/arm-linux/bin/)。

# cd /usr/local/arm/gcc-3.4.5-glibc-2.3.2/arm-linux/bin/

# for file in libc libcrypt libdl libm libpthread libresolv libutil

> do

> cp $file-*.so rootfs/lib (复制到你做的文件系统的/lib目录下)

> cp -d $file.so.[*0-9] rootfs/lib

> done

# cp -d ld*.so* rootfs/lib

#cp libstdc++.so.6 libgcc_s.so.1 rootfs/lib

8 系统配置文件的建立

系统配置文件放在/etc目录下

(1)profile文件

#Set search library path

export LD_LIBRARY_PATH=/lib:/QTlib:$LD_LIBRARY_PATH#Set user path

export PATH=/bin:/sbin:/usr/bin:/usr/sbin:$PATH

export QWS_DISPLAY="LinuxFb:mmWidth100:mmHeight130:0"

export QWS_MOUSE_PROTO="LinuxTP:/dev/h3600_tsraw"

export QWS_SIZE=320x240

alias ll='ls -l'

ln -s /dev/ts0 /dev/h3600_tsraw

(2)fstab文件

proc /proc proc defaults 0 0

none /tmp ramfs defaults 0 0

mdev /dev ramfs defaults 0 0

sysfs /sys sysfs defaults 0 0

(3)inittab文件

::sysinit:/etc/init.d/rcS

::respawn:-/bin/sh

::ctrlaltdel:/bin/umount -a -r

::shutdown:/bin/umount -a -r

::shutdown:/sbin/swapoff -a

(4)创建/etc/init.d文件夹和rcS,在rcS中添加

#! /bin/sh

# 设置主机名,需要在etc 建立文件host

./etc/host

hostname ${HOSTNAME}

# mount all filesystem defined in “fstab”

echo "# mount all..........."

/bin/mount -a

echo "# Starting mdev........."

/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug

mdev –s

(5)host文件

HOSTNAME=Hasotech

(6)创建mdev.conf文件 (空文件)

(7)复制主机/etc/下面的文件passwd, group, shadow 文件到/etc

# cp /etc/group .

# cp /etc/passwd .

# cp /etc/shadow .

修改passwd中用户使用的shell名称。FC6上默认的为bash,而vivi只支持ash。

root:x:0:0:root:/root:/bin/bash -->

root:x:0:0:root:/root:/bin/ash

(8)修改各文件和文件夹的权限

# chmod 755 /rootfs/etc/init.d/rcS

# chmod 755 /rootfs/etc/host

9 yaffs文件系统映像的制作

使用mkyaffsimg程序可以把一个目录做成一个yaffs映像文件,然后使用usb下载到

板子上。进入文件系统目录层,使用以下命令。

#mkyaffsimg rootfs rootfs.img

这样就会在该目录下生成rootfs.img映像文件,下载到开发板运行即可。

10 cramfs文件系统映像的制作(cramfs压缩率比较高)

在FTP中下载cramfs-1.1.tar.gz,解压到自己设定的目录下,如:

tar xzvf cramfs-1.1.tar.gz –C /home/

进入生成有mkcramfs文件的目录下(一定要进入此目录,否则会提示找不到该命令)

输入命令:#./mkcramfs / rootfs rootfs.cramfs

在当前目录下即生成rootfs.cramfs映像文件。到此Linux操作系统移植完毕。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: