DHCP移植到瑞芯微RK356x平台
1. 简介
- 项目中需要在
RK3566
上配置DHCP
服务器,需要移植DHCP
- 编译环境:
Ubuntu20.04
DHCP
版本:v4.4.3
2. zlib
移植
-
dhcp
交叉编译依赖libz.so
-
zlib
是一个广泛使用的开源数据压缩库,提供了数据压缩和解压缩的功能 -
下载
zlib
源码,选择使用1.3.1
版本,下载地址 -
解压,并进入源码目录
$ 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
移植
-
下载最新源码:
-
解压,进入源码目录
$ 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
的路径 -
如果重新执行了
configure
,Makefile
配置将被还原,必须重新修改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
的配置,可参考如下链接,不再赘述 -
我的需求是:
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,验证成功
-