Chinaunix首页 | 论坛 | 博客
  • 博客访问: 13313
  • 博文数量: 9
  • 博客积分: 11
  • 博客等级: 民兵
  • 技术积分: 55
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-15 10:26
文章分类
文章存档

2012年(6)

2011年(3)

我的朋友
最近访客

分类:

2011-04-25 14:14:00

原文地址:文件系统杂记1 作者:eelb123

做文件系统,busybox那是少不了的,他主要就是一个工具集,/bin和/sbin下的各种常用命令。
上下载一个最新的28 March 2010 -- BusyBox 1.16.1 (stable)
注释:为了使生成的二进制文件我选择使用uclibc库,所以编译器我选择ELDK的基于uclibc库的交叉编译环境,下载地址:ftp://ftp.denx.de/pub/eldk/4.1/arm-linux-x86-uclibc/iso/

下载了busybox-1.16.1.tar.bz2

tar xvfj busybox-1.16.1.tar.bz2 -C ./filesystem

cd busybox-1.16.1

make menuconfig

busybox setting --> installation options --> 选上 Don't use /usr

顺便把安装目录填上,我的是${MRFS}

然后miscellanous utilities下的inotifyd readahead taskset去掉,可能由于ELDK的原因这些东西编译会出错,暂时不用就去掉了

make ARCH=arm CROSS_COMPILE=arm-linux-

make install

我们就可以看到在我们的${MRFS}目录下面生成了三个文件,bin linuxrc sbin

然后用

arm-linux-readelf -d ${MRFS}/bin/busybox

我们可以得到我们需要的库,因为我们使用的busybox是动态链接的,这样可以节约空间

Dynamic section at offset 0xd2014 contains 18 entries:
  Tag        Type                         Name/Value
 0x00000001 (NEEDED)                     Shared library: [libm.so.0]
 0x00000001 (NEEDED)                     Shared library: [libc.so.0]
这样一个最基本的文件系统下的工具集做好了.
下面有个脚本可以自动建立一些文件系统的目录

  1 #! /bin/sh
  2 echo "creatint rootfs dir......"
  3 mkdir rootfs
  4 cd rootfs
  5
  6 echo "making dir : bin dev etc lib proc sbin sys usr"
  7 mkdir bin dev etc lib proc sbin sys usr #必备的8个目录
  8 mkdir usr/bin usr/lib usr/sbin lib/modules
  9
 10
 11 # Don't use mknod ,unless you run this Script as root !
 12 #mknod -m 600 dev/console c 5 1
 13 #mknod -m 666 dev/null c 1 3
 14
 15  
 16
 17 echo "making dir : mnt tmp var"
 18 mkdir mnt tmp var
 19 chmod 1777 tmp
 20 mkdir var/lib var/lock var/log var/run var/tmp
 21 chmod 1777 var/tmp
 22
 23                           
 24
 25 echo "making dir : home root boot"
 26 mkdir home root
 27
 28 echo "done"

我的ubuntu下执行上面脚本后,可能还要执行下面两句话

sudo mknod -m 600 dev/console c 5 1
sudo mknod -m 666 dev/null c 1 3

拷贝库文件

上面看了busybox需要libm.so.0和libc.so.0

到交叉编译路径去找

一般还需要一个和ld相关的库函数

做nfs的时候可以建议把所有的库函数cp过来

最后需要写inittab了
在busybox里面可以看到如果没有inittab会自动执行init.d/rcS和一些命令
起始阶段我们求简单就只写一个init.d/rcS

  1 #!/bin/sh
  2 mount -t proc proc /proc
  3 mount -t sysfs sysfs /sys
  4 mount -t tmpfs tmpfs /dev
  5 mdev -s
  6 sync


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