`
king_tt
  • 浏览: 2140641 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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


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

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

下一节:http://blog.csdn.net/mybelief321/article/details/10075709

分享到:
评论

相关推荐

    一步一步制作yaffs2根文件系统

    一步一步制作yaffs2根文件系统,一步一步制作yaffs2根文件系统,

    内核配置_yaffs2补丁

    给内核打yaffs2文件系统的补丁 cd /mnt/hgfs/share tar –zxvf /mnt/hgfs/share/cvs-root.tar.gz –C /opt/studyarm cd /opt/stdudyarm/cvs/yaffs2/ ./patch-ker.sh c /opt/studyarm/linux-2.6.29.1/ 上面命令...

    yaffs_vfs.c, android

    s/yaffs2/yaffs_vfs.c: In function 'yaffs_read_super': fs/yaffs2/yaffs_vfs.c:2383:2: error: implicit declaration of function 'get_sb_bdev' fs/yaffs2/yaffs_vfs.c: At top level: fs/yaffs2/yaffs_vfs.c:...

    yaffs2压缩包

    yaffs2 工具包 1.从http://www.yaffs.net/download-yaffs-using-git网址下载得到yaffs和yaffs2的源文件 2.解压后,进入到yaffs2目录下,通过yaffs2目录下的脚本...3.最后就是配置编译内核,让内核支持yaffs2文件系统

    yaffs2文件系统制作详解

    s3c2440下 yaffs2文件系统制作详解,本人实践成功

    Tiny6410根文件系统yaffs2根文件系统

    压缩包包含三个适用于Tiny6410的yaffs2根文件系统,mini_rootfs.yaffs2是最小的根文件系统,不是很完整的根文件系统,fix_mount_mini_rootfs.yaffs2添加了自动挂载功能,fix_udev_rootfs.yaffs2在添加了自动挂载功能...

    一种制作YAFFS2嵌入式文件系统的方法

    期刊论文,介绍了一种制作YAFFS2嵌入式文件系统的方法, 详细介绍了在ARM处理器S3SC2440和嵌入式Linux 平台上建立YAFFS2 根文件系统的方法步骤。

    嵌入式linux根文件系统制作&yaffs2;

    busybox编译,ok6410开发板yaffs2文件系统的制作和烧写。

    yaffs yaffs2 文件系统正确补丁包 移植LINUX常用

    yaffs yaffs2 文件系统正确补丁包 移植LINUX常用 CSDN有的下载的编译不正确,特发布正确的。

    yaffs2文件系统介绍

    YAFFS意义为‘yet another flash file system... YAFFS是目前为止唯一一个专门为NAND flash设计的文件系统,目前有YAFFS 和YAFFS2 两个版本,两个版本的主要区别之一在于YAFFS2 能够更好的支持大容量的NAND FLASH芯片。

    在utu2440上制作yaffs2根文件系统

    在utu2440开发板上制作yaffs2根文件系统的详细步骤

    yaffs文件系统 制作 解压工具

    yaffs 文件系统制作 解压工具

    构建嵌入式实验步骤yaffs文件系统制作

    实验环境的搭建: 交叉编译工具,内核源代码,根文件系统压缩包,yaffs2文件夹,Busybox源代码包,mkyaffs2image-128M工具 实验内容: 1.对标准Linux2.6.32内核源代码的修改,加上s3c2440的特性,配置,编译,烧写...

    YAFFS2文件系统的加载过程

    YAFFS2文件系统的加载过程,具普遍性

    Yaffs2文件系统源代码

    Yaffs2文件系统是转为Nand Flash设计的文件系统,是基于日志式的文件系统

    制作yaffs文件系统的yaffs工具包2

    另一个yaffs根文件系统工具包,有时候工具没用对,制作出来的文件系统没法用

    yaffs2文件系统.pdf

    yaffs2 linux bsp YAFFS意义为‘yet another... YAFFS是目前为止唯一一个专门为NAND flash设计的文件系统,目前有YAFFS 和YAFFS2 两个版本,两个版本的主要区别之一在于YAFFS2 能够更好的支持大容量的NAND FLASH芯片。

    基于S3C2440的linux操作系统内核移植和yaffs2文件系统的制作

    第一章 移植内核... 2 1.1 Linux内核基础知识... 2 1.1.1 Linux版本... 2 1.1.2 什么是标准内核... 2 ...1.1.3 Linux操作系统的分类......1.1.4 linux内核的选择......2.2.5 制作根文件系统映像文件... 26

    yaffs2文件系统实现原理分析

    YAFFS(Yet Another Flash File System)是由Aleph One公司所发展出来的NAND flash 嵌入式文件系统。 在YAFFS中,最小存储单位为一个Page,文件内的数据是存储在固定512 bytes的Page中,每一个Page亦会有一个对应的...

    yaffs2文件系统源码

    yaffs2文件系统源码在网络上非常难找,找到了也很难下载下来!!!!

Global site tag (gtag.js) - Google Analytics