Skocz do zawartości

jffs2.img czym to ugryźć?


Gość hosunio

Rekomendowane odpowiedzi

  • 5 miesięcy temu...

Stary wątek, ale problem podobny, więc może jednak się podepnę...

 

Ogólnie, to chciałbym wypakować pliki z rootfs.img z Gratelii. Można załadować do NAND, odpalić z innego źródła, podmontować NAND w systemie i skopiować. Ale wolałbym uniknąć uniknąć tego pierwszego.

 

Procedura wydawało mi się, że jest prosta, znaleziona wielokrotnie w sieci i bardzo podobna do tej podanej przez tuxa w drugim poście tego wątku:

mknod /dev/mtdblock0 b 31 0
modprobe mtdblock
modprobe mtdram total_size=65536 erase_size=256
modprobe jffs2
dd if=rootfs.img of=/tmp/mtdblock0
mkdir /media/gratelia
mount -t jffs2 /dev/mtdblock0 /media/gratelia

 

Wszystko niby działa, ale próba podmontowania kończy się komunikatem:

mount: montowanie /dev/mtdblock0 w /media/gratelia nie powiodło się: Operacja nie obsługiwana

 

Jakieś sugestie?

 

Odnośnik do komentarza
Udostępnij na innych stronach

Nie wyważałem otwartych drzwi, aczkolwiek myślę, że alternatywny sposób:

 

#!/bin/bash
mknod /tmp/mtdblock0 b 31 0
losetup /dev/loop0 /home/nbox/nand/rootfs.img
modprobe mtdblock
modprobe block2mtd
echo "/dev/loop0,128KiB" > /sys/module/block2mtd/parameters/block2mtd
modprobe jffs2
mount -t jffs2 /tmp/mtdblock0 /home/nbox/rootfs

Odnośnik do komentarza
Udostępnij na innych stronach

Fedora nie ma w standardzie.

 

Dokompilowałem już wcześniej wszystko zgodnie z instrukcją podaną przez info pod tym linkiem, poza CONFIG_MTD_PARITIONS, bo nie widzę tego w .config.

 

W /var/log/messages mam mnóstwo linii podobnych do tej:

 

Sep 24 09:19:10 compaq-fedora kernel: [ 2971.823745] jffs2: Empty flash at 0x027a7ffc ends at 0x027a8000
Sep 24 09:19:10 compaq-fedora kernel: [ 2971.823746] jffs2: CLEANMARKER node found at 0x027a8000, not first node in block (0x027a0000)

 

To co na razie udało mi się znaleźć w tym temacie, to że chodzi o strukturę NANDa w porównaniu z tą w pliku img. Że niby nie są zgodne. W moim przypadku to emulowany NAND i nie wiem jak sprawdzić/zmienić jego strukturę i jaka powinna być.

Odnośnik do komentarza
Udostępnij na innych stronach

Mogę się mylić, a co dalej to niechciałbym Cię wprowadzić w błąd, ale to wygląda mi to na różny rozmiar bloku obrazu niż rzeczywisty rozmiar bloku w systemie.

Zwróć uwagę na na ten wpis: CLEANMARKER node found at 0x027a8000, not first node in block (0x027a0000).

Może należy odczekać dłuższy czas na zamontowanie?

Odnośnik do komentarza
Udostępnij na innych stronach

Dzięki Panowie za pomoc ... i sorry za zawracania głowy. W końcu działa. A cały problem był zdaje się zawarty w jednej linijce w logu:

 

Sep 23 13:27:52 compaq-fedora kernel: [  699.786546] SELinux: (dev jffs2, type jffs2) has no xattr support

 

Sam nie wiem, czemu jeszcze nie wyłączyłem SELinuksa...

 

@tux: total_size wystarczy, że jest większe niż rozmiar rootfs.img (sprawdzałem różne wartości), erase_size raczej powinno być 128 - takie jest domyślne, więc przestałem ustawiać.

 

Ponieważ działa, to może dla innych (znaczy się: dla siebie, jak znowu zapomnę jak to zrobiłem :P) mała instrukcja. Na Fedorze bez kompilacji jajka się nie obejdzie. Jeżeli dojdę do tego jak to zrobić szybciej to napiszę. Opcje jakie powinny być przy konfiguracji kernela, pewnie z nadmiarem ale już nie mam nerwów sprawdzać, co da się wyłączyć:

 

Aktualizacja: Opcje poniżej są niewystarczające. Działa kiedy jajko jest skompilowane z wszystkim co jest w zakładkach związanych z MTD i JFFS2 (jak w Ubuntu na starcie). Jeżeli uda mi się ustalić czego brakuje, to dopiszę...

 

- MTD

 

CONFIG_MTD=m
CONFIG_MTD_CMDLINE_PARTS=m
CONFIG_MTD_BLKDEVS=m
CONFIG_MTD_BLOCK=m
CONFIG_MTD_MAP_BANK_WIDTH_1=y
CONFIG_MTD_MAP_BANK_WIDTH_2=y
CONFIG_MTD_MAP_BANK_WIDTH_4=y
CONFIG_MTD_CFI_I1=y
CONFIG_MTD_CFI_I2=y
CONFIG_MTD_MTDRAM=m
CONFIG_MTDRAM_TOTAL_SIZE=4096
CONFIG_MTDRAM_ERASE_SIZE=128
CONFIG_MTD_BLOCK2MTD=m
CONFIG_MTD_NAND_ECC=m
CONFIG_MTD_NAND_ECC_SMC=y
CONFIG_MTD_NAND=m
CONFIG_MTD_NAND_BCH=m
CONFIG_MTD_NAND_ECC_BCH=y
CONFIG_MTD_NAND_IDS=m
CONFIG_MTD_NAND_NANDSIM=m
CONFIG_MTD_NAND_PLATFORM=m
CONFIG_MTD_UBI=m
CONFIG_MTD_UBI_WL_THRESHOLD=4096
CONFIG_MTD_UBI_BEB_LIMIT=20

 

- JFFS2

 

CONFIG_JFFS2_FS=m
CONFIG_JFFS2_FS_DEBUG=0
CONFIG_JFFS2_FS_WRITEBUFFER=y
CONFIG_JFFS2_FS_WBUF_VERIFY=y
CONFIG_JFFS2_SUMMARY=y
CONFIG_JFFS2_FS_XATTR=y
CONFIG_JFFS2_FS_POSIX_ACL=y
CONFIG_JFFS2_FS_SECURITY=y
CONFIG_JFFS2_COMPRESSION_OPTIONS=y
CONFIG_JFFS2_ZLIB=y
CONFIG_JFFS2_LZO=y
CONFIG_JFFS2_CMODE_NONE=y

 

Jak widać jest tam też CONFIG_JFFS2_FS_XATTR=y...

 

Potem jak wszyscy wiedzą: make all, make install modules_install, reboot. A potem:

 

- ładujemy obsługę urządzeń Memory Technology Device (MTD)

# modprobe -v mtdblock

- emulujemy naszego NANDa/NORa w pamięci, co powoduje powstanie 3 urządzeń w systemie

# modprobe -v mtdram total_size=65536
# ls /dev | grep mtd
mtd0
mtd0ro
mtdblock0
# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 04000000 00020000 "mtdram test device"

- ładujemy obsługę systemu plików JFFS2

# modprobe -v jffs2

- zostało załadować obraz do emulowanej pamięci flash

# dd if=rootfs.img of=/dev/mtd0

- i podmontować

# mount -t jffs2 /dev/mtdblock0 /media/gratelia

 

Jak zainstalujemy mtd-utils to ładowanie do flasha można zrobić również tak:

# flash_erase /dev/mtd0 0 0
# nandwrite /dev/mtd0 rootfs.img

 

PS. A potem aktualizujemy Fedorę łącznie z kernelem i od nowa :P

Odnośnik do komentarza
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

×
×
  • Dodaj nową pozycję...