Исследуем OpenWRT: чем отличаются образы uImage и sysupgrade

  • Tutorial

В комментариях к статье “Прошиваем роутер Upvel UR-313N4G на OpenWRT” между вашим покорным слугой и уважаемым Maysoft завязался спор насчет различий в структуре образов uImage и sysupgrade прошивки OpenWRT. Я обещал Maysoft разобраться в проблеме, и вот перед вами эта статья.

Как известно, в каталоге загрузок OpenWRT доступны, по большей части, прошивки двух типов — uImage и sysupgrade, например:

openwrt-15.05-rc3-ramips-rt305x-dir-320-b1-initramfs-uImage.bin
openwrt-15.05-rc3-ramips-rt305x-dir-320-b1-squashfs-sysupgrade.bin

Официальный FAQ пишет об их различиях весьма скупо:
What is the difference between the different image formats?
a factory image is one built for the bootloader flasher or stock software flasher
a sysupgrade image (previously named trx image) is designed to be flashed from within openwrt itself
The two have the same content, but a factory image would have extra header information or whatever the platform needs. Generally speaking, the factory image is to be used with the OEM GUI or OEM flashing utilities to convert the device to OpenWrt. After that, use the sysupgrade images.

Согласно документации, содержание образов идентично, за исключением того, что в образе factory присутствуют дополнительные заголовки, чтобы этот образ можно было прошить через Web-интерфейс оригинальной прошивки.

Отлично, сравним размер прошивок:

openwrt-15.05-rc3-ramips-rt305x-dir-320-b1-initramfs-uImage.bin — 3253035 байт.

openwrt-15.05-rc3-ramips-rt305x-dir-320-b1-squashfs-sysupgrade.bin — 3407876 байт.

Ого, прошивка sysupgrade почти на 140 Кб больше uImage, а по документации они должны быть примерно одного размера, причем uImage за счет этой самой “extra header information” — немного больше.

Конечно, достаточно посмотреть в сборочные скрипты, чтобы понять, чем различаются uImage и sysupgrade-образы, но это, согласитесь, неспортивно. Сегодня мы будем анализировать прошивки “в лоб”, как будто у нас нет исходников, а уже в конце заглянем в сборочные скрипты, чтобы подтвердить наши догадки.

Основным средством анализа прошивок на данный момент является утилита binwalk, доступная под Linux. Переименуем файлы прошивок покороче, чтобы нам было удобнее, и начнем анализ.

> binwalk ./uImage.bin 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             uImage header, header size: 64 bytes, header CRC: 0x19DE1499, created: Fri Jul  3 22:16:00 2015, image size: 3252971 bytes, Data Address: 0x80000000, Entry Point: 0x80000000, data CRC: 0x886ADE01, OS: Linux, CPU: IPS, image type: OS Kernel Image, compression type: lzma, image name: "MIPS OpenWrt Linux-3.18.17"
64            0x40            LZMA compressed data, properties: 0x6D, dictionary size: 8388608 bytes, uncompressed size: 5479932 bytes

Кажется, вся прошивка представляет собой образ uImage — в начале следует заголовок длиной 64 (0x40) байт, а вслед за нам — поток данных, сжатый алгоритмом LZMA, размером 3252971 байт. Сложим 64 и 3252971, получим 3253035 байт, то есть размер скачанного образа. Следовательно, кроме образа uImage в файле больше ничего нет. Binwalk умеет распаковывать найденные LZMA-потоки. В принципе, можно вручную отрезать от файла первые 64 байта и распаковать остаток командой lzma -d, но зачем, когда есть такой удобный инструмент?

> binwalk -e ./uImage.bin

Посмотрим, что у нас получилось
> ls -l ./_uImage.bin.extracted/
итого 8532                                                                                                                                                                          
-rw-r--r-- 1 user user 5479932 авг  8 23:10 40                                                                                                                                  
-rw-r--r-- 1 user user 3252971 авг  8 23:10 40.7z

Файл с именем 40 (смещение в исходном файле) — и есть распакованный поток. Натравим на него binwalk:

binwalk ./_uImage.bin.extracted/40

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
2812692       0x2AEB14        Linux kernel version "3.18.17 (buildbot@builder1) (gcc version 4.8.3 (OpenWrt/Linaro c version 4.8.3 (OpenWrt/Linaro GCC 4.8-2014.04 r46018) ) #2 Fr"
2932132       0x2CBDA4        LZMA compressed data, properties: 0x5D, dictionary size: 16777216 bytes, missing uncompressed size
2936592       0x2CCF10        xz compressed data
3400392       0x33E2C8        LZMA compressed data, properties: 0x6D, dictionary size: 1048576 bytes, uncompressed size: -1 bytes

А здесь у нас что-то, на первый взгляд, непонятное — binwalk обнаружил ядро Linux по смещению 0x2AEB14 и три сжатых потока данных, следующих за ядром. Дело в том, что binwalk для анализа использует эвристики и то, что получается у него на выходе — не истина в последней инстанции, а информация к размышлению.
Здравый смысл подсказывает, что ядро должно начинаться со смещения 0, а сжатый поток — быть один и содержать initramfs — начальную файловую систему, загружаемую в RAM. О том же говорит и документация на ядро:
What is initramfs?
— All 2.6 Linux kernels contain a gzipped «cpio» format archive, which is extracted into rootfs when the kernel boots up. After extracting, the kernel checks to see if rootfs contains a file «init», and if so it executes it as PID 1.

и далее
Populating initramfs:
— The 2.6 kernel build process always creates a gzipped cpio format initramfs archive and links it into the resulting kernel binary. By default, this archive is empty (consuming 134 bytes on x86).

Здесь же упоминается и формат потока — CPIO.

Посмотрим, что binwalk сможет извлечь из нашего образа:

> binwalk -e ./_uImage.bin.extracted/40
ls -l ./_uImage.bin.extracted/_40.extracted/
итого 14028
-rw-r--r-- 1 user user 2547808 авг  8 23:25 2CBDA4.7z
-rw-r--r-- 1 user user 2543340 авг  8 23:25 2CCF10.tar
-rw-r--r-- 1 user user 7186944 авг  8 23:25 33E2C8
-rw-r--r-- 1 user user 2079540 авг  8 23:25 33E2C8.7z

Итак, успешно распаковался только поток по смещению 33E2C8. Если мы все правильно делаем, то это должен быть CPIO-контейнер с файловой системой:

> binwalk _uImage.bin.extracted/_40.extracted/33E2C8

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             ASCII cpio archive (SVR4 with no CRC), file name: "dev", file name length: "0x00000004", file size: "0x00000000"
116           0x74            ASCII cpio archive (SVR4 with no CRC), file name: "dev/console", file name length: "0x0000000C", file size: "0x00000000"
240           0xF0            ASCII cpio archive (SVR4 with no CRC), file name: "lib", file name length: "0x00000004", file size: "0x00000000"
356           0x164           ASCII cpio archive (SVR4 with no CRC), file name: "lib/netifd", file name length: "0x0000000B", file size: "0x00000000"
480           0x1E0           ASCII cpio archive (SVR4 with no CRC), file name: "lib/netifd/netifd-wireless.sh", file name length: "0x0000001E", file size: "0x00001638"

***********Куча файлов***********

7186416       0x6DA7F0        ASCII cpio archive (SVR4 with no CRC), file name: "dev/urandom", file name length: "0x0000000C", file size: "0x00000000"
7186540       0x6DA86C        ASCII cpio archive (SVR4 with no CRC), file name: "dev/pts", file name length: "0x00000008", file size: "0x00000000"
7186660       0x6DA8E4        ASCII cpio archive (SVR4 with no CRC), file name: "TRAILER!!!", file name length: "0x0000000B", file size: "0x00000000"

В конце архива мы видим файл с именем TRAILER!!!.. который. согласно документации, является меткой конца архива.

Значит, структура прошивки initramfs-uImage такова:



Теперь возьмемся за образ squashfs-sysupgrade. Из названия следует, что в образе содержится (кроме ядра) файловая система squashfs. Посмотрим, так ли это:

> binwalk -e ./sysupgrade.bin 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             uImage header, header size: 64 bytes, header CRC: 0x66CC90D2, created: Mon Jul  6 21:54:35 2015, image size: 1142606 bytes, Data Address: 0x80000000, Entry Point: 0x80000000, data CRC: 0x91B77696, OS: Linux, CPU: MIPS, image type: OS Kernel Image, compression type: lzma, image name: "MIPS OpenWrt Linux-3.18.17"
64            0x40            LZMA compressed data, properties: 0x6D, dictionary size: 8388608 bytes, uncompressed size: 3396940 bytes
1142670       0x116F8E        Squashfs filesystem, little endian, version 4.0, compression:lzma (non-standard type definition), size: 2221946 bytes,  1132 inodes, blocksize: 262144 bytes, created: Mon Jul  6 21:54:02 2015


Возьмемся за арифметику: 64 + 1142606 (image size) = 1142670, как раз по этому смещению начинается образ squashfs, а заканчивается он по смещению 1142670 + 2221946 = 3364616. Размер образа, между тем, 3407876 байт, значит, у нас есть еще 3407876 — 3364616 = 43260 байт неидентифицированной информации. Посмотрим, что там, hexdump’ом
> hexdump -s 3364616 ./sysupgrade.bin 
0335708 ffff ffff ffff ffff ffff ffff ffff ffff
*
0335ff8 ffff ffff ffff ffff adde dec0 ffff ffff
0336008 ffff ffff ffff ffff ffff ffff ffff ffff
*
0337ff8 ffff ffff ffff ffff adde dec0 ffff ffff
0338008 ffff ffff ffff ffff ffff ffff ffff ffff
*
033fff8 ffff ffff ffff ffff adde dec0          
0340004

Тут явно какая-то заглушка. Вернемся к ней позднее.

Посмотрим, что у нас в каталоге с распакованным образом:

> ls -l _sysupgrade.bin.extracted/
итого 8820
-rw-r--r-- 1 user user 2221946 авг  8 23:40 116F8E.squashfs
-rw-r--r-- 1 user user 3396940 авг  8 23:40 40
-rw-r--r-- 1 user user 3407812 авг  8 23:40 40.7z

Распакуем LZMA-поток по смещению 40:

binwalk -e _sysupgrade.bin.extracted/40

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
2812644       0x2AEAE4        Linux kernel version "3.18.17 (buildbot@builder1) (gcc version 4.8.3 (OpenWrt/Linaro c version 4.8.3 (OpenWrt/Linaro GCC 4.8-2014.04 r46018) ) #1 Fr"
2932068       0x2CBD64        LZMA compressed data, properties: 0x5D, dictionary size: 16777216 bytes, missing uncompressed size
2936444       0x2CCE7C        xz compressed data
3396424       0x33D348        ASCII cpio archive (SVR4 with no CRC), file name: "dev", file name length: "0x00000004", file size: "0x00000000"
3396540       0x33D3BC        ASCII cpio archive (SVR4 with no CRC), file name: "dev/console", file name length: "0x0000000C", file size: "0x00000000"
3396664       0x33D438        ASCII cpio archive (SVR4 with no CRC), file name: "root", file name length: "0x00000005", file size: "0x00000000"
3396780       0x33D4AC        ASCII cpio archive (SVR4 with no CRC), file name: "TRAILER!!!", file name length: "0x0000000B", file size: "0x00000000"

Здесь у нас ядро Linux и небольшой initramfs-образ с четырьмя файлами. Остальное, видимо, переместилось в образ squashfs:

> unsquashfs -i ./_sysupgrade.bin.extracted/116F8E.squashfs 
Parallel unsquashfs: Using 4 processors
1033 inodes (1034 blocks) to write

squashfs-root
squashfs-root/bin
squashfs-root/bin/ash
squashfs-root/bin/board_detect
squashfs-root/bin/busybox
***********Куча файлов***********

squashfs-root/www/luci-static/resources/load.svg
squashfs-root/www/luci-static/resources/wifirate.svg
squashfs-root/www/luci-static/resources/wireless.svg
squashfs-root/www/luci-static/resources/xhr.js

created 848 files
created 99 directories
created 184 symlinks
created 0 devices
created 0 fifos

Действительно, основная файловая система содержится в образе squashfs.

Теперь разберемся с заглушкой в конце образа. Есть подозрение, что она как-то относится к ФС JFFS2, потому что при прошивке образа sysupgrade и последующей загрузке в dmesg появляются строки:

[   29.550000] jffs2_scan_eraseblock(): End of filesystem marker found at 0x0
[   29.580000] jffs2_build_filesystem(): unlocking the mtd device... done.
[   29.590000] jffs2_build_filesystem(): erasing all blocks after the end marker...

а при прошивке и загрузке образа uImage этих строк нет. Поиск в “ванильном“ ядре по этим строкам ничего не дает, а вот в дереве исходных кодов OpenWRT такие строки есть:

--- a/fs/jffs2/build.c
+++ b/fs/jffs2/build.c
@@ -114,6 +114,16 @@ static int jffs2_build_filesystem(struct
 	dbg_fsbuild("scanned flash completely\n");
 	jffs2_dbg_dump_block_lists_nolock(c);
 
+	if (c->flags & (1 << 7)) {
+		printk("%s(): unlocking the mtd device... ", __func__);
+		mtd_unlock(c->mtd, 0, c->mtd->size);
+		printk("done.\n");
+
+		printk("%s(): erasing all blocks after the end marker... ", __func__);
+		jffs2_erase_pending_blocks(c, -1);
+		printk("done.\n");
+	}
+
 	dbg_fsbuild("pass 1 starting\n");
 	c->flags |= JFFS2_SB_FLAG_BUILDING;
 	/* Now scan the directory tree, increasing nlink according to every dirent found. */
--- a/fs/jffs2/scan.c
+++ b/fs/jffs2/scan.c
@@ -148,8 +148,14 @@ int jffs2_scan_medium(struct jffs2_sb_in
 		/* reset summary info for next eraseblock scan */
 		jffs2_sum_reset_collected(s);
 
-		ret = jffs2_scan_eraseblock(c, jeb, buf_size?flashbuf:(flashbuf+jeb->offset),
-						buf_size, s);
+		if (c->flags & (1 << 7)) {
+			if (mtd_block_isbad(c->mtd, jeb->offset))
+				ret = BLK_STATE_BADBLOCK;
+			else
+				ret = BLK_STATE_ALLFF;
+		} else
+			ret = jffs2_scan_eraseblock(c, jeb, buf_size?flashbuf:(flashbuf+jeb->offset),
+							buf_size, s);
 
 		if (ret < 0)
 			goto out;
@@ -561,6 +567,17 @@ full_scan:
 			return err;
 	}
 
+	if ((buf[0] == 0xde) &&
+		(buf[1] == 0xad) &&
+		(buf[2] == 0xc0) &&
+		(buf[3] == 0xde)) {
+		/* end of filesystem. erase everything after this point */
+		printk("%s(): End of filesystem marker found at 0x%x\n", __func__, jeb->offset);
+		c->flags |= (1 << 7);
+
+		return BLK_STATE_ALLFF;````
+	}
+
 	/* We temporarily use 'ofs' as a pointer into the buffer/jeb */
 	ofs = 0;
 	max_ofs = EMPTY_SCAN_SIZE(c->sector_size);

Ага, вот и наша заглушка 0xDEADCODE. Если драйвер JFFS2 находит эту метку, то он считает ее концом предыдущей файловой системы и стирает все, начиная с нулевого байта метки и заканчивая концом накопителя. Таким образом сама метка также затирается.
После этого драйвер создает на этом месте новый экземпляр JFFS2.
Итак, получается следующая структура образа:



Таким образом:
  1. uImage содержит минимально необходимый функционал для запуска OpenWRT и за счет этого его структуру можно легко изменить так, чтобы она проходила проверки на корректность в Web-интерфейсах оригинальных прошивок.
  2. Sysupgrade устроен сложнее и использует Linux-специфичные инструменты — SquashFS и JFFS2.
  3. Оба типа образов не содержат начального загрузчика (и не должны)
  4. При прошивке через начальный загрузчик (через UART или аварийное восстановление) можно сразу шить sysuprade.
  5. При прошивке через mtd_write, если эта утилита доступна через telnet из официальной прошивки, также можно сразу шить sysupgrade.


В заключении заглянем сборочные скрипты OpenWRT, чтобы убедиться в своих выводах. Начнем с файла /target/linux/ramips/Makefile. Но если вы думаете, что это обычный GNU Makefile, то это не так. Вот как описывают улучшенный Makefile сами разработчики:
Looking at one of the package makefiles, you'd hardly recognize it as a makefile. Through what can only be described as blatant disregard and abuse of the traditional make format, the makefile has been transformed into an object oriented template which simplifies the entire ordeal.

Кажется, сборка образа запускается в строке 564:

Image/Build/Profile/DIR-320-B1=$(call BuildFirmware/Default8M/$(1),$(1),dir-320-b1,DIR-320-B1)

Цель BuildFirmware/Default8M описана в строках 195 и 196:

BuildFirmware/Default8M/squashfs=$(call BuildFirmware/OF,$(1),$(2),$(3),$(ralink_default_fw_size_8M),$(4))
BuildFirmware/Default8M/initramfs=$(call BuildFirmware/OF/initramfs,$(1),$(2),$(3),$(4))

Она состоит из двух позиций: squashfs и initramfs. Цели BuildFirmware/OF и BuildFirmware/OF/initramfs описаны в том же файле чуть выше

149    # $(1), Rootfs type, e.g. squashfs
150    # $(2), lowercase board name
151    # $(3), DTS filename without .dts extension
152    # $(4), maximum size of sysupgrade image
153    # $(5), uImage header's ih_name field
154    define BuildFirmware/OF
155            $(call MkImageLzmaDtb,$(2),$(3),$(5))
156            $(call MkImageSysupgrade/$(1),$(1),$(2),$(4),$(6))
157    endef

и

169    # $(1), squashfs/initramfs
170    # $(2), lowercase board name
171    # $(3), DTS filename without .dts extension
172    # $(4), ih_name field of uImage header
173    define BuildFirmware/OF/initramfs
174            $(call MkImageLzmaDtb,$(2),$(3),$(4),-initramfs)
175            $(CP) $(KDIR)/vmlinux-$(2)-initramfs.uImage $(call imgname,$(1),$(2))-uImage.bin
176    endef

По имени цели MkImageLzmaDtb можно догадаться, что она создает образ uImage по описанию из DTS-файла. Для цели BuildFirmware/OF/initramfs к этому образу добавляется раздел initramfs с основной файловой системой, после чего образ копируется в выходной каталог. Для цели BuildFirmware/OF исходный образ обрабатывается функцией MkImageSysupgrade, которая с помощью команды “cat” прицепляет к нему раздел squashfs, а затем, взывает функцию prepare_generic_squashfs, определенную в файле image.mk.

# pad to 4k, 8k, 16k, 64k, 128k, 256k and add jffs2 end-of-filesystem mark
110	   define prepare_generic_squashfs
111	           $(STAGING_DIR_HOST)/bin/padjffs2 $(1) 4 8 16 64 128 256
112	   endef

А утилита padjffs2, написанная на C, записывает отметку 0xDEADCODE в конец файла образа:

static unsigned char eof_mark[4] = {0xde, 0xad, 0xc0, 0xde};
***
static unsigned char *pad = eof_mark;
***
   /* write out the JFFS end-of-filesystem marker */
	                t = write(fd, pad, pad_len);
	                if (t != pad_len) {
	                        ERRS("Unable to write to %s", name);
	                        goto close;
	                }

В общем, мир OpenWRT прекрасен и удивителен, особенно доставляют комментарии типа:
# The real magic happens inside these templates

или
/* vodoo from original driver */

В заключение хочется сказать, что при сборке OpenWRT из исходных кодов нужно обращать внимание на сборочную среду, например, в этом репозитории на моем Debian 8+Sid не собирается даже набор инструментов для кросс-компиляции. А вот на Debian 7 все это богатство собирается просто изумительно, если не править начальную конфигурацию. Если же ее поправить, может оказаться, что некоторые Web-источники, из которых сборочный скрипт скачивает исходные коды, уже “протухли”, надо искать новые источники, исправлять скрипт и так далее.
Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 14

    0
    Спасибо, а я всегда думал что sysupgrade для обновления OpenWRT, а factory для перепрошивки, и с опаской шью самосборные прошивки на wt3020, потому как factory даёт ошибку а sysupgrade нет
      +2
      Стоит отметить, что все это справедливо лишь для определённых целей сборки. Для других всё может сильно отличаться.
        0
        Всегда использовал DD-WRT — очень стабильна и не подводила, подскажите насколько сильна разница с OpenWRT?
          0
          Разница в чём? Если в надёжности, то OpenWrt крайне надёжен. На счёт dd-wrt ничего не знаю.
            0
            OpenWRT открыта и есть пакетный менеджер. Oчень удобно добавлять желаемый функционал. Наверняка есть ещё отличия…
              0
              Отличия в удобстве. Есть правда кое какие моменты которые в OpenWRT нужно подумать а в dd-wrt работают из коробки (например VPN), но это компенсируется удобством в настройке что с консоли что с веба, простота сборки прошивки с выбором пакетов в прошивки ( что даёт возможность записать пакеты которые не устанавливаются из-за недостатка места, благодаря оптимизации ( или сжатию, не суть) и докучи всунуть в прошивку например логин-пароль инета. и при factory reset получить сразу рабочий инет.
              + использование места на встроенной памяти ( в dd-wrt такого не видел, когда пользовался)
                0
                В dd-wrt тоже это есть. Но вот добавления в прошивку нужно функционала нету точно, а пакетный менеджер тоже есть.
                  +1
                  Несовсем, dd-wrt открыт(opensource) лишь частично, вы можете пересобрать прошивку, используя их SDK. Но это нетривиальный процесс с почти отсутствующей документацией. Однажды пройдя этот квест, все профиты, полученные этим трудом, оказались ниже удобства OpenWRT.

                  P.S. Добавлял coovachilli + кастомные страницы веб интерфейса. Удалось, но я вам настоятельно советую не повторять этот квест.
                +3
                Если аналогию с десктопами — это примерно как ubuntu vs gentoo.
                В openwrt всё достаточно чётко структурировано по пакетам/папкам — тут ядро, тут тулзы, тут вебморда и т.д. Причём разный дополнительный софт (например, tor, transmission-daemon и т.д. фактически является частью системы и ставится единообразно. Разве что скачивается из отдельных реп; но в дереве конфига потом уже без разницы). Разработка идёт непрерывно; новые фичи и обновлённые пакеты появляются в транке практически сразу. И да — я говорю про сборку из исходников. Она достаточно беспроблемна.
                dd-wrt принято ставить из бинарей. Исходники можно _попробовать_ собрать, но геморроя с этим гораздо больше, чем в openwrt. Сами исходники организованы как попало (например, какие-нибудь специфические модули ядра могут лежать в произвольной папке и ссылаться на другие исходники прямыми связями). Дополнительного софта в базовой сборке вообще не предполагается. Собрать модуль ядра, чтобы запустить какую-нубидь специфическую железку (3g модем или принтер) — совсем нетривиальная задача. Но зато есть и плюсы — монолитная система (скачал блоб, прошил — и работает). Есть проприетарные модули для разных чипов, аналогов которых нет в openwrt (например, если производитель железа даёт собственный скомпилированный блоб — ddwrt его заюзает и включит в прошивку; openwrt не будет).
                Ну и — дополнительные софт для ddwrt всё же можно поставить через optware. Но у этого подхода есть минусы (например, увеличенное потребление памяти из-за дубля системных библиотек; невозможно так просто собрать что-то низкоуровневое, что нужно запускать как модуль ядра).
                  0
                  Я бы не сказал, что сборка транка беспроблемна. Но сообщество старается, чтобы она была таковой.
                  +2
                  Если сравнивать эти две прошивки, то dd-wrt больше тяготеет к proprietary ПО и больше прошивка, чем полноценная ОС. Касательно расширяемости, то она просто лучше стока и не более того.
                  А вот OpenWRT — это как полноценная ОС как для широко распространненного, так и для специфичного железа (роутеры, raspberry pi, и т. д.), со всеми возможностями полноценной ОС. Очень легко собрать прошивку для своего роутера со своим блэкджеком и… ну вы поняли :)
                    0
                    OpenWrt можно собрать и для микроволновки, если архитектура позволит.
                  0
                  Спасибо, добрый человек.

                  Без этого текста всем было бы лень ещё лет тридцать-сорок, а с ним у нас за сегодня появилась поддержка сброса настроек OpenWRT до заводских прямо из U-Boot'а.

                  Ищет первый заголовок JFFS2 (по двухбайтовой сигнатуре и проверке CRC всего заголовка), после чего вписывает вместо него 0xDEADCODE.
                    0

                    Вроде не упомянули главного различия с прикладной точки зрения:
                    initramfs-kernel не сохраняет изменения, сделанные в файловой системе во время работы
                    squashfs-sysupgrade же — сохраняет (если дать достаточно времени на инициализацию системы)


                    Это я глядя на ваши илюстрации структур образов понял, почему в моей тестовой сборке OpenWRT 19.07 не сохранялись настройки сети между перезагрузками (не смотря на uci commit). Я прошивал вариант initramfs-kernel.


                    Из бутлогов это хорошо видно (diff-айте, чтобы увидеть разницу):


                    вариант `initramfs-kernel`
                    Checking image at bc050000 ...

                    Image Name: MIPS OpenWrt Linux-5.4.93
                    Image Type: MIPS Linux Kernel Image (lzma compressed)
                    Data Size: 7021100 Bytes = 6.7 MB
                    Load Address: 80000000
                    Entry Point: 80000000
                    Verifying Checksum… OK
                    Uncompressing Kernel Image… OK


                    Starting kernel ...


                    [ 0.000000] Linux version 5.4.93 (serg@ubuntu) (gcc version 8.4.0 (OpenWrt GCC 8.4.0 r15667-84fa59b5a8)) #0 Mon Feb 1 09:00:23 2021
                    [ 0.000000] Board has DDR2
                    [ 0.000000] Analog PMU set to hw control
                    [ 0.000000] Digital PMU set to hw control
                    [ 0.000000] SoC Type: MediaTek MT7620A ver:2 eco:6
                    [ 0.000000] printk: bootconsole [early0] enabled
                    [ 0.000000] CPU0 revision is: 00019650 (MIPS 24KEc)
                    [ 0.000000] MIPS: machine is Xiaomi MiWiFi Mini
                    [ 0.000000] Initrd not found or empty — disabling initrd
                    [ 0.000000] Primary instruction cache 64kB, VIPT, 4-way, linesize 32 bytes.
                    [ 0.000000] Primary data cache 32kB, 4-way, PIPT, no aliases, linesize 32 bytes
                    [ 0.000000] Zone ranges:
                    [ 0.000000] Normal [mem 0x0000000000000000-0x0000000007ffffff]
                    [ 0.000000] Movable zone start for each node
                    [ 0.000000] Early memory node ranges
                    [ 0.000000] node 0: [mem 0x0000000000000000-0x0000000007ffffff]
                    [ 0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x0000000007ffffff]
                    [ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 32480
                    [ 0.000000] Kernel command line: console=ttyS0,115200 rootfstype=squashfs,jffs2
                    [ 0.000000] Dentry cache hash table entries: 16384 (order: 4, 65536 bytes, linear)
                    [ 0.000000] Inode-cache hash table entries: 8192 (order: 3, 32768 bytes, linear)
                    [ 0.000000] Writing ErrCtl register=0002d458
                    [ 0.000000] Readback ErrCtl register=0002d458
                    [ 0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
                    [ 0.000000] Memory: 117488K/131072K available (4735K kernel code, 205K rwdata, 1044K rodata, 6040K init, 205K bss, 13584K reserved, 0K cma-reserved)
                    [ 0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
                    [ 0.000000] NR_IRQS: 256
                    [ 0.000000] random: get_random_bytes called from start_kernel+0x32c/0x520 with crng_init=0
                    [ 0.000000] CPU Clock: 580MHz
                    [ 0.000000] clocksource: systick: mask: 0xffff max_cycles: 0xffff, max_idle_ns: 583261500 ns
                    [ 0.000000] systick: enable autosleep mode
                    [ 0.000000] systick: running — mult: 214748, shift: 32
                    [ 0.000000] clocksource: MIPS: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 6590553264 ns
                    [ 0.000010] sched_clock: 32 bits at 290MHz, resolution 3ns, wraps every 7405115902ns
                    [ 0.007592] Calibrating delay loop… 385.02 BogoMIPS (lpj=770048)
                    [ 0.045493] pid_max: default: 32768 minimum: 301
                    [ 0.050194] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
                    [ 0.057253] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
                    [ 0.071731] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
                    [ 0.081212] futex hash table entries: 256 (order: -1, 3072 bytes, linear)
                    [ 0.087901] pinctrl core: initialized pinctrl subsystem
                    [ 0.093586] NET: Registered protocol family 16
                    [ 0.360577] PCI host bridge /pcie@10140000 ranges:
                    [ 0.365197] MEM 0x0000000020000000..0x000000002fffffff
                    [ 0.370253] IO 0x0000000010160000..0x000000001016ffff
                    [ 0.398775] rt2880_gpio 10000600.gpio: registering 24 gpios
                    [ 0.404255] rt2880_gpio 10000600.gpio: registering 24 irq handlers
                    [ 0.410597] rt2880_gpio 10000638.gpio: registering 16 gpios
                    [ 0.416027] rt2880_gpio 10000638.gpio: registering 16 irq handlers
                    [ 0.422886] PCI host bridge to bus 0000:00
                    [ 0.426868] pci_bus 0000:00: root bus resource [mem 0x20000000-0x2fffffff]
                    [ 0.433494] pci_bus 0000:00: root bus resource [io 0xffffffff]
                    [ 0.439242] pci_bus 0000:00: root bus resource [??? 0x00000000 flags 0x0]
                    [ 0.445833] pci_bus 0000:00: No busn resource found for root bus, will use [bus 00-ff]
                    [ 0.453571] pci 0000:00:00.0: [1814:0801] type 01 class 0x060400
                    [ 0.459391] pci 0000:00:00.0: reg 0x10: [mem 0x00000000-0x7fffffff]
                    [ 0.465453] pci 0000:00:00.0: reg 0x14: [mem 0x20200000-0x2020ffff]
                    [ 0.471625] pci 0000:00:00.0: supports D1
                    [ 0.475447] pci 0000:00:00.0: PME# supported from D0 D1 D3hot
                    [ 0.483342] pci 0000:01:00.0: [14c3:7662] type 00 class 0x028000
                    [ 0.489228] pci 0000:01:00.0: reg 0x10: [mem 0x00000000-0x000fffff 64bit]
                    [ 0.495820] pci 0000:01:00.0: reg 0x30: [mem 0x00000000-0x0000ffff pref]
                    [ 0.502401] pci 0000:01:00.0: PME# supported from D0 D3hot D3cold
                    [ 0.510369] pci_bus 0000:01: busn_res: [bus 01-ff] end is updated to 01
                    [ 0.516779] pci_bus 0000:00: busn_res: [bus 00-ff] end is updated to 01
                    [ 0.523204] pci 0000:00:00.0: BAR 0: no space for [mem size 0x80000000]
                    [ 0.529594] pci 0000:00:00.0: BAR 0: failed to assign [mem size 0x80000000]
                    [ 0.536359] pci 0000:00:00.0: BAR 8: assigned [mem 0x20000000-0x200fffff]
                    [ 0.542954] pci 0000:00:00.0: BAR 9: assigned [mem 0x20100000-0x201fffff pref]
                    [ 0.549969] pci 0000:00:00.0: BAR 1: assigned [mem 0x20200000-0x2020ffff]
                    [ 0.556571] pci 0000:01:00.0: BAR 0: assigned [mem 0x20000000-0x200fffff 64bit]
                    [ 0.563681] pci 0000:01:00.0: BAR 6: assigned [mem 0x20100000-0x2010ffff pref]
                    [ 0.570675] pci 0000:00:00.0: PCI bridge to [bus 01]
                    [ 0.575494] pci 0000:00:00.0: bridge window [mem 0x20000000-0x200fffff]
                    [ 0.582086] pci 0000:00:00.0: bridge window [mem 0x20100000-0x201fffff pref]
                    [ 0.589219] workqueue: max_active 576 requested for napi_workq is out of range, clamping between 1 and 512
                    [ 0.603981] clocksource: Switched to clocksource systick
                    [ 0.610585] NET: Registered protocol family 2
                    [ 0.615716] tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 4096 bytes, linear)
                    [ 0.623876] TCP established hash table entries: 1024 (order: 0, 4096 bytes, linear)
                    [ 0.631283] TCP bind hash table entries: 1024 (order: 0, 4096 bytes, linear)
                    [ 0.638129] TCP: Hash tables configured (established 1024 bind 1024)
                    [ 0.644450] UDP hash table entries: 256 (order: 0, 4096 bytes, linear)
                    [ 0.650808] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes, linear)
                    [ 0.657873] NET: Registered protocol family 1
                    [ 0.662159] PCI: CLS 0 bytes, default 32
                    [ 1.155969] random: fast init done
                    [ 9.947844] rt-timer 10000100.timer: maximum frequency is 1220Hz
                    [ 9.956128] workingset: timestamp_bits=14 max_order=15 bucket_order=1
                    [ 9.970909] squashfs: version 4.0 (2009/01/31) Phillip Lougher
                    [ 9.976580] jffs2: version 2.2 (NAND) (SUMMARY) (LZMA) (RTIME) (CMODE_PRIORITY) © 2001-2006 Red Hat, Inc.
                    [ 10.004904] Serial: 8250/16550 driver, 2 ports, IRQ sharing disabled
                    [ 10.012331] printk: console [ttyS0] disabled
                    [ 10.016531] 10000c00.uartlite: ttyS0 at MMIO 0x10000c00 (irq = 20, base_baud = 2500000) is a Palmchip BK-3103
                    [ 10.026155] printk: console [ttyS0] enabled
                    [ 10.026155] printk: console [ttyS0] enabled
                    [ 10.034614] printk: bootconsole [early0] disabled
                    [ 10.034614] printk: bootconsole [early0] disabled
                    [ 10.051061] spi spi0.0: force spi mode3
                    [ 10.066161] spi-nor spi0.0: w25q128 (16384 Kbytes)
                    [ 10.071135] 7 fixed-partitions partitions found on MTD device spi0.0
                    [ 10.077630] Creating 7 MTD partitions on "spi0.0":
                    [ 10.082539] 0x000000000000-0x000000030000: "u-boot"
                    [ 10.088761] 0x000000030000-0x000000040000: "u-boot-env"
                    [ 10.095261] 0x000000040000-0x000000050000: "factory"
                    [ 10.101503] 0x000000050000-0x000000fd0000: "firmware"
                    [ 10.182594] 0x000000fd0000-0x000000fe0000: "crash"
                    [ 10.188762] 0x000000fe0000-0x000000ff0000: "reserved"
                    [ 10.195076] 0x000000ff0000-0x000001000000: "Bdata"
                    [ 10.202073] libphy: Fixed MDIO Bus: probed
                    [ 10.217532] gsw: setting port4 to ephy mode
                    [ 10.221896] mtk_soc_eth 10100000.ethernet eth0 (uninitialized): port 0 link up (100Mbps/Full duplex)
                    [ 10.231640] mtk_soc_eth 10100000.ethernet: loaded mt7620 driver
                    [ 10.238478] mtk_soc_eth 10100000.ethernet eth0: mediatek frame engine at 0xb0100000, irq 5
                    [ 10.247503] rt2880_wdt 10000120.watchdog: Initialized
                    [ 10.254175] NET: Registered protocol family 10
                    [ 10.262918] Segment Routing with IPv6
                    [ 10.266882] NET: Registered protocol family 17
                    [ 10.271513] 8021q: 802.1Q VLAN Support v1.8
                    [ 10.312112] Freeing unused kernel memory: 6040K
                    [ 10.316765] This architecture does not have kernel memory protection.
                    [ 10.323343] Run /init as init process
                    [ 10.980535] init: Console is alive
                    [ 10.984433] init: — watchdog — [ 11.017780] kmodloader: loading kernel modules from /etc/modules-boot.d/[ 11.038367] usbcore: registered new interface driver usbfs
                    [ 11.044162] usbcore: registered new interface driver hub
                    [ 11.049746] usbcore: registered new device driver usb
                    [ 11.061836] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
                    [ 11.077751] SCSI subsystem initialized
                    [ 11.087331] ehci-fsl: Freescale EHCI Host controller driver
                    [ 11.095310] ehci-platform: EHCI generic platform driver
                    [ 11.111080] phy phy-usbphy.0: remote usb device wakeup disabled
                    [ 11.117148] phy phy-usbphy.0: UTMI 16bit 30MHz
                    [ 11.121697] ehci-platform 101c0000.ehci: EHCI Host Controller
                    [ 11.127608] ehci-platform 101c0000.ehci: new USB bus registered, assigned bus number 1
                    [ 11.135837] ehci-platform 101c0000.ehci: irq 26, io mem 0x101c0000
                    [ 11.146913] ehci-platform 101c0000.ehci: USB 2.0 started, EHCI 1.00
                    [ 11.154372] hub 1-0:1.0: USB hub found
                    [ 11.158802] hub 1-0:1.0: 1 port detected
                    [ 11.168801] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
                    [ 11.176534] ohci-platform: OHCI generic platform driver
                    [ 11.182252] ohci-platform 101c1000.ohci: Generic Platform OHCI controller
                    [ 11.189276] ohci-platform 101c1000.ohci: new USB bus registered, assigned bus number 2
                    [ 11.197494] ohci-platform 101c1000.ohci: irq 26, io mem 0x101c1000
                    [ 11.229041] hub 2-0:1.0: USB hub found
                    [ 11.233431] hub 2-0:1.0: 1 port detected
                    [ 11.246423] usbcore: registered new interface driver usb-storage
                    [ 11.253521] kmodloader: done loading kernel modules from /etc/modules-boot.d/

                    [ 11.262512] init: — preinit — [ 11.524781] random: jshn: uninitialized urandom read (4 bytes read)
                    [ 11.618802] random: jshn: uninitialized urandom read (4 bytes read)
                    [ 11.792686] random: jshn: uninitialized urandom read (4 bytes read)
                    [ 12.192555] 8021q: adding VLAN 0 to HW filter on device eth0
                    Press the [f] key and hit [enter] to enter failsafe mode
                    Press the [1], [2], [3] or [4] key and hit [enter] to select the debug level
                    [ 13.736938] procd: — early — [ 13.740198] procd: — watchdog — [ 14.029499] procd: — watchdog — [ 14.033246] procd: — ubus — [ 14.046220] urandom_read: 5 callbacks suppressed
                    [ 14.046230] random: ubusd: uninitialized urandom read (4 bytes read)
                    [ 14.068616] random: ubusd: uninitialized urandom read (4 bytes read)
                    [ 14.076892] procd: — init — Please press Enter to activate this console.
                    [ 14.794150] kmodloader: loading kernel modules from /etc/modules.d/[ 14.840579] Loading modules backported from Linux version v5.8.18-0-gab435ce49bd1
                    [ 14.848305] Backport generated by backports.git v5.8.18-1-0-ga630fd46
                    [ 14.922657] xt_time: kernel timezone is -0000
                    [ 15.074785] mt76x2e 0000:01:00.0: card — bus=0x1, slot = 0x0 irq=4
                    [ 15.081431] mt76x2e 0000:01:00.0: ASIC revision: 76120044
                    [ 15.157826] urngd: jent-rng init failed, err: 2
                    [ 15.362386] mt76x2e 0000:01:00.0: ROM patch build: 20141115060606a
                    [ 15.373700] mt76x2e 0000:01:00.0: Firmware Version: 0.0.00
                    [ 15.379363] mt76x2e 0000:01:00.0: Build: 1
                    [ 15.383556] mt76x2e 0000:01:00.0: Build Time: 201507311614____
                    [ 15.399525] mt76x2e 0000:01:00.0: Firmware running!
                    [ 15.466057] PPP generic driver version 2.4.2
                    [ 15.480605] NET: Registered protocol family 24
                    [ 15.569310] rt2800_wmac 10180000.wmac: loaded eeprom from mtd device "factory"
                    [ 15.576771] ieee80211 phy1: rt2x00_set_rt: Info — RT chipset 6352, rev 0500 detected
                    [ 15.584717] ieee80211 phy1: rt2x00_set_rf: Info — RF chipset 7620 detected
                    [ 15.631836] kmodloader: done loading kernel modules from /etc/modules.d/

                    [ 21.502554] random: crng init done
                    [ 70.879662] 8021q: adding VLAN 0 to HW filter on device eth0
                    [ 70.904804] br-lan: port 1(eth0.1) entered blocking state
                    [ 70.910407] br-lan: port 1(eth0.1) entered disabled state
                    [ 70.916372] device eth0.1 entered promiscuous mode
                    [ 70.921325] device eth0 entered promiscuous mode
                    [ 70.958642] br-lan: port 1(eth0.1) entered blocking state
                    [ 70.964194] br-lan: port 1(eth0.1) entered forwarding state
                    [ 71.895034] IPv6: ADDRCONF(NETDEV_CHANGE): br-lan: link becomes ready


                    вариант `squashfs-sysupgrade` (первая загрузка)
                    Checking image at bc050000 ...

                    Image Name: MIPS OpenWrt Linux-5.4.93
                    Image Type: MIPS Linux Kernel Image (lzma compressed)
                    Data Size: 1995820 Bytes = 1.9 MB
                    Load Address: 80000000
                    Entry Point: 80000000
                    Verifying Checksum… OK
                    Uncompressing Kernel Image… OK


                    Starting kernel ...


                    [ 0.000000] Linux version 5.4.93 (serg@ubuntu) (gcc version 8.4.0 (OpenWrt GCC 8.4.0 r15667-84fa59b5a8)) #0 Mon Feb 1 09:00:23 2021
                    [ 0.000000] Board has DDR2
                    [ 0.000000] Analog PMU set to hw control
                    [ 0.000000] Digital PMU set to hw control
                    [ 0.000000] SoC Type: MediaTek MT7620A ver:2 eco:6
                    [ 0.000000] printk: bootconsole [early0] enabled
                    [ 0.000000] CPU0 revision is: 00019650 (MIPS 24KEc)
                    [ 0.000000] MIPS: machine is Xiaomi MiWiFi Mini
                    [ 0.000000] Initrd not found or empty — disabling initrd
                    [ 0.000000] Primary instruction cache 64kB, VIPT, 4-way, linesize 32 bytes.
                    [ 0.000000] Primary data cache 32kB, 4-way, PIPT, no aliases, linesize 32 bytes
                    [ 0.000000] Zone ranges:
                    [ 0.000000] Normal [mem 0x0000000000000000-0x0000000007ffffff]
                    [ 0.000000] Movable zone start for each node
                    [ 0.000000] Early memory node ranges
                    [ 0.000000] node 0: [mem 0x0000000000000000-0x0000000007ffffff]
                    [ 0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x0000000007ffffff]
                    [ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 32480
                    [ 0.000000] Kernel command line: console=ttyS0,115200 rootfstype=squashfs,jffs2
                    [ 0.000000] Dentry cache hash table entries: 16384 (order: 4, 65536 bytes, linear)
                    [ 0.000000] Inode-cache hash table entries: 8192 (order: 3, 32768 bytes, linear)
                    [ 0.000000] Writing ErrCtl register=0002d450
                    [ 0.000000] Readback ErrCtl register=0002d450
                    [ 0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
                    [ 0.000000] Memory: 122352K/131072K available (4735K kernel code, 205K rwdata, 1044K rodata, 1176K init, 205K bss, 8720K reserved, 0K cma-reserved)
                    [ 0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
                    [ 0.000000] NR_IRQS: 256
                    [ 0.000000] random: get_random_bytes called from start_kernel+0x32c/0x520 with crng_init=0
                    [ 0.000000] CPU Clock: 580MHz
                    [ 0.000000] clocksource: systick: mask: 0xffff max_cycles: 0xffff, max_idle_ns: 583261500 ns
                    [ 0.000000] systick: enable autosleep mode
                    [ 0.000000] systick: running — mult: 214748, shift: 32
                    [ 0.000000] clocksource: MIPS: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 6590553264 ns
                    [ 0.000011] sched_clock: 32 bits at 290MHz, resolution 3ns, wraps every 7405115902ns
                    [ 0.007593] Calibrating delay loop… 385.02 BogoMIPS (lpj=770048)
                    [ 0.045485] pid_max: default: 32768 minimum: 301
                    [ 0.050186] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
                    [ 0.057245] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
                    [ 0.071709] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
                    [ 0.081190] futex hash table entries: 256 (order: -1, 3072 bytes, linear)
                    [ 0.087878] pinctrl core: initialized pinctrl subsystem
                    [ 0.093559] NET: Registered protocol family 16
                    [ 0.360537] PCI host bridge /pcie@10140000 ranges:
                    [ 0.365157] MEM 0x0000000020000000..0x000000002fffffff
                    [ 0.370213] IO 0x0000000010160000..0x000000001016ffff
                    [ 0.398681] rt2880_gpio 10000600.gpio: registering 24 gpios
                    [ 0.404161] rt2880_gpio 10000600.gpio: registering 24 irq handlers
                    [ 0.410504] rt2880_gpio 10000638.gpio: registering 16 gpios
                    [ 0.415934] rt2880_gpio 10000638.gpio: registering 16 irq handlers
                    [ 0.422788] PCI host bridge to bus 0000:00
                    [ 0.426771] pci_bus 0000:00: root bus resource [mem 0x20000000-0x2fffffff]
                    [ 0.433397] pci_bus 0000:00: root bus resource [io 0xffffffff]
                    [ 0.439145] pci_bus 0000:00: root bus resource [??? 0x00000000 flags 0x0]
                    [ 0.445736] pci_bus 0000:00: No busn resource found for root bus, will use [bus 00-ff]
                    [ 0.453474] pci 0000:00:00.0: [1814:0801] type 01 class 0x060400
                    [ 0.459294] pci 0000:00:00.0: reg 0x10: [mem 0x00000000-0x7fffffff]
                    [ 0.465356] pci 0000:00:00.0: reg 0x14: [mem 0x20200000-0x2020ffff]
                    [ 0.471525] pci 0000:00:00.0: supports D1
                    [ 0.475349] pci 0000:00:00.0: PME# supported from D0 D1 D3hot
                    [ 0.483242] pci 0000:01:00.0: [14c3:7662] type 00 class 0x028000
                    [ 0.489127] pci 0000:01:00.0: reg 0x10: [mem 0x00000000-0x000fffff 64bit]
                    [ 0.495719] pci 0000:01:00.0: reg 0x30: [mem 0x00000000-0x0000ffff pref]
                    [ 0.502298] pci 0000:01:00.0: PME# supported from D0 D3hot D3cold
                    [ 0.510259] pci_bus 0000:01: busn_res: [bus 01-ff] end is updated to 01
                    [ 0.516668] pci_bus 0000:00: busn_res: [bus 00-ff] end is updated to 01
                    [ 0.523093] pci 0000:00:00.0: BAR 0: no space for [mem size 0x80000000]
                    [ 0.529483] pci 0000:00:00.0: BAR 0: failed to assign [mem size 0x80000000]
                    [ 0.536249] pci 0000:00:00.0: BAR 8: assigned [mem 0x20000000-0x200fffff]
                    [ 0.542844] pci 0000:00:00.0: BAR 9: assigned [mem 0x20100000-0x201fffff pref]
                    [ 0.549858] pci 0000:00:00.0: BAR 1: assigned [mem 0x20200000-0x2020ffff]
                    [ 0.556461] pci 0000:01:00.0: BAR 0: assigned [mem 0x20000000-0x200fffff 64bit]
                    [ 0.563571] pci 0000:01:00.0: BAR 6: assigned [mem 0x20100000-0x2010ffff pref]
                    [ 0.570564] pci 0000:00:00.0: PCI bridge to [bus 01]
                    [ 0.575384] pci 0000:00:00.0: bridge window [mem 0x20000000-0x200fffff]
                    [ 0.581975] pci 0000:00:00.0: bridge window [mem 0x20100000-0x201fffff pref]
                    [ 0.589108] workqueue: max_active 576 requested for napi_workq is out of range, clamping between 1 and 512
                    [ 0.603865] clocksource: Switched to clocksource systick
                    [ 0.610457] NET: Registered protocol family 2
                    [ 0.615587] tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 4096 bytes, linear)
                    [ 0.623748] TCP established hash table entries: 1024 (order: 0, 4096 bytes, linear)
                    [ 0.631154] TCP bind hash table entries: 1024 (order: 0, 4096 bytes, linear)
                    [ 0.638000] TCP: Hash tables configured (established 1024 bind 1024)
                    [ 0.644323] UDP hash table entries: 256 (order: 0, 4096 bytes, linear)
                    [ 0.650680] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes, linear)
                    [ 0.657750] NET: Registered protocol family 1
                    [ 0.662032] PCI: CLS 0 bytes, default 32
                    [ 0.668952] rt-timer 10000100.timer: maximum frequency is 1220Hz
                    [ 0.677210] workingset: timestamp_bits=14 max_order=15 bucket_order=1
                    [ 0.692073] squashfs: version 4.0 (2009/01/31) Phillip Lougher
                    [ 0.697715] jffs2: version 2.2 (NAND) (SUMMARY) (LZMA) (RTIME) (CMODE_PRIORITY) © 2001-2006 Red Hat, Inc.
                    [ 0.725885] Serial: 8250/16550 driver, 2 ports, IRQ sharing disabled
                    [ 0.733251] printk: console [ttyS0] disabled
                    [ 0.737471] 10000c00.uartlite: ttyS0 at MMIO 0x10000c00 (irq = 20, base_baud = 2500000) is a Palmchip BK-3103
                    [ 0.747094] printk: console [ttyS0] enabled
                    [ 0.747094] printk: console [ttyS0] enabled
                    [ 0.755552] printk: bootconsole [early0] disabled
                    [ 0.755552] printk: bootconsole [early0] disabled
                    [ 0.772125] spi spi0.0: force spi mode3
                    [ 0.787313] spi-nor spi0.0: w25q128 (16384 Kbytes)
                    [ 0.792294] 7 fixed-partitions partitions found on MTD device spi0.0
                    [ 0.798788] Creating 7 MTD partitions on "spi0.0":
                    [ 0.803698] 0x000000000000-0x000000030000: "u-boot"
                    [ 0.809830] 0x000000030000-0x000000040000: "u-boot-env"
                    [ 0.816473] 0x000000040000-0x000000050000: "factory"
                    [ 0.822687] 0x000000050000-0x000000fd0000: "firmware"
                    [ 0.832463] 2 uimage-fw partitions found on MTD device firmware
                    [ 0.838576] Creating 2 MTD partitions on "firmware":
                    [ 0.843668] 0x000000000000-0x0000001e746c: "kernel"
                    [ 0.849811] 0x0000001e746c-0x000000f80000: "rootfs"
                    [ 0.855977] mtd: device 5 (rootfs) set to be root filesystem
                    [ 0.863639] 1 squashfs-split partitions found on MTD device rootfs
                    [ 0.870046] 0x0000006dd000-0x000000f80000: "rootfs_data"
                    [ 0.876692] 0x000000fd0000-0x000000fe0000: "crash"
                    [ 0.882752] 0x000000fe0000-0x000000ff0000: "reserved"
                    [ 0.889120] 0x000000ff0000-0x000001000000: "Bdata"
                    [ 0.896178] libphy: Fixed MDIO Bus: probed
                    [ 0.912454] gsw: setting port4 to ephy mode
                    [ 0.916803] mtk_soc_eth 10100000.ethernet eth0 (uninitialized): port 0 link up (100Mbps/Full duplex)
                    [ 0.926678] mtk_soc_eth 10100000.ethernet: loaded mt7620 driver
                    [ 0.933521] mtk_soc_eth 10100000.ethernet eth0: mediatek frame engine at 0xb0100000, irq 5
                    [ 0.942538] rt2880_wdt 10000120.watchdog: Initialized
                    [ 0.949238] NET: Registered protocol family 10
                    [ 0.958096] Segment Routing with IPv6
                    [ 0.962060] NET: Registered protocol family 17
                    [ 0.966694] 8021q: 802.1Q VLAN Support v1.8
                    [ 0.983250] VFS: Mounted root (squashfs filesystem) readonly on device 31:5.
                    [ 0.997255] Freeing unused kernel memory: 1176K
                    [ 1.001910] This architecture does not have kernel memory protection.
                    [ 1.008489] Run /sbin/init as init process
                    [ 1.207809] random: fast init done
                    [ 2.757587] init: Console is alive
                    [ 2.761489] init: — watchdog — [ 5.198920] kmodloader: loading kernel modules from /etc/modules-boot.d/[ 5.473801] usbcore: registered new interface driver usbfs
                    [ 5.479595] usbcore: registered new interface driver hub
                    [ 5.485175] usbcore: registered new device driver usb
                    [ 5.497456] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
                    [ 5.513462] SCSI subsystem initialized
                    [ 5.523083] ehci-fsl: Freescale EHCI Host controller driver
                    [ 5.531018] ehci-platform: EHCI generic platform driver
                    [ 5.546777] phy phy-usbphy.0: remote usb device wakeup disabled
                    [ 5.552840] phy phy-usbphy.0: UTMI 16bit 30MHz
                    [ 5.557389] ehci-platform 101c0000.ehci: EHCI Host Controller
                    [ 5.563299] ehci-platform 101c0000.ehci: new USB bus registered, assigned bus number 1
                    [ 5.571535] ehci-platform 101c0000.ehci: irq 26, io mem 0x101c0000
                    [ 5.582650] ehci-platform 101c0000.ehci: USB 2.0 started, EHCI 1.00
                    [ 5.590153] hub 1-0:1.0: USB hub found
                    [ 5.594537] hub 1-0:1.0: 1 port detected
                    [ 5.604614] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
                    [ 5.612364] ohci-platform: OHCI generic platform driver
                    [ 5.618080] ohci-platform 101c1000.ohci: Generic Platform OHCI controller
                    [ 5.625100] ohci-platform 101c1000.ohci: new USB bus registered, assigned bus number 2
                    [ 5.633327] ohci-platform 101c1000.ohci: irq 26, io mem 0x101c1000
                    [ 5.664850] hub 2-0:1.0: USB hub found
                    [ 5.669217] hub 2-0:1.0: 1 port detected
                    [ 5.682291] usbcore: registered new interface driver usb-storage
                    [ 5.689376] kmodloader: done loading kernel modules from /etc/modules-boot.d/

                    [ 5.698328] init: — preinit — [ 7.778988] random: jshn: uninitialized urandom read (4 bytes read)
                    [ 7.872464] random: jshn: uninitialized urandom read (4 bytes read)
                    [ 8.046504] random: jshn: uninitialized urandom read (4 bytes read)
                    [ 9.002924] 8021q: adding VLAN 0 to HW filter on device eth0
                    Press the [f] key and hit [enter] to enter failsafe mode
                    Press the [1], [2], [3] or [4] key and hit [enter] to select the debug level
                    [ 9.079881] urandom_read: 4 callbacks suppressed
                    [ 9.079890] random: procd: uninitialized urandom read (4 bytes read)
                    [ 10.662711] mount_root: jffs2 not ready yet, using temporary tmpfs overlay
                    [ 10.674703] urandom-seed: Seed file not found (/etc/urandom.seed)
                    [ 10.821081] procd: — early — [ 10.824140] procd: — watchdog — [ 11.246636] procd: — watchdog — [ 11.250619] procd: — ubus — [ 11.296289] random: ubusd: uninitialized urandom read (4 bytes read)
                    [ 11.305549] random: ubusd: uninitialized urandom read (4 bytes read)
                    [ 11.313950] procd: — init — Please press Enter to activate this console.
                    [ 12.382366] kmodloader: loading kernel modules from /etc/modules.d/[ 12.594885] Loading modules backported from Linux version v5.8.18-0-gab435ce49bd1
                    [ 12.602615] Backport generated by backports.git v5.8.18-1-0-ga630fd46
                    [ 12.677612] xt_time: kernel timezone is -0000
                    [ 12.905125] mt76x2e 0000:01:00.0: card — bus=0x1, slot = 0x0 irq=4
                    [ 12.911780] mt76x2e 0000:01:00.0: ASIC revision: 76120044
                    [ 12.982128] urngd: jent-rng init failed, err: 2
                    [ 13.190071] mt76x2e 0000:01:00.0: ROM patch build: 20141115060606a
                    [ 13.202134] mt76x2e 0000:01:00.0: Firmware Version: 0.0.00
                    [ 13.207818] mt76x2e 0000:01:00.0: Build: 1
                    [ 13.212011] mt76x2e 0000:01:00.0: Build Time: 201507311614____
                    [ 13.227583] mt76x2e 0000:01:00.0: Firmware running!
                    [ 13.294518] PPP generic driver version 2.4.2
                    [ 13.308742] NET: Registered protocol family 24
                    [ 13.441444] rt2800_wmac 10180000.wmac: loaded eeprom from mtd device "factory"
                    [ 13.448919] ieee80211 phy1: rt2x00_set_rt: Info — RT chipset 6352, rev 0500 detected
                    [ 13.456869] ieee80211 phy1: rt2x00_set_rf: Info — RF chipset 7620 detected
                    [ 13.472912] kmodloader: done loading kernel modules from /etc/modules.d/

                    [ 21.430159] random: crng init done
                    [ 76.088002] jffs2_scan_eraseblock(): End of filesystem marker found at 0x0
                    [ 76.110743] jffs2_build_filesystem(): unlocking the mtd device…
                    [ 76.112231] done.
                    [ 76.120579] jffs2_build_filesystem(): erasing all blocks after the end marker…
                    [ 81.905771] 8021q: adding VLAN 0 to HW filter on device eth0
                    [ 81.969037] br-lan: port 1(eth0.1) entered blocking state
                    [ 81.974653] br-lan: port 1(eth0.1) entered disabled state
                    [ 81.980601] device eth0.1 entered promiscuous mode
                    [ 81.985555] device eth0 entered promiscuous mode
                    [ 82.082567] br-lan: port 1(eth0.1) entered blocking state
                    [ 82.088127] br-lan: port 1(eth0.1) entered forwarding state
                    [ 82.910645] IPv6: ADDRCONF(NETDEV_CHANGE): br-lan: link becomes ready


                    вариант `squashfs-sysupgrade` (последующие загрузки)
                    Checking image at bc050000 ...

                    Image Name: MIPS OpenWrt Linux-5.4.93
                    Image Type: MIPS Linux Kernel Image (lzma compressed)
                    Data Size: 1995820 Bytes = 1.9 MB
                    Load Address: 80000000
                    Entry Point: 80000000
                    Verifying Checksum… OK
                    Uncompressing Kernel Image… OK


                    Starting kernel ...


                    [ 0.000000] Linux version 5.4.93 (serg@ubuntu) (gcc version 8.4.0 (OpenWrt GCC 8.4.0 r15667-84fa59b5a8)) #0 Mon Feb 1 09:00:23 2021
                    [ 0.000000] Board has DDR2
                    [ 0.000000] Analog PMU set to hw control
                    [ 0.000000] Digital PMU set to hw control
                    [ 0.000000] SoC Type: MediaTek MT7620A ver:2 eco:6
                    [ 0.000000] printk: bootconsole [early0] enabled
                    [ 0.000000] CPU0 revision is: 00019650 (MIPS 24KEc)
                    [ 0.000000] MIPS: machine is Xiaomi MiWiFi Mini
                    [ 0.000000] Initrd not found or empty — disabling initrd
                    [ 0.000000] Primary instruction cache 64kB, VIPT, 4-way, linesize 32 bytes.
                    [ 0.000000] Primary data cache 32kB, 4-way, PIPT, no aliases, linesize 32 bytes
                    [ 0.000000] Zone ranges:
                    [ 0.000000] Normal [mem 0x0000000000000000-0x0000000007ffffff]
                    [ 0.000000] Movable zone start for each node
                    [ 0.000000] Early memory node ranges
                    [ 0.000000] node 0: [mem 0x0000000000000000-0x0000000007ffffff]
                    [ 0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x0000000007ffffff]
                    [ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 32480
                    [ 0.000000] Kernel command line: console=ttyS0,115200 rootfstype=squashfs,jffs2
                    [ 0.000000] Dentry cache hash table entries: 16384 (order: 4, 65536 bytes, linear)
                    [ 0.000000] Inode-cache hash table entries: 8192 (order: 3, 32768 bytes, linear)
                    [ 0.000000] Writing ErrCtl register=0003c050
                    [ 0.000000] Readback ErrCtl register=0003c050
                    [ 0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
                    [ 0.000000] Memory: 122352K/131072K available (4735K kernel code, 205K rwdata, 1044K rodata, 1176K init, 205K bss, 8720K reserved, 0K cma-reserved)
                    [ 0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
                    [ 0.000000] NR_IRQS: 256
                    [ 0.000000] random: get_random_bytes called from start_kernel+0x32c/0x520 with crng_init=0
                    [ 0.000000] CPU Clock: 580MHz
                    [ 0.000000] clocksource: systick: mask: 0xffff max_cycles: 0xffff, max_idle_ns: 583261500 ns
                    [ 0.000000] systick: enable autosleep mode
                    [ 0.000000] systick: running — mult: 214748, shift: 32
                    [ 0.000000] clocksource: MIPS: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 6590553264 ns
                    [ 0.000011] sched_clock: 32 bits at 290MHz, resolution 3ns, wraps every 7405115902ns
                    [ 0.007593] Calibrating delay loop… 385.02 BogoMIPS (lpj=770048)
                    [ 0.045491] pid_max: default: 32768 minimum: 301
                    [ 0.050191] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
                    [ 0.057250] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
                    [ 0.071714] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
                    [ 0.081195] futex hash table entries: 256 (order: -1, 3072 bytes, linear)
                    [ 0.087883] pinctrl core: initialized pinctrl subsystem
                    [ 0.093564] NET: Registered protocol family 16
                    [ 0.360542] PCI host bridge /pcie@10140000 ranges:
                    [ 0.365163] MEM 0x0000000020000000..0x000000002fffffff
                    [ 0.370219] IO 0x0000000010160000..0x000000001016ffff
                    [ 0.398683] rt2880_gpio 10000600.gpio: registering 24 gpios
                    [ 0.404163] rt2880_gpio 10000600.gpio: registering 24 irq handlers
                    [ 0.410506] rt2880_gpio 10000638.gpio: registering 16 gpios
                    [ 0.415936] rt2880_gpio 10000638.gpio: registering 16 irq handlers
                    [ 0.422790] PCI host bridge to bus 0000:00
                    [ 0.426773] pci_bus 0000:00: root bus resource [mem 0x20000000-0x2fffffff]
                    [ 0.433399] pci_bus 0000:00: root bus resource [io 0xffffffff]
                    [ 0.439147] pci_bus 0000:00: root bus resource [??? 0x00000000 flags 0x0]
                    [ 0.445738] pci_bus 0000:00: No busn resource found for root bus, will use [bus 00-ff]
                    [ 0.453477] pci 0000:00:00.0: [1814:0801] type 01 class 0x060400
                    [ 0.459296] pci 0000:00:00.0: reg 0x10: [mem 0x00000000-0x7fffffff]
                    [ 0.465359] pci 0000:00:00.0: reg 0x14: [mem 0x20200000-0x2020ffff]
                    [ 0.471527] pci 0000:00:00.0: supports D1
                    [ 0.475351] pci 0000:00:00.0: PME# supported from D0 D1 D3hot
                    [ 0.483244] pci 0000:01:00.0: [14c3:7662] type 00 class 0x028000
                    [ 0.489129] pci 0000:01:00.0: reg 0x10: [mem 0x00000000-0x000fffff 64bit]
                    [ 0.495722] pci 0000:01:00.0: reg 0x30: [mem 0x00000000-0x0000ffff pref]
                    [ 0.502300] pci 0000:01:00.0: PME# supported from D0 D3hot D3cold
                    [ 0.510260] pci_bus 0000:01: busn_res: [bus 01-ff] end is updated to 01
                    [ 0.516669] pci_bus 0000:00: busn_res: [bus 00-ff] end is updated to 01
                    [ 0.523095] pci 0000:00:00.0: BAR 0: no space for [mem size 0x80000000]
                    [ 0.529485] pci 0000:00:00.0: BAR 0: failed to assign [mem size 0x80000000]
                    [ 0.536250] pci 0000:00:00.0: BAR 8: assigned [mem 0x20000000-0x200fffff]
                    [ 0.542846] pci 0000:00:00.0: BAR 9: assigned [mem 0x20100000-0x201fffff pref]
                    [ 0.549860] pci 0000:00:00.0: BAR 1: assigned [mem 0x20200000-0x2020ffff]
                    [ 0.556463] pci 0000:01:00.0: BAR 0: assigned [mem 0x20000000-0x200fffff 64bit]
                    [ 0.563572] pci 0000:01:00.0: BAR 6: assigned [mem 0x20100000-0x2010ffff pref]
                    [ 0.570566] pci 0000:00:00.0: PCI bridge to [bus 01]
                    [ 0.575385] pci 0000:00:00.0: bridge window [mem 0x20000000-0x200fffff]
                    [ 0.581977] pci 0000:00:00.0: bridge window [mem 0x20100000-0x201fffff pref]
                    [ 0.589110] workqueue: max_active 576 requested for napi_workq is out of range, clamping between 1 and 512
                    [ 0.603865] clocksource: Switched to clocksource systick
                    [ 0.610458] NET: Registered protocol family 2
                    [ 0.615589] tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 4096 bytes, linear)
                    [ 0.623749] TCP established hash table entries: 1024 (order: 0, 4096 bytes, linear)
                    [ 0.631155] TCP bind hash table entries: 1024 (order: 0, 4096 bytes, linear)
                    [ 0.638002] TCP: Hash tables configured (established 1024 bind 1024)
                    [ 0.644325] UDP hash table entries: 256 (order: 0, 4096 bytes, linear)
                    [ 0.650682] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes, linear)
                    [ 0.657751] NET: Registered protocol family 1
                    [ 0.662034] PCI: CLS 0 bytes, default 32
                    [ 0.668953] rt-timer 10000100.timer: maximum frequency is 1220Hz
                    [ 0.677212] workingset: timestamp_bits=14 max_order=15 bucket_order=1
                    [ 0.692078] squashfs: version 4.0 (2009/01/31) Phillip Lougher
                    [ 0.697720] jffs2: version 2.2 (NAND) (SUMMARY) (LZMA) (RTIME) (CMODE_PRIORITY) © 2001-2006 Red Hat, Inc.
                    [ 0.725890] Serial: 8250/16550 driver, 2 ports, IRQ sharing disabled
                    [ 0.733256] printk: console [ttyS0] disabled
                    [ 0.737476] 10000c00.uartlite: ttyS0 at MMIO 0x10000c00 (irq = 20, base_baud = 2500000) is a Palmchip BK-3103
                    [ 0.747099] printk: console [ttyS0] enabled
                    [ 0.747099] printk: console [ttyS0] enabled
                    [ 0.755557] printk: bootconsole [early0] disabled
                    [ 0.755557] printk: bootconsole [early0] disabled
                    [ 0.772131] spi spi0.0: force spi mode3
                    [ 0.787336] spi-nor spi0.0: w25q128 (16384 Kbytes)
                    [ 0.792318] 7 fixed-partitions partitions found on MTD device spi0.0
                    [ 0.798812] Creating 7 MTD partitions on "spi0.0":
                    [ 0.803722] 0x000000000000-0x000000030000: "u-boot"
                    [ 0.809854] 0x000000030000-0x000000040000: "u-boot-env"
                    [ 0.816496] 0x000000040000-0x000000050000: "factory"
                    [ 0.822712] 0x000000050000-0x000000fd0000: "firmware"
                    [ 0.832481] 2 uimage-fw partitions found on MTD device firmware
                    [ 0.838592] Creating 2 MTD partitions on "firmware":
                    [ 0.843685] 0x000000000000-0x0000001e746c: "kernel"
                    [ 0.849834] 0x0000001e746c-0x000000f80000: "rootfs"
                    [ 0.855999] mtd: device 5 (rootfs) set to be root filesystem
                    [ 0.863662] 1 squashfs-split partitions found on MTD device rootfs
                    [ 0.870070] 0x0000006dd000-0x000000f80000: "rootfs_data"
                    [ 0.876717] 0x000000fd0000-0x000000fe0000: "crash"
                    [ 0.882779] 0x000000fe0000-0x000000ff0000: "reserved"
                    [ 0.889147] 0x000000ff0000-0x000001000000: "Bdata"
                    [ 0.896207] libphy: Fixed MDIO Bus: probed
                    [ 0.912488] gsw: setting port4 to ephy mode
                    [ 0.916836] mtk_soc_eth 10100000.ethernet eth0 (uninitialized): port 0 link up (100Mbps/Full duplex)
                    [ 0.926710] mtk_soc_eth 10100000.ethernet: loaded mt7620 driver
                    [ 0.933553] mtk_soc_eth 10100000.ethernet eth0: mediatek frame engine at 0xb0100000, irq 5
                    [ 0.942570] rt2880_wdt 10000120.watchdog: Initialized
                    [ 0.949271] NET: Registered protocol family 10
                    [ 0.958131] Segment Routing with IPv6
                    [ 0.962095] NET: Registered protocol family 17
                    [ 0.966729] 8021q: 802.1Q VLAN Support v1.8
                    [ 0.983307] VFS: Mounted root (squashfs filesystem) readonly on device 31:5.
                    [ 0.997291] Freeing unused kernel memory: 1176K
                    [ 1.001945] This architecture does not have kernel memory protection.
                    [ 1.008522] Run /sbin/init as init process
                    [ 1.207815] random: fast init done
                    [ 2.757660] init: Console is alive
                    [ 2.761561] init: — watchdog — [ 5.198852] kmodloader: loading kernel modules from /etc/modules-boot.d/[ 5.473758] usbcore: registered new interface driver usbfs
                    [ 5.479550] usbcore: registered new interface driver hub
                    [ 5.485130] usbcore: registered new device driver usb
                    [ 5.497352] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
                    [ 5.513337] SCSI subsystem initialized
                    [ 5.522930] ehci-fsl: Freescale EHCI Host controller driver
                    [ 5.530852] ehci-platform: EHCI generic platform driver
                    [ 5.546610] phy phy-usbphy.0: remote usb device wakeup disabled
                    [ 5.552672] phy phy-usbphy.0: UTMI 16bit 30MHz
                    [ 5.557221] ehci-platform 101c0000.ehci: EHCI Host Controller
                    [ 5.563130] ehci-platform 101c0000.ehci: new USB bus registered, assigned bus number 1
                    [ 5.571365] ehci-platform 101c0000.ehci: irq 26, io mem 0x101c0000
                    [ 5.582538] ehci-platform 101c0000.ehci: USB 2.0 started, EHCI 1.00
                    [ 5.590040] hub 1-0:1.0: USB hub found
                    [ 5.594427] hub 1-0:1.0: 1 port detected
                    [ 5.604475] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
                    [ 5.612213] ohci-platform: OHCI generic platform driver
                    [ 5.617930] ohci-platform 101c1000.ohci: Generic Platform OHCI controller
                    [ 5.624950] ohci-platform 101c1000.ohci: new USB bus registered, assigned bus number 2
                    [ 5.633175] ohci-platform 101c1000.ohci: irq 26, io mem 0x101c1000
                    [ 5.664713] hub 2-0:1.0: USB hub found
                    [ 5.669079] hub 2-0:1.0: 1 port detected
                    [ 5.682124] usbcore: registered new interface driver usb-storage
                    [ 5.689211] kmodloader: done loading kernel modules from /etc/modules-boot.d/

                    [ 5.698162] init: — preinit — [ 7.777126] random: jshn: uninitialized urandom read (4 bytes read)
                    [ 7.871637] random: jshn: uninitialized urandom read (4 bytes read)
                    [ 8.052320] random: jshn: uninitialized urandom read (4 bytes read)
                    [ 9.006354] 8021q: adding VLAN 0 to HW filter on device eth0
                    Press the [f] key and hit [enter] to enter failsafe mode
                    Press the [1], [2], [3] or [4] key and hit [enter] to select the debug level
                    [ 9.086966] urandom_read: 4 callbacks suppressed
                    [ 9.086976] random: procd: uninitialized urandom read (4 bytes read)
                    [ 11.898550] jffs2: notice: (477) jffs2_build_xattr_subsystem: complete building xattr subsystem, 6 of xdatum (5 unchecked, 1 orphan) and 7 of xref (1 dead, 0 orphan) found.
                    [ 11.917436] mount_root: switching to jffs2 overlay
                    [ 11.934553] overlayfs: upper fs does not support tmpfile.
                    [ 11.950329] urandom-seed: Seeding with /etc/urandom.seed
                    [ 12.112905] procd: — early — [ 12.115975] procd: — watchdog — [ 12.549626] procd: — watchdog — [ 12.553675] procd: — ubus — [ 12.599381] random: ubusd: uninitialized urandom read (4 bytes read)
                    [ 12.609088] random: ubusd: uninitialized urandom read (4 bytes read)
                    [ 12.618748] procd: — init — Please press Enter to activate this console.
                    [ 13.705253] kmodloader: loading kernel modules from /etc/modules.d/[ 13.917829] Loading modules backported from Linux version v5.8.18-0-gab435ce49bd1
                    [ 13.925574] Backport generated by backports.git v5.8.18-1-0-ga630fd46
                    [ 13.999969] xt_time: kernel timezone is -0000
                    [ 14.232620] mt76x2e 0000:01:00.0: card — bus=0x1, slot = 0x0 irq=4
                    [ 14.239295] mt76x2e 0000:01:00.0: ASIC revision: 76120044
                    [ 14.308028] urngd: jent-rng init failed, err: 2
                    [ 14.515001] mt76x2e 0000:01:00.0: ROM patch build: 20141115060606a
                    [ 14.527006] mt76x2e 0000:01:00.0: Firmware Version: 0.0.00
                    [ 14.532681] mt76x2e 0000:01:00.0: Build: 1
                    [ 14.536874] mt76x2e 0000:01:00.0: Build Time: 201507311614____
                    [ 14.552480] mt76x2e 0000:01:00.0: Firmware running!
                    [ 14.619257] PPP generic driver version 2.4.2
                    [ 14.633654] NET: Registered protocol family 24
                    [ 14.766884] rt2800_wmac 10180000.wmac: loaded eeprom from mtd device "factory"
                    [ 14.774370] ieee80211 phy1: rt2x00_set_rt: Info — RT chipset 6352, rev 0500 detected
                    [ 14.782319] ieee80211 phy1: rt2x00_set_rf: Info — RF chipset 7620 detected
                    [ 14.798228] kmodloader: done loading kernel modules from /etc/modules.d/

                    [ 20.273014] random: crng init done
                    [ 29.146252] 8021q: adding VLAN 0 to HW filter on device eth0
                    [ 29.170302] br-lan: port 1(eth0.1) entered blocking state
                    [ 29.175917] br-lan: port 1(eth0.1) entered disabled state
                    [ 29.181867] device eth0.1 entered promiscuous mode
                    [ 29.186815] device eth0 entered promiscuous mode
                    [ 29.225888] br-lan: port 1(eth0.1) entered blocking state
                    [ 29.231479] br-lan: port 1(eth0.1) entered forwarding state
                    [ 30.145468] IPv6: ADDRCONF(NETDEV_CHANGE): br-lan: link becomes ready


                    Но вариант initramfs-kernel лучше, когда нужно запустить систему из оперативки (не прошивая во флеш-память).
                    При выборе в U-Boot пункта "1: System Load Linux to SDRAM via TFTP" и загрузке образа initramfs-kernel получаем систему с kernel, rootfs и rootfs_data из этого-таки образа.
                    А если запустить с оперативки вариант squashfs-sysupgrade, то получаем kernel из образа, а остальное — из флеш памяти. Перемешалось всё — люди, кони образ, флеш-память… Думаю, понятно, что такая система вряд-ли будет стабильна.

                    Only users with full accounts can post comments. Log in, please.