linux boot 烧写纪要以及内存相关分析

1, printenv

8197F# printenv

baudrate=38400

ethact=eth0

ethaddr=00:00:00:81:97:f0

fileaddr=a0a00000

filesize=2bdf2

ipaddr=192.168.1.6

serverip=192.168.1.55

stderr=serial

stdin=serial

stdout=serial

Environment size: 189/65532 bytes

查看网络互通性

8197F# ping 192.168.1.100

Using eth0 device

host 192.168.1.100 is alive

1,tftpput

8197F# tftpput 0xa0a00000 0x40000 192.168.1.100:uboot.bin

Using eth0 device

TFTP to server 192.168.1.100; our IP address is 192.168.1.6

Filename 'uboot.bin'.

Save address: 0xa0a00000

Save size: 0x40000

Saving: #################

3.4 MiB/s

done

Bytes transferred = 262144 (40000 hex)

2,tftpboot

8197F# tftpboot 0xa0a00000 192.168.1.100:boot.bin

Using eth0 device

TFTP from server 192.168.1.100; our IP address is 192.168.1.6

Filename 'boot.bin'.

Load address: 0xa0a00000

Loading: #############

4.5 MiB/s

done

Bytes transferred = 179698 (2bdf2 hex)

3, 烧写测试

sf erase 0x0 0x40000

将下载的 uboot.bin 写入 Flash 起始位置

sf write 0xa0a00000 0x0 0x40000

两个分区查看

8197F# md.b 0xa0000000

a0000000: a9 8c 31 95 ff ff eb bf 7f fb ff ff ff ff ff f7 ..1.............

a0000010: ff ff ff ff ff df ef df ff ff ff ff ff ff ff ff ................

a0000020: ff ff ff ff ff ff ff ff ff fb ff ff ff ff ff ff ................

a0000030: ff ff ef ff ff ff fd ff ff ff ff ff ff ff ff fd ................

8197F# md.b 0x80000000

80000000: a9 8c 31 95 ff ff eb bf 7f fb ff ff ff ff ff f7 ..1.............

80000010: ff ff ff ff ff df ef df ff ff ff ff ff ff ff ff ................

80000020: ff ff ff ff ff ff ff ff ff fb ff ff ff ff ff ff ................

80000030: ff ff ef ff ff ff fd ff ff ff ff ff ff ff ff fd ................

读出boot.bin整个镜像

8197F# sf probe

flash vendor: EON

tangtao@SF: Detected EN25QX128A with page size 256 Bytes, erase size 64 KiB, total 16 MiB

8197F# sf read 0xa0a00000 0x0 0x40000

SF: 262144 bytes @ 0x0 Read: OK

8197F# tftpput 0xa0a00000 0x40000 192.168.1.100:boot_read.bin

Using eth0 device

TFTP to server 192.168.1.100; our IP address is 192.168.1.6

Filename 'boot_read.bin'.

Save address: 0xa0a00000

Save size: 0x40000

Saving: #################

1.8 MiB/s

done

Bytes transferred = 262144 (40000 hex)

地址范围 缓存 (Cache) 用途 访问速度
KSEG0 0x8000_0000 ~ 0x9FFF_FFFF 带缓存 (Cached) 正常运行代码、数据
KSEG1 0xA000_0000 ~ 0xBFFF_FFFF 无缓存 (Uncached) 寄存器、设备、早期启动 慢、稳定

1,缓存差异(最重要)

KSEG0:走 Cache,速度快,但DDR 初始化前不能用。

KSEG1:不走 Cache,直接读写物理地址,DDR 初始化前也能用。

  1. 与你之前的 boot.bin/u-boot.bin 关系

boot.bin (SPL):

运行在 KSEG1(因为 DDR 还没初始化,不能用缓存)

u-boot.bin:

运行在 KSEG0(DDR 已初始化,开启 Cache 加速)

  1. 地址换算公式(超级实用)

物理地址 0xXXXXXXX ↔ 虚拟地址

KSEG0 虚拟地址 = 物理地址 + 0x80000000

KSEG1 虚拟地址 = 物理地址 + 0xA0000000

8197F# bdinfo

arch_number = 0x00000000

boot_params = 0x80000100

DRAM bank = 0x00000000

-> start = 0x80000000

-> size = 0x08000000

ethaddr = 00:11:22:33:44:55

ip_addr = 192.168.1.10

baudrate = 38400 bps

relocaddr = 0x80F80000

reloc off = 0x80F80000

fdt_blob = 0x80F80000

sp = 0x80F7EF10

flashstart = 0xBC000000

flashsize = 0x01000000

flashoffset = 0x00000000

示例操作

1. 查看 DDR 起始 64 字节内容
复制代码
md 0x80000000 40   # 显示 64 字节(每行 16 字节)
2. 查看 Flash 起始 256 字节内容(通过 KSEG1 访问,绕过缓存)
复制代码
md.b 0xBC000000 100   # 显示 256 字节
3. 比较内存中两份数据(例如验证写入)
复制代码
cmp.b 0x80000000 0x81000000 0x1000
4. 向 DDR 写入测试数据
复制代码
mw.l 0x80010000 0xdeadbeef 10   # 向 0x80010000 写入 10 个字
5. 将 Flash 内容读到内存
复制代码
# 从 Flash 地址 0xBC000000(虚拟)读取 256KB 到内存 0x80020000
cp.b 0xBC000000 0x80020000 0x40000
相关推荐
虹科网络安全1 天前
解读CRA横向标准EN 40000系列:从法规文本到工程落地 | CRA合规之路(七)
网络·安全·web安全
huainingning1 天前
华三防火墙web界面ipsec配置
网络
爱丶狸1 天前
Grafana_Zabbix_ImageRenderer_部署与前端操作手册
linux·前端·zabbix·grafana·kylin
阿里云云原生1 天前
可用性从 99.9% 跃升至 99.995%:畅捷通如何用 AI 重塑运维底座?
运维·网络·人工智能
k4m7v2pz1 天前
把 Bevy 0.14 游戏移植到 R36S 掌机:一场与“无窗口系统“的搏斗
linux·rust·bevy·r36s·rk3326·开源掌机
kisloy1 天前
【爬虫入门第13讲】Scrapy 框架深度解析(四)核心配置与自定义扩展
网络·爬虫·scrapy
木子欢儿1 天前
Intel 架构的 MacBook Pro 运行 Linux 发热量高解决
linux·运维·服务器
夜雪一千1 天前
TCP数据包长什么样?拆解TCP报文头部结构
网络·网络协议·tcp/ip
德迅云安全杨德俊1 天前
应用加速:一站式解决企业跨域网络加速与安全双重难题
网络·安全·ddos
瓦学妹1 天前
什么是网络索引?它是如何工作的?
大数据·网络·python·网络爬虫