2008-11-22 17:07
红楼梦的插曲真好听,听着听着,泪水都流下了.
< 一年三百六十日,风刀霜剑严相逼,明媚鲜妍能几时,一朝飘泊难寻觅。> 大观园的清雅需要的强大的外围,可惜呀.",能
投笔从戎,班超才是真英雄.
想找一些现成的busybox配置脚本启动网络搜到的都是些介绍性质的,彼此拷来拷去的东西,没办法.自己看脚本配置,很简单,几分钟就搞定了.过程从busybox的启动脚本:/etc/rc.d/init.d/network的启动过程终可以看到网设备的初始化过程.首先/etc/network.conf终定义了NETWORKING和网关的值,如果是yes那么从network.d中找设备的配置文件.(在linux发行版中看network配置,它地网卡配置在/etc/sysconfig目录下) network如下; #!/bin/ash # # Network interface(s) init script # # config: /etc/network.conf # /etc/network.d/interface.[devname] . /etc/rc.d/init.d/functions . /etc/network.conf if [ "$NETWORKING" != "yes" ]; then echo "Networking is disabled in /etc/network.conf" exit 0 fi case "$1" in start) for i in /etc/network.d/interface.* do if [ -r "$i" ]; then . $i if [ "$DHCP" = "yes" ]; then echo -n "Starting DHCP for interface $INTERFACE: " udhcpc -b -i "$INTERFACE" \ -p "/var/run/udhcpc.$INTERFACE.pid" \ > /dev/null else echo -n "Setting up interface $INTERFACE: " ifconfig "$INTERFACE" "$IPADDRESS" \ netmask "$NETMASK" \ broadcast "$BROADCAST" up fi check_status fi done if [ "$USE_GATEWAY" = "yes" -a -n "$GATEWAY" ]; then echo -n "Setting default route: " route add default gw $GATEWAY check_status fi ;; stop) if [ "$USE_GATEWAY" = "yes" -a -n "$GATEWAY" ]; then echo -n "Removing default route: " route del -net 0.0.0.0 check_status fi for i in /etc/network.d/interface.* do if [ -r "$i" ]; then . $i echo -n "Shutting down interface $INTERFACE: " ifconfig $INTERFACE down check_status if [ "$DHCP" = "yes" ]; then kill `cat "/var/run/udhcpc.$INTERFACE.pid"` sleep 1 fi fi done ;; restart) $0 stop $0 start ;; status) ifconfig route ;; *) echo "Usage: $0 {start|stop|restart|status}" exit 1 esac 所以设计网络初始化如下: 在/etc/rc.d/init.d/start中加文件联结如下; ln -s ../init.d/network 02network 定义/etc/network.conf如下: NETWORKING=yes USE_GATEWAY=yes GATEWAY=192.168.2.1 在etc中加目录network.d,并且定义v/etc/network.d/interface.eth0如下; DHCP=no INTERFACE=eth0 IPADDRESS=192.168.1.3 NETMASK=255.255.255.0 BROADCAST=192.168.1.255 按照上述步骤可以添加网卡配置. 如果输入命令 echo 1 > /proc/sys/net/ip_forward 那么可以实现转发。 通过上述步骤可以自动完成网络系统的配置. 下面是转载的网上的文章,实际上可以更加简单,busybox编译的时候确定选上不需要inetd启动,那么在启动过程中直接添加:telnetd就可以了。 转贴: 进入busybox源代码目录,选择telnet,telnetd.后
确保在ramdisk的sbin目录下存在inetd和in.telnetd或telned。在ramdisk中的mnt/etc目录中,确保存在文件fstab,service,inetd.conf,passwd文件
确保fstab文件中存在none /dev/pts devpts mode=0622 0 0这一行 确保services文件中存在telnet 23/tcp 这一行 确保inetd.conf中存在telnet stream tcp nowait root /sbin/in.telnetd in.telnetd 确保passwd文件中存在root::0:0:root:/:/bin/sh,表示没有密码的root帐号 在kernal的代码中,通过makemenuconfig,在Character devices中选中Unix98 PTY support在File systems中选中/dev/pts file system for Unix98 PTYs退出后make zImage即可 在ramdisk的启动文件mnt/etc/init.d/rcS中,在mount –a的后面下一行加入inetd,使系统启动的时候就加载telnetd服新建inetd.conf文件,内容如下: # telnetstream tcp nowait root /usr/sbin/telnetd
运行inetd inetd.conf
在网上google了一天,最终可以确定要使用telnetd,内核必须配置以下项:
dev/pts file system for Unix98 PTYs Unix98 PTY support (256) Maximum number of Unix98 PTYs in use (0-2048)
可我使用的2.6.14.1的内核,make menuconfig根本找不到这些配置项!那么内核是否支持这些选项呢?cat /proc/filesystems发现已支持devpts文件系统,那么uinx98 pty呢?
查看内核的Kconfig和Makefile文件,发现只要CONFIG_UNIX98_PTYS=y就会编译支持devpts文件系统和unix98的功能。而选择了嵌入式CPU内核会默认CONFIG_UNIX98_PTYS=y。所以我的内核已经支持telnet。 fstab文件中也加载了devpts文件系统: devpts /dev/pts devpts defaults 00 inittab文件中也指明了telnet的动作: tty0::askfirst:-/bin/sh 为什么还不行呢?
困惑!后来仔细想想,应该是设备文件节点的问题。我在开发板上移植2.6内核和驱动时一直没有使用devfs。因为devfs虽然方便,但同时也阻止了对设备文件节点的了解,且2.6内核已放弃了devfs。
那么使用telnet应该创建那些文件节点呢?devpts会在/dev/pts下自动创建节点,还有什么呢?google了一会没有答案。后来忽然想起Kconfig文件中好象些说明,再去看一看,原来是这样:
A pseudo terminal (PTY) is a software device consisting of two halves: a master and a slave. The slave device behaves identical to a physical terminal; the master device is used by a process to read data from and write data to the slave, thereby emulating a terminal. Typical programs for the master side are telnet servers and xterms.
Linux has traditionally used the BSD-like names /dev/ptyxx for
masters and /dev/ttyxx for slaves of pseudo terminals. This scheme has a number of problems. The GNU C library glibc 2.1 and later, however, supports the Unix98 naming standard: in order to acquire a pseudo terminal, a process opens /dev/ptmx; the number of the pseudo terminal is then made available to the process and the pseudo terminal slave can be accessed as /dev/pts/. What was traditionally /dev/ttyp2 will then be /dev/pts/2, for example.
是因为缺少ptmx设备文件!查看Documentation/devices.txt文件,好了。
mknod -m 666 ptmx c 5 2 再试试,OK可以telnet开发板了!
我是直接使用的busybox的telnetd,busybox支持用inetd管理telnetd,有兴趣的朋友可以试
|