分类: 嵌入式
2014-03-28 11:54:54
1.下载busybox-1.4.2.tar.tar
下载地址:
2.解压下载到的工具包,然后切换到busybox存放的目录下:
#cd busybox-1.4.2
3.修改Makefile,设置ARCH与CROSS_COMPILE如下:
ARCH ? =
CROSS_COMPILE?= /usr/local/cross-tools/bin/xscale_be-
Busybox settings --->
Build options --->
选中[*] build shared libbusybox
Installationi Options --->
选中[*]Don’t use/usr
Linux Module Utilities --->
去掉选项[ ] Module version checking
去掉选项[ ] Support tainted module checking with new kernels
Linux System Utilities --->
去掉选项[ ] mount
Miscellaneous Utilities --->
去掉选项[ ] readahead (如果选上,则会编译时出错)
去掉选项[ ]taskset
Networking Utilities --->
选中[*] telnetd
选中[*] Support standalone telentd (not inetd only)
Shells --->
选中Choose your default shell (ash) --->
选中(X) ash
--- Bourne Shell Optionis
选中[*] Hide message on interactive shell startup
选中[*] Standalone shell
选中[*] Command line editing
选中[*] vi-style line editing commands
(15)History size
选中[*] History saving
选中[*] Tab completion
选中[*] Username completion
选中[*] Fancy shell prompts
6.make
在当前目录下生成文件:busybox
7.make install
在当前目录下生成目录:_install (含bin,sbin目录)
8.需要的库文件
从/usr/local/cross-tools/target/lib中拷贝以下库文件:
libutil.so.1
libcrypt.so.1
libm.so.6
到Rootfs/rootfs/lib目录下。
启动telnetd服务器功能,有两种方法。
方法一:使用busybox中提供的telnetd服务器功能
具体步骤如下:
1.将上述make install后生成的linuxrc文件及bin,sbin目录中的软链接文件拷贝到rootfs相应的目录下。
2.将make install后在目录sbin中生成的telnetd文件拷贝到rootfs/ /usr/sbin目录下。
3.在rootfs /etc目录下创建目录:/pam.d
4.在rootfs/etc目录下创建文件:passwd,group,shadow。
passwd文件的内容:
root:x:0:0:root:/:bin/sh
group文件的内容:
root:x:0:root
shadow文件的内容:(密码:123)
root:$1$FWEOGnxn$KFJzPY1BvXX21Htui48T4/:12179:0:99999:7:::
5. devpts文件系统,是目前最常见的pseudo终端,使用telnetd服务器,必须加载该文件系统。因此,需要在rootfs/dev目录下,创建一个pts目录,用来加载devpts文件系统:
mkdir pts
同时,需要修改rootfs/etc/init.d/rcS,在其中增加如下行:
mount -t devpts devpts /dev/pts//将devpts文件系统加载在/dev/pst
mknod -m 666 /dev/ptmx c 5 2 //使用telnetd所必须的设备文件节点
6.修改rootfs/etc/fstab,增加下行,以加载devpts文件系统。
devpts /dev/pts devpts defaults 0 0
7.修改/rootfs/etc/security,增加如下行:
# psudo terminals used by telnet
pts/0
pts/1
pts/2
pts/3
pts/4
pts/5
pts/6
pts/7
8.重新编译ramdisk,参考5
9.直接使用如下命令,就可以启动telnetd服务器:
/sbin/telnetd &
使用命令ps可以查看到telnetd是否启动成功。telnetd启动成功后,就可以远程登录目标板进行管理。用户名为root,密码为123,跟启动的用户名和密码一样。进入的是根目录。
方法二:使用inetd来管理的telnetd服务器
1.修改/etc/inetd.conf
把telnetd服务加进来
# If you want telnetd not to "keep-alives" (e.g. if it runs over a ISDN
# uplink), add "-n".See 'man telnetd' for more details.
# telnetstreamtcp nowaitroot /usr/sbin/tcpd in.telnetd
把这个最后这一行的#号去掉。
2.查看/usr/sbin里面有没有in.telnetd, inetd
若没有,则从/usr/local/cross-tools/target/usr/sbin中拷过来。
3.查看/etc目录下有没有xinetd.d,这个telnetd的服务器软件
若没有,从/usr/local/cross-tools/target/etc中拷一个过来。
4.查看/usr/lib/里面有没有telnetlogin
若没有,则从/usr/local/cross-tools/target/usr/lib中拷过来。
5.查看/etc/init.d里面有没有inetd
若没有,则从rootfs/etc/init.d中拷一个过来。
6.重新编译ramdisk。
经过上面六步之后,就可以在远程机器上telnet连上板子了。用户名为root,密码为123,跟板子启动的用户名和密码一样。进入的是根目录。
1. 编译busybox时,有些命令编译无法通过,可能是交叉编译工具版本问题,因为那些命令并不常用,所以目前的解决办法就是去掉那些选项:
Miscellaneous Utilities --->
去掉选项[ ] readahead
去掉选项[ ] taskset
2. busybox各版本出现的问题
(1) busybox-1.3.0编译的telnetd存在如下问题:
telnet登录目标板后,提示:-sh:can’t access tty;job control turned off
其它功能可以正常使用,但是ping
(2) busybox-1.4.1
telnetd功能能够正常使用,但是不能使用tftp。
(3) busybox-1.4.2
telnetd功能能够正常使用,也能使用tftp,但出现过telnet登录一段时间后,会没有反应,然后提示失去连接。
3.使用inetd管理telnetd服务的方法,在rcS中写入:/usr/sbin/inetd,系统启动后,用ps命令查看/usr/sbin/inetd进程已经运行,但是使用telnet时,却提示服务没有启动。
解决办法:查看/etc/init.d里有没有inetd文件,若没有,则从rootfs/etc/init.d中拷贝一个,然后在rcS中写入:inetd,重新编译 ramdisk,即可系统启动之后,自动启动telnetd服务。