想找一些現成的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,有興趣的朋友可以試 原文位址 http://hi.baidu.com/zmingliu/blog/item/c5ad9b6345df58670d33facc.html
文章出處:飛諾網(www.firnow.com):http://sys.firnow.com/linux/x8002010n08m/27s90182373.html