SPI Flash,如何找到系统内存地址?

逆向工程 记忆 嵌入式 米普 闪光 尖峰
2021-07-10 23:59:16

如何确定运行eCos操作系统的设备使用的SPI Flash的系统内存地址?例如,show flash命令返回以下信息:

 Flash Device Information:

      CFI Compliant: no
        Command Set: Generic SPI Flash
   Device/Bus Width: x16
 Little Word Endian: no
    Fast Bulk Erase: no
    Multibyte Write: 256 bytes max
  Phys base address: 0xbadf1a5
 Uncached Virt addr: 0x1badf1a5
   Cached Virt addr: 0x2badf1a5
   Number of blocks: 129
         Total size: 8388608 bytes, 8 Mbytes
       Current mode: Read Array
        Device Size: 8388608, Write buffer: 256, Busy bit: 

      Size  Device      Device     Region
Block  kB   Address     Offset     Offset   Region Allocation
----- ---- ---------- ----------- --------- -----------------
    0   32 0x1badf1a5           0         0 Bootloader (32768 bytes)
    1   32 0x1bae71a5       32768       ??? {unassigned}
    2   64 0x1baef1a5       65536         0 Permanent NonVol (65536 bytes)
    3   64 0x1baff1a5      131072         0 Image1
    4   64 0x1bb0f1a5      196608     65536 Image1
    5   64 0x1bb1f1a5      262144    131072 Image1
    6   64 0x1bb2f1a5      327680    196608 Image1
    7   64 0x1bb3f1a5      393216    262144 Image1
    ..  .. ........ 
  127   64 0x1c2bf1a5     8257536   4063232 Image2 (4128768 bytes)
  128   64 0x1c2cf1a5     8323072         0 Dynamic NonVol (65536 bytes)

但这些地址似乎不是内存位置的实际地址。因为当我尝试readmem命令时,它总是返回错误。例如,有一个readmem命令示例

readmem -s 4 -n 64 0x80001234 -- Reads 64 bytes as 32-bit values.

当我尝试时,readmem -s 4 -n 16384 0x1baef1a5它总是返回错误:(ERROR - Address对于上表中的任何地址)。所以我假设这些地址不是实际的闪存地址。我认为这是因为处理器的内存控制器将闪存地址空间映射到系统地址空间。Flash word-size 与 system word-size 不同。如何找到系统内存地址来读取SPI Flash?

1个回答

我对 eCos 不太熟悉,但我猜这device address不是内存地址,而是操作系统和引导加载程序用于访问 SPI 芯片的硬件设备的地址,即类似于 B0:D31 之类的 PCI 地址: PC 上的 F0(总线 0、设备 31、功能 0)。您应该尝试找到闪存映射到内存的位置并使用Offset读取块