关于-/bin/sh:xx(命令) not found 的几种原因和解决办法

  • Post author:
  • Post category:其他



编写背后:昨天移植无线网卡到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目录下;




但是这种方法在嵌入式开发里面无意增加了成本,拷贝了一些不必要的动态库文件,增大了根文件系统的体积)



版权声明:本文为yx_l128125原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。