1、我现在挂上文件系统了。
编了个helloworld小程序想测试一下:
hello.c,很简单一句话:printf("hello world/n");
但是当我用armgcc编译好,放到文件系统上时,执行 ./hello,提示:
-bin/sh ./hello not found
这是什么原因?
我在内核配置里面已经选上 ELF格式支持,但是a.out 和MISC binaries没有选。现在晚上手上没板也试不了。
大侠们觉得是哪里的问题呢?
会是busybox问题么?但是我拿到3星的s3c2440下试确实没有问题的,猜测应该是内核问题?
后来想到编译的时候没有加静态选项,可能是缺少库文件。
马上加上库文件,果然好了。
拿lijay大虾的话总结:
一就是有可能/lib下面没有C库 就是没有glibc或者uclibc的动态库
二就是你板子上的C库和编译hello链接时用的C库不一样, 差别太大.
2、
最近有时间开始学习ARM,平台是TQ2440,下载了2.6.31的内核源码,并开始构建yaffs2文件系统,手册上写的还是很详细,可是我在 往里面加Zmodem文件传输协议的命时,却出现了-/bin/sh: rz: not found的错误,自己编译的hello程序也出现同样的错误,不是权限不够,后来把系统自带的根文件系统下的库文件全复制过来,这样就可以执行了。
看来是缺少库文件的原因,可是原来的库文件太多,每次下载很慢,所以就干脆自己添加目前需要的,用arm-linux-readelf命令查看的所需的库,根据输出拷贝了
libc-2.8.so libgcc_s.so.1 libnsl.so.1
libc.so.6 libnsl-2.8.so
以为这样就没问题了,可是还是出现上述错误
后来用arm-linux-readelf -a hello
输出一大堆信息,看见输出中提到了ld-linux.so.3,去库文件的目录下面查看了该文件,是个符号链接,于是把它和它指向的库文件全都复制到根文件系统的/lib目录下面,这样就可以制作的yaffs2文件系统下载到板子上
运行./hello
hello
不知道ld-linux.so.3在Linux系统中起什么样的作用。。。
3、
奋战半月有余,终于建起了开发平台,以第一个“Hello World”入门程序开始,兴奋之余却遇到bin/sh: hello :not found拦路虎,郁闷啊~~~网上说法云云,改了kernel,又改rootfs,瞎忙一通无济啊,不过还是被我的鼠眼瞄到了,嘿嘿~~~
Build Options->
Build BusyBox as a static binary (no shared libs)
Build with Large File Support (for accessing file>2GB)
如果选择 Build BusyBox as a static binary (no shared libs) 方式进行编译时,所需的库已经与程序静态地链接在一起,这些程序不需要额外的库就可以单独运行,但是自己编写的程序在文件系统上运行必须采用静态编译,否 则会报诸如:bin/sh: hello :not found的错误。
静态编译如:
arm-linux-gcc –static hello.c –o hello
在开发板上直接./hello,便会有你要的惊喜~~~