Chinaunix首页 | 论坛 | 博客
  • 博客访问: 121083
  • 博文数量: 41
  • 博客积分: 170
  • 博客等级: 入伍新兵
  • 技术积分: 265
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-09 16:11
文章分类

全部博文(41)

文章存档

2012年(41)

我的朋友

分类:

2012-05-30 15:11:56

 

 

一、主机环境

笔者所用环境为mipsel-unknown-linux-gnu-gcc 3.4.3   GLIBC版本为2.2.5,建议使用高版本进行测试,不过笔者没有测试过,是否会存在问题。

 

gcc version 3.4.1  (fedora  core 5)

 

所需源文件: busybox-1.13.1.tar.bz2;  网上可轻易下载

二、用Busybox创建nfs文件系统

1、解压busybox-1.13.1.tar.bz2

 

[root@vm-dev rootfs]# ls

busybox-1.13.1.tar.bz2

[root@vm-dev rootfs]# tar -vxjf busybox-1.13.1.tar.bz2

[root@vm-dev rootfs]# cd busybox-1.13.1

[root@vm-dev busybox-1.13.1]# pwd

/work/busybox-1.13.1

[root@vm-dev busybox-1.13.1]# vi Makefile

[root@vm-dev busybox-1.13.1]#

 

修改Makefile中的ARCHCROSS_COMPILE与本机的路径一致,注意,如果在/root/.bash_profile中指定了路径,则不需要再给出路径。

 

CROSS_COMPILE ?= mipsel-unknown-linux-gnu-

...

ARCH ?= mips

2、编译busybox

make menuconfig,修改以下:

 

[root@vm-dev busybox-1.13.1]# make menuconfig

 

Busybox Settings --->

    Build Options --->

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

        //直接编译成静态库,省事点

        (mipsel-unknown-linux-gnu-) Cross Compiler prefix

        //这里和Makefile里保持一致,应该写一处就行了

    Installation Options --->

        [ ] Don't use /usr

        //使用usr目录

 

Busybox Library Tuning  --->  

 

[*]   Fancy shell prompts  

 

//一定要选上,否则很多转意字符无法识别

Shells --->

    Choose your default shell (ash) --->

    //这里选择shellash,应该是默认选中的

        --- ash

        //ash这档的选项全部选上

 

Miscellaneous Utilities  --->

 

[ ] inotifyd

 

//不选

 

保存退出,直接makemake install

可以看到如下目录

 

[root@vm-dev busybox-1.13.1]# ls _install/

bin  linuxrc  sbin  usr

[root@vm-dev busybox-1.13.1]#

3、用shell脚本创建根文件系统的目录结构

shell脚本创建根文件系统的目录结构,并在想要建立根文件系统的地方运行此脚本。我是用root用户登陆的,直接创建了设备节点。

 

[root@vm-dev root_stand]# cat build_fs.sh

 

#!/bin/sh

echo "makeing rootdir"

mkdir rootfs

cd rootfs

 

echo "makeing dir: bin dev etc lib proc sbin sys usr"

mkdir bin dev etc lib proc sbin sys usr #8 dirs

mkdir usr/bin usr/lib usr/sbin lib/modules

 

#Don't use mknod, unless you run this Script as

mknod -m 600 dev/console c 5 1

mknod -m 666 dev/null c 1 3

 

 

echo "making dir: mnt tmp var"

mkdir mnt tmp var

chmod 1777 tmp

mkdir mnt/etc mnt/jiffs2 mnt/yaffs mnt/data mnt/temp

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

chmod 1777 var/tmp

 

 

echo "making dir: home root boot"

mkdir home root boot

echo "done"

 

[root@vm-dev root_stand]#

执行这个sh

[root@vm-dev root_stand]# sh build_fs.sh

makeing rootdir

makeing dir: bin dev etc lib proc sbin sys usr

making dir: mnt tmp var

making dir: home root boot

done

 

创建出一个主文件夹rootfs,里面有一批文件:

 

[root@vm-dev root_stand]# cd rootfs/

[root@vm-dev rootfs]# ls

bin  boot  dev  etc  home  lib  mnt  proc  root  sbin  sys  tmp  usr  var

[root@vm-dev rootfs]#

 

4、把busybox源码目录下的etc的内容拷贝到这里的etc

 

[root@vm-dev rootfs]# cd etc/

[root@vm-dev etc]# ls

[root@vm-dev etc]# cp -a /work/busybox-1.13.1/examples/bootfloppy/etc/* ./

[root@vm-dev etc]# ls

fstab  init.d  inittab  profile

[root@vm-dev etc]#

 

5、修改拷贝过来的profile文件

[root@vm-dev etc]# vi profile

# /etc/profile: system-wide .profile file for the Bourne shells

echo "Processing /etc/profile"

# no-op

 

# Set search library path

echo " Set search library path"

export LD_LIBRARY_PATH=/lib:/usr/lib

 

# Set user path

echo " Set user path"

PATH=/bin:/sbin:/usr/bin:/usr/sbin

export PATH

 

# Set PS1

echo " Set PS1"

HOSTNAME=`/bin/hostname`

# 此处让shell提示符显示host名称的。是`,不是’,要注意

# 会在进入根系统后显示Jacky

 

export PS1="\\e[32m[$USER@$HOSTNAME \\w\\a]\\$\\e[00;37m "

# 此处\\e[32m是让后面的[$USER@$HOSTNAME \\w\\a]显示为绿色

# \\e[00是关闭效果

# \\e[05是闪烁

# 37m是让后面的显示为白色

# 多个命令可以;号隔开

 

echo "All done!"

echo

6、修改初始化文件inittabfstab

Inittab

 

[root@vm-dev etc]# vi inittab

 

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

::respawn:-/bin/sh

::restart:/sbin/init

 

tty2::askfirst:-/bin/sh

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

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

::shutdown:/sbin/swapoff –a

 

Fstab

 

[root@vm-dev etc]# vim 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

 

7、修改初始化的脚本文件init.d/rcS

 

[root@vm-dev etc]# vi init.d/rcS

 

#! /bin/sh

echo "Processing etc/init.d/rc.S"

 

#hostname ${HOSTNAME}

hostname up-tech

echo " Mount all"

/bin/mount -a

 

echo " Start mdev...."

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

mdev -s

 

echo "****************************************************"

echo " rootfs by NFS, s3c2410"

echo " Created by lyj_uptech @ 2008.11.28"

echo " Good Luck"

 

echo " "

echo "****************************************************"

echo

 

 

8、创建一个空的mdev.conf文件在挂载根文件系统时用到

[root@vm-dev etc]# touch mdev.conf

 

 

9、从本机拷贝passwdshadowgroup文件。

 

[root@vm-dev etc]# cp /etc/passwd .

[root@vm-dev etc]# cp /etc/shadow .

[root@vm-dev etc]# cp /etc/group .

 

修改passwd文件把第一行和最后一行的bash修改成ash

 

10、把busybox默认安装目录中的文件全部复制到rootfs

会发现多了linuxrc -> bin/busybox文件这是挂载文件系统需要执行的。

 

[root@vm-dev etc]#  cd ..

[root@vm-dev etc]#  cp -Rfv /work/busybox-1.13.1/_install/* ./

 

OK,以上用busybox创建了一个基本的文件系统。

PS:

    如果编译busybox时选择动态库方式编译,则需要查看生成的busybox使用哪些动态库,然后把它们拷贝到rootfs/lib目录下。

[root@vm-dev lib]# arm-linux-readelf -d ../bin/busybox

 

参考文献:http://blog.chinaunix.net/u2/65122/showart.php?id=1671023

 

阅读(1052) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~