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

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

poj3468(线段树成段更新模板题)

题意:包括两个操作:1、将[a.b]上的数字加上v;2、查询区间[a,b]上的和 下面的介绍是下解题思路: 首先介绍  lazy-tag思想:用一个变量记录每一个线段树节点的变化值,当这部分线段的一致性被破坏我们就将这个变化值传递给子区间,大大增加了线段树的效率。 比如现在需要对[a,b]区间值进行加c操作,那么就从根节点[1,n]开始调用update函数进行操作,如果刚好执行到一个子节点,

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in

hdu1689(线段树成段更新)

两种操作:1、set区间[a,b]上数字为v;2、查询[ 1 , n ]上的sum 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdl

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss