荔枝派Zero(V3s)SPI Flash 启动
参考: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模式有下面几种方式:
TF卡和spi flash 同时没有可启动镜像
也就是说你不插SD卡,且焊接的是新的或者没有有效镜像的spi flash,那就上电自动进入fel下载模式
SD卡中有进入fel模式的特殊固件 fel-sdboot.sunxi
如果你的spiflash已经有了启动镜像,那么需要在TF卡中烧入一个sunxi提供的启动工具(dd if=fel-sdboot.sunxi of=/dev/mmcblk0 bs=1024 seek=8),那么插入该TF卡启动会进入fel模式;
上电时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 启动相关推荐
- AM335x SPI Flash启动说明
本文主要描述如何在EVB335X-II上实现从SPI Flash启动系统,包括启动方式的修改,u-boot编译,SPI Flash的烧写.EVB335X-II使用的SPI Flash型号为W25Q32 ...
- 全志V3S荔枝派zero10分钟制作TF启动卡,主线Linux,主线u-boot(超过10分钟博主直播吃奥利奥!!!)
一,初学者(比如我)刚拿到zero时,一定是一脸懵逼的,无从下手的,通过几篇代佬们写的文章+官网资料,了解了几种启动方式 1.Camdriod 官方SDK 2.主线Uboot + Bsp 内核 3.主 ...
- NUC972 SPI Flash启动+内核+Cramfs文件系统
NUC972 作为一个低成本linux方案,有片内SDRAM,又有茫茫多的外设,简直工控神U. 为了追究更低成本,考虑放弃使用NAND,把uboot, 内核,文件系统都放在SPI FLASH.这样画板 ...
- 荔枝派Zero | 全志V3s 开发教程(一) 烧录系统镜像的方法以及如何烧录主线Linux系统镜像
荔枝派Zero | 全志V3s 开发教程(一) 荔枝派Zero的开发教程: http://zero.lichee.pro/系统开发/type.html 刚开始尝试编译Camdroid官方SDK,最终浪 ...
- [转]i.MXRT1050 从外部QSPI Nor Flash启动
晕,不看不知道一看吓一跳,都快两年没有更新我的博客了,哎,惭愧的同时也是感叹时间过的真快啊,之前写博客还高喊着自己快奔三的人了,结果现在都已经迈过去了...不继续说了,都暴露年龄了,咳咳.不过虽然时光 ...
- ADSP-SC589开发板更换SPI FLASH并从flash引导内核与文件系统
前情提要:目前本人正在用ADSP-SC589开发板做开发,希望实现内核与文件系统都从SPI FLASH启动,但板子上原来的SPI FLASH太小了,于是更换了镁光的MT25QU01GBBB FLASH ...
- 编译全志V3S(荔枝派zero)整个系统流程及后续故障答疑使用技巧等
全志V3S(荔枝派zero)学习 购买到的硬件 声明一下用的主线Uboot + 主线linux,如果你是小白不幸买到了本产品建议弃坑既浪费时间,又浪费生命,香橙派树莓派是你更好的选择 Uboot 编译 ...
- 荔枝派nano初体验-windows写入镜像到TF卡启动
荔枝派nano是一个很小的系统,搭载全志F1C100S芯片,具有ddr内存,支持tf,flash启动. 本人在了解荔枝派的特点之后,在淘宝上找到了一个57块钱的荔枝派nano,一般价格都是在85左右, ...
- 1.荔枝派 zero(全志V3S)-编译及SD烧录
上面是我创建的群聊,欢迎新朋友的加入. 之前买了个荔枝派,全志的A3S芯片.折腾了两天,写一下编译和SD烧录的过程. 目录 1.直接烧录镜像文件 2.uboot编译 3.kernel编译 4.root ...
最新文章
- ubuntu9.10安装文泉驿微米黑字体
- 有史以来的第一个脚本 找出三个数的最大数字
- 12、HTML <form>标签(表单)
- Tornado学习笔记(四)
- Java中BigInteger的各种方法详解
- vuex 对象嵌套属性的修改 mutations set 很方便的写法
- [转载] 解析Java的JNI编程中的对象引用与内存泄漏问题
- 水星无线网dns服务器是什么,水星路由dns设置教程,-1
- 前端拼音首字母搜索姓名
- 周杰伦 青花瓷 蒲公英的约定 我不配 彩虹 歌词和下载
- c 语言实现链表反转(超详细,有手就行)
- android手机分辨率整理
- wz框架登录功能详解——demo1
- 家里两台电脑怎么共享文件_电脑系统教程:两台电脑如何共享文件
- 梯度下降优化算法Momentum
- 在计算机网络中集线器的作用是,集线器有什么用 集线器的作用介绍
- ESP通过乐为物联控制灯,微信发送数值,ESP上传传感器数据
- 跟着团子学SAP FICO:SAP税码传输最佳业务实践
- 未分配利润与利润表不一致_资产负债表中的未分配利润和利润表中的净利润肯定是一致的吗?...
- 二层交换机VLAN基础配置
热门文章
- 阿里巴巴Java代码规范
- upload_libs闯关攻略之01_20
- 教育大数据总体解决方案(2)
- javascript与html5实战
- 重写RuoYi-Cloud所有功能 整合 SpringCloudAlibaba Dubbo Mybatis-Plus MQ OSS ES Xxl-Job Docker 全方位升级 定期同步
- 重读《三国》,我总结了管理失败的10个细节
- [Luogu P3288] [BZOJ 3597] [SCOI2014]方伯伯运椰子
- Lucene源码解析--TokenStream和AttributeSource
- 【ProgrammingMicrosoftAzureServiceFabric】第四章: Actor模式
- 能源与环境系统工程考研计算机,晁文超老师讲专业—— 能源与环境系统工程...