在Ubuntu 20.04上搭建嵌入式Linux网络加载内核、设备树和根文件系统
引言
在嵌入式Linux开发中,网络加载内核、设备树和根文件系统是一种常见的方法。这种方法通常用于开发和调试阶段,允许开发者快速更新和测试内核及文件系统。本文将详细介绍如何在Ubuntu 20.04上搭建环境,以支持嵌入式Linux的网络加载。
前提条件
- Ubuntu 20.04系统。
- 已安装的TFTP服务器。
- 已安装的NFS服务器。
- 嵌入式设备能够通过网络引导。
安装并配置TFTP服务器
安装TFTP服务器
首先,安装 tftpd-hpa
包:
sudo apt update
sudo apt install tftpd-hpa
配置TFTP服务器
编辑TFTP服务器的配置文件 /etc/default/tftpd-hpa
:
sudo nano /etc/default/tftpd-hpa
确保配置如下:
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"
创建TFTP根目录并设置权限:
sudo mkdir -p /var/lib/tftpboot
sudo chown -R tftp:tftp /var/lib/tftpboot
sudo chmod -R 755 /var/lib/tftpboot
重启TFTP服务:
sudo systemctl restart tftpd-hpa
安装并配置NFS服务器
安装NFS服务器
安装NFS服务器软件包:
sudo apt install nfs-kernel-server
配置NFS导出目录
创建NFS导出目录并设置权限:
sudo mkdir -p /srv/nfs/rootfs
sudo chown -R nobody:nogroup /srv/nfs/rootfs
编辑NFS导出文件 /etc/exports
,添加以下内容:
/srv/nfs/rootfs *(rw,sync,no_subtree_check,no_root_squash)
导出NFS共享目录:
sudo exportfs -a
启动并启用NFS服务:
sudo systemctl restart nfs-kernel-server
sudo systemctl enable nfs-kernel-server
准备内核、设备树和根文件系统
编译内核和设备树
根据目标设备,下载并编译Linux内核和设备树。假设已经完成编译,并生成以下文件:
zImage
或uImage
(内核镜像)*.dtb
(设备树文件)
将这些文件复制到TFTP根目录:
sudo cp zImage /var/lib/tftpboot/
sudo cp mydevice.dtb /var/lib/tftpboot/
准备根文件系统
将根文件系统解压到NFS导出目录:
sudo tar -xvf rootfs.tar.gz -C /srv/nfs/rootfs
配置U-Boot进行网络加载
在嵌入式设备上,配置U-Boot以通过TFTP和NFS加载内核、设备树和根文件系统。以下是U-Boot命令示例:
setenv serverip <TFTP服务器IP>
setenv ipaddr <嵌入式设备IP>
setenv kernel_addr_r 0x80000000
setenv fdt_addr_r 0x81000000
setenv ramdisk_addr_r 0x82000000
tftpboot ${kernel_addr_r} zImage
tftpboot ${fdt_addr_r} mydevice.dtb
setenv bootargs 'console=ttyS0,115200 root=/dev/nfs nfsroot=<NFS服务器IP>:/srv/nfs/rootfs,nolock rw ip=dhcp'
bootz ${kernel_addr_r} - ${fdt_addr_r}
启动并调试
使用上述U-Boot命令配置并启动嵌入式设备。如果配置正确,设备将通过TFTP加载内核和设备树,并通过NFS挂载根文件系统。