Lichee spi norflash启动

一. 准备sunxi-fel工具
1.1. 下载链接:https://github.com/Icenowy/sunxi-tools.git
1.1.1. git clone https://github.com/Icenowy/sunxi-tools.git
1.1.2. 查看分支并切换分支

 

 

    2.2. 编译工具
a. sudo make
        b. 编译如报上述错误,先安装sudo apt-get install libusb-1.0-0-dev
c. sudo sunxi-fel -l查看工具

 

二. uboot 配置

    2.1. 开启spi驱动

   

         如果使用的是16M以上的Flash,需要勾选SPI flash Bank/Extended address register support,否则只能读取到16M

    2.2. 修改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 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。

三. 内核配置

    3.1. 执行make ARCH=arm menuconfig打开内核菜单配置,

         进入到Device Drivers

                        <* > Memory Technology Device (MTD) support,确保选择上mtd的

                               <*> Command line partition table parsing支持,该项目用来解析uboot传递过来的flash分区信息,还有

                               <*> SPI-NOR device support

 

 

     3.2. 添加spi节点配置:

 

 

 四. 跟文件系统

    4.1. Flash支持jffs2文件系统格式,所以需要使用此该rootfs制作jffs2文件系统镜像;

    4.2. 下载jffs2文件系统制作工具

apt-get install mtd-utils

    4.3. 制作文件系统镜像

mkdir rootfs
sudo tar -xvf buildroot-2017.08/output/images/rootfs.tar -C rootfs/sudo mkfs.jffs2 -s 0x100 -e 0x10000 -p 0x1AF0000 -d rootfs/ -o jffs2.img

#如果使用16M的flash  mx25l128,则需要做一些修改:
sudo mkfs.jffs2 -s 0x100 -e 0x10000 -p 0xAF0000 -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是生成的文件系统镜像。

 五. 制作系统镜像

    5.1. 最后将uboot,dtb,zImage,rootfs拷贝到一个文件

    5.2. 编写制作镜像脚本

 

         PS:我的flash是32M,按理上图中第一行中bs=16M应该为bs=32M,但我改为bs=32M时写到flash不成功,改为bs=16M时就可以,不知道为什么,但window版本的sunxi-fel.exe可以烧录32M,window版本使用参考末尾补充部分

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

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

 

 

 

 

六. 烧录

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

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

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

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

         6.1.3. 上电时SPI_CE接到GND

             通常使用此方法最为方便。但切记,进入fel就要断开SPI_CE与GND的链接,不让不能读取norflash芯片

    6.2. sunxi-fel的操作

        6.2.1. 读取flash

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.

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

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

    6.3. 最后上电重启即可

 

补充:

    查看flash分区

    >cat  /proc/mtd // 可以显示出所有挂载和未挂载的分区,但不显示文件系统类型。

               >df -T // 只可以查看已经挂载的分区和文件系统类型。
               >fdisk -l// 可以显示出所有挂载和未挂载的分区,但不显示文件系统类型。
               >parted -l //可以查看未挂载的文件系统类型,以及哪些分区尚未格式化。
               >lsblk -f //也可以查看未挂载的文件系统类型。

               >df -h  //只会列出已挂载的文件系统信息,对于没有挂载的文件系统是查看不到的,但不显示文件系统类型

 

    windows 版sunxi-fel

    1.1. 下载工具

        下载链接:https://github.com/eperie/build-scripts/releases/download/v1.1/sunxi-fel.exe

    1.2. 下载zadig工具来安装USB fel驱动

        1.2.1. zadig工具链接:http://zadig.akeo.ie/

        1.2.2. 安装usb fel驱动

              a. Before launching it, make sure your Allwinner device is connected and in FEL mode

    1.3. 使用sunxi-fel.exe

        2.3.1. 进入win的命令窗口,使用方法和ubuntu版本一样

 

 参考链接:https://blog.csdn.net/qq_40860568/article/details/100517132

 参考链接:https://linux-sunxi.org/FEL/USBBoot

 
posted @ 2020-04-22 00:18  三七鸽  阅读(1693)  评论(0编辑  收藏  举报