zoukankan      html  css  js  c++  java
  • 一步一步制作yaffs/yaffs2根文件系统(七)---真挚地道歉以及纠正前边出现的错误!

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


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

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


  • 相关阅读:
    js-页面滚动
    js-document操作
    selenium-断言
    selenium-三类等待(强制等待、隐式等待、显示等待)
    selenium中的鼠标悬停操作
    selenium中的切换句柄及切换iframe操作
    selenium-网易云音乐登录的自动操作
    HTML/HTML5那些事
    开车新手笔记
    PHP函数辨析
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3268835.html
Copyright © 2011-2022 走看看