一步一步制作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镜像文件,下载到开发板,此时不管是静态编译的程序还是动态编译的程序,都可以支持了,真的太棒了!很开心!
选择动态编译制作好的根文件系统,我打包上传到了网站,如有需要,请自行下载,点此下载
想想真好,这系列文章算是我学习的见证,中间出错,所以对那些看着这篇文章制作根文件系统的朋友产生的不便,说声很抱歉。
一步一步制作yaffs/yaffs2根文件系统(七)---真挚地道歉以及纠正前边出现的错误!的更多相关文章
- 一步一步制作yaffs/yaffs2根文件系统(四)---构建etc、dev等剩余目录
开发环境:Ubuntu 12.04 开发板:mini2440 256M NandFlash 64M SDRAM 交叉编译器:arm-linux-gcc 4.4.3点此可下载 BusyBox版本: ...
- 一步一步制作yaffs/yaffs2根文件系统(一)---储备好基础知识再打
开发环境:Ubuntu 12.04 开发板:mini2440 256M NandFlash 64M SDRAM 交叉编译器:arm-linux-gcc 4.4.3点此可下载 BusyBox版本: ...
- 一步一步制作yaffs/yaffs2根文件系统(二)---安装BusyBox,构造/bin、/sbin、/usr、linuxr
开发环境:Ubuntu 12.04 开发板:mini2440 256M NandFlash 64M SDRAM 交叉编译器:arm-linux-gcc 4.4.3点此可下载 BusyBox版本: ...
- 一步一步制作yaffs/yaffs2根文件系统(三)---使用glibc库构造 /lib
开发环境:Ubuntu 12.04 开发板:mini2440 256M NandFlash 64M SDRAM glibc库:点此下载 交叉编译器:arm-linux-gcc 4.4.3点此可下 ...
- Yaffs2根文件系统制作
Yaffs2根文件系统制作 环境: 交叉编译环境:4.4.6 开发平台:s3c2416 1,编译busybox 获取busybox源码busybox-1.17.2.tar (http://www.bu ...
- 制作ramdisk-u.img根文件系统
具体步骤如下:1.解压内核源码树解压linux-2.6.29-mini2440-20090708.tgz到自己的工作目录,会生成一个友善之臂修改过的并且有几个mini2440默认配置文件的内核源码目录 ...
- 使用BusyBox制作嵌入式Linux根文件系统
STEP 1:构建目录结构 创建根文件系统目录,主要包括以下目录/dev /etc /lib /usr /var /proc /tmp /home /root /mnt /bin /sbin ...
- yaffs2根文件系统的构建过程
基于BusyBox-1.19.2 (以其它作者的作为参考) 1. 下载BusyBox的源码 http://busybox.net/ 2. 解压#tar xvzf busybox-1.19.2.tgz ...
- Busybox制作ARM(iTOP4412) 根文件系统
本记录来源与自身操作过程. 1.制作环境 PC环境:外部Winows8.1 内部则为vmware11+ubuntu12.04 嵌入式设备:iTOP4412 交叉工具:arm-none-linux-gn ...
随机推荐
- 系统重装后phpnow修复
最近在捣鼓wordpress,主题写了一半然后就重装了win8,在新系统里面访问127.0.0.1的时候出现无法访问的情况.主题写了一半,又不想重装wordpress导数据库这些繁琐的过程,于是,尝试 ...
- eval(phpcode) 字符当代码执行
eval(phpcode)eval() 函数把字符串按照 PHP 代码来计算.相当于在字符串两边分别加上PHP语 法标签 该字符串必须是合法的 PHP 代码,且必须以分号结尾. 如果没有在代码字符串中 ...
- javascript 单行向上滚动文字
<html><head><meta http-equiv="Content-Type" content="text/html; charse ...
- javascript 老王开车去东北
[Decode error - output not utf-8] 魔女 飞 奔驰 去 华南 [Finished in 1.1s] 需要变化的对象进行隔离.正是编程的乐趣之处 /** * by Jac ...
- web2.0最全的国外API应用集合
web2.0最全的国外API应用集合 原文地址:http://www.buguat.com/post/98.html 2.0时代,越来越多的API被大家广泛应用,如果你还不了解API是何物,请看这里的 ...
- Vim粘贴代码时缩进混乱
Vim粘贴代码时缩进混乱 via 背景 在终端Vim中粘贴代码时,发现插入的代码会有多余的缩进,而且会逐行累加.原因是终端把粘贴的文本存入键盘缓存(Keyboard Buffer)中,Vim则把这些内 ...
- 多目标遗传算法 ------ NSGA-II (部分源码解析)状态报告 打印 report.c
/* Routines for storing population data into files */ # include <stdio.h> # include <stdlib ...
- PADS故障解决
1. 点击PADS后就会出现以下: "The directory pointed by the FileDir INI file entry cannot be found.Aborting ...
- ubuntu13.10 登陆后黑屏,没有菜单栏,可以启动termina,怎么解决?
最近在学习openGL,自己的电脑是intel集显加nvidia GT630M,本来想应该可以支持到opengl4以上的,可是发现nvidia的显卡由于驱动问题,好像一直没有用到,所以只支持了open ...
- IT专业人士如何更有效的学习专业知识
查看: http://www.cnblogs.com/suizhouqiwei/archive/2010/05/17/1737265.html 书:http://www.cnblogs.com/wxi ...