主题 : 自己制作根文件后,程序-/bin/sh:XXX:not found错误 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 4935
精华: 0
发帖: 32
金钱: 265 两
威望: 211 点
综合积分: 64 分
注册时间: 2009-04-04
最后登录: 2018-02-08
楼主  发表于: 2009-05-18 14:55

 自己制作根文件后,程序-/bin/sh:XXX:not found错误

请教下,我自己做了一个根文件系统,下载到板子上后,显示内核加载成功了,在终端也可以进到各个系统文件对各个文件进行操作,但是如果我把自己写的程序放在系统的话,执行的时候会提示错误 “-/bin/sh:XXX:not found”(XX是程序的名称)。请问这是怎么回事。
我用的是2.6.29的内核,内核是让照文档上的方法做的,根文件是让照网上的一个方法做的,大家看看是不做根文件的时候有问题,或者是还需要添加什么吗?谢谢了!
另外我还想请教的一个问题是,以前还是2.6.13内核的时候,光盘里有一个缺省的root_default.tgz的根文件系统的,现在的2.6.29没有这个文件了吗?我觉得使用缺省的很方便自己移植QT4。


1.  创建必须的文件夹及设备文件
# mkdir rootfs
# cd rootfs
# mkdir bin dev etc lib mnt proc sbin sys root
# mkdir  /etc/var
# mkdir  /etc/tmp

# ln  -s /etc/var /var
# ln  -s /etc/tmp /tmp


2. 创建设备文件系统
从 Linux-2.6.18开始,负责旧版本的设备管理系统devfs已被废除,但新
版本的udev是一个基于用户空间的设备管理系统。在内核启动时并不能
自动创建设备节点,固需手动创建console和null两个启动过程必须的设
备节点。我们将采用busybox中内置的mdev,一个简化的udev版本.
# mknod -m 660 dev/console c 5 1
# mknod -m 660 dev/null        c 1 3


3. 建立动态运行库
由于linux只安装上了arm-linux-gcc 4.3.2没有glibc的库文件,只好把友善之臂提供的
yaffs2文件系统下的lib文件拷贝过来。
# cp -rfd /2440/root_qtopia/lib/*  /2440/rootfs/lib/
拷贝经过交叉编译的库文件,参数-d,保持库文件的链接关系。


4. 交叉编译busybox
解压缩tar -zxf busybox1.13.3.tar
解压后修改Makefile,指明交叉编译器:
    ARCH             ?= arm
    CROSS_COMPILE    ?= arm-linux-

5.执行make CONFIG_PREFIX=/2440/rootfs install
在/2440/rootfs目录下生成sbin,usr目录和linuxrc文件


6.创建etc目录下文件
在rootfs/etc目录下创建一个inittab文件
内容如下:
# /etc/inittab
::sysinit:/etc/init.d/rcS
s3c2410_serial0::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r

创建etc/init.d/rcS文件
#!/bin/sh
ifconfig eth0 192.168.1.17
mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
最后还要改变它的属性使它能够执行。
chmod +x etc/init.d/rcS

创建etc/fstab文件
#device        mount-point        type        options        dump        fack order
proc           /proc              proc        defaults        0           0
tmpfs          /tmp               tmpfs       defaults        0           0
sysfs          /sys               sysfs       defaults        0           0
tmpfs          /dev               tmpfs       defaults        0           0

7.构建其他目录
mkdir proc mnt tmp sys root

8.使用mkyaffsimgae命令生成yaffs映像文件
mkyaffsimage rootfs rootfs.yaffs
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
1楼  发表于: 2009-05-18 15:32
1. 如果你的XXX程序是动态链接的,确保它所依赖的库在文件系统里都能被链接到
2. 确保XXX的ABI和内核所支持的ABI类型相同。友善之臂提供的2.6.29的内核只支持EABI 。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 2497
精华: 0
发帖: 30
金钱: 300 两
威望: 300 点
综合积分: 60 分
注册时间: 2008-11-20
最后登录: 2009-12-24
2楼  发表于: 2009-05-19 18:09
你应当这样调用你的程序:./XXX,不要直接用 XXX
级别: 新手上路
UID: 7448
精华: 0
发帖: 1
金钱: 10 两
威望: 10 点
综合积分: 2 分
注册时间: 2009-07-15
最后登录: 2017-09-13
3楼  发表于: 2009-07-15 17:50
关注 我也遇到了 我是换了交叉编译器后出现的