注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

ARM学习(三十四)根文件系统的建立-BUSYBOX的编译  

2010-04-15 21:56:37|  分类: ARM学习 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 

在QT准备完成后,准备把其挂载到开发板儿上,这样就必须制作根文件系统,其实如果想轻松一些的话,只要把开发板儿上的文件系统MOUNT上,把QTOPIA的主要文件建立到相应目

录下即可,但为了能够准确的把握整个开发的流程,应该认真的对每一步都进行亲自操作。
首先是准备BUSYBOX的软件,你可以到网上去下载,也可以从开发板儿或网上的开发板儿的公司的网站上下载相应的版本,我使用的是飞凌和TQ的busybox-1.13.0.tar.bz2,

http://www.busybox.net下载)交叉编译器仍然采用的是编译QTOPIA的arm-linux-gcc 3.4.1版本,这里需要注意的是最好包括编译LINUX内核都使用一个版本的交叉编译器,否

则可能会出现一些意想不到的错误。

一、把busybox-1.13.0.tar.bz2包解压缩到指定目录,tar -jxvf busybox-1.13.0.tar.bz2 -C 这里的-C原来是指定目录的意思,当然你可以不带他,于是会解压缩到当前的目录

,cd 命令进入busybox-1.13.0文件夹,执行make menuconfig,进行配置:
1、BusyBox Setting->Build Options->Cross Compiler prefix,将它的值设为arm-linux-。(设置环境变量即可以不修改此项,我就这样做的)
2、最好对Busybox进行静态编译,省去不少麻烦,于是选中Build BusyBox as a static binary。(看应用的库,参考书上的动态方法。)
3、其余的选项可根据需要自行选择,在Installation Options里可以选择BusyBox生成路径,默认为./_install。
可能选中Miscoellaneous Utilities -> taskset可能会出现问题[1] , 因此我没有选中这个选项。
4、也可以使用一些公司写好的配置文件,在菜单的最后两行的倒数第二个,LOAD菜单选项里,我使用了TQ的config_EmbeSky这个。编译也成功。

二、make命令执行,出现一个错误:error: 'ARPHRD_INFINIBAND' undeclared here (not in a function)
用VI打开当前目录下的networking/interface.c然后在里面增加#define ARPHRD_INFINIBAND 32
再次make通过。
三、make install命令执行后,会把当前生成的根文件系统保存在默认的_install  文件夹内,里面有bin,sbin,usr,liunxrc,两个目录一个文件,用ls –l命令查看其中的一个文件,可发现其是链接到busybox(目录位置在:当前目录的bin文件夹下)的一个连接符,所以我们之后在目标机上运行的命令大多都会调用busybox这个文件的。

使用命令 file ./install/bin/busybox 查看文件属性,如果为ARM,则编译正确.

这里需要注意的是:如果在make menuconfig时配置了Busybox Settings ---> Install Options ---> 中输入建立根文件系统的文件所在的路径/home/XX/XXXX,则可以正常的使用

,如果是想把这几个文件拷走到另外的文件夹下,请使用 -a  ,因为这里的文件都是连接文件,为保证连接不被破坏,要都拷过去,例如:
#cp  -a  ../busybox/_install/bin  ./  -rf

记得查看BUSYBOX是否为可执行文件,否则用CHMOD命令修改即可.

 查看共享库文件并拷贝到使用目录

用命令 arm-linux-readelf -a ${PROGRAM} | grep "Shared library"
---------------------------------------------------------------
[root@localhost bin]# pwd
/root/maoyong/busybox-1.4.2/_install/bin

[root@localhost bin]# arm-linux-readelf -a busybox | grep "Shared library"

0x00000001 (NEEDED)                     Shared library: [libcrypt.so.1]
0x00000001 (NEEDED)                     Shared library: [libm.so.6]
0x00000001 (NEEDED)                     Shared library: [libc.so.6]
------------------------------------------------------------------
如上所示 要把 /usr/local/arm/3.3.2/arm-linux/lib目录下的
libcrypt.so.1  
libm.so.6
libc.so.6
文件是busybox所需的共享库文件,要把它以及和他相关的链接文件拷贝到
你新建的文件系统的 lib 目录。

   (注意: libcrypt.so.1    libm.so.6 libc.so.6相关的链接文件也要拷贝到lib目录)

==================================================================================

环境:fedora 7
编译器: 交叉编译器 3.3.2
busybox: 1.5.1
(busy1.5.1 可以静态编译,不会出错 :))
四、建立其它的根文件系统。
对比我们创建的根文件系统和正常的LINUX的根文件系统,发现少很多的东西,于是我们要创建这些没有生成的目录和文件。
有两种方法,一种是在指定的目录下预先创建那些文件及文件夹,比如/etc,/home等,一个命令:
mkdir bin dev etc home lib mnt proc sbin sys tmp var usr
这样,在第三步前便已经有了这些路径,在make install时会自动把新生成的路径进行覆盖,我个人觉得这是最好的办法。
第二种方法是在生成后再创建其它的文件夹,但这样的话,要一个个的手动创建,当然你也可以写成SHELL文件。

五、建立必要的文件及进行配置和初始化。(下面一些主要是从网上摘录而来,由于这次编译没有进行开发板儿的测试,所以这些东西没有验证)
生成这些配置可以选择的方法有2种,一种是直接从一个正常运行的系统中拷贝,另一种是借助于busybox的examples。显然,选择第二种会容易的多,我们直接拷贝

examples/bootfloopy/etc到install目录下:#cp –a ../examples/bootfloppy/etc/ .
然后可以看看etc目录下的文件,一共有3个目录和文件,下面逐一对以上几个文件进行分析和说明。
 inittab文件:系统启动后访问的第一个脚本文件,后续启动的文件都由它指定。下面看一下busybox中原始的inittab文件内容:
::sysint:/etc/init.d/rcS
::respawn:-/bin/sh
tty2::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount –a -r
其中第一行指定系统的启动脚本为/etc/init.d/rcS
第二行指定打开一个登录会话
第三行指定在第三个虚拟终端打开一个无须登录验证的shell
第四行指定了当按下ctrl+alt+del组合键时的执行命令
   fstab文件:定义了文件系统的各个“挂载点”,需要与实际的系统相配合。默认的fstab文件内容为:
proc   /proc proc defaults 0 0
其他的根据需要再进行添加,比如devpts  /dev/pts devpts defaults 0 0就是为UNIX PTYs准备的,后面讲telnetd时要用到。
  profile文件:终端登陆之后首先运行的脚本

调试时要通过串口发送消息到终端显示。因此串口控制台和终端2个设备文件是必不可少的。
#mkdir dev
#mknod dev/console c 5 1
#mknod dev/ttyAMA0 c 204 64
在启动参数中,设置console=ttyAMA0

此时,一个基本的文件系统的功能就已经完成了。可以采用NFS进行调试。但是,此时你可能会遇到如下问题,系统登录后终端上会不断打印:
cannot open /dev/ttyS2:No such file or directory.
原因出在/etc目录下的inittab文件,我们看一下其内容:
::sysint:/etc/init.d/rcS
::respawn:-/bin/sh
tty2::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount –a -r
这条语句表示在第3个虚拟终端打开一个无须登录验证的shell。而我们之前没有建立这个tty2设备,因此会出错。解决的办法有2个:一是屏蔽该语句,二是建立该设备节点。我们

选择将其屏蔽。

手工方法建立设备文件太麻烦了,通常直接从/dev下把需要的设备文件拷贝过来。
这些设备文件是特殊文件,在拷贝时一定要加上-R参数才能拷贝。

#cp -R /dev/console ./
#cp -R /dev/null ./
#cp -R /dev/zero ./

六、生成镜像
mkyaffs2image _install my.yaffs 即可在当前目录下生成一个镜像,可以用来烧到开发板儿上。

因为开发板儿没有在身边儿,所以没有在板儿上进行测试,一个小缺憾,但我会很快补上,从理论上讲应该是正确的,因为我是采用的TQ的配置文件和根文件系统补丁。
努力,!!!!!!!!!!!!!!!!!!

  评论这张
 
阅读(1451)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017