微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM Linux根文件系统Root Filesystem的制作

ARM Linux根文件系统Root Filesystem的制作

时间:11-09 来源:互联网 点击:

一般开发板里都会带有很多库,但是总体积却比较大。可以删掉一些不用的库来减小体积,但是,,我也不知道那些库具体含有什么函数,什么情况删什么;也许以后我会把这部分补上。如果觉得库体积太大,也可以自己编译glibc或者uclibc,但是这是非常繁琐的事请——目前我认为库应该和编译器arm-linux-gcc一起制作。有个傻瓜式的方案是使用cross-tool,下载地址:http://www.kegel.com/crosstool/。虽然cross-tool是用来制作交叉编译器的,但是其过程中生成的glibc却可以作为副产品为我们所用。cross-tool的使用可以看我之前的这篇文章http://xianzilu.spaces.live.com/blog/cns!4201FDC93932DDAF!274.entry。在成功制作了交叉编译器之后,就可以从cross-tool的目录里把glibc取出来,假设cross-tool的路径是/home/lxz/cross-tool,编译出的编译器叫做arm-linux-gnu-gcc,gcc版本3.4.5,glibc版本2.3.6,想要把glibc库拷贝到/home/lxz/glibc,下面的操作还是用命令来说明。

# cd /home/lxz/cross-tool/build/arm-linux-gnu-gcc/gcc-3.4.5-glibc-2.3.6/build-glibc

# ../glibc-2.3.6/configure --prefix=/home/lxz/glibc

# make install

等候安装结束

# cd /home/lxz/glibc

# cp -r lib /home/lxz/rootfs

这样就把glibc的大部队拷贝好了,但是这样还缺两个库,我们继续

# cd /home/lxz/cross-tool/build/arm-linux-gnu-gcc/gcc-3.4.5-glibc-2.3.6/build-gcc/gcc

# cp libgcc_s.so* /home/lxz/rootfs/lib

还缺少一个libtermcap库,这个就稍微有些麻烦。libtermcap-2.0.8-35-armv4l源码包的下载地址是http://www.netwinder.org/mirror/pub/netwinder/SRPMS/nw/9/libtermcap-2.0.8-35.src.rpm,你也可以在这里http://www.netwinder.org/allsrpms.html找到其他版本的。假设libtermcap-2.0.8-35.src.rpm下载到了/home/lxz/libtermcap,下面继续用命令说明。

# cd /home/lxz/libtermcap

# rpm2cpio libtermcap-2.0.8-35.src.rpm | cpio -ivd
# tar xvjf termcap-2.0.8.tar.bz2
接下来要打13个补丁,很汗啊,请一定按照下面的顺序来打补丁

# patch -p0 -i termcap-2.0.8-shared.patch
# patch -p0 -i termcap-2.0.8-setuid.patch
# patch -p0 -i termcap-2.0.8-instnoroot.patch
# patch -p0 -i termcap-2.0.8-compat21.patch
# patch -p0 -i termcap-2.0.8-xref.patch
# patch -p0 -i termcap-2.0.8-fix-tc.patch
# patch -p0 -i termcap-2.0.8-ignore-p.patch
# patch -p0 -i termcap-buffer.patch
# patch -p0 -i termcap-2.0.8-bufsize.patch
# patch -p0 -i termcap-2.0.8-colon.patch
# patch -p0 -i libtermcap-aaargh.patch
# patch -p0 -i termcap-2.0.8-glibc22.patch
# patch -p0 -i libtermcap-2.0.8-ia64.patch

然后到/home/lxz/libtermcap/termcap-2.0.8里,找到Makefile,修改其中的CC和AR,

CC = /usr/local/arm/3.4.1/bin/arm-linux-gcc

AR = /usr/local/arm/3.4.1/bin/arm-linux-ar

当然,你的编译器在哪里就改成相应的内容。如果嫌麻烦,可以从本站资料页面下载我已经打好补丁,修改好Makefile的包,地址http://cosine.oicp.net/project/common/termcap-2.0.8.tar.bz2。需要注意的是,这个包里CC = arm-linux-gcc、AR = arm-linux-ar,请设置好缺省路径。然后就可以编译了:

# cd /home/lxz/libtermcap/termcap-2.0.8

# make

# ln -s libtermcap.so.2.0.8 libtermcap.so.2

# cp libtermcap.so* /home/lxz/rootfs/lib

这样,Shell启动所需要的基本库就都备齐了。但是,这些库里面还含有调试信息,体积稍大,可以把这些信息去掉(当然不去掉也没有什么影响)。

# cd /home/lxz/rootfs/lib

# arm-linux-strip *.so*

至此,库就制作好了。

  • 脚本

有了以上的东西,Shell还是不能正常工作。可能会是内核提示Free init memory: XXK之后就什么输出也没有了,这时候向终端敲入文字,可以显示;就是没有终端提示符,不理会输入的命令。这是因为初始化脚本没有启动Shell。下面介绍这些脚本。

首先是/etc/inittab。内核启动、根文件系统挂载之后所必须的一个文件,其中列举了Shell和整个系统初始化、关闭所需的命令。如果你想让Shell出现,那么只需要加入这么一行“::askfirst:/bin/ash”。当然如果在编译Busybox的时候选择的shell不是“ash”,而是hush、lash、msh之类,那就改成相应的东西。除了启动Shell,inittab还干了很多事情,我就用我的inittab来说明了。注意,在编译Busybox的时候要选上touch、syslogd、

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top