1、系统
物理机 ubuntu1804
2、创建编译环境
1)下载 gcc-linaro-6.3.1-2017.02-x86_64_arm-linux-gnueabihf.tar.xz
wget https://releases.linaro.org/components/toolchain/binaries/latest/arm-linux-gnueabihf/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf.tar.xz
2)解压并移动到指定目录
tar xvf gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf.tar.xz
mv gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf /opt/
3)建立环境变量
sudo gedit /etc/profile
最后一行添加目录
export PATH=/opt/gcc-linaro-6.3.1-2017.02-x86_64_arm-linux-gnueabihf/bin:$PATH
更新
source /etc/profile
注销后重新登陆
终端中尝试输入下列命令,检查是否编译环境是否创建成功
arm-linux-gnueabihf-gcc -v
注意:曾经无法创建成功,是因为解压后的文件目录opt/gcc-linaro-6.3.1-2017.02-x86_64_arm-linux-gnueabihf没有执行权限,需要通过chmod 777更改
3、编译u-boot
下载源文件,以下方式下载较慢,可以通过浏览器打开,进入分支后,下载Code压缩包,然后解压
git clone -b v3s-spi-experimental https://github.com/Lichee-Pi/u-boot.git
注意不是此分支git clone https://github.com/Lichee-Pi/u-boot.git -b v3s-current
解压进入目录,然后执行配置
按照官方教程提示找不到配置文件
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LicheePi_Zero480x272LCD_defconfig
调整了下顺序
ARCH=arm make CROSS_COMPILE=arm-linux-gnueabihf- LicheePi_Zero480x272LCD_defconfig
配置uboot支持flash:
make ARCH=arm menuconfig
uboot或Linux内核可以通过输入"makemenuconfig"来打开图形化配置界面,menuconfig是一套图形化的配置工具,需要ncurses库支持。ncurses库提供了一系列的API函数供调用者生成基于文本的图形界面,因此需要先在Ubuntu中安装ncurses库,命令如下:
sudo apt-get install build-essential
sudo apt-get install libncurses5
sudo apt-get install libncurses5-dev
进入图形界面后
Device Drivers —>
SPI Flash Support —>
[*] Legacy SPI Flash Interface support
[ ] SPI flash Bank/Extended address register support (16M以上的flash需要开启这个选项)
[*] Macronix SPI flash support (选择spi flash对应的厂商,我用的是W25Q128这个型号)
[*] Support for SPI Flash on Allwinner SoCs in SPL
如图:
![](https://i-blog.csdnimg.cn/blog_migrate/9658d15a952995f41107f041b3ccec4d.png)
添加环境变量
修改u-boot/include/configs/sun8i.h文件,添加以下内容,注意添加的位置在“#include <configs/sunxi-common.h>”的前边。
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,-(rootfs) root=31:03 rw rootfstype=jffs2"
环境命令解析:
sf probe 0; //初始化Flash设备(CS拉低)
sf read 0x41800000 0x100000 0x10000; //从flash0x100000(1MB)位置读取dtb放到内存0x41800000偏移处。 //如果是bsp的bin,则是0x41d00000
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) root=31:03 rw rootfstype=jffs2 //spi32766.0是设备名,后面是分区大小,名字,读写属性。
root=31:03表示根文件系统是mtd3;jffs2格式
开始编译,注意dtc版本需要1.4以上版本
u-boot目录下执行:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
会在目录下生成 u-boot-sunxi-with-spl.bin
4、编译内核
下载内核源码,同样如果网速慢,可以在浏览器中下载分支压缩包
git clone -b zero-4.13.y https://github.com/Lichee-Pi/linux.git
解压后进入目录
cd linux
ARCH=arm make licheepi_zero_defconfig
ARCH=arm make menuconfig
进入配置界面,首先添加SPI-NOR的支持:
Device Drivers —>
<*> Memory Technology Device (MTD) support —>
<*> 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
添加下面的代码:
&spi0 {
status ="okay";
w25q128:w25q128@0 {
compatible = "jedec,spi-nor";
reg = <0x0>;
spi-max-frequency = <50000000>;
#address-cells = <1>;
#size-cells = <1>;
};
};
![](https://i-blog.csdnimg.cn/blog_migrate/d902ebe2e142d590f375bf49d558f9f8.png)
前几次出现文件系统无法挂载的问题,出现以下提示
jffs2: Node at 0x00000f6c with length 0x00000144 would run over the end of the erase block
[ 1.133830] jffs2: Perhaps the file system was created with the wrong erase size?
[ 1.141435] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000f70: 0x0144 instead
[ 1.150994] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000f74: 0x912a instead
[ 1.160547] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000f78: 0x0002 instead
[ 1.170127] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000f7c: 0x000d instead
[ 1.180689] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000f80: 0x81a4 instead
[ 1.190183] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000f84: 0x03e8 instead
[ 1.199668] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000f88: 0x11d8 instead
[ 1.209151] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000f8c: 0xdec2 instead
[ 1.218634] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000f90: 0xdec2 instead
[ 1.228102] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000f94: 0xdec2 instead
[ 1.237581] jffs2: Further such events for this erase block will not be printed
[ 1.245110] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00001000: 0x3fb1 instead
[ 1.254615] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00001004: 0x1a28 instead
[ 1.264102] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00001008: 0x7f01 instead
[ 1.273586] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000100c: 0x505d instead
[ 1.283098] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00001010: 0x84c8 instead
[ 1.292588] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00001014: 0xd8d1 instead
[ 1.302072] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00001018: 0x4001 instead
[ 1.311555] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000101c: 0x8485 instead
[ 1.321033] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00001020: 0x65b1 instead
[ 1.330514] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00001024: 0x5d81 instead
按照官方说明
mkfs.jffs2 使用的最小擦除尺寸是8KB,而spi flash的扇区大小是4KB,所以按照扇区擦除的话,会无法使用,所以必须使用块擦除。
编译内核前先确认下drivers/mtd/spi-nor/spi-nor.c里,自己使用的flash的相关信息
#define SECT_4K BIT(0) /* SPINOR_OP_BE_4K works uniformly */
如果发现信息里有SECT_4K,则会导致jffs2不能正常擦除(64KB),需要去掉该flag。
![](https://i-blog.csdnimg.cn/blog_migrate/2cad9ff1df521e1a2a9811af74d431e8.png)
执行编译
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16 INSTALL_MOD_PATH=out modules
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16 INSTALL_MOD_PATH=out modules_install
编译完成后,zImage在arch/arm/boot/下,驱动模块在out/下,sun8i-v3s-licheepi-zero-dock.dtb在arch/arm/boot/dts/下
5、文件系统
16M SPI Falsh中使用rootfs-brmin.tar.gz
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是生成的文件系统镜像。
6、制作系统镜像
最后将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
7、烧写镜像
下载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没有密码。
第一次成功进入登陆界面后,发现root账户登陆不进去,检查发现根文件系统是复制的文件夹,出现确实文件,后来复制压缩包,重新制作镜像后成功登陆。
Welcome to minicom 2.7.1
OPTIONS: I18n
Compiled on Aug 13 2017, 15:25:34.
Port /dev/ttyUSB0, 21:23:29
Press CTRL-A Z for help on special keys
U-Boot SPL 2017.01-rc2 (Dec 10 2020 - 22:41:13)
DRAM: 64 MiB
Trying to boot from sunxi SPI
U-Boot 2017.01-rc2 (Dec 10 2020 - 22:41:13 +0800) Allwinner Technology
CPU: Allwinner V3s (SUN8I 1681)
Model: Lichee Pi Zero
DRAM: 64 MiB
MMC: SUNXI SD/MMC: 0
SF: Detected w25q128bv with page size 256 Bytes, erase size 4 KiB, total 16 MiB
*** Warning - bad CRC, using default environment
Setting up a 480x272 lcd console (overscan 0x0)
dotclock: 10000kHz = 10000kHz: (1 * 3MHz * 20) / 6
In: serial@01c28000
Out: serial@01c28000
Err: serial@01c28000
U-Boot 2017.01-rc2 (Dec 10 2020 - 22:41:13 +0800) Allwinner Technology
CPU: Allwinner V3s (SUN8I 1681)
Model: Lichee Pi Zero
DRAM: 64 MiB
MMC: SUNXI SD/MMC: 0
SF: Detected w25q128bv with page size 256 Bytes, erase size 4 KiB, total 16 MiB
*** Warning - bad CRC, using default environment
Setting up a 480x272 lcd console (overscan 0x0)
dotclock: 10000kHz = 10000kHz: (1 * 3MHz * 20) / 6
In: serial@01c28000
Out: serial@01c28000
Err: serial@01c28000
Net: No ethernet found.
starting USB...
No controllers found
Hit any key to stop autoboot: 0
SF: Detected w25q128bv with page size 256 Bytes, erase size 4 KiB, total 16 MiB
device 0 offset 0x100000, size 0x10000
SF: 65536 bytes @ 0x100000 Read: OK
device 0 offset 0x110000, size 0x400000
SF: 4194304 bytes @ 0x110000 Read: OK
## Flattened Device Tree blob at 41800000
Booting using the fdt blob at 0x41800000
Loading Device Tree to 42dfa000, end 42dffecd ... OK
Starting kernel ...
U-Boot SPL 2017.01-rc2 (Dec 10 2020 - 22:41:13)
DRAM: 64 MiB
Trying to boot from sunxi SPI
U-Boot 2017.01-rc2 (Dec 10 2020 - 22:41:13 +0800) Allwinner Technology
CPU: Allwinner V3s (SUN8I 1681)
Model: Lichee Pi Zero
DRAM: 64 MiB
MMC: SUNXI SD/MMC: 0
SF: Detected w25q128bv with page size 256 Bytes, erase size 4 KiB, total 16 MiB
*** Warning - bad CRC, using default environment
Setting up a 480x272 lcd console (overscan 0x0)
dotclock: 10000kHz = 10000kHz: (1 * 3MHz * 20) / 6
In: serial@01c28000
Out: serial@01c28000
Err: serial@01c28000
U-Boot 2017.01-rc2 (Dec 10 2020 - 22:41:13 +0800) Allwinner Technology
CPU: Allwinner V3s (SUN8I 1681)
Model: Lichee Pi Zero
DRAM: 64 MiB
MMC: SUNXI SD/MMC: 0
SF: Detected w25q128bv with page size 256 Bytes, erase size 4 KiB, total 16 MiB
*** Warning - bad CRC, using default environment
Setting up a 480x272 lcd console (overscan 0x0)
dotclock: 10000kHz = 10000kHz: (1 * 3MHz * 20) / 6
In: serial@01c28000
Out: serial@01c28000
Err: serial@01c28000
Net: No ethernet found.
starting USB...
No controllers found
Hit any key to stop autoboot: 0
SF: Detected w25q128bv with page size 256 Bytes, erase size 4 KiB, total 16 MiB
device 0 offset 0x100000, size 0x10000
SF: 65536 bytes @ 0x100000 Read: OK
device 0 offset 0x110000, size 0x400000
SF: 4194304 bytes @ 0x110000 Read: OK
## Flattened Device Tree blob at 41800000
Booting using the fdt blob at 0x41800000
Loading Device Tree to 42dfa000, end 42dffecd ... OK
Starting kernel ...
[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Linux version 4.13.16-licheepi-zero (hero@hero-Lenovo-3000-G430)0
[ 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 instructie
[ 0.000000] OF: fdt: Machine model: Lichee Pi Zero with Dock
[ 0.000000] Memory policy: Data cache writealloc
[ 0.000000] percpu: Embedded 16 pages/cpu @c3edf000 s33868 r8192 d23476 u6556
[ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pa9
[ 0.000000] Kernel command line: console=ttyS0,115200 earlyprintk panic=5 ro2
[ 0.000000] PID hash table entries: 256 (order: -2, 1024 bytes)
[ 0.000000] Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
[ 0.000000] Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
[ 0.000000] Memory: 54568K/65024K available (6144K kernel code, 217K rwdata,)
[ 0.000000] Virtual kernel memory layout:
[ 0.000000] vector : 0xffff0000 - 0xffff1000 ( 4 kB)
[ 0.000000] fixmap : 0xffc00000 - 0xfff00000 (3072 kB)
[ 0.000000] vmalloc : 0xc4000000 - 0xff800000 ( 952 MB)
[ 0.000000] lowmem : 0xc0000000 - 0xc3f80000 ( 63 MB)
[ 0.000000] pkmap : 0xbfe00000 - 0xc0000000 ( 2 MB)
[ 0.000000] modules : 0xbf000000 - 0xbfe00000 ( 14 MB)
[ 0.000000] .text : 0xc0008000 - 0xc0700000 (7136 kB)
[ 0.000000] .init : 0xc0900000 - 0xc0a00000 (1024 kB)
[ 0.000000] .data : 0xc0a00000 - 0xc0a367c0 ( 218 kB)
[ 0.000000] .bss : 0xc0a3daf0 - 0xc0a7fcac ( 265 kB)
[ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[ 0.000000] Hierarchical RCU implementation.
[ 0.000000] RCU event tracing is enabled.
[ 0.000000] RCU restricting CPUs from NR_CPUS=8 to nr_cpu_ids=1.
[ 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] arch_timer: cp15 timer(s) running at 24.00MHz (virt).
[ 0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycless
[ 0.000008] sched_clock: 56 bits at 24MHz, resolution 41ns, wraps every 4398s
[ 0.000021] Switching to timer-based delay loop, resolution 41ns
[ 0.000187] clocksource: timer: mask: 0xffffffff max_cycles: 0xffffffff, maxs
[ 0.000413] Console: colour dummy device 80x30
[ 0.000447] Calibrating delay loop (skipped), value calculated using timer f)
[ 0.000461] pid_max: default: 32768 minimum: 301
[ 0.000590] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
[ 0.000603] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
[ 0.001187] CPU: Testing write buffer coherency: ok
[ 0.001552] /cpus/cpu@0 missing clock-frequency property
[ 0.001574] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
[ 0.002005] Setting up static identity map for 0x40100000 - 0x40100060
[ 0.002178] Hierarchical SRCU implementation.
[ 0.002689] smp: Bringing up secondary CPUs ...
[ 0.002702] smp: Brought up 1 node, 1 CPU
[ 0.002712] SMP: Total of 1 processors activated (48.00 BogoMIPS).
[ 0.002719] CPU: All CPU(s) started in SVC mode.
[ 0.003460] devtmpfs: initialized
[ 0.006596] VFP support v0.3: implementor 41 architecture 2 part 30 variant 5
[ 0.006882] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, ms
[ 0.006907] futex hash table entries: 256 (order: 2, 16384 bytes)
[ 0.007071] pinctrl core: initialized pinctrl subsystem
[ 0.007932] random: get_random_u32 called from bucket_table_alloc+0xf4/0x2440
[ 0.008067] NET: Registered protocol family 16
[ 0.008539] DMA: preallocated 256 KiB pool for atomic coherent allocations
[ 0.009657] hw-breakpoint: found 5 (+1 reserved) breakpoint and 4 watchpoint.
[ 0.009675] hw-breakpoint: maximum watchpoint size is 8 bytes.
[ 0.022929] SCSI subsystem initialized
[ 0.023227] usbcore: registered new interface driver usbfs
[ 0.023293] usbcore: registered new interface driver hub
[ 0.023388] usbcore: registered new device driver usb
[ 0.023632] pps_core: LinuxPPS API ver. 1 registered
[ 0.023642] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giom>
[ 0.023663] PTP clock support registered
[ 0.023889] Advanced Linux Sound Architecture Driver Initialized.
[ 0.025735] clocksource: Switched to clocksource arch_sys_counter
[ 0.036536] NET: Registered protocol family 2
[ 0.037124] TCP established hash table entries: 1024 (order: 0, 4096 bytes)
[ 0.037158] TCP bind hash table entries: 1024 (order: 1, 8192 bytes)
[ 0.037181] TCP: Hash tables configured (established 1024 bind 1024)
[ 0.037305] UDP hash table entries: 256 (order: 1, 8192 bytes)
[ 0.037352] UDP-Lite hash table entries: 256 (order: 1, 8192 bytes)
[ 0.037562] NET: Registered protocol family 1
[ 0.038136] RPC: Registered named UNIX socket transport module.
[ 0.038157] RPC: Registered udp transport module.
[ 0.038163] RPC: Registered tcp transport module.
[ 0.038169] RPC: Registered tcp NFSv4.1 backchannel transport module.
[ 0.040244] workingset: timestamp_bits=30 max_order=14 bucket_order=0
[ 0.049180] NFS: Registering the id_resolver key type
[ 0.049229] Key type id_resolver registered
[ 0.049237] Key type id_legacy registered
[ 0.049281] jffs2: version 2.2. (NAND) �© 2001-2006 Red Hat, Inc.
[ 0.050801] random: fast init done
[ 0.053668] Block layer SCSI generic (bsg) driver version 0.4 loaded (major )
[ 0.053691] io scheduler noop registered
[ 0.053699] io scheduler deadline registered
[ 0.053971] io scheduler cfq registered (default)
[ 0.053984] io scheduler mq-deadline registered
[ 0.053990] io scheduler kyber registered
[ 0.058302] sun8i-v3s-pinctrl 1c20800.pinctrl: initialized sunXi PIO driver
[ 0.127514] Serial: 8250/16550 driver, 8 ports, IRQ sharing disabled
[ 0.130741] console [ttyS0] disabled
[ 0.151012] 1c28000.serial: ttyS0 at MMIO 0x1c28000 (irq = 36, base_baud = 1A
[ 0.741148] console [ttyS0] enabled
[ 0.749164] m25p80 spi32766.0: w25q128 (16384 Kbytes)
[ 0.754248] spi32766.0: parser cmdlinepart: 4
[ 0.758690] 4 cmdlinepart partitions found on MTD device spi32766.0
[ 0.764950] Creating 4 MTD partitions on "spi32766.0":
[ 0.770116] 0x000000000000-0x000000100000 : "uboot"
[ 0.775622] 0x000000100000-0x000000110000 : "dtb"
[ 0.780837] 0x000000110000-0x000000510000 : "kernel"
[ 0.786234] 0x000000510000-0x000001000000 : "rootfs"
[ 0.791984] libphy: Fixed MDIO Bus: probed
[ 0.796672] dwmac-sun8i 1c30000.ethernet: PTP uses main clock
[ 0.802464] dwmac-sun8i 1c30000.ethernet: No regulator found
[ 0.808244] dwmac-sun8i 1c30000.ethernet: Will use internal PHY
[ 0.814396] dwmac-sun8i 1c30000.ethernet: Chain mode enabled
[ 0.820105] dwmac-sun8i 1c30000.ethernet: No HW DMA feature register supportd
[ 0.827336] dwmac-sun8i 1c30000.ethernet: Normal descriptors
[ 0.832988] dwmac-sun8i 1c30000.ethernet: RX Checksum Offload Engine supportd
[ 0.840214] dwmac-sun8i 1c30000.ethernet: COE Type 2
[ 0.845171] dwmac-sun8i 1c30000.ethernet: TX Checksum insertion supported
[ 0.852146] libphy: stmmac: probed
[ 0.857478] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[ 0.864015] ehci-platform: EHCI generic platform driver
[ 0.869639] ehci-platform 1c1a000.usb: EHCI Host Controller
[ 0.875254] ehci-platform 1c1a000.usb: new USB bus registered, assigned bus 1
[ 0.883236] ehci-platform 1c1a000.usb: irq 26, io mem 0x01c1a000
[ 0.915750] ehci-platform 1c1a000.usb: USB 2.0 started, EHCI 1.00
[ 0.923018] hub 1-0:1.0: USB hub found
[ 0.926973] hub 1-0:1.0: 1 port detected
[ 0.931493] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[ 0.937789] ohci-platform: OHCI generic platform driver
[ 0.943357] ohci-platform 1c1a400.usb: Generic Platform OHCI controller
[ 0.950099] ohci-platform 1c1a400.usb: new USB bus registered, assigned bus 2
[ 0.958048] ohci-platform 1c1a400.usb: irq 27, io mem 0x01c1a400
[ 1.030873] hub 2-0:1.0: USB hub found
[ 1.034693] hub 2-0:1.0: 1 port detected
[ 1.042311] udc-core: couldn't find an available UDC - added [g_cdc] to lists
[ 1.051883] input: 1c22800.lradc as /devices/platform/soc/1c22800.lradc/inpu0
[ 1.060794] sun6i-rtc 1c20400.rtc: rtc core: registered rtc-sun6i as rtc0
[ 1.067699] sun6i-rtc 1c20400.rtc: RTC enabled
[ 1.072236] i2c /dev entries driver
[ 1.077097] input: ns2009_ts as /devices/platform/soc/1c2ac00.i2c/i2c-0/0-001
[ 1.086588] sunxi-wdt 1c20ca0.watchdog: Watchdog enabled (timeout=16 sec, no)
[ 1.155785] sunxi-mmc 1c0f000.mmc: base:0xc407b000 irq:23
[ 1.215766] sunxi-mmc 1c10000.mmc: base:0xc4144000 irq:24
[ 1.222171] usbcore: registered new interface driver usbhid
[ 1.227830] usbhid: USB HID core driver
[ 1.233276] sun4i-codec 1c22c00.codec: ASoC: /soc/codec-analog@01c23000 not d
[ 1.241314] sun4i-codec 1c22c00.codec: Failed to register our card
[ 1.248780] NET: Registered protocol family 17
[ 1.253359] Key type dns_resolver registered
[ 1.257895] Registering SWP/SWPB emulation handler
[ 1.270298] simple-framebuffer 43f80000.framebuffer: framebuffer at 0x43f8000
[ 1.280914] simple-framebuffer 43f80000.framebuffer: format=x8r8g8b8, mode=40
[ 1.293186] Console: switching to colour frame buffer device 60x34
[ 1.301651] simple-framebuffer 43f80000.framebuffer: fb0: simplefb registere!
[ 1.310217] usb_phy_generic usb_phy_generic.0.auto: usb_phy_generic.0.auto sr
[ 1.321573] musb-hdrc musb-hdrc.1.auto: MUSB HDRC host driver
[ 1.327414] musb-hdrc musb-hdrc.1.auto: new USB bus registered, assigned bus3
[ 1.336654] hub 3-0:1.0: USB hub found
[ 1.340542] hub 3-0:1.0: 1 port detected
[ 1.345600] using random self ethernet address
[ 1.350155] using random host ethernet address
[ 1.355703] usb0: HOST MAC 52:8e:e2:88:95:0b
[ 1.360117] usb0: MAC 9a:a2:05:7a:79:6c
[ 1.363997] g_cdc gadget: CDC Composite Gadget, version: King Kamehameha Day8
[ 1.371516] g_cdc gadget: g_cdc ready
[ 1.377836] sun4i-codec 1c22c00.codec: Codec <-> 1c22c00.codec mapping ok
[ 1.387564] sun6i-rtc 1c20400.rtc: setting system clock to 1970-12-31 02:05:)
[ 1.396394] vcc3v3: disabling
[ 1.399368] vcc5v0: disabling
[ 1.402332] ALSA device list:
[ 1.405295] #0: V3s Audio Codec
[ 1.446985] random: crng init done
[ 1.981287] VFS: Mounted root (jffs2 filesystem) on device 31:3.
[ 1.988532] devtmpfs: mounted
[ 1.992717] Freeing unused kernel memory: 1024K
[ 2.877327] g_cdc gadget: high-speed config #1: CDC Composite (ECM + ACM)
Starting logging: OK
Starting mdev...
modprobe: can't change directory to '/lib/modules': No such file or directory
Initializing random number generator... done.
Starting network: OK
Welcome to Lichee Pi
Lichee login: root
# passwd root
Changing password for root
New password:
Bad password: too short
Retype password:
passwd: password for root changed by root
# reboot