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 初始化前也能用。
- 与你之前的 boot.bin/u-boot.bin 关系
boot.bin (SPL):
运行在 KSEG1(因为 DDR 还没初始化,不能用缓存)
u-boot.bin:
运行在 KSEG0(DDR 已初始化,开启 Cache 加速)
- 地址换算公式(超级实用)
物理地址 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