天天看點

busybox網絡配置

想找一些現成的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

繼續閱讀