1、内核启用功能
Device Drivers -> Memory Technology Device (MTD) Support -> Enable UBI - Unsorted block images -> Read-only block devices on top of UBI volume
CONFIG_SQUASHFS=y CONFIG_SQUASHFS_LZO=y CONFIG_MTD=y CONFIG_MTD_BLOCK=y CONFIG_MTD_UBI=y CONFIG_UBIFS_FS=y
2、创建 SquashFS
mksquashfs rootfs rootfs.squashfs -nopad -noappend -root-owned -b 256k -comp xz -processors 2
3、将rootfs.squashfs + overlay 打包成ubifs镜像文件
ubinize -o p2002ac-loongson32-ls1b-squashfs-rootfsdata.ubifsze -m 2048 -p 128KiB -s 2048 ubinize-squashfs.cfg
文件ubinize-squashfs.cfg如下:
[ubi] # Volume mode (other option is static) mode=ubi # Source image #image=p2002ac-loongson32-ls1b-squashfs.ubifs image=p2002ac-loongson32-ls1b-root.squashfs # Volume ID in UBI image vol_id=0 # Allow for dynamic resize vol_type=dynamic # Volume name vol_name=rootfs # Autoresize volume at first mount vol_flags=autoresize [data] mode=ubi vol_id=1 vol_type=dynamic vol_name=rootfs_data vol_size=8MiB
4、进行分区的擦除与创建块设备
ubidetach -p /dev/mtd2
ubiformat /dev/mtd2
ubiattach /dev/ubi_ctrl -m 2
ubimkvol /dev/ubi2 -N ubifs -m
ubiblock -c /dev/ubi2_0
创建成功会在/dev下有ubiblock2_0
5、分区写入与挂载
flash_eraseall /dev/mtd2;nandwrite -p /dev/mtd2 /mnt/huangzhigang/p2002ac-loongson32-ls1b-squashfs-rootfsdata.ubifsze
mount -t squashfs -o ro /dev/ubiblock2_0 /mnt
挂载成功后会/mnt目录下有文件系统的完整目录,说明系统能正常识别和操作
6、将分区作为开机的启动分区
在uboot终端命令写入:
setenv bootargs 'console=ttyS1,115200 root=/dev/ubiblock2_0 ubi.mtd=1,2048 mtdparts=ls1x-nand:8M(kernel),214M(ubi),32M(web),2M(factory);spi-flash:496k(uboot),16k(env) rootfstype=squashfs rootflags=sync video=ls1xfb:800x480-16@60 product_id=2'
boot
实现作为分区启动,
系统日志输出, 成功创建启动
[ 3.333705] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 3.341459] ehci-platform: EHCI generic platform driver [ 3.348409] ehci-platform ehci-platform: EHCI Host Controller [ 3.357008] ehci-platform ehci-platform: new USB bus registered, assigned bus number 1 [ 3.367336] ehci-platform ehci-platform: irq 40, io mem 0x1fe00000 [ 3.386996] ehci-platform ehci-platform: USB 2.0 started, EHCI 1.00 [ 3.396014] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002 [ 3.403280] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1 [ 3.410958] usb usb1: Product: EHCI Host Controller [ 3.416263] usb usb1: Manufacturer: Linux 4.14.206 ehci_hcd [ 3.422276] usb usb1: SerialNumber: ehci-platform [ 3.432978] hub 1-0:1.0: USB hub found [ 3.438605] hub 1-0:1.0: 1 port detected [ 3.453735] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 3.461159] ohci-platform: OHCI generic platform driver [ 3.467557] ohci-platform ohci-platform: Generic Platform OHCI controller [ 3.477519] ohci-platform ohci-platform: new USB bus registered, assigned bus number 2 [ 3.487408] ohci-platform ohci-platform: irq 41, io mem 0x1fe08000 [ 3.557981] usb usb2: New USB device found, idVendor=1d6b, idProduct=0001 [ 3.565269] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1 [ 3.572955] usb usb2: Product: Generic Platform OHCI controller [ 3.579321] usb usb2: Manufacturer: Linux 4.14.206 ohci_hcd [ 3.585329] usb usb2: SerialNumber: ohci-platform [ 3.596366] hub 2-0:1.0: USB hub found [ 3.601989] hub 2-0:1.0: 1 port detected [ 3.618579] usbcore: registered new interface driver usb-storage [ 3.644354] rtc-sd2068 0-0032: rtc core: registered sd2068 as rtc0 [ 3.653414] i2c /dev entries driver [ 3.668185] ls1x-wdt ls1x-wdt: Loongson1 Watchdog driver registered [ 3.679914] NET: Registered protocol family 17 [ 3.687527] can: controller area network core (rev 20170425 abi 9) [ 3.695868] NET: Registered protocol family 29 [ 3.720809] ubi0: attaching mtd1 [ 4.785354] ubi0: scanning is finished [ 4.843524] ubi0: volume 0 ("rootfs") re-sized from 118 to 1601 LEBs [ 4.859173] ubi0: attached mtd1 (name "ubi", size 214 MiB) [ 4.865328] ubi0: PEB size: 131072 bytes (128 KiB), LEB size: 126976 bytes [ 4.873380] ubi0: min./max. I/O unit sizes: 2048/2048, sub-page size 2048 [ 4.880853] ubi0: VID header offset: 2048 (aligned 2048), data offset: 4096 [ 4.888466] ubi0: good PEBs: 1712, bad PEBs: 0, corrupted PEBs: 0 [ 4.895000] ubi0: user volume: 2, internal volumes: 1, max. volumes count: 128 [ 4.902682] ubi0: max/mean erase counter: 1/0, WL threshold: 4096, image sequence number: 1921414063 [ 4.912499] ubi0: available PEBs: 0, total reserved PEBs: 1712, PEBs reserved for bad PEB handling: 40 [ 4.922353] ubi0: background thread "ubi_bgt0d" started, PID 600 [ 4.941144] block ubiblock0_0: created from ubi0:0(rootfs) [ 4.955220] ubiblock: device ubiblock0_0 (rootfs) set to be root filesystem [ 4.973244] rtc-sd2068 0-0032: setting system clock to 2000-01-15 00:31:21 UTC (947896281) [ 4.997119] UBIFS: parse sync [ 5.039594] VFS: Mounted root (squashfs filesystem) readonly on device 254:0. [ 5.056147] Freeing unused kernel memory: 192K [ 5.066924] This architecture does not have kernel memory protection. [ 7.975971] init: Console is alive [ 7.988402] init: - watchdog - [ 8.837389] kmodloader: loading kernel modules from /etc/modules-boot.d/* [ 9.039662] softdog: initialized. soft_noboot=0 soft_margin=60 sec soft_panic=0 (nowayout=0) [ 9.127253] sdhci: Secure Digital Host Controller Interface driver [ 9.143162] sdhci: Copyright(c) Pierre Ossman [ 9.163311] sdhci-pltfm: SDHCI platform and OF driver helper [ 9.198641] kmodloader: done loading kernel modules from /etc/modules-boot.d/* [ 9.223629] init: - preinit - Press the [1], [2], [3] or [4] key and hit [enter] to select the debug level [ 12.968734] random: procd: uninitialized urandom read (4 bytes read) [ 12.986153] UBIFS (ubi0:1): default file-system created [ 12.999293] UBIFS (ubi0:1): background thread "ubifs_bgt0_1" started, PID 641 [ 13.127697] UBIFS (ubi0:1): UBIFS: mounted UBI device 0, volume 1, name "rootfs_data" [ 13.136013] UBIFS (ubi0:1): LEB size: 126976 bytes (124 KiB), min./max. I/O unit sizes: 2048 bytes/2048 bytes [ 13.146425] UBIFS (ubi0:1): FS size: 7237632 bytes (6 MiB, 57 LEBs), journal size 1015809 bytes (0 MiB, 6 LEBs) [ 13.156999] UBIFS (ubi0:1): reserved for root: 341850 bytes (333 KiB) [ 13.163901] UBIFS (ubi0:1): media format: w4/r0 (latest is w5/r0), UUID 68723DFE-84EF-4E8C-88BE-0E803CBE5E80, small LPT model [ 13.183544] mount_root: overlay filesystem has not been fully initialized yet [ 13.203230] mount_root: switching to ubifs overlay [ 13.271372] urandom-seed: Seed file not found (/etc/urandom.seed) [ 13.712859] procd: - early - [ 13.716792] procd: - watchdog - [ 15.621926] procd: - watchdog - [ 15.629340] procd: - ubus - [ 16.096778] random: ubusd: uninitialized urandom read (4 bytes read) [ 16.557844] random: jshn: uninitialized urandom read (4 bytes read) [ 16.587610] random: ubusd: uninitialized urandom read (4 bytes read) [ 16.620396] procd: - init - [ 18.892882] kmodloader: loading kernel modules from /etc/modules.d/* [ 19.079389] kmodloader: done loading kernel modules from /etc/modules.d/* [ 19.943121] random: crng init done [ 19.946683] random: 6 urandom warning(s) missed due to ratelimiting [ 40.971030] stmmaceth stmmaceth.0 eth0: PTP not supported by HW
参考链接:
https://www.cxybb.com/article/qq_15031263/94476655#patch_18 新唐ARM9 NU980 移植OpenWrt LEDE_传琦5858的博客-程序员宝宝
http://souktha.github.io/misc/squashfs-ubi/ UBI block and read-only NAND FS
https://www.cxybb.com/article/MengXP/108810071 squashfs重打包和ubi重打包_MengXP的博客-程序员宝宝_squashfs打包
https://unix.stackexchange.com/questions/455043/using-squashfs-on-top-of-ubi-as-root-file-system Using squashfs on top of ubi as root file system