0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用TFTP加载内核设备树

迅为电子 来源:迅为电子 2025-01-17 15:52 次阅读

需求分析

嵌入式项目开发中,为了适配新外设、调整硬件资源分配或修复驱动问题,需要频繁修改设备树和内核。修改完成后,通常需要重新编译生成镜像,并将其烧录到开发板上进行测试。然而,传统的烧录方式不仅需要连接物理接口,还可能因为镜像体积较大而耗费较长时间,这在开发周期紧张的情况下显得尤为低效。

为了解决这一问题,可以采用基于TFTP(Trivial File Transfer Protocol)的内核和设备树加载方法。这种方式无需将镜像完整烧录到开发板的存储介质,而是通过网络直接加载和运行新内核与设备树。相比传统烧录方式,TFTP 加载显著减少了镜像更新的等待时间,同时允许更灵活地对不同版本的内核或设备树进行快速切换和验证。

TFTP加载内核设备树

实验平台:iTOP-RK3568开发板

01-安装TFTP服务端

首先进行TFTP 服务端的搭建,首先在ubuntu终端中执行以下命令安装TFTP服务:

sudo apt-get install tftp-hpa tftpd-hpa

c8cf6c70-d49c-11ef-9310-92fbcf53809c.png

安装完成以后创建 TFTP 服务器工作目录,并对TFTP的服务配置文件进行修改,具体步骤如下:

输入以下命令在家目录创建tftpboot文件夹,如下图所示:

mkdir -p tftpboot

c8cf6c70-d49c-11ef-9310-92fbcf53809c.png

安装完成以后创建 TFTP 服务器工作目录,并对TFTP的服务配置文件进行修改,具体步骤如下:

输入以下命令在家目录创建tftpboot文件夹,如下图所示:

chmod 777 tftpboot

c9324412-d49c-11ef-9310-92fbcf53809c.png

最后使用以下命令修改TFTP配置文件,打开配置文件以后如下图所示:

sudo vim /etc/default/tftpd-hpa

c94eb782-d49c-11ef-9310-92fbcf53809c.png

修改为如下内容,修改完成如下图所示:

TFTP_USERNAME="tftp"

TFTP_DIRECTORY="/home/topeet/tftpboot/"

TFTP_ADDRESS=":69"

TFTP_OPTIONS="-l-c-s"

c9697252-d49c-11ef-9310-92fbcf53809c.png

修改完成保存退出,在终端输入以下命令重启tftpd-hpa服务。

sudo service tftpd-hpa restart

如下图所示:

c97a07d4-d49c-11ef-9310-92fbcf53809c.png

02-配置开发板网络

TFTP服务端搭建完成之后,进行第二步,配置开发板的网络。

连接好开发板的网线后,上电启动开发板,在加载阶段点击“ctrl+c”进入uboot命令行,如下图所示:

c98fe0ea-d49c-11ef-9310-92fbcf53809c.png

然后来到搭建好TFTP环境的ubuntu终端,输入“ifconfig”命令来查看虚拟机ubuntu的ip,如下图所示:

c9b024e0-d49c-11ef-9310-92fbcf53809c.png

可以看到ubuntu虚拟机的ip地址为192.168.1.79,然后输入以下命令设置开发板的网络,设置完成如下图所示:

setenv ipaddr 192.168.1.94

setenv serverip 192.168.1.79

setenv gateway 192.168.1.1

c9d2caf4-d49c-11ef-9310-92fbcf53809c.png

然后输入以下命令测试开发板与ubuntu虚拟机之间的网络是否畅通,测试成功如下图所示:

ping 192.168.1.79

c9dcb974-d49c-11ef-9310-92fbcf53809c.png

如果环境变量不知道哪里设置错了,或者想要恢复成emmc启动,可以使用以下命令重置环境变量

env default -a

Saveenv

03-tftp加载内核和设备树

在前面两个小节中分别搭建了TFTP服务器以及配置好了开发板的网络,现在进行最后一步,使用tftp加载内核和设备树。

首先将内核镜像boot.img和设备树文件rk3568-evb1-ddr4-v10-linux.dtb拷贝到第一小节创建的“/home/topeet/tftpboot”目录下,拷贝完成如下图所示:

c9ee883e-d49c-11ef-9310-92fbcf53809c.png

然后根据上一小节内容配置自身ip和server ip,设置完成之后,使用以下命令将内核和设备树通过网络加载进内存之中,如下图所示:

setenv bootcmd "tftpboot 0x08300000 rk3568-evb1-ddr4-v10-linux.dtb;tftpboot 0x0027f800 boot.img ; bootm 0x0027f800 - 0x08300000"

c9fe4b84-d49c-11ef-9310-92fbcf53809c.png

通过以上命令将boot.img镜像下载到首地址为0x0027f800的内存空间;将rk3568-evb1-ddr4-v10-linux.dtb设备树镜像将下载到首地址为0x08300000的内存空间;随后输入以下命令,等待网络下载内核和设备树,如下图所示:

env run bootcmd

ca1dc810-d49c-11ef-9310-92fbcf53809c.png

可以看到在这里加载的就是tftp服务端存放内核以及设备树,等待开发板进入系统之后进行调试即可。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5096

    文章

    19193

    浏览量

    308090
  • 内核
    +关注

    关注

    3

    文章

    1384

    浏览量

    40447
  • TFTP
    +关注

    关注

    0

    文章

    21

    浏览量

    14365
  • 开发板
    +关注

    关注

    25

    文章

    5137

    浏览量

    98361
  • 设备树
    +关注

    关注

    0

    文章

    39

    浏览量

    3166

原文标题:【技术分享】使用TFTP加载内核设备树

文章出处:【微信号:迅为电子,微信公众号:迅为电子】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    通过Uboot TFTP启动rt-smart内核

    介绍Windows下通过 Uboot  TFTP 方式下载和启动rt-smart 内核
    的头像 发表于 06-30 12:34 3835次阅读
    通过Uboot <b class='flag-5'>TFTP</b>启动rt-smart<b class='flag-5'>内核</b>

    tftp加载和执行eewiki u-boot映像失败

    时,u-boot使用tftp检索新内核设备blob(?)和根文件系统(我的理解是它必须将这些图像加载到ram中,然后将ram的内容复制到
    发表于 10-24 14:27

    iMX6Q开发板设备内核-注册驱动例程介绍

    `文档主要讲解在 iMX6Q/D/PLUS 开发板的设备内核(4.1.15)源码中,设备注册驱动和非
    发表于 07-18 15:42

    iTOP-iMX6开发板-设备内核-注册驱动例程

    本文档主要讲解在迅为iTOP-iMX6Q/D/PLUS 开发板的设备内核(4.1.15)源码中,设备注册驱动和非
    发表于 08-09 10:01

    如何编译设备和Linux内核镜像文件

    实验任务:编译设备和Linux内核镜像文件,拷贝到sd卡中,再从sd卡中拷贝到nand闪存对应的分区中,最后nand启动,进入linux系统本篇博客内容:1.实验流程2.注意事项1.实验流程1.
    发表于 12-20 07:11

    内核设备的相关资料分享

    1 硬件基础在我们的开发板上集成了一颗RGB灯组,引脚连接着主控的三路PWM输出,因此我们可以通过三路PWM输出进行调色的功能,硬件原理图如下:2 内核设备我们把设备
    发表于 12-24 07:00

    请问LS1043A板子能否通过nfs方式挂载文件系统?

    -a 0x80080000 -e 0x80080000 -n Linux -d arch/arm64/boot/Image.gz uImage命令可以生成uImage文件。然后tftp加载内核
    发表于 01-06 07:03

    如何将uboot-2020和Linux5.4.1移植到OK210?

    tftp加载内核设备。linux内核移植了dm9000网卡驱动,所以可以挂载nfs文件系统。
    发表于 01-13 07:31

    Linux内核设备DTS使用方法详解

    会得到dtb文件,dtb通过Bootloader引导程序加载内核。所以Bootloader需要支持设备才行;Kernel也需要加入设备
    发表于 05-06 16:14

    rk3308b使用tftp启动内核设备的具体流程

    1、rk3308b使用tftp启动内核设备的具体流程我使用的是firefly的rk3308b的板子,RK官方提供的sdk里面默认不支持使用tft
    发表于 05-17 11:12

    如何修改内核设备

    本文档介绍了内核设备的位置和包含关系 1.内核设备位置 文件 备注 dts longan/d
    发表于 12-14 13:42

    设备的传递及kernel 对设备的解析

    当 U-Boot 将设备加载到内存指定位置后,ARM 内核的 SoC 以通用寄存器 r2 来传递 dtb 在内存中的地址。kernel 获取到该地址后对 dtb 文件做进一步的处理。
    的头像 发表于 07-29 11:19 2492次阅读
    <b class='flag-5'>设备</b><b class='flag-5'>树</b>的传递及kernel 对<b class='flag-5'>设备</b><b class='flag-5'>树</b>的解析

    Linux设备详解(二) DTB文件格式

    一、背景     dtb作为二进制文件被加载到内存中,然后由内核读取并进行解析,如果对dtb文件的格式不了解,那么在看设备解析相关的内核
    的头像 发表于 08-10 16:02 5264次阅读
    Linux<b class='flag-5'>设备</b><b class='flag-5'>树</b>详解(二) DTB文件格式

    如何修改内核设备

    如何修改内核设备
    的头像 发表于 12-14 14:06 892次阅读
    如何修改<b class='flag-5'>内核</b><b class='flag-5'>设备</b><b class='flag-5'>树</b>

    linux驱动程序如何加载内核

    ,需要了解Linux内核的基本概念和API。以下是一些关键概念: 1.1 内核模块:Linux内核模块是一种动态加载和卸载的代码,可以在不重新启动系统的情况下
    的头像 发表于 08-30 15:02 611次阅读