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 挂载远程镜像的方式启动

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

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

相关文章

B树(B-tree)

B树(B-tree) B树(B-tree)是一种自平衡的多路查找树,主要用于磁盘或其他直接存取的辅助存储设备 B树能够保持数据有序,并允许在对数时间内完成查找、插入及删除等操作 这种数据结构常被应用在数据库和文件系统的实现上 B树的特点包括: B树为…

AD设置覆铜与板子边缘间隔

1、设置板子边缘与覆铜间隔原因 在单个制板或者批量制板时,有时由于机器切割不稳定,造成切到覆铜,板子容易不稳定。为了保证机器切割不切到覆铜,我们可以设置覆铜到板子边缘的间隔。 2、设置方式 打开Design--->Rules&#…

pycharm创建的项目

pycharm生成django templates删出 settings.py

Vue 指令、计算属性、侦听器

目录 指令 指令修饰符 按键修饰符 ​编辑 v-model修饰符 事件修饰符 v-bind对于样式操作的增强 操作class 对象 数组 操作style v-model应用于其他表单元素 computed计算属性 概念 基础语法 ​编辑 计算属性vs方法 computed计算属性 作用 语法 缓存特性 m…

Java Web 网页设计

不要让追求之舟停泊在幻想的港湾 而应扬起奋斗的风帆 驶向现实生活的大海 网页设计 1.首先 添加框架支持 找到目录右键添加 找到Web Application选中 点击OK 然后 编辑设置 找到Tomcat--local 选中 点击OK 名称可以自己设置 找到对应文件夹路径 把Tomcat添加到项目里面 因为…

一次Redis访问超时的“捉虫”之旅

01 引言 作为后端开发人员,对Redis肯定不陌生,它是一款基于内存的数据库,读写速度非常快。在爱奇艺海外后端的项目中,我们也广泛使用Redis,主要用于缓存、消息队列和分布式锁等场景。最近在对一个老项目使用的docker镜…

Java——数组

数组是一块连续的内存,用来存储相同类型的数据 一、数组的定义 数组的创建 T[] 数组名 new T[N]; T:表示数组中存放元素的类型 T[]:表示数组的类型 N:表示数组的长度 数组的初始化 数组的初始化主要分为动态初始化和静态初始…

链表基础4——带头双向循环链表

什么是带头双向循环链表 我们直接看图片 定义结点类型 typedef int LTDataType;//存储的数据类型typedef struct ListNode {LTDataType data;//数据域struct ListNode* prev;//前驱指针struct ListNode* next;//后继指针 }ListNode;链表的初始化 //创建一个新结点 ListNod…

社交媒体数据恢复:Dust

社交媒体数据恢复:Dust/CYBER DUST 网络灰尘:更安全的发短信场所 概述 CYBER DUST 让您掌控自己的数字生活。我们相信网络生活就是现实生活,因此只有您应该控制有关您的信息。我们的用户受到保护——不用担心被窥探、数据挖掘、粗略的黑客&…

Golang | Leetcode Golang题解之第42题接雨水

题目&#xff1a; 题解: func trap(height []int) (ans int) {n : len(height)if n 0 {return}leftMax : make([]int, n)leftMax[0] height[0]for i : 1; i < n; i {leftMax[i] max(leftMax[i-1], height[i])}rightMax : make([]int, n)rightMax[n-1] height[n-1]for i…

06 MapStream递归

Collections(集合工具类) 可变参数 就是一种特殊形参&#xff0c;定义在方法、构造器的形参列表里&#xff0c;定义格式是&#xff1a;方法名(数据类型… 形参名称){ } 可变参数的特点和好处 **特点&#xff1a;**可以不传数据给它&#xff1b;可以传一个或者同时传多个数据给…

Edge 浏览器使用方法和经验技巧

目前我已经将主力浏览器从火狐更换到Edge&#xff0c;本文将会根据我自己的使用经验来不断更新完善&#xff0c;内容包括下载、常用插件、使用技巧和常见问题等 下载安装 Edge是win10内置的浏览器&#xff0c;因此多数人不需要下载&#xff0c;如果你的电脑并没有安装&#x…