Linux 实现DHCP自动获取IP地址

本文介绍如何在内核中配置DHCP支持,包括添加Packet socket、启用DHCP支持和网络包过滤,以及在BusyBox中配置udhcpc命令,并提供默认脚本示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.  在内核中添加以下选项:

Networking  --->
   

  • Networking support   
          Networking options  --->  
               Packet socket                 //添加.配置CONFIG_PACKET
              [ * ]     IP: DHCP support         //添加
              [ * ] Network packet filtering (replaces ipchains)  --->    //添加,后面子选项可不选,配置CONFIG_NETFILTER
    说明:若没选 Packet socket, [ * ] Network packet filtering (replaces ipchains)  --->选项,在执行udhcpc命令时出现如下错误:

  • Make menuconfigARCH=arm


    make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-

    或者 执行 ./build.sh

    build.sh内容如下:

    #make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-  sama5d3_defconfig


    make  ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-  zImage
    make  ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-    dtbs


    cp arch/arm/boot/dts/mc-a5d36-gka.dtb  ./
    cp arch/arm/boot/zImage ./
    cp arch/arm/boot/dts/mc-a5d36-gka.dtb /tftpboot/
    cp zImage /tftpboot/


  • 2.  Busybox中添加以下选项:
    Networking Utilities  --->
       udhcp Server/Client  --->
            [] udhcp Server (udhcpd)       //在此不作服务端,故不选。生成udhcpd命令                              
            
  • udhcp Client (udhcpc)       //生成udhcpc命令 


  • 3. 建立配置文件:
    从busybox的examples/udhcp/下copy  simple.script文件到开发板/usr/share/udhcpc/下,并重命名为default.script

    或者:vi usr/share/udhcpc/default.script  复制下面shell脚本即可。


    如果busybox没有dhcpc命令则要做如下步骤:

    a. 我在优快云上下载的udhcp_0.9.8cvs20050303.orig.tar.gz文件, 
     解压后修改Makefile文件
     注释12行的COMBINED_BINARY=1,否则不生成udhcpc命令。
     在19行添加CROSS_COMPILE=arm-linux-   
    b. 修改后执行 #Make  命令,会看到生成的udhcpd,udhcpc可执行文件
    c. 将arm-linux交叉编译得到udhcpd,udhcpc命令copy到根文件系统中的usr/sbin


    #udhcpc 所需shell脚本

    vi usr/share/udhcpc/default.script 

    #!/bin/sh
    # udhcpc script edited by Tim Riker 


    [ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1


    RESOLV_CONF="/etc/resolv.conf"
    [ -n "$broadcast" ] && BROADCAST="broadcast $broadcast"
    [ -n "$subnet" ] && NETMASK="netmask $subnet"


    case "$1" in
            deconfig)
                    /sbin/ifconfig $interface 0.0.0.0
                    ;;


            renew|bound)
                    /sbin/ifconfig $interface $ip $BROADCAST $NETMASK


                    if [ -n "$router" ] ; then
                            echo "deleting routers"
                            while route del default gw 0.0.0.0 dev $interface ; do
                                    :
                            done
                            for i in $router ; do
                                    route add default gw $i dev $interface
                            done
                    fi


                    echo -n > $RESOLV_CONF
                    [ -n "$domain" ] && echo search $domain >> $RESOLV_CONF
                    for i in $dns ; do
                            echo adding dns $i
                            echo nameserver $i >> $RESOLV_CONF
                    done
                    ;;
    esac


    exit 0

    保存退出后

    chmod +x usr/share/udhcpc/default.script 

    执行命令 

    udhcpc -i eth0

    启动信息如下:

    udhcpc (v1.22.1) started
    IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
    Ignore event for foreign ifindex 4
    Sending discover...
    macb f0028000.ethernet eth0: link up (100/Full)
    IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
    Ignore event for foreign ifindex 4
    Sending discover...
    Sending select for 192.168.0.110...
    Lease of 192.168.0.110 obtained, lease time 86400
    deleting routers
    route: SIOCDELRT: No such process
    adding dns 192.168.0.1




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值