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

相关文章

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

Spring Boot 3.4.3 基于 Spring WebFlux 实现 SSE 功能(代码示例)

《SpringBoot3.4.3基于SpringWebFlux实现SSE功能(代码示例)》SpringBoot3.4.3结合SpringWebFlux实现SSE功能,为实时数据推送提供... 目录1. SSE 简介1.1 什么是 SSE?1.2 SSE 的优点1.3 适用场景2. Spring WebFlu

Spring Boot结成MyBatis-Plus最全配置指南

《SpringBoot结成MyBatis-Plus最全配置指南》本文主要介绍了SpringBoot结成MyBatis-Plus最全配置指南,包括依赖引入、配置数据源、Mapper扫描、基本CRUD操... 目录前言详细操作一.创建项目并引入相关依赖二.配置数据源信息三.编写相关代码查zsRArly询数据库数

一文详解如何从零构建Spring Boot Starter并实现整合

《一文详解如何从零构建SpringBootStarter并实现整合》SpringBoot是一个开源的Java基础框架,用于创建独立、生产级的基于Spring框架的应用程序,:本文主要介绍如何从... 目录一、Spring Boot Starter的核心价值二、Starter项目创建全流程2.1 项目初始化(

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作

SpringBoot使用OkHttp完成高效网络请求详解

《SpringBoot使用OkHttp完成高效网络请求详解》OkHttp是一个高效的HTTP客户端,支持同步和异步请求,且具备自动处理cookie、缓存和连接池等高级功能,下面我们来看看SpringB... 目录一、OkHttp 简介二、在 Spring Boot 中集成 OkHttp三、封装 OkHttp

Spring Boot 整合 MyBatis 连接数据库及常见问题

《SpringBoot整合MyBatis连接数据库及常见问题》MyBatis是一个优秀的持久层框架,支持定制化SQL、存储过程以及高级映射,下面详细介绍如何在SpringBoot项目中整合My... 目录一、基本配置1. 添加依赖2. 配置数据库连接二、项目结构三、核心组件实现(示例)1. 实体类2. Ma