现在的位置: 首页 > 综合 > 正文

动态库的根文件系统的制作

2013年09月06日 ⁄ 综合 ⁄ 共 2933字 ⁄ 字号 评论关闭

在我的《u-boot-2011.06在基于s3c2440开发板的移植之引导内核与加载根文件系统》这篇文章中已经介绍了根文件系统的制作,但它是静态库。在这篇文章中,我主要介绍带有动态库的根文件系统的制作。与上一篇内容重复的地方就不再赘述。

 

在使用menuconfig配置busybox的时候,只需要修改下列内容即可:

Busybox Settings  ---> 
    Busybox Library Tuning  --->  
      [*]     Usernamecompletion                                    
       [*]   Fancyshellprompts 

 

在给根文件系统添加目录和文件的时候,还需要手动添加库文件,即在根文件系统的根目录下创建lib目录:

mkdir      lib

然后复制动态链接库到该目录下。

 

这是因为交叉应用程序的开发需要用到交叉编译的链接库,交叉编译的链接库是在交叉工具链的lib目录下,而我们在移植应用程序到我们的目标板的时候,需要把交叉编译的链接库也一起移植到目标板上。由于我使用的交叉编译器是eldk4.2,并且我把它安装到了/opt/eldk4.2目录下,因此链接库的目录是/opt/eldk4.2/arm/lib。

 

为方便起见,参考网上别人的方法写一个脚本文件来复制动态链接库:

以根用户的身份进入/opt/eldk4.2/arm/lib目录,在该目录下编写一个shell文件——cp.sh,用于复制实际的库,其中我的目标板根文件下的lib目录是/home/zhaocj/rootfs/lib,以下就是该shell文件的内容:

 

for  file in  libc  libcrypt libdl  libm  libpthread libresolv  libutil

do

cp  $file-*.so /home/zhaocj/rootfs/lib                     #复制实际的共享库

cp  -d $file.so.[*0-9]  /home/zhaocj/rootfs/lib              #复制符合链接本身

done

cp  -d ld*.so*  /home/zhaocj/rootfs/lib                 #复制动态连接器及其符合链接

 

编写完cp.sh文件后,执行之:

source  cp.sh

 

这样就把链接库复制到/home/zhaocj/rootfs/lib目录下。为了缩小复制过来的链接库的体积,还需要执行下列命令:

arm-linux-strip  –s  /home/zhaocj/rootfs/lib/lib*

 

经过以上内容的补充,带有动态库的根文件系统就制作好了。但在开发过程中,我们经常需要PC机与开发板之间传输文件,因此还需要安装rz,sz工具,它是基于zmodem协议的文件传输命令。由于我的PC机中的linux系统——fedora17已经自带了这个工具,因此我只需把rz,sz工具安装到开发板上就行了,即在根文件系统中添加这个工具。

 

首先,在下列网址内下载安装包:
http://freeware.sgi.com/source/rzsz/rzsz-3.48.tar.gz

 

解压

tar  -xzvf rzsz-3.48.tar.gz

 

然后进入该目录

cd  src

 

修改Makefile文件

CC = arm-linux-gcc

并且把第四行的OFLAG=-O 改写为

OFLAG= -O -DREGISTERED
否则,编译后,在上传下载完成后都会提示:

           **** UNREGISTERED COPY *****
Please read the License Agreement in rz.doc
虽然不影响运行,但还是有碍观瞻。

 

编译

make posix

 

最后只需要把编译后生成的sz文件和rz文件复制到根文件系统下的/bin目录就完成了rz,sz工具的安装。

 

 

为了测试一下根文件系统传输文件的好坏,我编写了一个最简单的程序——hello.c,如:

 

#include <stdio.h>

int main()

{

  printf("Hello world!\n");

  return 0;

}

 

然后交叉编译该文件

arm-linux-gcc  -o  hello  hello.c

 

用C-Kermit连接linux系统的PC机和开发板,我们的目的是把刚才编译生成的hello文件下载到开发板的temp目录下,并运行:

 

[root@zhaocj /]# ls

bin     etc      lib      proc    sys      usr

dev     home     linuxrc  sbin    temp

[root@zhaocj /]# cd  temp

[root@zhaocj /temp]# rz                                                 //////接受文件命令,即要求把文件从PC机传输到开发板上

rz  ready. Type  "sz file ..."  to  your modem  program

�##B010000012f4ced

按ctrl+\,然后按c,进入ckermit命令模式

 

(Back at zhaochunjiang)

----------------------------------------------------

(/home/zhaocj/) C-Kermit>set  protocol  zmodem                  //////修改当前的文件传输协议为zmodem

(/home/zhaocj/) C-Kermit>send  hello                             //////传输hello文件,该文件就在PC机linux系统的当前目录下

Sending:  hello

Bytes Sent:   4943  BPS:6558                           

 

 

Transfer  complete

(/home/zhaocj/temp/) C-Kermit>c                                    //////回到非命令模式下的串口界面

Connecting to /dev/ttyS0, speed 115200

 Escape  character: Ctrl-\  (ASCII  28,  FS): enabled

Type  the  escape character  followed  by  C  to get back,

Or  followed  by  ?  to  see  other  options.

----------------------------------------------------

rz  3.4801-27-98  finished.

[root@zhaocj /temp]# ./hello                                           //////运行hello文件

Hello world!

抱歉!评论已关闭.