在嵌入式系统中,使用NOR Flash作为存储介质时,通常需要选择合适的文件系统并进行相关配置和编译。以下是实现这一目标的步骤。
1. 准备工作
- 获取工具链:安装交叉编译工具,如 gcc-linaro 和设备树编译器 dtc。
- 下载源码: U-Boot 源码:Lichee-Pi U-Boot。 Linux 内核源码:Lichee-Pi Linux。
2. 配置和编译U-Boot
- 配置支持NOR Flash:
make ARCH=arm menuconfig
- 设置默认启动参数: 修改 include/configs/sun8i.h 文件,添加如下内容:
#define CONFIG_BOOTCOMMAND "sf probe 0; sf read 0x41800000 0x100000 0x10000; sf read 0x41000000 0x110000 0x400000; bootz 0x41000000 - 0x41800000"
#define CONFIG_BOOTARGS "console=ttyS0,115200 root=/dev/mtdblock3 rootfstype=jffs2 rw"
- 编译U-Boot:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4
3. 配置和编译Linux内核
- 配置内核选项: make ARCH=arm menuconfig 启用 Device Drivers -> Memory Technology Device (MTD) support。 启用 File systems -> Miscellaneous filesystems -> JFFS2 support。
- 修改设备树文件: 在设备树文件(如 sun8i-v3s-licheepi-zero.dts)中添加SPI Flash节点:
&spi0 {
status = "okay";
flash@0 {
compatible = "jedec,spi-nor";
reg = <0x0>;
spi-max-frequency = <50000000>;
};
};
- 编译内核和设备树:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs
4. 制作JFFS2文件系统镜像
- 安装工具:
sudo apt-get install mtd-utils
- 制作镜像:
mkfs.jffs2 -s 0x100 -e 0x10000 -p 0xAF0000 -d rootfs/ -o jffs2.img
5. 打包镜像
- 将U-Boot、内核、设备树和文件系统打包为一个镜像:
dd if=/dev/zero of=flashimg.bin bs=1M count=16
dd if=u-boot-sunxi-with-spl.bin of=flashimg.bin bs=1K conv=notrunc
dd if=sun8i-v3s-licheepi-zero.dtb of=flashimg.bin bs=1K seek=1024 conv=notrunc
dd if=zImage of=flashimg.bin bs=1K seek=1088 conv=notrunc
dd if=jffs2.img of=flashimg.bin bs=1K seek=5184 conv=notrunc
6. 烧录镜像到NOR Flash
- 使用 sunxi-fel 工具烧录镜像:
sudo sunxi-fel -p spiflash-write 0 flashimg.bin
本站的文章和资源来自互联网或者站长的原创,按照 CC BY -NC -SA 3.0 CN协议发布和共享,转载或引用本站文章应遵循相同协议。如果有侵犯版权的资源请尽快联系站长,我们会在24h内删除有争议的资源。欢迎大家多多交流,期待共同学习进步。