【全志V3s】SPI NAND Flash 驱动开发
文章目录
- 一、硬件介绍
- V3s的启动顺序
- 二、驱动支持
- U-Boot驱动
- 主线 Linux 驱动已经支持
- 三、烧录工具 xfel
- 四、构建U-Boot(官方的Uboot)
- 先编译一下
- 开始spi nand flash 代码层面的适配
- 修改menuconfig配置
- ARM architecture配置Support for SPI Nand Flash on Allwinner SoCs in SPL
- Boot options 取消 Enable boot arguments
- 打开Device Drivers下面的SPI Support
- 在Device Drivers下面 MTD Support 中勾选 Enable MTD layer Driver Model for MTD driver
- 在Command line interface的Device access commands勾选 mtd,这样后续生成的uboot中才会有MTD相关的命令,类似于SPI NOR Flash添加的sf命令
- Environment 取消勾选 Environment is in SPI flash,这个选项是在打开SPI Support之后才会被看到
- 修改uboot输出文件使其可以在spinandflash上运行
- 五、构建Linux Kernel
- 修改设备树
- 修改 chosen
- 增加SPI0节点
- menuconfig里面配置增加驱动支持
- Memory Technology Device (MTD) support 勾选 SPI NAND device Support 和 Enable UBI - Unsorted block image![在这里插入图片描述](https://img-blog.csdnimg.cn/a156167e31c44ac7b92b7edb5ba912c3.png)
- File Systems的Miscellaneous filesystems中勾选UBIFS file system support, 这一步需要刚才的Enable UBI打开之后才能看到
- 编译Linux Kernel
- 烧录 Linux Kernel
- 六、构建文件系统
- 七、进入文件系统后的操作
- 查看挂载的文件系统
- 查看分区
- 查看存储
- 查看Linux内核启动参数
- 查看目录信息
- 八、总结
- 九、打包
- 十、工程源码
- 原始的文件:
- 配置好的文件:
芯片:W25N01GVZEIG
一、硬件介绍
datasheet上的描述:
- SLC工艺
- 2KB*65536页
- 10万次擦写次数
焊好以后用CH341A读了一下
V3s的启动顺序
上面这张图描述了soc启动的四个顺序,分别是usb启动、sd卡启动、spi norflash启动、spi nandflash启动四种方式。前面的测试中一直走的是sd卡启动,但是从成本和稳定性上说,spi nandflash其实是最合适的。
sd 卡需要卡座拔插,在震动环境下不稳定,容易接触不良,容量大,其实也贵,相当于EMMC。
spi nor flash容量一般在16MB左右,也有32MB和64MB的,但是价格较贵。
2023年9月16日15:36:26,在某宝上数据对比一下
容量 | 接口 | 型号 | 价格 |
---|---|---|---|
16MB | spi nor flash | W25Q128JVSIM | 3.8¥ |
32MB | spi nor flash | W25Q256JVEIQ | 7.1¥ |
128MB | spi nand flash | W25N01GVZEIG | 4.0¥ |
256MB | spi nand flash | W25N02KVZEIR | 5.9¥ |
所以,16M/32M 的spi nor flash 真的没有什么优势。做非常简单的应用还可以,其他就算了吧。故以后自己玩也要玩nand flash吧,nor flash没有什么应用场景。
有兴趣可以看看,我之前的记录:
全志V3s学习记录:Nor Flash使用(一)
全志V3s学习记录:Nor Flash使用(二)
二、驱动支持
U-Boot驱动
使用:http://sources.buildroot.net/uboot/u-boot-2022.04.tar.bz2
主线 Linux 驱动已经支持
4.19 及其以后的版本支持 spi nand
https://github.com/torvalds/linux/blob/v4.19/drivers/mtd/nand/spi/winbond.c
目前主线Linux已经支持winbond:W25N01GVZEIG,如下:
在线Linux Kernel代码:https://elixir.bootlin.com/linux/v5.2.20/source/drivers/mtd/nand/spi/winbond.c
static const struct spinand_info winbond_spinand_table[] = {SPINAND_INFO("W25M02GV", 0xAB,NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 2),NAND_ECCREQ(1, 512),SPINAND_INFO_OP_VARIANTS(&read_cache_variants,&write_cache_variants,&update_cache_variants),0,SPINAND_ECCINFO(&w25m02gv_ooblayout, NULL),SPINAND_SELECT_TARGET(w25m02gv_select_target)),SPINAND_INFO("W25N01GV", 0xAA,NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1),NAND_ECCREQ(1, 512),SPINAND_INFO_OP_VARIANTS(&read_cache_variants,&write_cache_variants,&update_cache_variants),0,SPINAND_ECCINFO(&w25m02gv_ooblayout, NULL)),
};
三、烧录工具 xfel
之前烧录spi nor flash的时候,使用的是sunxi-fel工具,如果需要烧录spi nand flash image,就需要xfel
https://github.com/xboot/xfel
或者 git https://github.com/xboot/xfel.git
下载直接选main,解压、直接make就可以了。
- 解压
make
sudo make install
需要安装
sudo apt-get install libusb-1.0-0-dev libusb-dev libudev-dev
usage:xfel version - Show chip versionxfel hexdump <address> <length> - Dumps memory region in hexxfel dump <address> <length> - Binary memory dump to stdoutxfel read32 <address> - Read 32-bits value from device memoryxfel write32 <address> <value> - Write 32-bits value to device memoryxfel read <address> <length> <file> - Read memory to filexfel write <address> <file> - Write file to memoryxfel exec <address> - Call function addressxfel reset - Reset device using watchdogxfel sid - Show sid informationxfel jtag - Enable jtag debugxfel ddr [type] - Initial ddr controller with optional typexfel sign <public-key> <private-key> <file> - Generate ecdsa256 signature file for sha256 of sidxfel spinor - Detect spi nor flashxfel spinor erase <address> <length> - Erase spi nor flashxfel spinor read <address> <length> <file> - Read spi nor flash to filexfel spinor write <address> <file> - Write file to spi nor flashxfel spinand - Detect spi nand flashxfel spinand erase <address> <length> - Erase spi nand flashxfel spinand read <address> <length> <file> - Read spi nand flash to filexfel spinand write <address> <file> - Write file to spi nand flashxfel spinand splwrite <split-size> <address> <file> - Write file to spi nand flash with split supportxfel extra [...] - The extra commands
liefyuan@ubuntu:~$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 010: ID 048d:5702 Integrated Technology Express, Inc.
Bus 002 Device 009: ID 1f3a:efe8 Onda (unverified) V972 tablet in flashing mode
Bus 002 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 009: ID 1f3a:efe8 Onda (unverified) V972 tablet in flashing mode
liefyuan@ubuntu:~$ xfel version
AWUSBFEX ID=0x00168100(V3S/S3) dflag=0x44 dlength=0x08 scratchpad=0x00007e00
这就是ubuntu识别出来进入USB升级模式的V3s了。
简单使用一下:
liefyuan@ubuntu:~$ xfel spinand
Found spi nand flash 'W25N01GV' with 134217728 bytes
liefyuan@ubuntu:~$ xfel version
AWUSBFEX ID=0x00168100(V3S/S3) dflag=0x44 dlength=0x08 scratchpad=0x00007e00
liefyuan@ubuntu:~$ sudo xfel spinand erase 0x0 0x100000
[sudo] password for liefyuan: 12% [====== ] 4.334 MB/s, ETA 00:00 25% [============ ] 4.334 MB/s, ETA 00:00 38% [================== ] 4.377 MB/s, ETA 00:00 50% [======================== ] 4.363 MB/s, ETA 00:00 62% [============================== ] 4.386 MB/s, ETA 00:00 75% [==================================== ] 4.348 MB/s, ETA 00:00 88% [========================================== ] 4.392 MB/s, ETA 00:00 100% [================================================] 1024.000 KB, 4.382 MB/s
四、构建U-Boot(官方的Uboot)
地址:http://sources.buildroot.net/uboot/u-boot-2022.04.tar.bz2
驱动是支持的:
liefyuan@ubuntu:~/V3s/u-boot-2022.04$ find ./ -name "winbond.c"
./drivers/mtd/nand/spi/winbond.c
先编译一下
先编译一下看看有没有什么问题
make ARCH=arm LicheePi_Zero_defconfig
make ARCH=arm menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
最后一步报错了,交叉编译器版本太老了。
*** Your GCC is older than 6.0 and is not supported
arch/arm/config.mk:74: recipe for target 'checkgcc6' failed
make: *** [checkgcc6] Error 1
换个高版本的交叉编译器!
再装个软件:sudo apt install swig
初步编译成功了!
开始spi nand flash 代码层面的适配
拷贝spl_spinand_sunxi.c到arch/arm/mach-sunxi目录下,文件地址:
https://github.com/bamkrs/openwrt/blob/dolphinpi-spinand/package/boot/uboot-sunxi/src/arch/arm/mach-sunxi/spl_spinand_sunxi.c
spl_spinand_sunxi.c需要做一些修改:
- 添加头文件
- 添加函数调用参数
// add by liefyuan
#include <image.h>
#include <linux/delay.h>ret = spl_parse_image_header(spl_image, bootdev, header); // modified by liefyuan
然后在,arch/arm/mach-sunxi/Kconfig 文件中添加内容:
config SPL_SPINAND_SUNXIbool "Support for SPI Nand Flash on Allwinner SoCs in SPL"depends on MACH_SUN8I_V3ShelpEnable support for SPI Nand Flash. This option allows SPL to read fromsunxi SPI Nand Flash. It uses the same method as the boot ROM, so doesnot need any extra configuration.
1043gg 处添加吧
然后在 arch/arm/mach-sunxi/Makefile添加 spl_spinand_sunxi.c的编译选项
ifdef CONFIG_SPL_BUILD
obj-$(CONFIG_MACH_SUNIV) += dram_suniv.o
obj-$(CONFIG_DRAM_SUN4I) += dram_sun4i.o
obj-$(CONFIG_DRAM_SUN6I) += dram_sun6i.o
obj-$(CONFIG_DRAM_SUN8I_A23) += dram_sun8i_a23.o
obj-$(CONFIG_DRAM_SUN8I_A33) += dram_sun8i_a33.o
obj-$(CONFIG_DRAM_SUN8I_A83T) += dram_sun8i_a83t.o
obj-$(CONFIG_DRAM_SUN9I) += dram_sun9i.o
obj-$(CONFIG_SPL_SPI_SUNXI) += spl_spi_sunxi.o
obj-$(CONFIG_SUNXI_DRAM_DW) += dram_sunxi_dw.o
obj-$(CONFIG_SUNXI_DRAM_DW) += dram_timings/
obj-$(CONFIG_DRAM_SUN50I_H6) += dram_sun50i_h6.o
obj-$(CONFIG_DRAM_SUN50I_H6) += dram_timings/
obj-$(CONFIG_DRAM_SUN50I_H616) += dram_sun50i_h616.o
obj-$(CONFIG_DRAM_SUN50I_H616) += dram_timings/
obj-$(CONFIG_SPL_SPINAND_SUNXI) += spl_spinand_sunxi.o
endif
继续,在 arch/arm/dts/sun8i-v3s-licheepi-zero.dts文件中添加spi0的内容:
&spi0 {pinctrl-0 = <&spi0_pins>;pinctrl-names = "default";status = "okay";flash@0 {#address-cells = <1>;#size-cells = <1>;compatible = "spi-nand";reg = <0>;spi-max-frequency = <50000000>;};
};
最后,在 include/configs/sun8i.h添加内容,要在#include <configs/sunxi-common.h>
之前添加。
#ifdef CONFIG_BOOTCOMMAND
#undef CONFIG_BOOTCOMMAND
#endif#ifdef COFNIG_BOOTARGS
#undef CONFIG_BOOTARGS
#endif#define CONFIG_BOOTCOMMAND "mtd read spi-nand0 0x41800000 0x100000 0x20000; " \"mtd read spi-nand0 0x41000000 0x120000 0x500000; " \"bootz 0x41000000 - 0x41800000"#define CONFIG_BOOTARGS "console=ttyS0,115200 earlyprintk panic=5 rootwait " \"mtdparts=spi0.0:1M(uboot)ro,128k(dtb)ro,5M(kernel)ro,-(rootfs) ubi.mtd=3 root=ubi0:rootfs rw rootfstype=ubifs"
修改menuconfig配置
命令:make ARCH=arm menuconfig
ARM architecture配置Support for SPI Nand Flash on Allwinner SoCs in SPL
Boot options 取消 Enable boot arguments
打开Device Drivers下面的SPI Support
在Device Drivers下面 MTD Support 中勾选 Enable MTD layer Driver Model for MTD driver
在Command line interface的Device access commands勾选 mtd,这样后续生成的uboot中才会有MTD相关的命令,类似于SPI NOR Flash添加的sf命令
Environment 取消勾选 Environment is in SPI flash,这个选项是在打开SPI Support之后才会被看到
OK,更改完毕。
再次编译一下就OK了。
make ARCH=arm LicheePi_Zero_defconfig
make ARCH=arm menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
修改uboot输出文件使其可以在spinandflash上运行
此时,u-boot-sunxi-with-spl.bin还不能被直接下载到nand flash。因为V3s默认从spi nand flash加载page内容,是1个page加载1KB。我使用的是winbond的W25N01GVZEIG,它的page是2KB。
脚本地址:https://github.com/bamkrs/openwrt/blob/dolphinpi-spinand/target/linux/sunxi/image/gen_sunxi_spinand_onlyboot_img.sh
运行命令:
./gen_sunxi_spinand_onlyboot_img.sh split.bin u-boot-sunxi-with-spl.bin 2048 128
其中split.bin代表生成的目标文件,u-boot-sunxi-with-spl.bin表示刚刚编译好的uboot文件,2048代表page大小,单位是byte,而128则代表block大小,单位是k byte。
下载修改后的uboot文件到spinandflash文件
liefyuan@ubuntu:~/V3s/u-boot-3s-spi-experimental$ sudo xfel spinand erase 0x0 0x100000
[sudo] password for liefyuan:
100% [================================================] 1024.000 KB, 4.381 MB/s
liefyuan@ubuntu:~/V3s/u-boot-3s-spi-experimental$ sudo xfel spinand write 0x0 split.bin
100% [================================================] 505.250 KB, 91.550 KB/s
写入文件是nandflash的由0开始的地址空间。
上电:
U-Boot SPL 2022.04 (Sep 17 2023 - 22:00:15 +0800)
DRAM: 64 MiB
Trying to boot from sunxi SPI-NAND
sunxi SPI-NAND: Found Winbond W25N01GVxxIG (efaa21)
sunxi SPI-NAND: Loading u-boot from 0x20000
sunxi SPI-NAND: u-boot hcrc OK!U-Boot 2022.04 (Sep 17 2023 - 22:00:15 +0800) Allwinner TechnologyCPU: Allwinner V3s (SUN8I 1681)
Model: Lichee Pi Zero
DRAM: 64 MiB
Core: 23 devices, 11 uclasses, devicetree: separate
WDT: Not starting watchdog@1c20ca0
MMC: mmc@1c0f000: 0
Loading Environment from FAT... Card did not respond to voltage select! : -110
In: serial@1c28000
Out: serial@1c28000
Err: serial@1c28000
Net: No ethernet found.
Hit any key to stop autoboot: 0
Reading 131072 byte(s) (64 page(s)) at offset 0x00100000
Reading 5242880 byte(s) (2560 page(s)) at offset 0x00120000
zimage: Bad magic!
=>
五、构建Linux Kernel
源码:https://github.com/Lichee-Pi/linux/tree/zero-5.2.y
修改设备树
修改 chosen
chosen {bootargs = "console=ttyS0,115200 earlyprintk panic=5 rootwait mtdparts=spi0.0:1M(uboot)ro,128k(dtb)ro,5M(kernel)ro,-(rootfs) ubi.mtd=3 root=ubi0:rootfs rw rootfstype=ubifs";};
增加SPI0节点
文件地址:linux-zero-5.2.y/arch/arm/boot/dts/sun8i-v3s-licheepi-zero.dts
&spi0 {status ="okay";spi_nand: spi_nand@0 {#address-cells = <1>;#size-cells = <1>;compatible = "spi-nand";reg = <0>;spi-max-frequency = <50000000>;partition@0 {label = "uboot";reg = <0x0 0x100000>;read-only;};partition@100000 {label = "dtb";reg = <0x100000 0x20000>;read-only;};partition@120000 {label = "kernel";reg = <0x120000 0x500000>;read-only;};partition@620000 {label = "rootfs";reg = <0x620000 0x79E0000>;};};
};
menuconfig里面配置增加驱动支持
命令:make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
Memory Technology Device (MTD) support 勾选 SPI NAND device Support 和 Enable UBI - Unsorted block image
File Systems的Miscellaneous filesystems中勾选UBIFS file system support, 这一步需要刚才的Enable UBI打开之后才能看到
编译Linux Kernel
-
清除:
make clean
-
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- licheepi_zero_defconfig
-
time make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16
-
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs
-
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
烧录 Linux Kernel
sudo xfel spinand erase 0x100000 0x20000
sudo xfel spinand write 0x100000 sun8i-v3s-licheepi-zero-with-800x480-lcd.dtb
sudo xfel spinand erase 0x120000 0x500000
sudo xfel spinand write 0x120000 zImage
上电:
U-Boot SPL 2022.04 (Sep 17 2023 - 22:00:15 +0800)
DRAM: 64 MiB
Trying to boot from sunxi SPI-NAND
sunxi SPI-NAND: Found Winbond W25N01GVxxIG (efaa21)
sunxi SPI-NAND: Loading u-boot from 0x20000
sunxi SPI-NAND: u-boot hcrc OK!U-Boot 2022.04 (Sep 17 2023 - 22:00:15 +0800) Allwinner TechnologyCPU: Allwinner V3s (SUN8I 1681)
Model: Lichee Pi Zero
DRAM: 64 MiB
Core: 23 devices, 11 uclasses, devicetree: separate
WDT: Not starting watchdog@1c20ca0
MMC: mmc@1c0f000: 0
Loading Environment from FAT... Card did not respond to voltage select! : -110
In: serial@1c28000
Out: serial@1c28000
Err: serial@1c28000
Net: No ethernet found.
Hit any key to stop autoboot: 0
Reading 131072 byte(s) (64 page(s)) at offset 0x00100000
Reading 5242880 byte(s) (2560 page(s)) at offset 0x00120000
zimage: Bad magic!
=>
U-Boot SPL 2022.04 (Sep 17 2023 - 22:00:15 +0800)
DRAM: 64 MiB
Trying to boot from sunxi SPI-NAND
sunxi SPI-NAND: Found Winbond W25N01GVxxIG (efaa21)
sunxi SPI-NAND: Loading u-boot from 0x20000
sunxi SPI-NAND: u-boot hcrc OK!U-Boot 2022.04 (Sep 17 2023 - 22:00:15 +0800) Allwinner TechnologyCPU: Allwinner V3s (SUN8I 1681)
Model: Lichee Pi Zero
DRAM: 64 MiB
Core: 23 devices, 11 uclasses, devicetree: separate
WDT: Not starting watchdog@1c20ca0
MMC: mmc@1c0f000: 0
Loading Environment from FAT... Card did not respond to voltage select! : -110
In: serial@1c28000
Out: serial@1c28000
Err: serial@1c28000
Net: No ethernet found.
Hit any key to stop autoboot: 0
Reading 131072 byte(s) (64 page(s)) at offset 0x00100000
Reading 5242880 byte(s) (2560 page(s)) at offset 0x00120000
Kernel image @ 0x41000000 [ 0x000000 - 0x4462a8 ]
## Flattened Device Tree blob at 41800000Booting using the fdt blob at 0x41800000Loading Device Tree to 42df9000, end 42dff021 ... OKStarting kernel ...[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Linux version 5.2.0-licheepi-zero (liefyuan@ubuntu) (gcc version 6.3.1 20170404 (Linaro GCC 6.3-2017.05)) #2 SMP Sun Sep 17 22:22:36 HKT 2023
[ 0.000000] CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=10c5387d
[ 0.000000] CPU: div instructions available: patching division code
[ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[ 0.000000] OF: fdt: Machine model: Lichee Pi Zero
[ 0.000000] Memory policy: Data cache writealloc
[ 0.000000] psci: probing for conduit method from DT.
[ 0.000000] psci: Using PSCI v0.1 Function IDs from DT
[ 0.000000] percpu: Embedded 16 pages/cpu s34508 r8192 d22836 u65536
[ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 16256
[ 0.000000] Kernel command line: console=ttyS0,115200 earlyprintk panic=5 rootwait mtdparts=spi0.0:1M(uboot)ro,128k(dtb)ro,5M(kernel)ro,-(rootfs) ubi.mtd=3 root=ubi0:rootfs rw rootfstype=ubifs
[ 0.000000] Dentry cache hash table entries: 8192 (order: 3, 32768 bytes, linear)
[ 0.000000] Inode-cache hash table entries: 4096 (order: 2, 16384 bytes, linear)
[ 0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[ 0.000000] Memory: 54004K/65536K available (7168K kernel code, 309K rwdata, 1748K rodata, 1024K init, 257K bss, 11532K reserved, 0K cma-reserved, 0K highmem)
[ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[ 0.000000] rcu: Hierarchical RCU implementation.
[ 0.000000] rcu: RCU event tracing is enabled.
[ 0.000000] rcu: RCU restricting CPUs from NR_CPUS=8 to nr_cpu_ids=1.
[ 0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies.
[ 0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1
[ 0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
[ 0.000000] GIC: GICv2 detected, but range too small and irqchip.gicv2_force_probe not set
[ 0.000000] random: get_random_bytes called from start_kernel+0x300/0x48c with crng_init=0
[ 0.000000] arch_timer: cp15 timer(s) running at 24.00MHz (phys).
[ 0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x588fe9dc0, max_idle_ns: 440795202592 ns
[ 0.000008] sched_clock: 56 bits at 24MHz, resolution 41ns, wraps every 4398046511097ns
[ 0.000020] Switching to timer-based delay loop, resolution 41ns
[ 0.000207] clocksource: timer: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 79635851949 ns
[ 0.000453] Console: colour dummy device 80x30
[ 0.000509] Calibrating delay loop (skipped), value calculated using timer frequency.. 48.00 BogoMIPS (lpj=240000)
[ 0.000524] pid_max: default: 32768 minimum: 301
[ 0.000684] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[ 0.000699] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[ 0.001494] CPU: Testing write buffer coherency: ok
[ 0.001994] /cpus/cpu@0 missing clock-frequency property
[ 0.002020] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
[ 0.002813] Setting up static identity map for 0x40100000 - 0x40100060
[ 0.003023] rcu: Hierarchical SRCU implementation.
[ 0.003573] smp: Bringing up secondary CPUs ...
[ 0.003593] smp: Brought up 1 node, 1 CPU
[ 0.003602] SMP: Total of 1 processors activated (48.00 BogoMIPS).
[ 0.003609] CPU: All CPU(s) started in HYP mode.
[ 0.003614] CPU: Virtualization extensions available.
[ 0.004673] devtmpfs: initialized
[ 0.008316] VFP support v0.3: implementor 41 architecture 2 part 30 variant 7 rev 5
[ 0.008615] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[ 0.008646] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
[ 0.008884] pinctrl core: initialized pinctrl subsystem
[ 0.010035] NET: Registered protocol family 16
[ 0.010553] DMA: preallocated 256 KiB pool for atomic coherent allocations
[ 0.011815] hw-breakpoint: found 5 (+1 reserved) breakpoint and 4 watchpoint registers.
[ 0.011835] hw-breakpoint: maximum watchpoint size is 8 bytes.
[ 0.039592] SCSI subsystem initialized
[ 0.039760] usbcore: registered new interface driver usbfs
[ 0.039851] usbcore: registered new interface driver hub
[ 0.039964] usbcore: registered new device driver usb
[ 0.040374] mc: Linux media interface: v0.10
[ 0.040435] videodev: Linux video capture interface: v2.00
[ 0.040647] Advanced Linux Sound Architecture Driver Initialized.
[ 0.042457] clocksource: Switched to clocksource arch_sys_counter
[ 0.054799] NET: Registered protocol family 2
[ 0.055598] tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 6144 bytes, linear)
[ 0.055636] TCP established hash table entries: 1024 (order: 0, 4096 bytes, linear)
[ 0.055662] TCP bind hash table entries: 1024 (order: 1, 8192 bytes, linear)
[ 0.055687] TCP: Hash tables configured (established 1024 bind 1024)
[ 0.055836] UDP hash table entries: 256 (order: 1, 8192 bytes, linear)
[ 0.055887] UDP-Lite hash table entries: 256 (order: 1, 8192 bytes, linear)
[ 0.056173] NET: Registered protocol family 1
[ 0.058034] Initialise system trusted keyrings
[ 0.058413] workingset: timestamp_bits=30 max_order=14 bucket_order=0
[ 0.095330] Key type asymmetric registered
[ 0.095353] Asymmetric key parser 'x509' registered
[ 0.095451] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 250)
[ 0.095463] io scheduler mq-deadline registered
[ 0.095469] io scheduler kyber registered
[ 0.096519] sun4i-usb-phy 1c19400.phy: Couldn't request ID GPIO
[ 0.100286] sun8i-v3s-pinctrl 1c20800.pinctrl: initialized sunXi PIO driver
[ 0.100703] sun8i-v3s-pinctrl 1c20800.pinctrl: 1c20800.pinctrl supply vcc-pb not found, using dummy regulator
[ 0.101422] pwm-backlight backlight: backlight supply power not found, using dummy regulator
[ 0.207095] Serial: 8250/16550 driver, 8 ports, IRQ sharing disabled
[ 0.210551] printk: console [ttyS0] disabled
[ 0.230855] 1c28000.serial: ttyS0 at MMIO 0x1c28000 (irq = 34, base_baud = 1500000) is a U6_16550A
[ 0.776897] printk: console [ttyS0] enabled
[ 0.782886] sun8i-v3s-pinctrl 1c20800.pinctrl: 1c20800.pinctrl supply vcc-pe not found, using dummy regulator
[ 0.816159] panel-simple panel: panel supply power not found, using dummy regulator
[ 0.825484] sun8i-v3s-pinctrl 1c20800.pinctrl: 1c20800.pinctrl supply vcc-pc not found, using dummy regulator
[ 0.837018] spi-nand spi0.0: Winbond SPI NAND was found.
[ 0.842346] spi-nand spi0.0: 128 MiB, block size: 128 KiB, page size: 2048, OOB size: 64
[ 0.851243] 4 fixed-partitions partitions found on MTD device spi0.0
[ 0.857692] Creating 4 MTD partitions on "spi0.0":
[ 0.862530] 0x000000000000-0x000000100000 : "uboot"
[ 0.870375] 0x000000100000-0x000000120000 : "dtb"
[ 0.876231] 0x000000120000-0x000000620000 : "kernel"
[ 0.882331] random: fast init done
[ 0.895871] 0x000000620000-0x000008000000 : "rootfs"
[ 1.066735] random: crng init done
[ 1.153103] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[ 1.159637] ehci-platform: EHCI generic platform driver
[ 1.165246] ehci-platform 1c1a000.usb: EHCI Host Controller
[ 1.170857] ehci-platform 1c1a000.usb: new USB bus registered, assigned bus number 1
[ 1.178853] ehci-platform 1c1a000.usb: irq 26, io mem 0x01c1a000
[ 1.212460] ehci-platform 1c1a000.usb: USB 2.0 started, EHCI 1.00
[ 1.219633] hub 1-0:1.0: USB hub found
[ 1.223604] hub 1-0:1.0: 1 port detected
[ 1.228232] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[ 1.234555] ohci-platform: OHCI generic platform driver
[ 1.240097] ohci-platform 1c1a400.usb: Generic Platform OHCI controller
[ 1.246819] ohci-platform 1c1a400.usb: new USB bus registered, assigned bus number 2
[ 1.254782] ohci-platform 1c1a400.usb: irq 27, io mem 0x01c1a400
[ 1.327507] hub 2-0:1.0: USB hub found
[ 1.331344] hub 2-0:1.0: 1 port detected
[ 1.338664] usbcore: registered new interface driver usb-storage
[ 1.346267] sun6i-rtc 1c20400.rtc: registered as rtc0
[ 1.351329] sun6i-rtc 1c20400.rtc: RTC enabled
[ 1.356070] i2c /dev entries driver
[ 1.360924] input: ns2009_ts as /devices/platform/soc/1c2ac00.i2c/i2c-0/0-0048/input/input0
[ 1.370612] sunxi-wdt 1c20ca0.watchdog: Watchdog enabled (timeout=16 sec, nowayout=0)
[ 1.379328] sun8i-v3s-pinctrl 1c20800.pinctrl: 1c20800.pinctrl supply vcc-pf not found, using dummy regulator
[ 1.415092] sunxi-mmc 1c0f000.mmc: initialized, max. request size: 16384 KB
[ 1.422648] sun8i-v3s-pinctrl 1c20800.pinctrl: 1c20800.pinctrl supply vcc-pg not found, using dummy regulator
[ 1.434001] usbcore: registered new interface driver usbhid
[ 1.439580] usbhid: USB HID core driver
[ 1.446187] Initializing XFRM netlink socket
[ 1.450498] NET: Registered protocol family 17
[ 1.455640] Registering SWP/SWPB emulation handler
[ 1.461540] Loading compiled-in X.509 certificates
[ 1.475480] sun8i-v3s-pinctrl 1c20800.pinctrl: 1c20800.pinctrl supply vcc-pe not found, using dummy regulator
[ 1.488036] sun4i-drm display-engine: bound 1100000.mixer (ops 0xc0848700)
[ 1.495606] sun4i-drm display-engine: bound 1c0c000.lcd-controller (ops 0xc08459fc)
[ 1.503340] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[ 1.509947] [drm] No driver support for vblank timestamp query.
[ 1.516932] [drm] Initialized sun4i-drm 1.0.0 20150629 for display-engine on minor 0
[ 1.577191] Console: switching to colour frame buffer device 100x30
[ 1.605681] sun4i-drm display-engine: fb0: sun4i-drmdrmfb frame buffer device
[ 1.613678] usb_phy_generic usb_phy_generic.0.auto: usb_phy_generic.0.auto supply vcc not found, using dummy regulator
[ 1.625209] musb-hdrc musb-hdrc.1.auto: MUSB HDRC host driver
[ 1.630975] musb-hdrc musb-hdrc.1.auto: new USB bus registered, assigned bus number 3
[ 1.640115] hub 3-0:1.0: USB hub found
[ 1.644084] hub 3-0:1.0: 1 port detected
[ 1.649367] ubi0: attaching mtd3
[ 2.218438] ubi0: scanning is finished
[ 2.222200] ubi0: empty MTD device detected
[ 2.255116] ubi0: attached mtd3 (name "rootfs", size 121 MiB)
[ 2.260921] ubi0: PEB size: 131072 bytes (128 KiB), LEB size: 126976 bytes
[ 2.267867] ubi0: min./max. I/O unit sizes: 2048/2048, sub-page size 2048
[ 2.274665] ubi0: VID header offset: 2048 (aligned 2048), data offset: 4096
[ 2.281615] ubi0: good PEBs: 975, bad PEBs: 0, corrupted PEBs: 0
[ 2.287644] ubi0: user volume: 0, internal volumes: 1, max. volumes count: 128
[ 2.294873] ubi0: max/mean erase counter: 0/0, WL threshold: 4096, image sequence number: 2177542106
[ 2.304004] ubi0: available PEBs: 951, total reserved PEBs: 24, PEBs reserved for bad PEB handling: 20
[ 2.313392] sun6i-rtc 1c20400.rtc: setting system clock to 1970-01-01T00:34:30 UTC (2070)
[ 2.321843] vcc3v0: disabling
[ 2.324878] vcc3v3: disabling
[ 2.327871] vcc5v0: disabling
[ 2.330836] ALSA device list:
[ 2.333827] No soundcards found.
[ 2.337799] ubi0: background thread "ubi_bgt0d" started, PID 93
[ 2.349302] VFS: Cannot open root device "ubi0:rootfs" or unknown-block(0,0): error -19
[ 2.357403] Please append a correct "root=" boot option; here are the available partitions:
[ 2.365795] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
[ 2.374055] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.2.0-licheepi-zero #2
[ 2.381091] Hardware name: Allwinner sun8i Family
[ 2.385824] [<c010ed14>] (unwind_backtrace) from [<c010b72c>] (show_stack+0x10/0x14)
[ 2.393566] [<c010b72c>] (show_stack) from [<c071a650>] (dump_stack+0x84/0x98)
[ 2.400788] [<c071a650>] (dump_stack) from [<c011dddc>] (panic+0x110/0x2fc)
[ 2.407750] [<c011dddc>] (panic) from [<c0a01358>] (mount_block_root+0x214/0x2f0)
[ 2.415229] [<c0a01358>] (mount_block_root) from [<c0a01558>] (prepare_namespace+0x9c/0x194)
[ 2.423660] [<c0a01558>] (prepare_namespace) from [<c0732aa4>] (kernel_init+0x8/0x10c)
[ 2.431570] [<c0732aa4>] (kernel_init) from [<c01010e8>] (ret_from_fork+0x14/0x2c)
[ 2.439128] Exception stack(0xc3833fb0 to 0xc3833ff8)
[ 2.444175] 3fa0: 00000000 00000000 00000000 00000000
[ 2.452343] 3fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[ 2.460508] 3fe0: 00000000 00000000 00000000 00000000 00000013 00000000
[ 2.467127] Rebooting in 5 seconds..
很好,上电成功了!
六、构建文件系统
现成的文件系统:
链接:https://pan.baidu.com/s/1-HMjT5BCYq0aImIJcQyJlw
提取码:lief
–来自百度网盘超级会员V5的分享
系统名是:root
无密码
spi nand flash 一般使用的文件系统是ubifs文件系统。涉及到两个工具
第一步:先用mkfs.ubifs生成rootfs_ubifs.img文件,其中-d target
就是根文件目录的位置:
sudo mkfs.ubifs -x lzo -F -m 2048 -e 126976 -c 732 -o rootfs_ubifs.img -d target
第二步:用ubinize生成最终的ubi.img
sudo ubinize -o ubi.img -m 2048 -p 131072 -O 2048 -s 2048 ./ubinize.cfg -v
ubinize.cfg文件
[rootfs-volume]
mode=ubi
image=rootfs_ubifs.img
vol_id=0
vol_size=92946432
vol_type=dynamic
vol_name=rootfs
vol_flags=autoresize
vol_alignment=1
有了ubi.img之后,就可以使用xfel工具烧录了。
sudo xfel spinand erase 0x620000 0x79DFFFF
sudo xfel spinand write 0x620000 ubi.img
烧录成功后,上电信息:
U-Boot SPL 2022.04 (Sep 17 2023 - 22:00:15 +0800)
DRAM: 64 MiB
Trying to boot from sunxi SPI-NAND
sunxi SPI-NAND: Found Winbond W25N01GVxxIG (efaa21)
sunxi SPI-NAND: Loading u-boot from 0x20000
sunxi SPI-NAND: u-boot hcrc OK!U-Boot 2022.04 (Sep 17 2023 - 22:00:15 +0800) Allwinner TechnologyCPU: Allwinner V3s (SUN8I 1681)
Model: Lichee Pi Zero
DRAM: 64 MiB
Core: 23 devices, 11 uclasses, devicetree: separate
WDT: Not starting watchdog@1c20ca0
MMC: mmc@1c0f000: 0
Loading Environment from FAT... Card did not respond to voltage select! : -110
In: serial@1c28000
Out: serial@1c28000
Err: serial@1c28000
Net: No ethernet found.
Hit any key to stop autoboot: 0
Reading 131072 byte(s) (64 page(s)) at offset 0x00100000
Reading 5242880 byte(s) (2560 page(s)) at offset 0x00120000
Kernel image @ 0x41000000 [ 0x000000 - 0x4462a8 ]
## Flattened Device Tree blob at 41800000Booting using the fdt blob at 0x41800000Loading Device Tree to 42df9000, end 42dff021 ... OKStarting kernel ...[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Linux version 5.2.0-licheepi-zero (liefyuan@ubuntu) (gcc version 6.3.1 20170404 (Linaro GCC 6.3-2017.05)) #2 SMP Sun Sep 17 22:22:36 HKT 2023
[ 0.000000] CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=10c5387d
[ 0.000000] CPU: div instructions available: patching division code
[ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[ 0.000000] OF: fdt: Machine model: Lichee Pi Zero
[ 0.000000] Memory policy: Data cache writealloc
[ 0.000000] psci: probing for conduit method from DT.
[ 0.000000] psci: Using PSCI v0.1 Function IDs from DT
[ 0.000000] percpu: Embedded 16 pages/cpu s34508 r8192 d22836 u65536
[ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 16256
[ 0.000000] Kernel command line: console=ttyS0,115200 earlyprintk panic=5 rootwait mtdparts=spi0.0:1M(uboot)ro,128k(dtb)ro,5M(kernel)ro,-(rootfs) ubi.mtd=3 root=ubi0:rootfs rw rootfstype=ubifs
[ 0.000000] Dentry cache hash table entries: 8192 (order: 3, 32768 bytes, linear)
[ 0.000000] Inode-cache hash table entries: 4096 (order: 2, 16384 bytes, linear)
[ 0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[ 0.000000] Memory: 54004K/65536K available (7168K kernel code, 309K rwdata, 1748K rodata, 1024K init, 257K bss, 11532K reserved, 0K cma-reserved, 0K highmem)
[ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[ 0.000000] rcu: Hierarchical RCU implementation.
[ 0.000000] rcu: RCU event tracing is enabled.
[ 0.000000] rcu: RCU restricting CPUs from NR_CPUS=8 to nr_cpu_ids=1.
[ 0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies.
[ 0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1
[ 0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
[ 0.000000] GIC: GICv2 detected, but range too small and irqchip.gicv2_force_probe not set
[ 0.000000] random: get_random_bytes called from start_kernel+0x300/0x48c with crng_init=0
[ 0.000000] arch_timer: cp15 timer(s) running at 24.00MHz (phys).
[ 0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x588fe9dc0, max_idle_ns: 440795202592 ns
[ 0.000008] sched_clock: 56 bits at 24MHz, resolution 41ns, wraps every 4398046511097ns
[ 0.000021] Switching to timer-based delay loop, resolution 41ns
[ 0.000203] clocksource: timer: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 79635851949 ns
[ 0.000445] Console: colour dummy device 80x30
[ 0.000501] Calibrating delay loop (skipped), value calculated using timer frequency.. 48.00 BogoMIPS (lpj=240000)
[ 0.000518] pid_max: default: 32768 minimum: 301
[ 0.000678] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[ 0.000695] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[ 0.001498] CPU: Testing write buffer coherency: ok
[ 0.002002] /cpus/cpu@0 missing clock-frequency property
[ 0.002028] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
[ 0.002792] Setting up static identity map for 0x40100000 - 0x40100060
[ 0.003005] rcu: Hierarchical SRCU implementation.
[ 0.003552] smp: Bringing up secondary CPUs ...
[ 0.003574] smp: Brought up 1 node, 1 CPU
[ 0.003584] SMP: Total of 1 processors activated (48.00 BogoMIPS).
[ 0.003590] CPU: All CPU(s) started in HYP mode.
[ 0.003595] CPU: Virtualization extensions available.
[ 0.004666] devtmpfs: initialized
[ 0.008313] VFP support v0.3: implementor 41 architecture 2 part 30 variant 7 rev 5
[ 0.008616] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[ 0.008647] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
[ 0.008888] pinctrl core: initialized pinctrl subsystem
[ 0.010027] NET: Registered protocol family 16
[ 0.010546] DMA: preallocated 256 KiB pool for atomic coherent allocations
[ 0.011810] hw-breakpoint: found 5 (+1 reserved) breakpoint and 4 watchpoint registers.
[ 0.011827] hw-breakpoint: maximum watchpoint size is 8 bytes.
[ 0.039494] SCSI subsystem initialized
[ 0.039663] usbcore: registered new interface driver usbfs
[ 0.039754] usbcore: registered new interface driver hub
[ 0.039863] usbcore: registered new device driver usb
[ 0.040242] mc: Linux media interface: v0.10
[ 0.040330] videodev: Linux video capture interface: v2.00
[ 0.040556] Advanced Linux Sound Architecture Driver Initialized.
[ 0.042370] clocksource: Switched to clocksource arch_sys_counter
[ 0.054726] NET: Registered protocol family 2
[ 0.055518] tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 6144 bytes, linear)
[ 0.055555] TCP established hash table entries: 1024 (order: 0, 4096 bytes, linear)
[ 0.055584] TCP bind hash table entries: 1024 (order: 1, 8192 bytes, linear)
[ 0.055607] TCP: Hash tables configured (established 1024 bind 1024)
[ 0.055753] UDP hash table entries: 256 (order: 1, 8192 bytes, linear)
[ 0.055807] UDP-Lite hash table entries: 256 (order: 1, 8192 bytes, linear)
[ 0.056106] NET: Registered protocol family 1
[ 0.057942] Initialise system trusted keyrings
[ 0.058328] workingset: timestamp_bits=30 max_order=14 bucket_order=0
[ 0.095103] Key type asymmetric registered
[ 0.095125] Asymmetric key parser 'x509' registered
[ 0.095222] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 250)
[ 0.095235] io scheduler mq-deadline registered
[ 0.095242] io scheduler kyber registered
[ 0.096292] sun4i-usb-phy 1c19400.phy: Couldn't request ID GPIO
[ 0.100066] sun8i-v3s-pinctrl 1c20800.pinctrl: initialized sunXi PIO driver
[ 0.100482] sun8i-v3s-pinctrl 1c20800.pinctrl: 1c20800.pinctrl supply vcc-pb not found, using dummy regulator
[ 0.101204] pwm-backlight backlight: backlight supply power not found, using dummy regulator
[ 0.206901] Serial: 8250/16550 driver, 8 ports, IRQ sharing disabled
[ 0.210326] printk: console [ttyS0] disabled
[ 0.230632] 1c28000.serial: ttyS0 at MMIO 0x1c28000 (irq = 34, base_baud = 1500000) is a U6_16550A
[ 0.776672] printk: console [ttyS0] enabled
[ 0.782652] sun8i-v3s-pinctrl 1c20800.pinctrl: 1c20800.pinctrl supply vcc-pe not found, using dummy regulator
[ 0.815920] panel-simple panel: panel supply power not found, using dummy regulator
[ 0.825241] sun8i-v3s-pinctrl 1c20800.pinctrl: 1c20800.pinctrl supply vcc-pc not found, using dummy regulator
[ 0.836785] spi-nand spi0.0: Winbond SPI NAND was found.
[ 0.842113] spi-nand spi0.0: 128 MiB, block size: 128 KiB, page size: 2048, OOB size: 64
[ 0.851018] 4 fixed-partitions partitions found on MTD device spi0.0
[ 0.857466] Creating 4 MTD partitions on "spi0.0":
[ 0.862266] 0x000000000000-0x000000100000 : "uboot"
[ 0.870113] 0x000000100000-0x000000120000 : "dtb"
[ 0.875974] 0x000000120000-0x000000620000 : "kernel"
[ 0.882146] random: fast init done
[ 0.895633] 0x000000620000-0x000008000000 : "rootfs"
[ 1.066444] random: crng init done
[ 1.152066] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[ 1.158675] ehci-platform: EHCI generic platform driver
[ 1.164241] ehci-platform 1c1a000.usb: EHCI Host Controller
[ 1.169848] ehci-platform 1c1a000.usb: new USB bus registered, assigned bus number 1
[ 1.177848] ehci-platform 1c1a000.usb: irq 26, io mem 0x01c1a000
[ 1.212377] ehci-platform 1c1a000.usb: USB 2.0 started, EHCI 1.00
[ 1.219546] hub 1-0:1.0: USB hub found
[ 1.223520] hub 1-0:1.0: 1 port detected
[ 1.228140] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[ 1.234467] ohci-platform: OHCI generic platform driver
[ 1.240007] ohci-platform 1c1a400.usb: Generic Platform OHCI controller
[ 1.246726] ohci-platform 1c1a400.usb: new USB bus registered, assigned bus number 2
[ 1.254694] ohci-platform 1c1a400.usb: irq 27, io mem 0x01c1a400
[ 1.327423] hub 2-0:1.0: USB hub found
[ 1.331262] hub 2-0:1.0: 1 port detected
[ 1.338553] usbcore: registered new interface driver usb-storage
[ 1.346152] sun6i-rtc 1c20400.rtc: registered as rtc0
[ 1.351212] sun6i-rtc 1c20400.rtc: RTC enabled
[ 1.355953] i2c /dev entries driver
[ 1.360813] input: ns2009_ts as /devices/platform/soc/1c2ac00.i2c/i2c-0/0-0048/input/input0
[ 1.370500] sunxi-wdt 1c20ca0.watchdog: Watchdog enabled (timeout=16 sec, nowayout=0)
[ 1.379224] sun8i-v3s-pinctrl 1c20800.pinctrl: 1c20800.pinctrl supply vcc-pf not found, using dummy regulator
[ 1.415004] sunxi-mmc 1c0f000.mmc: initialized, max. request size: 16384 KB
[ 1.422572] sun8i-v3s-pinctrl 1c20800.pinctrl: 1c20800.pinctrl supply vcc-pg not found, using dummy regulator
[ 1.433929] usbcore: registered new interface driver usbhid
[ 1.439505] usbhid: USB HID core driver
[ 1.446113] Initializing XFRM netlink socket
[ 1.450423] NET: Registered protocol family 17
[ 1.455540] Registering SWP/SWPB emulation handler
[ 1.461453] Loading compiled-in X.509 certificates
[ 1.475387] sun8i-v3s-pinctrl 1c20800.pinctrl: 1c20800.pinctrl supply vcc-pe not found, using dummy regulator
[ 1.487938] sun4i-drm display-engine: bound 1100000.mixer (ops 0xc0848700)
[ 1.495525] sun4i-drm display-engine: bound 1c0c000.lcd-controller (ops 0xc08459fc)
[ 1.503262] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[ 1.509869] [drm] No driver support for vblank timestamp query.
[ 1.516859] [drm] Initialized sun4i-drm 1.0.0 20150629 for display-engine on minor 0
[ 1.577117] Console: switching to colour frame buffer device 100x30
[ 1.605592] sun4i-drm display-engine: fb0: sun4i-drmdrmfb frame buffer device
[ 1.613580] usb_phy_generic usb_phy_generic.0.auto: usb_phy_generic.0.auto supply vcc not found, using dummy regulator
[ 1.625097] musb-hdrc musb-hdrc.1.auto: MUSB HDRC host driver
[ 1.630863] musb-hdrc musb-hdrc.1.auto: new USB bus registered, assigned bus number 3
[ 1.639991] hub 3-0:1.0: USB hub found
[ 1.643951] hub 3-0:1.0: 1 port detected
[ 1.649229] ubi0: attaching mtd3
[ 2.236686] ubi0: scanning is finished
[ 2.282072] ubi0: volume 0 ("rootfs") re-sized from 732 to 951 LEBs
[ 2.289265] ubi0: attached mtd3 (name "rootfs", size 121 MiB)
[ 2.295090] ubi0: PEB size: 131072 bytes (128 KiB), LEB size: 126976 bytes
[ 2.301957] ubi0: min./max. I/O unit sizes: 2048/2048, sub-page size 2048
[ 2.308784] ubi0: VID header offset: 2048 (aligned 2048), data offset: 4096
[ 2.315757] ubi0: good PEBs: 975, bad PEBs: 0, corrupted PEBs: 0
[ 2.321756] ubi0: user volume: 1, internal volumes: 1, max. volumes count: 128
[ 2.328991] ubi0: max/mean erase counter: 1/0, WL threshold: 4096, image sequence number: 405437201
[ 2.338037] ubi0: available PEBs: 0, total reserved PEBs: 975, PEBs reserved for bad PEB handling: 20
[ 2.347328] sun6i-rtc 1c20400.rtc: setting system clock to 1970-01-01T00:23:16 UTC (1396)
[ 2.355804] vcc3v0: disabling
[ 2.358782] vcc3v3: disabling
[ 2.361746] vcc5v0: disabling
[ 2.364799] ALSA device list:
[ 2.367768] No soundcards found.
[ 2.371779] ubi0: background thread "ubi_bgt0d" started, PID 93
[ 2.388321] UBIFS (ubi0:0): Mounting in unauthenticated mode
[ 2.397175] UBIFS (ubi0:0): background thread "ubifs_bgt0_0" started, PID 94
[ 2.495382] UBIFS (ubi0:0): start fixing up free space
[ 2.933104] UBIFS (ubi0:0): free space fixup complete
[ 2.988109] UBIFS (ubi0:0): UBIFS: mounted UBI device 0, volume 0, name "rootfs"
[ 2.995678] UBIFS (ubi0:0): LEB size: 126976 bytes (124 KiB), min./max. I/O unit sizes: 2048 bytes/2048 bytes
[ 3.005611] UBIFS (ubi0:0): FS size: 91549696 bytes (87 MiB, 721 LEBs), journal size 9023488 bytes (8 MiB, 72 LEBs)
[ 3.016060] UBIFS (ubi0:0): reserved for root: 0 bytes (0 KiB)
[ 3.021893] UBIFS (ubi0:0): media format: w4/r0 (latest is w5/r0), UUID 0D89ACE3-5309-484C-888D-2628D2752C10, small LPT model
[ 3.045981] VFS: Mounted root (ubifs filesystem) on device 0:13.
[ 3.055787] devtmpfs: mounted
[ 3.061247] Freeing unused kernel memory: 1024K
[ 3.067684] Run /sbin/init as init process
Starting logging: OK
Starting mdev...
/etc/init.d/S10mdev: line 21: can't create /proc/sys/kernel/hotplug: nonexistent directory
modprobe: can't change directory to '/lib/modules': No such file or directory
Initializing random number generator... done.
Starting network: OKWelcome to Lichee Pi
Lichee login:
Welcome to Lichee Pi
Lichee login:
Welcome to Lichee Pi
Lichee login: root
# ls
# cd /
# ls
bin lib media proc sbin usr
dev lib32 mnt root sys var
etc linuxrc opt run tmp
#
用户名:root,无密码
跑起来了!!
七、进入文件系统后的操作
查看挂载的文件系统
# mount
ubi0:rootfs on / type ubifs (rw,relatime,assert=read-only,ubi=0,vol=0)
devtmpfs on /dev type devtmpfs (rw,relatime,size=27000k,nr_inodes=6750,mode=755)
proc on /proc type proc (rw,relatime)
devpts on /dev/pts type devpts (rw,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /dev/shm type tmpfs (rw,relatime,mode=777)
tmpfs on /tmp type tmpfs (rw,relatime)
tmpfs on /run type tmpfs (rw,nosuid,nodev,relatime,mode=755)
sysfs on /sys type sysfs (rw,relatime)
查看分区
# cat /proc/mtd*
dev: size erasesize name
mtd0: 00100000 00020000 "uboot"
mtd1: 00020000 00020000 "dtb"
mtd2: 00500000 00020000 "kernel"
mtd3: 079e0000 00020000 "rootfs"
# ls /dev/mtd*
/dev/mtd0 /dev/mtd1 /dev/mtd2 /dev/mtd3
/dev/mtd0ro /dev/mtd1ro /dev/mtd2ro /dev/mtd3ro
查看存储
# df -h
Filesystem Size Used Available Use% Mounted on
ubi0:rootfs 80.1M 2.1M 78.0M 3% /
devtmpfs 26.4M 0 26.4M 0% /dev
tmpfs 26.9M 0 26.9M 0% /dev/shm
tmpfs 26.9M 20.0K 26.8M 0% /tmp
tmpfs 26.9M 16.0K 26.9M 0% /run
查看Linux内核启动参数
# cat /proc/cmdline
console=ttyS0,115200 earlyprintk panic=5 rootwait mtdparts=spi0.0:1M(uboot)ro,128k(dtb)ro,5M(kernel)ro,-(rootfs) ubi.mtd=3 root=ubi0:rootfs rw rootfstype=ubifs
查看目录信息
# ls -lh
total 0
drwxr-xr-x 2 1000 1000 4.5K Mar 24 2017 bin
drwxr-xr-x 8 root root 12.3K Jan 1 00:35 dev
drwxr-xr-x 5 1000 1000 1.5K Jan 1 00:35 etc
drwxr-xr-x 2 1000 1000 2.3K Mar 24 2017 lib
lrwxrwxrwx 1 1000 1000 3 Sep 17 2023 lib32 -> lib
lrwxrwxrwx 1 1000 1000 11 Sep 17 2023 linuxrc -> bin/busybox
drwxr-xr-x 2 1000 1000 160 Feb 28 2017 media
drwxr-xr-x 2 1000 1000 160 Feb 28 2017 mnt
drwxr-xr-x 3 1000 1000 224 Feb 26 2022 opt
dr-xr-xr-x 44 root root 0 Jan 1 00:00 proc
drwx------ 2 1000 1000 232 Jan 1 00:35 root
drwxr-xr-x 3 root root 140 Jan 1 00:35 run
drwxr-xr-x 2 1000 1000 3.5K Mar 24 2017 sbin
dr-xr-xr-x 12 root root 0 Jan 1 00:35 sys
drwxrwxrwt 2 root root 60 Jan 1 00:35 tmp
drwxr-xr-x 6 1000 1000 480 Mar 24 2017 usr
drwxr-xr-x 4 1000 1000 672 Mar 24 2017 var
八、总结
编译Uboot
make clean
make ARCH=arm LicheePi_Zero_Spinand_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
./gen_sunxi_spinand_onlyboot_img.sh split.bin u-boot-sunxi-with-spl.bin 2048 128
编译Linux Kernel
make clean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- licheepi_zero_spinand_defconfig
time make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs
九、打包
拷贝
cp ../u-boot-2022.04-spinand/split.bin ./
cp ../linux-zero-5.2.y-spinand/arch/arm/boot/zImage ./
cp ../linux-zero-5.2.y-spinand/arch/arm/boot/dts/sun8i-v3s-licheepi-zero.dtb ./
tar -xvf rootfs.tarsudo ./step1_gen_rootfs_ubifs_img.sh
sudo ./step2_gen_ubi_img.sh
sudo ./step3_gen_flash_img.sh
0x0 ~ 0xFFFFF : 0x100000 1 MiB
0x100000 ~ 0x11FFFF : 0x20000 128 KiB
0x120000 ~ 0x61FFFF : 0x500000 5 MiB
0x620000 ~ 0x7FFFFFF : 0x79DFFFF 124800 KiB=121.875 MiB
打包脚本 step3_gen_flash_img.sh
#!/bin/bash
rm -f flashimg.bin
dd if=/dev/zero of=flashimg.bin bs=1M count=20
dd if=u-boot-sunxi-with-spl.bin_split_exp of=flashimg.bin bs=1K count=1024 conv=notrunc
dd if=sun8i-v3s-licheepi-zero.dtb of=flashimg.bin bs=1K count=128 seek=1024 conv=notrunc
dd if=zImage of=flashimg.bin bs=1K count=5120 seek=1152 conv=notrunc
dd if=ubi.img of=flashimg.bin bs=1K seek=6272 conv=notrunc
烧录:
sudo xfel spinand erase 0x0 0x8000000
sudo xfel spinand write 0 flashimg.bin
十、工程源码
原始的文件:
链接:https://pan.baidu.com/s/1uvlJGbLpLvEWhCeeKw6o9w
提取码:lief
–来自百度网盘超级会员V5的分享
配置好的文件:
链接:https://pan.baidu.com/s/1x2_cxEVv75nfhLBARodRwQ
提取码:lief
–来自百度网盘超级会员V5的分享
参考:
- 全志V3S嵌入式驱动开发(spi-nand image制作)
- https://whycan.com/t_3123.html
- https://whycan.com/viewtopic.php?pid=91704#p91704
- https://whycan.com/p_80604.html
相关文章:
【全志V3s】SPI NAND Flash 驱动开发
文章目录 一、硬件介绍V3s的启动顺序 二、驱动支持U-Boot驱动主线 Linux 驱动已经支持 三、烧录工具 xfel四、构建U-Boot(官方的Uboot)先编译一下开始spi nand flash 代码层面的适配修改menuconfig配置ARM architecture配置Support for SPI Nand Flash o…...
【二叉树】二叉树展开为链表-力扣 114 题
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…...
NLP文本生成全解析:从传统方法到预训练完整介绍
目录 1. 引言1.1 文本生成的定义和作用1.2 自然语言处理技术在文本生成领域的使用 2 传统方法 - 基于统计的方法2.1.1 N-gram模型2.1.2 平滑技术 3. 传统方法 - 基于模板的生成3.1 定义与特点3.2 动态模板 4. 神经网络方法 - 长短时记忆网络(LSTM)LSTM的核心概念PyTorch中的LST…...
OpenBA:开源模型家族再添一员!从头训练的15B中英非对称Encoder-Decoder结构双语模型...
苏州大学从头训练的双语非对称Encoder-Decoder模型OpenBA已正式开源! 主要亮点包括: 亮点一:此模型为中文开源社区贡献了一个有代表性的编码器解码器大语言模型,其训练过程(包括数据收集与清洗、模型构建与训练&#x…...
安防视频监控平台EasyNVR无法控制云台,该如何解决?
TSINGSEE青犀视频安防监控平台EasyNVR可支持设备通过RTSP/Onvif协议接入,并能对接入的视频流进行处理与多端分发,包括RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、WebRTC等多种格式。在智慧安防等视频监控场景中,EasyNVR可提供视频实时监控直播、云端…...
基座向量施密特正交化
最近再次细细的阅读了向量施密特正交化,重新系统梳理一下 一、正交基地与向量的正交分解 二、基化成标准正交基,是什么意思 将一个向量空间中的基向量通过某种方式转化为一组标准正交基,是指将原有的基向量进行调整,使得它们满足…...
OpenCV图像金字塔
什么是图像金字塔? 向上采样 :cv.pyrUp(img) 向下采样 : cv.pyrDown(img) 代码实现 import numpy as np import cv2 as cv import matplotlib.pyplot as plt#图像的读取 img cv.imread("lena.png")#进行图像采样 up_img cv.pyrUp(img) #上…...
Arduino驱动MMA7361/MMA7360三轴加速度传感器(惯性测量传感器篇)
目录 1、传感器特性 2、控制器和传感器连线图 3、驱动程序 MMA7361三轴加速度传感器是替代停产的MMA7260三轴加速度传感器,三轴加速度传感器是一种可以对物体运动过程中的加速度进行测量的电子设备,典型互动应用中的加速度传感器可以用来对物体的姿态或者运动方向进行检测…...
ceph分布式存储
目录 一、概述 1、特点 2、组件 3、架构图 二、分布式部署 1、环境拓扑 2、实验准备 3、ceph安装 安装 初始化monitor 同步管理信息 安装mgr(管理守护进程) 安装rgw 创建mds服务 OSD安装 4、dashboard安装 开启dashboard模块 生成签名 …...
DA1--用pandas查看网站用户数据
目录 1.题目描述 2.输入描述 3.输出描述 4.题目分析 5.通过代码 1.题目描述 现有一个Nowcoder.csv文件,它记录了牛客网的部分用户数据,包含如下字段(字段与字段之间以逗号间隔): Nowcoder_ID:用户ID …...
JWT令牌
一、JWT(Json Web Token)能干什么 1、安全认证(权限认证) 比如登录系统的时候,服务器会检查前端请求数据中携带的token信息,符合标准则允许访问,不符合则拒绝你的访问请求。 2、信息传递 比…...
uni-app使用CSS实现无限旋转动画
本来想用uni.createAnimation创建一个旋转动画,发现转完一圈后就不动了,没法循环旋转, 后来又用setInterval每隔一个周期就把旋转角度加180度,发现运行一段时间后动画逐渐崩坏,应该是动画的周期和定时器的周期时间没有…...
java面向对象(八)
文章目录 一、abstract关键字的使用1.概念2. abstract修饰类:抽象类3.abstract修饰方法,抽象方法4.abstract使用上的注意点:5.抽象类的匿名子类 二、计算一段代码执行所花费的时间三、接口的使用1.接口的使用2.定义接口中的成员3.代码demo4.Java类可以实…...
【proverif】proverif的下载安装和初使用
文章目录 一、proverif下载1. 下载proverif安装包2. 解压proverif安装包3. 点开其中的README,安装graphciz和gtk4. 查看安装是否成功5. 测试 一、proverif下载 1. 下载proverif安装包 官网:proverif 首先下载全过程无需开外网,而且安装包下…...
浙江大学《乡村振兴战略下传统村落文化旅游设计》许少辉八一著作——2023学生开学季辉少许
浙江大学《乡村振兴战略下传统村落文化旅游设计》许少辉八一著作——2023学生开学季辉少许...
Centos7.9 一键脚本部署 LibreNMS 网络监控系统
前言: LibreNMS 是个以 PHP/MySQL 为基底的自动探索网络监控系统 LibreNMS 官网 版本23.8.2-52-g7bbe0a2 - Thu Sep 14 2023 22:33:23 GMT0700数据库纲要2023_09_01_084057_application_new_defaults (259)Web 服务器nginx/1.20.1PHP8.1.23Python3.6.8DatabaseMa…...
【大数据之Kafka】十六、Kafka集成外部系统之集成Flume
Flume 是一个在大数据开发中非常常用的组件。可以用于 Kafka 的生产者,也可以用于 Kafka 的消费者。 Flume安装和部署:https://blog.csdn.net/qq_18625571/article/details/131678589?spm1001.2014.3001.5501 1 Flume生产者 (1)…...
java学习--day3 (运算符、if循环、switch-case结构)
文章目录 今天的内容1.运算符1.1关系运算符1.2逻辑运算符1.3逻辑运算符的短路原则 2.分支结构【重点】2.1if分支2.2if-else分支2.3if-else的嵌套写法2.4if-else if 分支结构2.5swicth-case结构 扩展知识点 1.八大基本数据类型整型: byte short int long浮点: float double字…...
ActiveMQ、RabbitMQ、RocketMQ、Kafka区别
一、消息中间件的使用场景 消息中间件的使用场景总结就是六个字:解耦、异步、削峰 1.解耦 如果我方系统A要与三方B系统进行数据对接,推送系统人员信息,通常我们会使用接口开发来进行。但是如果运维期间B系统进行了调整,或者推送…...
csp初赛总结 那些年编程走过的坑 初高中信竞常考语法算法点
😘个人主页:曲终酣兴晚的小书屋💖 😕作者介绍:一个莽莽撞撞的🐻 💖专栏介绍:日常生活&往事回忆 😶🌫️每日金句:祝大家心有山水不造作&…...
DollarTree(美元树)验厂需要注意哪些方面?
【DollarTree(美元树)验厂需要注意哪些方面?】 美元树(Dollar tree),是美国的一元店。每件商品都只卖一美元,吃的、用的和玩的应有尽有。美元树在美国共拥有4900家门店,其中一半的连…...
vector使用和模拟实现
💓博主个人主页:不是笨小孩👀 ⏩专栏分类:数据结构与算法👀 C👀 刷题专栏👀 C语言👀 🚚代码仓库:笨小孩的代码库👀 ⏩社区:不是笨小孩👀 🌹欢迎大…...
token登录的实现
token登录的实现 我这种token只是简单的实现token,就是后端利用UUID 生成简单随机码,利用随机码作为在Redis中的键,然后存储的用户信息作为值,在每次合理请求的时候对token的有效时间进行刷新(利用拦截器)&…...
GO语言从入门到实战-Go语言课程介绍
为什么选择 Go 语言来完成这么大一个项目呢?我们不妨回到 Go 语言的源头看一看。 Go 语言的初步设想始于 2007 年,当时 Go 语言的三位创始人是想通过开发一种新型的语言来解决 Google 在软件开发中面临的问题: 多核硬件架构;超大…...
七天学会C语言-第六天(指针)
1.指针变量与普通变量 指针变量与普通变量是C语言中的两种不同类型的变量,它们有一些重要的区别和联系。 普通变量是一种存储数据的容器,可以直接存储和访问数据的值。: int num 10; // 定义一个整数型普通变量num,赋值为10在例…...
2023年腾讯云轻量服务器测评:16核 32G 28M 配置CPU测试
腾讯云轻量应用服务器16核32G28M配置优惠价3468元15个月(支持免费续3个月/送同配置3个月),轻量应用服务器具有100%CPU性能,系统盘为380GB SSD盘,28M带宽下载速度3584KB/秒,月流量6000GB,折合每天…...
macos (M2芯片)搭建flutter环境
安装的版本3.13.4、电脑上没有安装过android studio、安装过brew 1.在终端运行sudo softwareupdate --install-rosetta --agree-to-license,下图展示安装成功的效果 2.下载以下安装包来获取最新的 stable Flutter SDK 3.解压,⚠️注意下载安装sdk的包名…...
Xilinx FPGA未使用管脚上下拉状态配置(ISE和Vivado环境)
文章目录 ISE开发环境Vivado开发环境方式1:XDC文件约束方式2:生成选项配置 ISE开发环境 ISE开发环境,可在如下Bit流文件生成选项中配置。 右键点击Generate Programming File,选择Process Properties, 在弹出的窗口选…...
数据结构---链表(java)
目录 1. 链表 2. 创建Node 3. 增加 4. 获取元素 5. 删除 6. 遍历链表 7. 查找元素是否存在 8. 链栈的实现 9. 链队的实现 1. 链表 数据存放在"Node"结点中 优点:不用考虑扩容和缩容的问题,实现了动态存储数据 缺点:没有…...
Qt --- Day02
实现效果: 点击登录,检验用户密码是否正确,正确则弹出消息框,点击ok转到另一个页面 不正确跳出错误消息框,默认选线为Cancel,点击Yes继续登录 点击Cancel跳出问题消息框,默认选项No,…...
wordpress能做手机站吗/百合seo培训
对于一个只有3、5个人的小团队,在时间很紧的情况下,文档什么的肯定是能省则省啦。不过,有两个文档是绝对不能省的。不但不能省,还要尽全力把它们做好,并且保持更新。这两个文档就是:使用Power Designer制作…...
南通网站托管/seo导航站
包括对缺陷的跟踪管理。测试管理工具能让测试人员、开发人员或其他的IT人员 通过一个中央数据仓库,在不同地方就能交互信息。4. 测试环境4.1. 硬件环境1> 处理器:Intel Pentium 166 MX 或更高 2> 内存:32MB 以上 3> 硬盘空间&#x…...
wordpress 制作论坛/seo矩阵培训
转自 https://blog.csdn.net/wspba/article/details/54577236 仅供参考,如有翻译不到位的地方敬请指出。 论文地址:Generative Adversarial Nets 论文翻译:XlyPb(http://blog.csdn.net/wspba/article/details/54577236ÿ…...
网站开发主题/百度关键字搜索排名
Ctrl D:将当前页面添加到收藏夹或阅读列表 Ctrl E:在地址栏中执行搜索查询 Ctrl F:在页面上查找 Ctrl H:打开历史记录面板 Ctrl G:打开阅读列表面板 Ctrl I: 打开收藏夹列表面板(测试好像…...
上海网站建站/学seo的培训学校
迭代协议 可迭代协议(The iterable protocol) 和 迭代器协议(The iterator protocol)是对 ECMAScript 2015 的补充,不是新的内置或语法,仅仅是协议。可以被任何遵循某些约定的对象来实现。 可迭代协议 可迭…...
张家口做网站便宜点的/淘宝补流量平台
http://www.seowhy.com/ 转载于:https://www.cnblogs.com/releaseyou/archive/2009/05/12/1455175.html...