编写背后:昨天移植无线网卡到mini2440基本完成到最后一步:用命令:iwlist scanning 搜索网络时串口终端却出现了 -/bin/sh: iwlist not found ,后来请教老范老师点拨知道是库问题,最后自己找到问题、解决问题,才有此引发有所总结……
关于-/bin/sh:xx(命令) not found 的几种原因:
1./bin/目录下没有这个命令;
2.bin/目录有这个命令,只是执行权限不够,或者程序执行权限不够;
3.程序需要的静态库或者动态库没有;
解决办法:
原因一的解决方法:
安装busy box将busy box支持的命令安装到文件系统的bin目录下;(只要安装了busy box它会自动加载命令到bin目录下,这个你懂的,若不懂请看我的博文《根文件系统的制作》)
原因二的解决方法:
在/bin/目录下找到对应的命令,修改其权限为777;具体操作: chmod 777 xx(命令) 【附加:在编写执行脚本文件时不能运行也大多是没有修改脚本权限的问题(命令其实就是一个特殊的脚本)】
原因三的解决方法:
(1)最“高效”的解决方法:用命令:arm-linux-readelf -d xxx(目标文件/命令) 查看xxx使用的动态库
如图:我的iwlist命令使用的动态库是libiw.so.29 、libm.so.6 和libc.so.6
于是我便去交叉编译器所在目录/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib下的动态库中寻找所需的上面三个库libiw.so.29 、libm.so.6 和libc.so.6 ,并复制到根文件系统的lib目录下:
(注意:这里我使用交叉编译器的版本为4.3.2的版本所以目录4.3.2有所不同即到/usr/local/arm/(编译器版本)/arm-none-linux-gnueabi/libc/armv4t/lib下的动态库中寻找)
(2)最“2”最笨的方法:把/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib下的所有动态库都拷贝到根文件系统的lib目录下;
(
但是这种方法在嵌入式开发里面无意增加了成本,拷贝了一些不必要的动态库文件,增大了根文件系统的体积)