RK3568 学习笔记 : u-boot 通过 tftp 网络更新 u-boot自身

2024-04-21 15:44

本文主要是介绍RK3568 学习笔记 : u-boot 通过 tftp 网络更新 u-boot自身,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

  • 开发板型号: 【正点原子】 的 RK3568 开发板 AtomPi-CA1

  • 使用 虚拟机 ubuntu 20.04 收到单独 编译 RK3568 u-boot

  • 使用 rockchip Linux 内核的设备树 【替换】 u-boot 下的 rk3568 开发板设备树文件,解决 u-boot 下千兆网卡设备能识别但是无法 Ping 通 PC 问题

  • u-boot 下网络可以 ping 通了,u-boot ping 通 PC 主机。

  • 本篇记录通过 tfpt 拉取 u-boot 镜像,然后通过 u-boot mmc 命令烧写更新 u-boot 本身

u-boot 网络配置

  • 根据当前网络连接,进行 u-boot 下 网络配置(env 设置),注意当前 网段
setenv ipaddr 192.168.10.8
setenv netmask 255.255.255.0
setenv gatewayip 192.168.10.1## 设置后可以作为 tftp 服务器地址 PC 主机 IP : 192.168.10.10 
setenv serverip 192.168.10.10  

PC 端网络设置

  • 这里使用 USB 转 千兆网卡:

  • IPv4 设置: IP 地址:192.168.10.10 子网掩码:255.255.255.0 默认网关:192.168.10.1

在这里插入图片描述

在这里插入图片描述

tftp 服务器设置

  • 下载安装 Tftpd64,可以通过网址 https://bitbucket.org/phjounin/tftpd64/src/master/

  • github 上应该有源码:https://github.com/PJO2/tftpd64

  • 开启并指定 PC 端的网卡(连接开发板),并设置路径, uboot.img 的路径

在这里插入图片描述

  • rk3568 开发板 与 PC 网络连接有两种方式:网线直连 与 经过路由器中转两种,当前选择 第一种:网络直连

-【备注】:(1)即使是开发板网线直连 PC网卡,如果网段是 192.168.10.xx,网关地址依旧都设置为 192.168.10.1 即可。 (2)千兆网络,需要千兆的网线。

  • 确认网络是否 ping 通,如果 rk3568 有两个 gmac 网卡,可以切换当前的网卡,用于与 PC 进行网络连接

在这里插入图片描述

更新 u-boot 自身

  • 通过 tftp 传递 uboot.img 到开发板

  • 首先确认 DDR RAM 的地址范围,需要先把 uboot.img 传递到 DDR RAM 的某个地址(不要与使用的内存地址重叠,如设备树、uboot 加载地址等)

  • 可以通过 u-boot bdinfo 命令查看当前系统的基本信息,如 DRAM bank 的地址范围,由于uboot.img 有 4MB 大小,因此加载地址暂时定为没有使用的 0x07200000,当前 DRAM 范围: 0x0020000 ~ 0x8220000

  • DRAM bank 范围: 这里有两个 Bank

DRAM bank   = 0x00000000
-> start    = 0x00200000
-> size     = 0x08200000
DRAM bank   = 0x00000001
-> start    = 0x09400000
-> size     = 0xE6C00000
=> bdinfo
arch_number = 0x00000000
boot_params = 0x00000000
DRAM bank   = 0x00000000
-> start    = 0x00200000
-> size     = 0x08200000
DRAM bank   = 0x00000001
-> start    = 0x09400000
-> size     = 0xE6C00000
baudrate    = 1500000 bps
TLB addr    = 0xEFFF0000
relocaddr   = 0xEFEC4000
reloc off   = 0xEF4C4000
irq_sp      = 0xEDBDBBE0
sp start    = 0xEDBDBBE0
Early malloc usage: 780 / 80000
fdt_blob = 00000000edbdbbf8
  • 传递 uboot.img 的命令: tftp 0x07200000 uboot.img

  • 注意 默认的 tftp server 的 IP,来自 u-boot env : setenv serverip 192.168.10.10

=> tftp 0x07200000 uboot.img
Using ethernet@fe010000 device
TFTP from server 192.168.10.10; our IP address is 192.168.10.8
Filename 'uboot.img'.
Load address: 0x7200000
Loading: ##############################################################################################################################################################################################################################################################################################5.1 MiB/s
done
Bytes transferred = 4194304 (400000 hex)
  • 当前把 PC 端的 uboot.img 通过 tftp 命令,传递到开发板的 0x07200000 内存地址位置,接下,需要使用 mmc 命令进行烧写 uboot.img

mmc part 确认 uboot.img 的分区位置

  • 如果 专门给 uboot.img 创建分区,可以通过 u-boot mmc part 命令查看 分区信息,确认 uboot.img 的存放位置,注意 mmc 的存放地址默认是 512 字节为单位。
=> mmc partPartition Map for MMC device 0  --   Partition Type: EFIPart    Start LBA       End LBA         NameAttributesType GUIDPartition GUID1     0x00004000      0x00005fff      "uboot"attrs:  0x0000000000000000type:   05660000-0000-4873-8000-5a20000035d8guid:   b4250000-0000-4628-8000-7544000002ba2     0x00006000      0x00085fff      "boot"attrs:  0x0000000000000000type:   7c180000-0000-4f18-8000-50a800001445guid:   3b690000-0000-4079-8000-2a4a00007a873     0x00086000      0x0733bfbf      "rootfs"attrs:  0x0000000000000000type:   0e110000-0000-461a-8000-5c66000022cdguid:   614e0000-0000-4b53-8000-1d28000054a9
  • 也就是 uboot 分区: 起始地址 0x00004000,结束地址 0x00005fff,注意 mmc 地址可以认为是以 512 字节作为一个块的块(block)个数的偏移

  • 这里 0x00004000 在 rk3568 平台是固定的,mmc 8M 字节 偏移位置,大小是 4M 字节

  • 擦除 原有的 uboot:uboot 工作时默认已经读取到内存,因此可以直接更新 mmc 中 uboot 分区

  • 擦除命令 mmc erase 0x4000 0x2000

  • 烧写命令:mmc write 0x0720000 0x4000 0x2000

  • 重启,如果 uboot 更新了(比如修改了,增加一些打印信息),说明操作成功

在这里插入图片描述

小结

  • 本篇记录 u-boot 下通过 网络的方法更新 u-boot 自身镜像的方法(mmc 存储),需要注意一些细节,便于问题的排查与解决

  • u-boot 网络调通后,除了更新自己外,还可以更新 Linux kerenl、rootfs 根文件系统等,设置可以直接通过 nfs 挂载远程镜像的方式启动

这篇关于RK3568 学习笔记 : u-boot 通过 tftp 网络更新 u-boot自身的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/923445

相关文章

在 Spring Boot 中使用 @Autowired和 @Bean注解的示例详解

《在SpringBoot中使用@Autowired和@Bean注解的示例详解》本文通过一个示例演示了如何在SpringBoot中使用@Autowired和@Bean注解进行依赖注入和Bean... 目录在 Spring Boot 中使用 @Autowired 和 @Bean 注解示例背景1. 定义 Stud

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

Spring Boot整合log4j2日志配置的详细教程

《SpringBoot整合log4j2日志配置的详细教程》:本文主要介绍SpringBoot项目中整合Log4j2日志框架的步骤和配置,包括常用日志框架的比较、配置参数介绍、Log4j2配置详解... 目录前言一、常用日志框架二、配置参数介绍1. 日志级别2. 输出形式3. 日志格式3.1 PatternL

如何使用Spring boot的@Transactional进行事务管理

《如何使用Springboot的@Transactional进行事务管理》这篇文章介绍了SpringBoot中使用@Transactional注解进行声明式事务管理的详细信息,包括基本用法、核心配置... 目录一、前置条件二、基本用法1. 在方法上添加注解2. 在类上添加注解三、核心配置参数1. 传播行为(

Spring Boot Actuator使用说明

《SpringBootActuator使用说明》SpringBootActuator是一个用于监控和管理SpringBoot应用程序的强大工具,通过引入依赖并配置,可以启用默认的监控接口,... 目录项目里引入下面这个依赖使用场景总结说明:本文介绍Spring Boot Actuator的使用,关于Spri

Spring Boot 整合 ShedLock 处理定时任务重复执行的问题小结

《SpringBoot整合ShedLock处理定时任务重复执行的问题小结》ShedLock是解决分布式系统中定时任务重复执行问题的Java库,通过在数据库中加锁,确保只有一个节点在指定时间执行... 目录前言什么是 ShedLock?ShedLock 的工作原理:定时任务重复执行China编程的问题使用 Shed

Spring Boot统一异常拦截实践指南(最新推荐)

《SpringBoot统一异常拦截实践指南(最新推荐)》本文介绍了SpringBoot中统一异常处理的重要性及实现方案,包括使用`@ControllerAdvice`和`@ExceptionHand... 目录Spring Boot统一异常拦截实践指南一、为什么需要统一异常处理二、核心实现方案1. 基础组件

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

Redis缓存问题与缓存更新机制详解

《Redis缓存问题与缓存更新机制详解》本文主要介绍了缓存问题及其解决方案,包括缓存穿透、缓存击穿、缓存雪崩等问题的成因以及相应的预防和解决方法,同时,还详细探讨了缓存更新机制,包括不同情况下的缓存更... 目录一、缓存问题1.1 缓存穿透1.1.1 问题来源1.1.2 解决方案1.2 缓存击穿1.2.1