各位大佬,咸鱼买了一片f1c600的板子,原本是nor Flash到手后换成128M spi Nand了。
编译了榴莲派的boot和kernel, 在手头的f1c100s上正常运行。但烧录到f1c600上后,启动kernel报错如下。万能的坛友,有知道原因和解决方案的吗?
Hit any key to stop autoboot: 0
Reading 16384 byte(s) (8 page(s)) at offset 0x00100000
Reading 5636096 byte(s) (2752 page(s)) at offset 0x00120000
Kernel image @ 0x80008000 [ 0x000000 - 0x4e3688 ]
## Flattened Device Tree blob at 80c00000
Booting using the fdt blob at 0x80c00000
Working FDT set to 80c00000
Loading Device Tree to 81567000, end 8156dab6 ... OK
Working FDT set to 81567000
Cannot setup simplefb: node not found
Starting kernel ...
Uncompressing Linux... done, booting the kernel.
Error: unrecognized/unsupported processor variant (0x41069265).原本以为是uboot和kernel macheine ID不一致导致。但相同IMG 烧录到f1c100s上是可以正常启动的,且打印的mache ID也是41069265。故排除了这个原因。
uboot中bdinfo如下:
=> bdinfo
boot_params = 0x80000100
DRAM bank = 0x00000000
-> start = 0x80000000
-> size = 0x02000000
flashstart = 0x00000000
flashsize = 0x00000000
flashoffset = 0x00000000
baudrate = 115200 bps
relocaddr = 0x81b91000
reloc off = 0x00f91000
Build = 32-bit
current eth = unknown
eth-1addr = (not set)
IP addr = <NULL>
fdt_blob = 0x81a6e960
Video = sunxi_de active
FB base = 0x81c00000
FB size = 480x272x32
lmb_dump_all:
memory.count = 0x1
memory[0] [0x80000000-0x81ffffff], 0x2000000 bytes, flags: none
reserved.count = 0x1
reserved[0] [0x8156e940-0x81ffffff], 0xa916c0 bytes, flags: no-overwrite
devicetree = separate
serial addr = 0x01c25800
width = 0x00000004
shift = 0x00000002
offset = 0x00000000
clock = 0x05f5e100
arch_number = 0x00000000
TLB addr = 0x81ff0000
irq_sp = 0x81a6e950
sp start = 0x81a6e940
Early malloc usage: 3d0 / 2000离线
离线
感谢晕哥指导。
debug 下来发现不是 otp 寄存器不同导致。说明下debug过程。
让AI找关键打印,AI review code发现这里不存在问题。建议排除zImage完整性。于是按下面验证。
---------------------in pc
crc32 zImage
57b3bf67
---------------------in f1c600
=> mtd read spi-nand0 0x80008000 0x120000 0x560000
=> crc32 0x80008000 0x4e3688
crc32 for 80008000 ... 804eb687 ==> 0f74d416
---------------------in f1c100s
=> mtd read spi-nand0 0x80008000 0x120000 0x560000
Reading 5636096 byte(s) (2752 page(s)) at offset 0x00120000
=> crc32 0x80008000 0x4e3688
crc32 for 80008000 ... 804eb687 ==> 57b3bf67然后通过串口加载zImage,发现可以正常启动。
=> loadb 0x80008000
## Ready for binary (kermit) download to 0x80008000 at 115200 bps...
Starting kermit transfer. Press Ctrl+C to cancel.
Transferring zImage...
100% 5005 KB 8 KB/sec 00:09:35 0 Errors
CACHE: Misaligned operation at range [80008000, 804eb688]
## Total Size = 0x004e3688 = 5125768 Bytes
## Start Addr = 0x80008000
=> crc32 0x80008000 0x4e3688
crc32 for 80008000 ... 804eb687 ==> 57b3bf67
bootz 0x80008000 - 0x80C00000
Starting kernel ...
Uncompressing Linux... done, booting the kernel.
[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Linux version 5.4.77-g38e13221c72f-dirty (demo@DESKTOP-RE5L8IU) (gcc version 7.2.1 20171011 (Linaro GCC 7.2-2017.11)) #3 Sun Sep 20 11:49:16 CST 2026
[ 0.000000] CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=0005317f
[ 0.000000] CPU: VIVT data cache, VIVT instruction cache离线
现在确认了是板子上的 zImage有问题。
烧录前有整片擦除,试过烧录到其他地址,发现还是一样。
目前怀疑是板子上的spi nand有啥问题(但没有证据)。
离线
破案了,原因是 f1c600 使用的uboot和kernel 原本不支持 MX35LF1G24AD这颗flash, 虽然改代码中ID,可以起来,但读写还有问题。
替换成W25N01GV后,可以正常烧写和启动。
另外请教下,看论坛中的帖子中有的说 f1c600 是64MB in chip DDR,有的是说是32M,到底是多大?
离线