Ubuntu20.04搭建嵌入式linux网络加载内核、设备树和根文件系统

news/2025/1/11 16:58:46/文章来源:https://www.cnblogs.com/mybook000/p/18665873

引言

在嵌入式Linux开发中,网络加载内核、设备树和根文件系统是一种常见的方法。这种方法通常用于开发和调试阶段,允许开发者快速更新和测试内核及文件系统。本文将详细介绍如何在Ubuntu 20.04上搭建环境,以支持嵌入式Linux的网络加载。

前提条件

  1. Ubuntu 20.04系统
  2. 已安装的TFTP服务器
  3. 已安装的NFS服务器
  4. 嵌入式设备能够通过网络引导

安装并配置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 0x82000000tftpboot ${kernel_addr_r} zImage
tftpboot ${fdt_addr_r} mydevice.dtbsetenv 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挂载根文件系统。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/867823.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BurpSuite实操之对比器功能使用

通常是通过一些相关的请求和响应得到两项数据的一个可视化“差异“,此功能主要用于执人行任意两个请求,响应或任何其他形式的数据之间的比较。使用的场合有:枚举用户名的过程,对比分析登录和失败时,服务器端返回结果的区别 使用Intruder进行攻击时,对于不同的服务器端响应…

Jmeter 的常用基础配置,看这一篇就够了 ~

在使用Jmeter工具时,因为一些默认的背景颜色、字体图标大小等,导致操作并不是非常便利,因此需要掌握一些必要的基础配置。📝 博主首页 : 「码上生花」 ,同名公众号 :「伤心的辣条」📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库…

SQL Server性能优化(3)使用SQL Server Profiler查询性能瓶颈

关于SQL Server Profiler的使用,网上已经有很多教程,比如这一篇文章:SQL Server Profiler:使用方法和指标说明。微软官方文档:https://msdn.microsoft.com/zh-cn/library/ms179428(v=sql.105).aspx有更详细的介绍。 经过使用Profiler进行监视,得到监视结果。============…

SQL Server性能优化(2)获取基本信息

以下常用的SQL语句有利于我们分析数据库的基本信息,然后根据查询的结果进行优化。 1. 查看索引碎片无论何时对基础数据执行插入、更新或删除操作,SQL Server 数据库引擎都会自动维护索引。随着时间的推移,这些修改可能会导致索引中的信息分散在数据库中(含有碎片)。当索引…

【floorplan_mesh_project】运行Distributed package doesnt have NCCL built in处理

Distributed package doesnt have NCCL built in报错:修改E:\develop\anaconda3\envs\meshgpt\lib\site-packages\torch\distributed\distributed_c10d.py init_process_group,手动设置后端为gloo(第1116行)

[P3899 [湖南集训] 更为厉害]

P3899 [湖南集训] 更为厉害 [湖南集训] 更为厉害 题目描述 设 \(\text T\) 为一棵有根树,我们做如下的定义:设 \(a\) 和 \(b\) 为 \(\text T\) 中的两个不同节点。如果 \(a\) 是 \(b\) 的祖先,那么称“\(a\) 比 \(b\) 更为厉害”。 设 \(a\) 和 \(b\) 为 \(\text T\) 中的两…

BurpSuite实操之解码器功能使用

解码器是一个进行手动执行或对应用程序数据者智能解码编码的工具。此功能可用于解码数据找回原来的数据形式,或者进行编码和数据加密。由解码选项(Decode as)、编码选项(Encode as)、散列(Hash)构成.。编码、解码选项,目前支持URL、HTML、Base64、ASCI、十六进制、八进制、二…

sqoop--官方首页

https://sqoop.apache.org/

md学习DAY1

Markdown学习DAY1 标题 三级标题 四级标题 字体 粗体hello,world! 斜体hello,world! 斜体加粗hello,world! 废除hello,world! 引用选择疯狂包,成为包上包分割线图片超链接 点击跳转到疯狂包子的博客 列表A B CA B C表格姓名 性别 出生代码 public

CheeseTools:红队内网横向

免责声明 仅限用于技术研究和获得正式授权的攻防项目,请使用者遵守《中华人民共和国网络安全法》,切勿用于任何非法活动,若将工具做其他用途,由使用者承担全部法律及连带责任,作者及发布者不承担任何法律连带责任项目介绍 这个库是基于已经存在的MiscTool制作的,所以非常…

2025 最新中国铁路路线地图 All In One

2025 最新中国铁路路线地图 All In One 中国铁路 12306 网站2025 最新中国铁路路线地图 All In One中国铁路 12306 网站高铁线路图中国高速铁路线路图 / 中国高铁线路规划图https://crh.gaotie.cn/ demosC3035 复 上海南 -> 亳州南 07:45 ~ 12:34 (04:49) 当日到达站序 站名…

JAVA-Day 12:方法的定义和调用

方法的定义和调用 方法定义的格式: public static void 方法名(){方法体(就是打包起来的代码)} 方法调用的格式: 方法名(); 定义调用一个方法用于个人介绍 public static void main(String[] args){myself(); } public static void myself(){System.out.println("小王同学…