分享

ext2文件系统的制作

 langhuayipian 2011-02-21

完全是什么都不懂,经理大概说了下也没整明白就开始做.终于今天上午做了个能跑起来的...泪流满面啊~下面把学习总结给贴上来.

根文件系统主要包括etc/,bin/,sbin/,lib/,proc/,dev/等根目录,其他目录可以根据应用来增加。

创建根文件系统使用了busybox工具,我用的是1.13.3版本,其实制作方法很简单,主要是环境要和编译kernel的一样,编译链什么的.我这个kernel是公司原来在cvs服务器上都做好了的,直接make就出来了,而我之前做kernel出了点问题一直跑不起来,所以为了赶学习进度就直接用了这个kernel,因为是才接触嵌入式,最开始没意识到这点的重要,浪费了很多的时间,做出来却没法跑,或者出现各种错误,后来反应过来1天多点就弄好了.


1.编译busybox

 

1.1解压该包

tar -xvjf busybox-1.13.3.tar.bz2

cd busybox-1.13.3

 

1.2.修改Makefile

找到

CROSS_COMPILE ?=

修改为CROSS_COMPILE ?=arm-linux-

(这里需要修改成编译链名称,我实际用的是xscale_be-)

 

找到

ARCH ?= $(SUBARCH)

修改为

ARCH ?= arm

 

1.3.进行默认配置

make defconfig

 

1.4.对配置信息进行修改

make menuconfig

 

Busybox Settings --->

        Build Options --->

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

(动态或静态网上各有讨论,总体来说在空间不紧张的时候使用静态,不容易出错)

            ()Cross Compiler prefix=/usr/local/arm/3.4.1/bin/

(这里是添加编译器路径,如果没有exportPATH环境变量里,则可以在这里添加)

 

        Installation Options --->

            [*]Don't use /usr

 

其他的设置可以根据需要来,这里就默认了(不过后面编译会出错一些,然后相应的修改或者干脆去掉那些用不着的)

 


1.5.make (下面是我make中出现的错误与解决)

Error 1.

In file included from miscutils/watchdog.c:13:

/opt/montavista/pro/devkit/arm/xscale_be/target/usr/include/linux/watchdog.h:17: error: parse error before "__u32"

/opt/montavista/pro/devkit/arm/xscale_be/target/usr/include/linux/watchdog.h:20: error: parse error before "identity"

/opt/montavista/pro/devkit/arm/xscale_be/target/usr/include/linux/watchdog.h:21: error: parse error before '}' token

make[1]: *** [miscutils/watchdog.o] Error 1

make: *** [miscutils] Error 2

 

解决:

make menuconfig

去掉Miscellaneous Utilities -> watchdog.

保存,继续make

 

Error 2.

networking/brctl.c: In function `brctl_main':

networking/brctl.c:186: error: `SIOCBRADDBR' undeclared (first use in this function)

networking/brctl.c:186: error: (Each undeclared identifier is reported only once

networking/brctl.c:186: error: for each function it appears in.)

networking/brctl.c:186: error: `SIOCBRDELBR' undeclared (first use in this function)

networking/brctl.c:202: error: `SIOCBRADDIF' undeclared (first use in this function)

networking/brctl.c:202: error: `SIOCBRDELIF' undeclared (first use in this function)

make[1]: *** [networking/brctl.o] Error 1

make: *** [networking] Error 2

 

解决: vi (busybox目录)networking/brctl.c  添加下列

#define SIOCBRADDBR    0x89a0

#define SIOCBRDELBR    0x89a1

#define SIOCBRADDIF    0x89a2

#define SIOCBRDELIF    0x89a3

继续make

 

Error 3.

In file included from networking/ifenslave.c:105:

出现一大堆关于ifenslave的错

 

解决:

make menuconfig

去掉networking -> ifenslave.

保存,继续make

 

Error 4.

networking/interface.c:818: error: `ARPHRD_INFINIBAND' undeclared here (not in a function)

networking/interface.c:818: error: initializer element is not constant

networking/interface.c:818: error: (near initialization for `ib_hwtype.type')

make[1]: *** [networking/interface.o] Error 1

make: *** [networking] Error 2

 

解决:

vi networking/interface.c

找到818.type  = ARPHRD_INFINIBAND,

改为.type  = -1,

保存,继续make

 

最后出来了一些警告,不过终于编译通过了


1.6.make install

编译出来的binsbin就在_install里面

 

2.构建文件系统(部分需要root权限)

 

2.1.mkdir rootfs (后面文件系统就挂载在这里)

2.2.dd if=/dev/zero of=ucfs bs=1k count=6144

后面的6144是指解压后6M大小的文件系统,如果跑的时候报错,说明可能超过最大空间了.

2.3.losetup -e none /dev/loop0 e2fs如果loop0已被使用,可以使用loop1等。

2.4.mke2fs -m 0 /dev/loop0 6144

2.5.mount -t ext2 /dev/loop0 ./rootfs/

接下来进入rootfs/目录,可以看到里面已经有了一个lost+found目录.rootfs/目录中添加相关的文件和目录,完成根文件系统的构建.

2.6.cp –avrf (busybox目录)/_install/* rootfs

2.7.cp –avrf (busybox目录)/example/bootfloppy/etc rootfs

etc里面的是启动init相关的设置,这里以最简单来设置,同时修改ectinttab,保留前2,如下

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

::respawn:-/bin/sh

2.8.建立剩下需要的文件夹mkdir lib dev proc

2.9.复制lib,这个要简单的话直接复制板子提供的文件系统里的lib即可,我就是直接复制的.如果没有,则需要拷贝交叉编译器中的uclibc,进入交叉编译器的lib目录,然后拷贝必要的库.

2.10.创建dev,busybox目录/example/bootfloppy下有一个mkdevs.sh,

sh mkdevs.sh rootfs/dev/

可以用它来快捷建立需要的设备.也可以根据需要来使用mknod建立.

至此,最基本的基于ext2的根文件系统制作完成~

2.11打包压缩

umount /dev/loop0

losetup -d /dev/loop0

gzip -v9 e2fs

 

最后制作出来的e2fs.gz就是需要的了.

 

busybox的目录下example里有个mkrootfs.sh还是什么的,里面的命令可以好好看看学学,基本上就是制做文件系统的全过程.

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多