一、全志V3s出厂SD卡,需要增加对SPI NorFlash的支持
SPI Flash 系统编译
使用的是荔枝派zero
上面焊接了一个芯天下的Nor Flash型号为:XT25F128B也就是16MByte。
内核:linux-zero-5.2.y
1、嵌入式Linux 需要的程序
⚫Uboot
⚫Linux Kernel
⚫Dtb设备树
⚫根文件系统
2、Nor Flash的支持,需要以下步骤
1.配置uboot支持nor flash
2.配置Linux kernel支持nor flash
3.在设备树中添加nor flash的设备节点
4.由于nor flash的特殊性需要选择JFFS2格式的文件系统
3、Nor flash的分区
XT25F128B,也就是16MByte NOR Flash作为启动介质,规划分区如下:
由于内核中增加了网络驱动、音视频解码驱动,导致内核目前4.6MB左右,考虑到后期扩展,将内核分区扩大至6MB,文件系统分区缩小至8MB+960KB。
分区序号分区大小分区描述地址空间及分区名
mtd0 1MB spl+uboot 0x0000000-0x0100000 : “uboot”
mtd1 64KB dtb文件0x0100000-0x0110000: “dtb”
韦东山嵌入式linux视频mtd2 6MB linux内核0x0110000-0x0710000 : “kernel”
mtd3 8MiB 960KiB 根文件系统 0x0710000-0x1000000 : “rootfs”
三、编译Uboot
由于目前Uboot环境变量固定存放在1MB位置之内,所有留给uboot的空间固定到flash前1MB的位置不变。
每个分区的大小必须是擦除块大小的整数倍,XT25F128B的擦除块大小是64KB。
1、下载uboot源码
下载包含spi驱动的体验版本uboot,该驱动目前尚未合并到主线。
2、配置Flash支持型号
执行make ARCH=arm menuconfig 打开uboot菜单配置,进入到Device Drivers ‣SPI Flash Support。注意看一下自己flash的厂家名称,例如选上Macronix SPI flash support用来支持测试用的flash:XT25F128B。
Device Driver—>SPI Flash Support
选择:Legacy SPI Flash Interface Support
由于XT25F128B这个品牌并没有在上面,所以就使用Macronix 这个牌子试一下。
选上SPI flash Bank/Extended address register support支持否则只能读取到16M
如果使用的是16MB以上的flash,需要勾选flash bank支持选项,否则最多只能读到16MB:CONFIG_SPI_FLASH_BAR
uboot工程:drivers/mtd/spi/spi_flash_ids.c
const struct spi_flash_info spi_flash_ids[] = {
...
{"w25q128fw",      INFO(0xef6018, 0x0,  64 * 1024,  256, RD_FULL | WR_QPP | SECT_4K) },
{"xt25f128b",      INFO(0x0b4018, 0x0,  64 * 1024,  256, RD_FULL | WR_QPP | SECT_4K) },
...
};
修改设备树:Uboot\arch\arm\dts\ sun8i-v3s-licheepi-zero.dts
修改设备树中的 flash 相关的声明,添加上新增加的 flash 型号
&spi0 {
status = "okay";
xt25f128b:xt25f128b@0 {
compatible = "winbond, xt25f128b", "jedec,spi-nor";
reg = <0x0>;
spi-max-frequency = <50000000>;
#address-cells = <1>;
#size-cells = <1>;
};
};
3、配置uboot默认环境变量
在文件include/configs/sun8i.h中添加默认bootcmd和bootargs的环境变量设置,注意添加的位置在“ #include <configs/sunxi-common.h> ”的前边。
源码:vim include/configs/sun8i.h
#ifndef __CONFIG_H
#define __CONFIG_H
#ifdef CONFIG_USB_EHCI
#define CONFIG_USB_EHCI_SUNXI
#endif
#ifdef CONFIG_MACH_SUN8I_H3
#define CONFIG_SUNXI_USB_PHYS    4
#elif defined CONFIG_MACH_SUN8I_A83T
#define CONFIG_SUNXI_USB_PHYS    3
#elif defined CONFIG_MACH_SUN8I_V3S
#define CONFIG_SUNXI_USB_PHYS    1
#else
#define CONFIG_SUNXI_USB_PHYS    2
#endif
/*
* Include common sunxi configuration where most the settings are
*/

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。