基于DHCP建立嵌入式Linux开发环境
总览
之前的环境搭建都是基于静态IP的. 但有些网络不方便设置静态IP, 而必须使用动态IP.
针对这种情况, 介绍一下Windows主机, Ubuntu主机, 以及开发板全部使用DHCP动态IP的方法.
主机端
Ubuntu安装好后, 默认就是dhcp分配动态IP地址.
那么在windows端的Putty, 我们需要使用Ubuntu的hostname, 而不是其IP地址即可.
方法很简单. Ubuntu的bash终端下面
$ hostname |
Windows下查看主机名
我的电脑->属性, 电脑名称
就是主机名
或者cmd终端下面, 输入 ipconfig -all
第一行就是 Host Name
.
这样putty端直接使用 hostname
或者 user@hostname
就可以使用ssh远程登录了.
开发板DHCP
开发板要支持dhcp比较复杂一点.
基本思路如下:
- 嵌入式linux启动后, 自动启动dhcp联网.
- 嵌入式linux安装nfs client, 挂载Ubuntu上的nfs文件.
- 内核和文件系统需要烧录到开发板.
- 此方法适用于开发驱动和应用层软件.
- 新版本的uboot肯定支持dhcp, 但老版本的不确定, 不去吃螃蟹了.
- 有兴趣的参考
Using DHCP Client in U-Boot for Loading Linux Images via Network
编译内核
首先需要内核支持更多的网络特性.
# pwd = linux-2.6.22.6 |
然后烧录新的内核到开发板.
- 内核的编译和烧录可参考 kernel之编译体验
- 如果内核没有支持上述特性, 后面执行udhcpc时会报错:
Address family not supported by protocol
编译Busybox
jz2440提供的文件系统包含udhcpc命令, 所以不用重新配置编译了.
可跳过此步骤.
如果要自己做, 注意勾选下面的选项(有的版本默认支持dhcp指令)
Busybox Settings ---> |
针对嵌入式系统, 由于是交叉编译, Busybox编译和安装有特别的要求, 可参考:
完善文件系统
自己构建文件系统也很麻烦. 可以参考 fs之创建文件系统
我是基于jz2440提供的 fs_mini_mdev
修改后, 使其支持dhcp的
busybox包含的udhcpc没有提供运行脚本, 直接运行会报错:udhcpc: exec /usr/share/udhcpc/default.script: No such file or directory
因此对整个文件系统的改造有如下步骤
- 建立udhcpc要用的default.script
- 加入可执行属性
- 启动自动执行udhcpc指令
# pwd = fs_mini_mdev_dhcp/ |
上述工作完成后, 烧录到开发板即可. 详情可参考:fs之创建文件系统
开发板测试
烧录好内核和文件系统后, 开机测试一下.
注意, udhcpc比较傻, 如果不能联网, 开机就会死在 Sending discover...
成功启动后, 使用 ifconfig
就可以看到dhcp自动分配的ip地址了.
所以也有人用别的方式实现dhcp. 我没有尝试, 列在这里供参考
- 成功移植DHCP客户端到mini2440, 用的 dhclient 指令
- jz2440自动获取ip地址, 源码编译udhcpc, 估计里面会有 default.script 文件.
开发板挂载nfs
主机端 nfs环境搭建参考: Ubuntu 16.04安装配置NFS
在开发板上挂载服务器共享的目录
# pwd = / |
每次开机敲一长串 mount 指令也挺麻烦的, 进一步偷懒, 让它开机自启动.
# 开发板终端, 修改fstab, 让 mount -a 自动加载nfs |
下次重启就能自动加载nfs了. 如果加载失败, 看看是不是主机动态IP变掉了.
jz2440启动后, 加载nfs失败时, 需要等待一段时间才能进入终端界面!
使用hostname
这里, 最理想的情况是使用 hostname 而不是IP地址.
但网上搜索了一下, 没有找到让jz2440支持hostname的方法.
动态IP也不会更换的太频繁, 所以是一个可以忍受的缺点, 就不去深究了.
关键点是 /etc/resolv.conf
, 应该可以由udhcpc自动生成内容的…
找了如下相关信息:
参考资料
- ubuntu永久修改主机名
- BusyBox 應用 – udhcpc
- jz2440自动获取ip地址
- Linux NFS Mount Entry In fstab ( /etc/fstab ) With Example
- ubuntu下 mini2440的NFS挂载【终极版】
原创于 DRA&PHO