您尚未登录。

楼主 #1 2019-02-20 12:10:49

a32425262
会员
注册时间: 2018-05-06
已发帖子: 104
积分: 401

荔枝派zero/V3s使用NOR flash挂载squashfs和overlay文件系统,教你怎么装得下QT

很多网友觉得V3s使用TF卡,作为生产不靠谱,nand flash又不支持,使用nor flash空间太小,下面告诉大家怎么使用nor flash挂载squashfs
并且发现一个好处,使用squashfs,系统系统的还更快。
首先参考泽畔的资料SPI Flash 系统编译
测试环境:V3s+MX25L25645G
这里 使用 MX25L25645G, 32M SPI flash 作为启动介质,规划分区如下:

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

一、uboot编译配置

生成
1.1 下载包含spi驱动的体验版本uboot

git clone -b v3s-spi-experimental https://github.com/Lichee-Pi/u-boot.git
cd u-boot
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LicheePi_Zero_800x480LCD_defconfig
#or make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LicheePi_Zero480x272LCD_defconfig
#or make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LicheePi_Zero_defconfig
make ARCH=arm menuconfig

1.2 配置Flash支持型号

执行 make ARCH=arm menuconfig 打开uboot菜单配置,进入到 Device Drivers ‣ SPI Flash Support
注意看一下自己flash的厂家名称,例如选上Macronix SPI flash support用来支持测试用的flash:MX25L25645G。
如果使用的是16MB以上的flash,需要勾选flash bank支持选项,否则最多只能读到16MB: CONFIG_SPI_FLASH_BAR

1.3 配置uboot默认环境变量

在文件 include/configs/sun8i.h 中添加默认bootcmd和bootargs的环境变量设置
注意添加的位置在“ #include <configs/sunxi-common.h> ”的前边。
下面的8M(rootfs)就是后面squashfs的大小,如果你制作的squashfs比这个大,请适当调整

vi 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,8M(rootfs),-(data) root=31:03 rw rootfstype=squashfs"

1.4 编译uboot

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

二、linux内核编译配置

2.1 下载linux内核,(默认是zero-4.10.y分支)建议选择4.13分支以支持网络啥的

git clone https://github.com/Lichee-Pi/linux.git
cd linux
make ARCH=arm licheepi_zero_defconfig
make ARCH=arm menuconfig

2.2 内核选项配置

执行 make ARCH=arm menuconfig 打开内核菜单配置,
进入到 Device Drivers ‣ Memory Technology Device (MTD) support ,
确保选择上mtd的 <*> Command line partition table parsing 支持,该项目用来解析uboot传递过来的flash分区信息添加对jffs2文件系统的支持,路径在 File systems ‣ Miscellaneous filesystems ‣ Journalling Flash File System v2 (JFFS2) support
如果需要支持overlay,请添加上支持overlay

2.2 设备树配置

修改dts配置添加spi flash节点

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

&spi0 {
        status ="okay";

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

};

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

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

三、使用buildroot制作文件系统

此处省略一万字,可以其他帖子或者用现成的

四、制作squashfs文件系统

mksquashfs rootfs_dir_path/ rootfs.squashfs -no-exports -no-xattrs -all-root

注意此处有坑,如果需要再次mksquashfs,一定要删除上一次生成的rootfs.squashfs
具体怎么什么原理,可以自己去查看一下,使用我的这个命令,制作的squashfs压缩率更高,当然能不能更小了,各位自己去研究一下

四、烧录并启动

dd if=/dev/zero of=flashimg.bin bs=1M count=32
dd if=squashfs_uboot.bin of=flashimg.bin bs=1K conv=notrunc
dd if=sun8i-v3s-licheepi-zero-dock.dtb of=flashimg.bin bs=1K seek=1024  conv=notrunc
dd if=squashfs_zImage of=flashimg.bin bs=1K seek=1088  conv=notrunc
dd if=rootfs.squashfs of=flashimg.bin  bs=1K seek=5184  conv=notrunc

启动系统后,挂在剩余的分区jffs2到workdir目录,这里的/workdir,请在制作squashfs文件系统之前mkdir,不然启动后squashfs为只读的,就不能新建文件夹了,这样workdir目录就变成可读写的了

mount -n -t jffs2 /dev/mtdblock4  /workdir

如果想使用overlayfs,请在制作squashfs文件系统之前新建merged 和 overlay
启动系统后

mount -n -t jffs2 /dev/mtdblock4  /overlay
mkdir /overlay/upperdir /overlay/workdir
mount -n -t overlay overlayfs:/overlay -o lowerdir=/,upperdir=/overlay/upperdir,workdir=/overlay/workdir /merged/

这样upperdir的目录就是/overlay/upperdir,lowerdir就是根目录
在你未做修改之前 可以ls查看一下,ls /merged和ls /目录是一样的内容,
这样就可以在/merged添加修改你的东西了
后面我的觉麻烦,而且研究的不透彻就没有使用overlay了

五、怎么装得下qt

是的方法就是,尽量裁剪qt,单独编译qt静态库,然后时候静态编译qt应用程序,这样我编译后的qt的应用程序差不多有7M左右
直接拷贝到,可读写的 /workdir目录,也方便升级替换
因为我使用了科大讯飞的离线TTS,他这个库文件+资源文件有9M左右,所以不得不使用这种办法

最近编辑记录 a32425262 (2019-02-20 14:23:05)

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn