首先是荔枝派的官方文档,写的不是很细,应当说我们必须明确几点:
编译 U-Boot据说是因为 Winbond 涨价了,所以板子上的 SPI Flash 换成了大陆产 &spi0 {pinctrl-names = 'default';pinctrl-0 = <&spi0_pins_a>;status = 'okay';flash@0 {#address-cells = <1>;#size-cells = <1>;compatible = 'winbond,xt25f128', 'jedec,spi-nor';reg = <0>;spi-max-frequency = <40000000>;};};
然后修改
编译 Busybox参考 用BusyBox制作Linux最小系统,然后要创建 jffs2 文件系统,因为我使用 initramfs,所以就不做这一步。 编译 Linux我选用主线 Linux。需要启用如下选项(不会吧,你该不会不知道可以用
其他选项不知道就默认就行。编译的时候记得加 烧录烧录 U-Boot 到 SPI Flash 是必须的,至于引导 Linux,可以把 Linux 映像放到 SD、TF 卡中,也可以直接烧到 SPI Flash 中。这里我采用后者。为此,我们准备一个打包脚本(因为我这里使用 initramfs,所以就不需要额外 rootfs 了): dd if=/dev/zero of=firmware.bin bs=1M count=16 2>/dev/nullprintf 'create firmware.bin, size 0x%04x\n' $[1024*1024*16]echo '+======================+'echo '| Bootloader: 1MB'echo '+----------------------+'echo '| dtb: 32KB'echo '+----------------------+'echo '| zImage: 8MB'echo '+----------------------+'echo '| rootfs: .MB'echo '+======================+'dd if=u-boot/u-boot-sunxi-with-spl.bin of=firmware.bin bs=1k conv=notrunc 2>/dev/nullprintf 'uboot: 0x0000, size 0x%04x\n' $[1024*1024]dd if=linux/arch/arm/boot/dts/suniv-f1c100s-licheepi-nano.dtb of=firmware.bin bs=1k seek=1024 conv=notrunc 2>/dev/nullprintf 'dtb: 0x%04x, size 0x%04x\n' $[1024*1024] $[32*1024]dd if=linux/arch/arm/boot/zImage of=firmware.bin bs=1k seek=$[1024+32] conv=notrunc 2>/dev/nullprintf 'zImage: 0x%04x, size 0x%04x\n' $[1024*(1024+32)] $[1024*1024*8]#dd if=jffs2.img of=firmware.bin bs=1K seek=$((1024+32+8192)) conv=notrunc 2>/dev/nullprintf 'rootfs: 0x%04x, size 0x%04x\n' $[1024*(1024+32+1024*8)] $[1024*(1024*16 - 1024*9 - 32)]echo 'sf probe 0 50000000 0; sf erase 0 0x1000000; reset'echo 'sudo sunxi-fel -p spiflash-write 0 firmware.bin'
注意这个 dtb 文件应该使用 linux 编译目标 然后烧录。根据官方的文档,先把 SPI Flash 的 CS 脚拉低,然后芯片进入 FEL 模式后进行操作。测试发现, 因此我们在烧新的 U-Boot 前,应该先进入出厂时的 U-Boot ,用以下命令清空 SPI Flash 的 16MB 空间(注意 0 和 50000000之间没有冒号,别被官方文档骗了):
重新上电,由于没有 SPL 头部,芯片会自动进入 FEL 模式。然后就可以使用
引导 Kernel重新上电,在 U-Boot 中执行: setenv bootargs 'console=tty0 console=ttyS0,115200n8'sf probe 0 50000000 0sf read 0x80C00000 0x100000 0x8000sf read 0x80008000 0x108000 0x800000bootz 0x80008000 - 0x80C00000
如果你的内核映像在 SD 卡中:
最终效果
|
|
来自: dreamersz7ips1 > 《待分类》