xfel 可以启动内核,晕哥的xfel 在D1上通过直接加载可以启动SPL 和 opensbi;同样的,根据道理,我把需要的文件按照地址全部加载到对应的位置,那不是可以直接启动内核,按照这个思路,我就一步一步加载;
(1)首先,根据理解,SPL用于初始化时钟,DDR和搬运数据,但是XFEL已经实现了,所以,我直接用xfel加载opensbi后的代码:
.\xfel.exe write 0x41fc0000 fw_jump.bin
.\xfel.exe write 0x42000000 u-boot.fex
.\xfel.exe write 0x45000000 boot.img
结果会卡在start kernel,后面五打印,因此我在内核启动前加了一段汇编的电灯代码,结果发现内核确实运行了,灯点亮了。因此我怀疑后面的解析出错,我往后翻了以下,出错的地方只可能是设备树解析,因此我怀疑设备树有问题,但是bootm中的设备树确实传参正确。
(2)后面我翻了SPL的代码,又找到了一段设备树的读取加载,所以更新了以下命令】
.\xfel.exe write 0x41fc0000 fw_jump.bin
.\xfel.exe write 0x42000000 u-boot.fex
.\xfel.exe write 0x45000000 boot.img
.\xfel.exe write 0x20000 boot0_nand_sun20iw1p1.bin
.\xfel.exe write 0x42200000 sunxi.dtb
最终实现的效果,正常启动内核;
Starting kernel ...
[ 0.000000] Linux version 5.4.61 (ubuntu@ubuntu1804) (riscv64-unknown-linux-gnu-gcc (C-SKY RISCV Tools V1.8.4 B20200702) 8.1.0, GNU ld (GNU Binutils) 2.32) #1 PREEMPT Mon Sep 11 09:21:39 UTC 2023
[ 0.000000] cma: Reserved 16 MiB at 0x000000005f000000
[ 0.000000] Zone ranges:
[ 0.000000] DMA32 [mem 0x0000000040000000-0x000000005fffffff]
[ 0.000000] Normal empty
[ 0.000000] Movable zone start for each node
[ 0.000000] Early memory node ranges
[ 0.000000] node 0: [mem 0x0000000040000000-0x000000005fffffff]
[ 0.000000] Initmem setup node 0 [mem 0x0000000040000000-0x000000005fffffff]
[ 0.000000] elf_hwcap is 0x20112d
[ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 129280
[ 0.000000] Kernel command l
离线
Fw bin是Opensbi 的二进制文件,boot0是spl 的二进制文件,
上述的启动流程还差了一步,就是加载dsp ,但是dsp的加载地址和内核的地址重复了,
离线