参考:http://zero.lichee.pro/系统开发/SPI_flash_build.html#linux
本文以型号为MX25L12805、MX25L25635F为例,flash大小分别为16M、32M。
首先规划flash分区,规划如下:

分区序号 分区大小 分区作用 地址空间及分区名
mtd0 1MB spl+uboot 0x0000000-0x0100000 : “uboot”
mtd1 64KB dtb文件 0x0100000-0x0110000: “dtb”
mtd2 4MB 内核 0x0110000-0x0510000 : “kernel”
mtd3 剩余 根文件系统 0x0510000-0x2000000 : “rootfs”

1、U-Boot编译配置

1.1 准备uboot源码

下载包含spi驱动的体验版本uboot,该驱动目前尚未合并到主线

git clone -b v3s-spi-experimental https://github.com/Lichee-Pi/u-boot.git

如果下载速度较慢的话,可以下载我上传的资源文件:https://download.csdn.net/download/qq_40860568/11655959

1.2 配置

执行

make ARCH=arm menuconfig

进入uboot 菜单配置,然后进入到Device Drivers > SPI Flash Support

注意看一下自己flash的厂家名称,这里我选上Macronix SPI flash support,用来支持我测试用的flash:MX25L12805和MX25L25635。
如果使用的是16M以上的Flash,需要勾选SPI flash Bank/Extended address register support,否则只能读取到16M。

执行gedit include/configs/sun8i.h在文件include/configs/sun8i.h中添加默认bootcmd和bootargs的环境变量设置,注意添加的位置在“#include <configs/sunxi-common.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 earlyprintk panic=5 rootwait " \"mtdparts=spi32766.0:1M(uboot)ro,64k(dtb)ro,4M(kernel)ro,-(rootfs) root=31:03 rw rootfstype=jffs2"

环境命令解析:

  • sf probe 0; //初始化Flash设备
  • sf read 0x41800000 0x100000 0x10000; //从flash0x100000(1MB)位置读取dtb放到内存0x41800000偏移处。
  • sf read 0x41000000 0x110000 0x400000; //从flash0x110000(1MB+64KB)位置读取dtb放到内存0x41000000偏移处。
  • bootz 0x41000000 (内核地址)- 0x41800000(dtb地址) 启动内核

启动参数解析:

  • console=ttyS0,115200 earlyprintk panic=5 rootwait //在串口0上输出信息
  • mtdparts=spi32766.0:1M(uboot)ro,64k(dtb)ro,4M(kernel)ro,-(rootfs) //spi32766.0时设备名,后面是分区大小、名字、读写属性。
  • root=31:03 rw rootfstype=jffs2 //通过root=31:03来告诉内核rootfs的位置mtdblock3;根文件系统格式为jffs2。

编译:time make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- 2>&1 | tee build.log

2 Linux内核编译配置

2.1 下载内核源码:

https://download.csdn.net/download/qq_40860568/11656018
如果去github上下载的话,记得一定下载4.13。

2.2 内核菜单配置

执行make ARCH=arm menuconfig打开内核菜单配置,进入到Device Drivers > Memory Technology Device (MTD) support,确保选择上mtd的<*> Command line partition table parsing支持,该项目用来解析uboot传递过来的flash分区信息,还有<*> SPI-NOR device support

然后添加对jffs2文件系统的支持,路径在
File systems > Miscellaneous filesystems-> Journalling Flash File System v2 (JFFS2) support

修改dts配置添加spi flash节点:

gedit arch/arm/boot/dts/sun8i-v3s-licheepi-zero.dts

添加spi节点配置:

&spi0 {status ="okay";mx25l12805d:mx25l12805d@0 {compatible = "jedec,spi-nor";reg = <0x0>;spi-max-frequency = <50000000>;#address-cells = <1>;#size-cells = <1>;};
};

如果是32M,就改为mx25l25635e。

退出菜单配置并编译内核和dts

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j32
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs

3 根文件系统

选择rootfs文件系统,用最小根文件系统rootfs-brmin.tar.gz,大小只有3M左右,下载地址在:https://download.csdn.net/download/qq_40860568/11656090

Flash支持jffs2文件系统格式,所以需要使用此该rootfs制作jffs2文件系统镜像、
下载jffs2文件系统制作工具

sudo apt-get install mtd-utils

制作文件系统镜像:

mkdir rootfs
sudo tar xzvf rootfs-brmin.tar.gz -C rootfs
sudo mkfs.jffs2 -s 0x100 -e 0x10000 -p 0xAF0000 -d rootfs/ -o jffs2.img #如果使用32M的flash  mx25l25635,则需要做一些修改:
sudo mkfs.jffs2 -s 0x100 -e 0x10000 -p 0x1AF0000 -d rootfs/ -o jffs2.img
  • -p 指的是rootfs占据的总空间:16M-1M-64K-4M=0xAF0000 或者 32M-1M-64K-4M=0x1AF0000
  • -s 页大小0x100 256字节
  • -e 块大小0x10000 64k
  • jffs2.img是生成的文件系统镜像。

4 制作系统镜像

最后将uboot,dtb,kernel,rootfs打包成一个系统镜像,命令如下:

dd if=/dev/zero of=flashimg.bin bs=16M count=1
dd if=u-boot/u-boot-sunxi-with-spl.bin of=flashimg.bin bs=1K conv=notrunc
dd if=linux-zero-4.13.y/arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dtb of=flashimg.bin bs=1K seek=1024  conv=notrunc
dd if=linux-zero-4.13.y/arch/arm/boot/zImage of=flashimg.bin bs=1K seek=1088  conv=notrunc
dd if=jffs2.img of=flashimg.bin  bs=1K seek=5184  conv=notrunc

第一步:生成一个空文件,大小是16MB
第二步:将uboot添加到文件开头
第三步:将dtb放到1M偏移处
第四步:将kernel放到1M+64K偏移处
第五步:将rootfs放到1M+64K+4M偏移处
偏移大小是seek,单位是KB。

执行完毕后生成镜像文件flashimg.bin

一键生成镜像文件参考:https://blog.csdn.net/qq_40860568/article/details/100153681

5 烧写镜像

下载sunxiflash烧写工具,安装与下载参考:https://blog.csdn.net/qq_40860568/article/details/100519832

进入fel模式

Zero有一个usb下载模式称为fel模式,进入fel模式有下面几种方式:

  1. TF卡和spi flash 同时没有可启动镜像

    也就是说你不插SD卡,且焊接的是新的或者没有有效镜像的spi flash,那就上电自动进入fel下载模式

  2. SD卡中有进入fel模式的特殊固件 fel-sdboot.sunxi

    如果你的spiflash已经有了启动镜像,那么需要在TF卡中烧入一个sunxi提供的启动工具(dd if=fel-sdboot.sunxi of=/dev/mmcblk0 bs=1024 seek=8),那么插入该TF卡启动会进入fel模式;

  3. 上电时SPI_MISO拉低到GND

    通常使用此方法最为方便。该引脚为boot引脚,上电时出于低电平即会进入fel下载模式。

sunxi-fel的操作

进入fel模式后使用usb数据线连接pc和zero,即可进行操作。

sudo sunxi-fel version       #查看连接的cpu信息
AWUSBFEX soc=00001681(V3s) 00000001 ver=0001 44 08 scratchpad=00007e00 00000000 00000000
sudo sunxi-fel spiflash-info    #显示flash信息
Manufacturer: Unknown (C2h), model: 20h, size: 33554432 bytes.

执行如下命令烧入我们前边制作好的镜像文件

sudo sunxi-fel -p spiflash-write 0 flashimg.bin
# -p 显示进度条
#   spiflash-info           Retrieves basic information
#   spiflash-hex[dump] addr length  Dumps SPI flash region in hex
#   spiflash-read addr length file  Write SPI flash contents into file
#   spiflash-write addr file    Store file contents into SPI flash

SPI flash下载速度约50KB/s,等待5分钟(16MB)或者10分钟(32MB),烧写完成,如果一切顺利,重新上电zero那么就会进入linux系统了,账号是root没有密码。

荔枝派Zero(V3s)SPI Flash 启动相关推荐

  1. AM335x SPI Flash启动说明

    本文主要描述如何在EVB335X-II上实现从SPI Flash启动系统,包括启动方式的修改,u-boot编译,SPI Flash的烧写.EVB335X-II使用的SPI Flash型号为W25Q32 ...

  2. 全志V3S荔枝派zero10分钟制作TF启动卡,主线Linux,主线u-boot(超过10分钟博主直播吃奥利奥!!!)

    一,初学者(比如我)刚拿到zero时,一定是一脸懵逼的,无从下手的,通过几篇代佬们写的文章+官网资料,了解了几种启动方式 1.Camdriod 官方SDK 2.主线Uboot + Bsp 内核 3.主 ...

  3. NUC972 SPI Flash启动+内核+Cramfs文件系统

    NUC972 作为一个低成本linux方案,有片内SDRAM,又有茫茫多的外设,简直工控神U. 为了追究更低成本,考虑放弃使用NAND,把uboot, 内核,文件系统都放在SPI FLASH.这样画板 ...

  4. 荔枝派Zero | 全志V3s 开发教程(一) 烧录系统镜像的方法以及如何烧录主线Linux系统镜像

    荔枝派Zero | 全志V3s 开发教程(一) 荔枝派Zero的开发教程: http://zero.lichee.pro/系统开发/type.html 刚开始尝试编译Camdroid官方SDK,最终浪 ...

  5. [转]i.MXRT1050 从外部QSPI Nor Flash启动

    晕,不看不知道一看吓一跳,都快两年没有更新我的博客了,哎,惭愧的同时也是感叹时间过的真快啊,之前写博客还高喊着自己快奔三的人了,结果现在都已经迈过去了...不继续说了,都暴露年龄了,咳咳.不过虽然时光 ...

  6. ADSP-SC589开发板更换SPI FLASH并从flash引导内核与文件系统

    前情提要:目前本人正在用ADSP-SC589开发板做开发,希望实现内核与文件系统都从SPI FLASH启动,但板子上原来的SPI FLASH太小了,于是更换了镁光的MT25QU01GBBB FLASH ...

  7. 编译全志V3S(荔枝派zero)整个系统流程及后续故障答疑使用技巧等

    全志V3S(荔枝派zero)学习 购买到的硬件 声明一下用的主线Uboot + 主线linux,如果你是小白不幸买到了本产品建议弃坑既浪费时间,又浪费生命,香橙派树莓派是你更好的选择 Uboot 编译 ...

  8. 荔枝派nano初体验-windows写入镜像到TF卡启动

    荔枝派nano是一个很小的系统,搭载全志F1C100S芯片,具有ddr内存,支持tf,flash启动. 本人在了解荔枝派的特点之后,在淘宝上找到了一个57块钱的荔枝派nano,一般价格都是在85左右, ...

  9. 1.荔枝派 zero(全志V3S)-编译及SD烧录

    上面是我创建的群聊,欢迎新朋友的加入. 之前买了个荔枝派,全志的A3S芯片.折腾了两天,写一下编译和SD烧录的过程. 目录 1.直接烧录镜像文件 2.uboot编译 3.kernel编译 4.root ...

最新文章

  1. ubuntu9.10安装文泉驿微米黑字体
  2. 有史以来的第一个脚本 找出三个数的最大数字
  3. 12、HTML <form>标签(表单)
  4. Tornado学习笔记(四)
  5. Java中BigInteger的各种方法详解
  6. vuex 对象嵌套属性的修改 mutations set 很方便的写法
  7. [转载] 解析Java的JNI编程中的对象引用与内存泄漏问题
  8. 水星无线网dns服务器是什么,水星路由dns设置教程,-1
  9. 前端拼音首字母搜索姓名
  10. 周杰伦 青花瓷 蒲公英的约定 我不配 彩虹 歌词和下载
  11. c 语言实现链表反转(超详细,有手就行)
  12. android手机分辨率整理
  13. wz框架登录功能详解——demo1
  14. 家里两台电脑怎么共享文件_电脑系统教程:两台电脑如何共享文件
  15. 梯度下降优化算法Momentum
  16. 在计算机网络中集线器的作用是,集线器有什么用 集线器的作用介绍
  17. ESP通过乐为物联控制灯,微信发送数值,ESP上传传感器数据
  18. 跟着团子学SAP FICO:SAP税码传输最佳业务实践
  19. 未分配利润与利润表不一致_资产负债表中的未分配利润和利润表中的净利润肯定是一致的吗?...
  20. 二层交换机VLAN基础配置

热门文章

  1. 阿里巴巴Java代码规范
  2. upload_libs闯关攻略之01_20
  3. 教育大数据总体解决方案(2)
  4. javascript与html5实战
  5. 重写RuoYi-Cloud所有功能 整合 SpringCloudAlibaba Dubbo Mybatis-Plus MQ OSS ES Xxl-Job Docker 全方位升级 定期同步
  6. 重读《三国》,我总结了管理失败的10个细节
  7. [Luogu P3288] [BZOJ 3597] [SCOI2014]方伯伯运椰子
  8. Lucene源码解析--TokenStream和AttributeSource
  9. 【ProgrammingMicrosoftAzureServiceFabric】第四章: Actor模式
  10. 能源与环境系统工程考研计算机,晁文超老师讲专业—— 能源与环境系统工程...