Тут я начну разговор о структуре флеш памяти (nand) этого роутера и коснусь структуры прошивок (стока и lede).
Итак. Память nand (128 метров). В самом начале идут разделы с загрузчиками (их два), каллибровками и прочей "ерундой"
Вот так "видит" флеш прошивка lede
Код: Выделить всё
root@LEDE:~# cat /proc/mtd
dev: size erasesize name
mtd0: 00040000 00010000 "SBL1"
mtd1: 00020000 00010000 "MIBIB"
mtd2: 00060000 00010000 "QSEE"
mtd3: 00010000 00010000 "CDT"
mtd4: 00010000 00010000 "DDRPARAMS"
mtd5: 00010000 00010000 "APPSBLENV"
mtd6: 00080000 00010000 "APPSBL"
mtd7: 00010000 00010000 "ART"
mtd8: 08000000 00020000 "UBI_DEV"
Сразу скажу разделы mtd0-mtd7 видны в стоковой прошивке как один раздел mtd0. Собственно эти разделы не стоит трогать, переписывать, портить - получите кирпич и потребуется программатор. Из интересного тут SBL1 - первый бутлоадер, который передает управление APPSBL бутлоадеру U-Boot (адаптированному компанией Асус именно для этой модели). В свою очереть U-Boot загружает ядро и передает ему управление.
Самое интересное будет дальше....
А пока для начала как "видит" разделы флеша стоковая прошивка от Asus -
Код: Выделить всё
dev: size erasesize name
mtd0: 00200000 00010000 "Bootloader"
mtd1: 08000000 00020000 "UBI_DEV"
mtd2: 0005d000 0001f000 "nvram"
mtd3: 0001f000 0001f000 "Factory"
mtd4: 0001f000 0001f000 "Factory2"
mtd5: 03013000 0001f000 "linux"
mtd6: 02e145c8 0001f000 "rootfs"
mtd7: 03013000 0001f000 "linux2"
mtd8: 02e145c8 0001f000 "rootfs2"
Тут mtd0 - это все разделы mtd0-mtd7 прошивки lede.
mtd1 - это остальная часть флеша, а mtd2-mtd8 подразделы этой "остальной части".
Так вот UBI_DEV это (определение из википедии) том несортированных блоков (англ. Unsorted Block Images, UBI). Этот том разделен на ubifs volumes (разделы). Разбиение на разделы физически хранится на томе и это разбиение разное для стока и lede.
Собственно ubifs volumes видны на стоковой прошивке как mtd2-mtd8.
На nand флеше могут при работе возникать плохие блоки, которые исключаются драйвером nand из работы. Если возникнет потеря данных из-за плохого блока, то загрузчик U-Boot скопирует копию из одного вольюма в другой. По крайней мере вот код из исходников U-Boot асуса, который копирует kernel (раздел linux).