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
相关推荐
键盘上的猫头鹰3 分钟前
【Linux 基础教程(一)】概述、安装与网络配置:VMware + CentOS + NAT + XShell 远程连接
linux·网络·centos
网络研究院5 分钟前
管理瘫痪、人员短缺:深度解析 NIST NVD 为什么审不动漏洞了?
网络·安全·漏洞·管理·危机
枳实-叶9 分钟前
【Linux驱动开发】第18天:I2C驱动深度解析
linux·运维·驱动开发
shandianchengzi13 分钟前
【记录】Ubuntu|Ubuntu 26.04 笔记本耗电过快,排查 省电过程
linux·运维·ubuntu
一叶星殇16 分钟前
日志成海,何以检索:Serilog 解锁 .NET 日志可查询新范式
运维·服务器
上海云盾安全满满19 分钟前
服务器不稳定,丢包有哪些原因?
运维·服务器
li星野19 分钟前
FastAPI 参数详解:路径参数、查询参数与请求体 —— 从入门到实战
服务器·学习·fastapi
陳103020 分钟前
Linux:信号
linux·运维·服务器
机汇五金_24 分钟前
通信设备防雨箱如何兼顾防护与散热?
网络·python
小此方27 分钟前
Re:Linux系统篇(二十五)进程篇·十:深度硬核!Linux 进程等待,从 task_struct 源码到位图状态解构
linux·运维·驱动开发