接上一节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镜像文件,下载到开发板,此时不管是静态编译的程序还是动态编译的程序,都可以支持了,真的太棒了!很开心!

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

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

一步一步制作yaffs/yaffs2根文件系统(七)---真挚地道歉以及纠正前边出现的错误!的更多相关文章

  1. 一步一步制作yaffs/yaffs2根文件系统(四)---构建etc、dev等剩余目录

    开发环境:Ubuntu 12.04 开发板:mini2440  256M NandFlash   64M SDRAM 交叉编译器:arm-linux-gcc 4.4.3点此可下载 BusyBox版本: ...

  2. 一步一步制作yaffs/yaffs2根文件系统(一)---储备好基础知识再打

    开发环境:Ubuntu 12.04 开发板:mini2440  256M NandFlash   64M SDRAM 交叉编译器:arm-linux-gcc 4.4.3点此可下载 BusyBox版本: ...

  3. 一步一步制作yaffs/yaffs2根文件系统(二)---安装BusyBox,构造/bin、/sbin、/usr、linuxr

    开发环境:Ubuntu 12.04 开发板:mini2440  256M NandFlash   64M SDRAM 交叉编译器:arm-linux-gcc 4.4.3点此可下载 BusyBox版本: ...

  4. 一步一步制作yaffs/yaffs2根文件系统(三)---使用glibc库构造 /lib

    开发环境:Ubuntu 12.04 开发板:mini2440  256M NandFlash   64M SDRAM glibc库:点此下载 交叉编译器:arm-linux-gcc 4.4.3点此可下 ...

  5. Yaffs2根文件系统制作

    Yaffs2根文件系统制作 环境: 交叉编译环境:4.4.6 开发平台:s3c2416 1,编译busybox 获取busybox源码busybox-1.17.2.tar (http://www.bu ...

  6. 制作ramdisk-u.img根文件系统

    具体步骤如下:1.解压内核源码树解压linux-2.6.29-mini2440-20090708.tgz到自己的工作目录,会生成一个友善之臂修改过的并且有几个mini2440默认配置文件的内核源码目录 ...

  7. 使用BusyBox制作嵌入式Linux根文件系统

    STEP 1:构建目录结构  创建根文件系统目录,主要包括以下目录/dev  /etc /lib  /usr  /var /proc /tmp /home /root /mnt /bin  /sbin ...

  8. yaffs2根文件系统的构建过程

    基于BusyBox-1.19.2  (以其它作者的作为参考) 1. 下载BusyBox的源码 http://busybox.net/ 2. 解压#tar xvzf busybox-1.19.2.tgz ...

  9. Busybox制作ARM(iTOP4412) 根文件系统

    本记录来源与自身操作过程. 1.制作环境 PC环境:外部Winows8.1 内部则为vmware11+ubuntu12.04 嵌入式设备:iTOP4412 交叉工具:arm-none-linux-gn ...

随机推荐

  1. 简单Linq笔记

    Linq是.net 3.5才引入的 要引入命名空间System.Linq. Linq  to XML要引入System.Xml.Linq Linq to ADO.NET要引入System.Data.L ...

  2. 学习PHP爬虫--《Webbots、Spiders和Screen Scrapers:技术解析与应用实践(原书第2版)》

    <Webbots.Spiders和Screen Scrapers:技术解析与应用实践(原书第2版)> 译者序 前言 第一部分 基础概念和技术 第1章 本书主要内容3 1.1 发现互联网的真 ...

  3. Laravel Repository 模式

    Repository 模式 为了保持代码的整洁性和可读性,使用Repository Pattern 是非常有用的.事实上,我们也不必仅仅为了使用这个特别的设计模式去使用Laravel,然而在下面的场景 ...

  4. 分享自己动手弄的基于Rime的新世纪五笔输入法码表

    实验室新搞了一台iMac,没有支持新世纪的码表的中文输入法啊.搜索半天大家推荐用Rime(鼠须管)来挂接新世纪码表.不知道还有没有其它支持外挂码表的Mac版输入法,暂时只有搞这个了.看了一下别人已经做 ...

  5. eclipse中DDMS的LOGcat只有一列level

    拷贝来源:http://www.cnblogs.com/kobe8/p/4620785.html http://stackoverflow.com/questions/25010393/eclipse ...

  6. POJ 2635 The Embarrassed Cryptographer 大数模

    题目: http://poj.org/problem?id=2635 利用同余模定理大数拆分取模,但是耗时,需要转化为高进制,这样位数少,循环少,这里转化为1000进制的,如果转化为10000进制,需 ...

  7. 转:浅谈命令查询职责分离(CQRS)模式

    原文来自于:http://www.cnblogs.com/yangecnu/p/Introduction-CQRS.html 在常用的三层架构中,通常都是通过数据访问层来修改或者查询数据,一般修改和查 ...

  8. 我是如何实用:before :after

    本文地址http://www.cnblogs.com/Bond/p/3972854.html 最近一直做移动端,没和IE6打交道了,瞬间感觉世界变美好了.移动端虽然还是各种坑,但是比起修复IE6那还是 ...

  9. TiDB:支持 MySQL 协议的分布式数据库解决方案

    [编者按]TiDB 是国内 PingCAP 团队开发的一个分布式 SQL 数据库.其灵感来自于 Google 的 F1,TiDB 支持包括传统 RDBMS 和 NoSQL 的特性.在国内 ITOM 管 ...

  10. 【BZOJ 2333 】[SCOI2011]棘手的操作(离线+线段树)

    2333: [SCOI2011]棘手的操作 Description 有N个节点,标号从1到N,这N个节点一开始相互不连通.第i个节点的初始权值为a[i],接下来有如下一些操作: U x y: 加一条边 ...