DHCP移植到瑞芯微RK356x平台

1. 简介

  • 项目中需要在RK3566上配置DHCP服务器,需要移植DHCP
  • 编译环境:Ubuntu20.04
  • DHCP版本:v4.4.3

2. zlib移植

  • dhcp交叉编译依赖libz.so

  • zlib是一个广泛使用的开源数据压缩库,提供了数据压缩和解压缩的功能

  • 下载zlib源码,选择使用1.3.1版本,下载地址

    https://www.zlib.net/

  • 解压,并进入源码目录

    $ tar -xvf zlib-1.3.1.tar.gz
    $ cd zlib-1.3.1/
    
  • configure配置,指定编译输出路径为build目录

    zlib-1.3.1$ ./configure --prefix=$(pwd)/build
    

  • 由于zlib无法通过configure工具配置交叉编译工具链,因此需要手动修改Makefile

    • 修改CC为交叉编译工具链aarch64-none-linux-gnu-gcc,最好使用绝对路径的方式

    • 修改LDSHARED中的gcc为交叉编译工具链aarch64-none-linux-gnu-gcc,最好使用绝对路径的方式

    • 修改AR为交叉编译工具链aarch64-none-linux-gnu-ar,最好使用绝对路径的方式

    • 修改RANLIB为交叉编译工具链aarch64-none-linux-gnu-ranlib,最好使用绝对路径的方式

  • 编译,并安装到build目录

    zlib-1.3.1$ make && make install
    
  • 查看编译输出目录

2. dhcp移植

  • 下载最新源码:

    https://github.com/isc-projects/dhcp/releases/tag/v4_4_3

  • 解压,进入源码目录

    $ tar -xvf dhcp-4_4_3.tar.gz
    $ cd dhcp-4_4_3
    
  • 进入bind目录,将bind.tar.gz解压; bind(Berkeley Internet Name Domain)是最常用的DNS服务器软件之一

    dhcp-4_4_3$ cd bind/
    bind$ tar -xvf bind.tar.gz
    
  • 返回到dhcp源码的顶层目录

    bind$ cd ..
    
  • configue配置

    • --host指定目标平台,一般设置为交叉编译工具链的前缀即可

    • --prefix指定编译输出路径

    • --with-randomdev指定用来生成随机数的随机设备

    • BUILD_CC指定为宿主机的gcc,必须设置,否则编译会报错

    • CC指定交叉编译工具链,最好使用绝对路径的方式,避免使用到错误的交叉编译工具链;比如我的编译环境中就存在多个名字相同,但是版本不同的交叉编译工具链

    $ ./configure \
    --host=aarch64-none-linux-gnu \
    --prefix=$(pwd)/build \
    --with-randomdev=/dev/urandom \
    ac_cv_file__dev_random=yes \
    BUILD_CC=gcc \
    CC=/home/jun/work/share/IG-20/rk3568/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc
    
  • 重新进入bind目录,修改Makefile,指定zlib的路径为《2. zlib移植》中的编译输出路径

    • bindconfig变量中增加配置--with-zlib=/home/jun/work/share/IG-20/zlib-1.3.1/build,指定zlib的路径

    • 如果重新执行了configureMakefile配置将被还原,必须重新修改dhcp-4_4_3/bind/Makefile

  • 返回顶层目录

    bind$ cd ..
    
  • 编译,并安装到build目录

    dhcp-4_4_3$ make && make install
    
  • 查看编译输出路径

3. 安装至目标机

  • 安装时不要忘了libz.so也需要拷贝到宿主机,确保dhcp运行时能够链接到该库,不再赘述

  • dhcp-4_4_3/build路径下的所有内容拷贝至目标机的/usr/local/dhcpd/路径

  • 设置PATH环境变量,在/etc/profile的末尾添加如下内容

  • 使环境变量立即生效

    $ source /etc/profile
    
  • 查看dhcp版本

  • 查看dhcp应用程序路径,确保使用的是我们自行移植的程序

4. dhcpd配置

  • 关于dhcpd的配置,可参考如下链接,不再赘述

    https://docs.redhat.com/zh_hans/documentation/red_hat_enterprise_linux/7/html/networking_guide/sec-dhcp-configuring-server

  • 我的需求是:dhcp server监听br0这个网口,给这个网口下的设备分配192.168.4.1 ~ 192.168.4.254范围的IP

    • 编写dhcpd.conf配置文件如下

      root@avit:/# cat /etc/dhcpd.conf
      ddns-update-style none;
      option domain-name "example.org";
      default-lease-time 600;
      max-lease-time 7200;
      subnet 192.168.4.0 netmask 255.255.255.0 {
              range 192.168.4.2 192.168.4.254;
              option routers 192.168.4.1;
              option subnet-mask 255.255.255.0;
              option broadcast-address 192.168.4.255;
              option domain-name-servers 192.168.4.1;
      }
      
    • 启动dhcp server,监听网口br0

      root@avit:/# dhcpd -cf /etc/dhcpd.conf br0
      

    • 我的网口br0下挂一个AP热点,手机连接该热点,成功获取到一个192.168.4.2的IP,验证成功

posted @ 2024-11-10 11:08  zhijun  阅读(28)  评论(0编辑  收藏  举报