接上一节http://blog.csdn.net/mybelief321/article/details/10040939

说实话,我当时写这个系列的博文的时候,感觉对BusyBox算是有点了解,直到昨天出现问题,今天解决了,才醍醐灌顶,算是知道了BusyBox静态编译和动态编译的区别。首先,说明一下我的问题,以下是我的问题

----------------------------------问题描述开始-------------------------------------------

在配置busybox的时候,我选择的是静态编译,可以出现控制台console,可是我利用交叉编译器编写的hello world程序,一个采用的是静态编译,一个动态编译,随着根文件系统一起制作成镜像文件下载到板子后,其中静态编译的可以执行,动态编译的却不能执行,说是~/bin/sh: ./hello not found。

yaffs_read_super: isCheckpointed 0                                               开始以为是配置busybox的时候,选择静态编译的原因,于是把它改成动态编译,结果下载到板子上,根本运行不起来,出现Failed to execute /linuxrc. Attempting defaults... Kernel panic - not syncing: No init found. Try passing init= option to kernel. 的错误。请问谁能知道怎么让自己在PC上动态编译的程序,在开发板上也能运行呢?还有这个BusyBox配置的时候,静态编译和动态编译针对的是BusyBox还是别的什么?
VFS: Mounted root (yaffs filesystem) on device 31:3.                            

Freeing init memory: 156K                                                       

Failed to execute /linuxrc.  Attempting defaults...                             

Kernel panic - not syncing: No init found.  Try passing init= option to kernel. 

Backtrace:                                                                      

[<c00341cc>] (dump_backtrace+0x0/0x10c) from [<c03317d0>] (dump_stack+0x18/0x1c)

 r7:00000000 r6:00000000 r5:c001f484 r4:c048a330                                

[<c03317b8>] (dump_stack+0x0/0x1c) from [<c0331820>] (panic+0x4c/0x114)         

[<c03317d4>] (panic+0x0/0x114) from [<c002f598>] (init_post+0xa8/0x10c)         

 r3:00000000 r2:c3953100 r1:c3953200 r0:c03e37ec                                

[<c002f4f0>] (init_post+0x0/0x10c) from [<c00084b4>] (kernel_init+0xe4/0x114)   

 r5:c001f484 r4:c0489ac0                                                        

[<c00083d0>] (kernel_init+0x0/0x114) from [<c004bbbc>] (do_exit+0x0/0x620)

r5:00000000 r4:00000000

-------------------------------------------问题描述结束--------------------------------------------

后来受kangear朋友对我问题的解答,以下是他对我出现问题的解答

----------------------------------------------问题解答开始-------------------------------------------------------

关于你说的问题“动态编译的helloworld”不能够运行和busybox关系不大! busybox和helloworld是一个等级的,都是linux应用程序。你的问题在于动态应用程序不能够运行,是你开发板是没有库文件,提示的错误“~/bin/sh: ./hello not found”,也能够证明这一点,把交叉工具链中的armlinuxgccdir/arm-none-linux-gnueabi/lib中的库文件放到你开发板/lib目录下。(用arm-linux-readelf -d a.out也可以看到a.out需要的动态库文件)

-------------------------------------------------问题解答结束----------------------------------------------------

受他的启发,我首先使用 arm-linux-readelf -a  hello2 |grep "Shared" 命令,查看了我动态编译的 hello2可执行程序,该程序用到的库是 libc.so.6 ,查看了我根文件系统的 /lib文件夹,但是这个文件明明就乖乖地躺在那里啊。再仔细一想,我这个hello1和hello2编译的是 arm-linux-gcc 4.4.3版本的,但是我之前放置 glibc库的所属版本是arm-linux-gcc 3.4.5版本的,它们的库文件能一样吗?

抱着这个想法,我于是将根文件系统内的 /lib文件夹内的所有的库文件都删掉,然后换成arm-linux-gcc 4.4.3的动态库,我的4.4.3 的动态加载库在本系统的安装路径为:/home/song/software/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/lib/

所以,我将原来的那个 lib 文件夹内的文件全部删掉,然后在该 lib 文件夹内执行命令:cp /home/song/software/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/lib/*.so* ./  ,将4.4.3的动态库全部复制过来。

安装完这些库,我又将 busybox安装在本目录内的 /bin、/sbin、/usr还有 linuxrc删掉,重新配置我的busybox,其他选项和和我前边讲的都一样,唯一不同的就是修改了这一节http://blog.csdn.net/mybelief321/article/details/10001927 的第7步,这里选择动态链接,配置如下

Busybox Settings  --->

Build Options  --->

[ ] Build BusyBox as a static binary (no shared libs)               
      [ ]   Build BusyBox as a position independent executable            
      [ ] Force NOMMU build                                                
      [*] Build shared libbusybox                                          
      [*]   Produce a binary for each applet, linked against libbusybox   
      [*]   Produce additional busybox binary linked against libbusybox    
      [*] Build with Large File Support (for accessing files > 2 GB)

然后,再安装到根文件系统内,制作成yaffs2镜像文件,下载到开发板,此时不管是静态编译的程序还是动态编译的程序,都可以支持了,真的太棒了!很开心!

选择动态编译制作好的根文件系统,我打包上传到了网站,如有需要,请自行下载,点此下载

想想真好,这系列文章算是我学习的见证,中间出错,所以对那些看着这篇文章制作根文件系统的朋友产生的不便,说声很抱歉。

最新文章

  1. eclipse或者myeclipse安装svn报错”unable to load default svn client”
  2. 工作随笔——一次简单的Maven加速构建实战
  3. Angular.js+Bootstrap实现表格分页
  4. Android BroadcastReceiver广播接受者
  5. LeetCode Invert Binary Tree 反转二叉树
  6. JAVA中获取当前运行的类名,方法名,行数
  7. 4_SSRF
  8. mysql开启慢查询日志以及查看(转载自网络)
  9. python中random模块的使用
  10. May 25. 2018 Week 21st Friday
  11. Required String parameter &#39;images&#39; is not present
  12. js图的数据结构处理----邻链表,广度优先搜索,最小路径,深度优先搜索,探索时间拓扑
  13. Python代码规范(PEP8)问题及解决
  14. java 或者 js 获取项目访问路径(域名)
  15. Codechef Dynamic Trees and Queries
  16. Linux平台上SQLite数据库教程(一)——终端使用篇
  17. md5sum检验MD5值
  18. 禁用F12和鼠标右键,防止查看控制台代码
  19. 【luogu P1004 方格取数】 题解
  20. 安装mathtype出问题卸载后 office2016打开mathtype弹错误窗口

热门文章

  1. 网站前端优化 -saveForSelf
  2. PL/SQL学习(六)触发器
  3. jsonp跨域访问详解
  4. php Static静态关键字
  5. Winform与WPF对话框(MessageBox, Dialog)之比较
  6. WebApi学习总结系列第二篇(webapi的调试)
  7. Xcode 证书生成、设置、应用
  8. 【Earthquake, 2001 Open 】 0-1 分数规划
  9. 【Spring】Spring IOC原理及源码解析之scope=request、session
  10. 最新ps cs6序列号 永久免费可用