Перейти к содержанию
    

AT91SAM9260+Linux... как подключить jffs2 на DataFlash?

Прошу помощи, так как практически не знаком с линуксом а на других форумах народ молчит категорически.

 

Сгенерил ядро и rootfs для AT91SAM9260. Прошил в датафлэш Bootstrap и Uboot. С помощью Uboot гружу по сети ядро и rootfs. Все загружается и стартует. Вся эта кухня крутится в озу.Стоит задача хранить логи. Остановился на jffs2 для датафлэш. Сгенерил пробную jffs2 и упаковал в файл-имидж. На RedHat попробовал:

 

mkdir mnt

modprobe mtdram total_size=24576 erase_size=128

modprobe mtdblock

dd if=image.jffs2 of=/dev/mtdblock0

mount -t jffs2 /dev/mtdblock0 mnt

 

Все работает.

 

Вопрос такой: если я прошью файл-имидж(image.jffs2) в датафлэш по конкретному адресу, то как объяснить ядру, что мол там-то и там-то находится jffs2 и нужно ее подмонтировать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Посмотрите примеры rootfs, идущие к evaluation kit AT91SAM9260-EK (Они есть на сайте atmel.). Там /tmp на RAMDISK. Скорость записи в память небольшая, проблем не будет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вопрос такой: если я прошью файл-имидж(image.jffs2) в датафлэш по конкретному адресу, то как объяснить ядру, что мол там-то и там-то находится jffs2 и нужно ее подмонтировать?

 

Нужно указать геометрию разделов ядру и работать как с обычными дисками. Самое простое - через параметры загрузки ядру указать, у меня например так

mtdparts=spi0.0-AT45DB321x:0x1080(mbs),-(kernel). Это кстати давно обсуждалось на форуме где все молчат :) и если использовать в качестве корневой фс раздел то нужно блочное устройство и указывать и тип фс, например

root=/dev/mtdblock1 rootfstype=jffs2

если для логов использовать - то можно просто подмонтировать нужный раздел в нужную директорию, еще сейчас многие используют различные варианты unionfs которая позволяет сделать прозрачной запись на две фс одна из которых в ro а друга в rw смонтирована.

Изменено пользователем sasamy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за подсказку...

Посмотрите примеры rootfs, идущие к evaluation kit AT91SAM9260-EK (Они есть на сайте atmel.). Там /tmp на RAMDISK. Скорость записи в память небольшая, проблем не будет?

 

К скорости записи требований нет...

 

 

http://www.atmel.com/dyn/resources/prod_do...CDROM_image.zip - примеры rootfs тут искать...я правильно понял?

 

Нужно указать геометрию разделов ядру и работать как с обычными дисками. Самое простое - через параметры загрузки ядру указать, у меня например так

mtdparts=spi0.0-AT45DB321x:0x1080(mbs),-(kernel). Это кстати давно обсуждалось на форуме где все молчат :) и если использовать в качестве корневой фс раздел то нужно блочное устройство и указывать и тип фс, например

root=/dev/mtdblock1 rootfstype=jffs2

если для логов использовать - то можно просто подмонтировать нужный раздел в нужную директорию, еще сейчас многие используют различные варианты unionfs которая позволяет сделать прозрачной запись на две фс одна из которых в ro а друга в rw смонтирована.

 

Планируется использовать только для логов. А rootfs пусть остается в озу... Я просто не знаю как объяснить ядру все это. Где лежат эти параметры загрузки ядра, что каждый из них означает, как их можно видоизменить....ищу инфу и не могу найти описания всей этой кухни...Может плохо или не там ищу...если можно - киньте ссылку....буду очень благодарен...уж очень тяжко как-то идет освоение линукса... :smile3046:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Планируется использовать только для логов. А rootfs пусть остается в озу... Я просто не знаю как объяснить ядру все это.

 

# pwd
/home/sasa/sam9work/linux-2.6.30.4

# grep "*" -m 14 drivers/mtd/cmdlinepart.c
/*
* Read flash partition table from command line
*
* Copyright 2002 SYSGO Real-Time Solutions GmbH
*
* The format for the command line is as follows:
*
* mtdparts=<mtddef>[;<mtddef]
* <mtddef>  := <mtd-id>:<partdef>[,<partdef>]
*              where <mtd-id> is the name from the "cat /proc/mtd" command
* <partdef> := <size>[@offset][<name>][ro][lk]
* <mtd-id>  := unique name used in mapping driver/device (mtd->name)
* <size>    := standard linux memsize OR "-" to denote all remaining space
* <name>    := '(' NAME ')'

 

что касается параметров ядра в конфиге

 

# grep  "MTD" .config | grep -v "is not set"
CONFIG_MTD=y
CONFIG_MTD_PARTITIONS=y
CONFIG_MTD_CMDLINE_PARTS=y
CONFIG_MTD_CHAR=y
CONFIG_MTD_BLKDEVS=y
CONFIG_MTD_BLOCK=y
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
# Self-contained MTD device drivers
CONFIG_MTD_DATAFLASH=y
CONFIG_MTD_DATAFLASH_WRITE_VERIFY=y

# grep  "JFFS2" .config | grep -v "is not set"
CONFIG_JFFS2_FS=y
CONFIG_JFFS2_FS_DEBUG=0
CONFIG_JFFS2_FS_WRITEBUFFER=y
CONFIG_JFFS2_ZLIB=y
CONFIG_JFFS2_RTIME=y

 

Для примера

 

# grep  "CONFIG_CMDLINE" .config
CONFIG_CMDLINE="mem=32M rootwait root=/dev/mmcblk0p1 mtdparts=spi0.0-AT45DB321x:0x10800@0x40f800(log)"

 

это означает что я хочу увидеть раздел в 64 кб (0х10800 / 0x420 = 0x40 = 64 - обращаю внимание - блоки в dataflash 1056 = 0x420 байт) в самом конце моей dataflash 0x420000 - 0x10800 = 0x40f800, все что до этого адреса меня не интересует - там например uboot и ядро. Корневая фс у меня на sd карте - мне так удобней :) Грузимся

 

U-Boot> tftpboot 21000000 zlinux
macb0: link up, 100Mbps full-duplex (lpa: 0xffff)
Using macb0 device
TFTP from server 192.168.0.2; our IP address is 192.168.0.136
Filename 'zlinux'.
Load address: 0x21000000
Loading: #################################################################
         ##############################
done
Bytes transferred = 1382892 (1519ec hex)
U-Boot> bootm 21000000
## Booting kernel from Legacy Image at 21000000 ...
   Image Name:   linux-2.6
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    1382828 Bytes =  1.3 MB
   Load Address: 20008000
   Entry Point:  20008000
   Verifying Checksum ... OK
   Loading Kernel Image ... OK
OK

Starting kernel ...

.... дальше не все интересно - буду писать только то на что обратить внимание

 

Kernel command line: mem=32M rootwait root=/dev/mmcblk0p1 mtdparts=spi0.0-AT45DB321x:0x10800@0x40f800(log)

 

отлично - командная строка на месте - никто ее не поменял (например uboot)

 

atmel_spi atmel_spi.0: Atmel SPI Controller at 0xfffc8000 (irq 12)
mtd_dataflash spi0.0: AT45DB321x (4224 KBytes) pagesize 528 bytes (OTP)
1 cmdlinepart partitions found on MTD device spi0.0-AT45DB321x
Creating 1 MTD partitions on "spi0.0-AT45DB321x":
0x00000040f800-0x000000420000 : "log"

 

вот и наш раздел. Логинимся, смотрим где наш раздел в устройсвах

# ls -l /dev | grep mtd
crw-rw----    1 root     root      90,   0 Dec 31 17:00 mtd0
crw-rw----    1 root     root      90,   1 Dec 31 17:00 mtd0ro
brw-rw----    1 root     root      31,   0 Dec 31 17:00 mtdblock0

 

На месте, у меня файлы устройств создаются автоматом потому что использую mdev из состава busybox. Создались два char device - один rw другой ro и блочное устройство. Создаем пустую фс

 

# ls -l /tmp
#
# echo "sasa" > /tmp/sasa
# ls -l /tmp
-rw-r--r--    1 root     root            5 Dec 31 17:01 sasa
# mkfs.jffs2 -d /tmp -l -p -e 0x2100 -v -n -o /root/img.jffs2
/
        f 0644         5 (       73)     0:0   sasa


Compression mode: priority
Compressors:
      none             compr: 1 blocks (5)  decompr: 0 blocks
       lzo (prio:80) - compr: 0 blocks (0/0)  decompr: 0 blocks 
      zlib (prio:60) + compr: 0 blocks (0/0)  decompr: 0 blocks 
     rtime (prio:50) + compr: 0 blocks (0/0)  decompr: 0 blocks 
Compression errors: 0
# cp /root/img.jffs2 /dev/mtd0
# 
# ls -l /mnt
# mount -t jffs2 /dev/mtdblock0 /mnt
JFFS2 write-buffering enabled buffer (528) erasesize (8448)
# ls -l /mnt
-rw-r--r--    1 root     root            5 Dec 31 17:04 sasa
# cat /mnt/sasa
sasa
# echo "pasa" > /mnt/pasa
# ls -l /mnt
-rw-r--r--    1 root     root            5 Dec 31 17:07 pasa
-rw-r--r--    1 root     root            5 Dec 31 17:04 sasa
# umount /mnt
# mount -t jffs2 /dev/mtdblock0 /mnt
JFFS2 write-buffering enabled buffer (528) erasesize (8448)
Empty flash at 0x00000078 ends at 0x00000210
# ls -l /mnt
-rw-r--r--    1 root     root            5 Dec 31 17:07 pasa
-rw-r--r--    1 root     root            5 Dec 31 17:04 sasa
# 
# df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/root                 3.7G    311.4M      3.2G   9% /
mdev                     14.5M         0     14.5M   0% /dev
/dev/mtdblock0           64.0K     24.0K     40.0K  38% /mnt

 

В какой из загрузочных скриптов добавить mount -t jffs2 /dev/mtdblock0 /mnt думаю сами разберетесь :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо огромное! Утром начну штудировать! Хоть не все сразу понятно, но надеюсь разобраться.

Еще раз спасибо за такой подробный ответ! :a14: :08:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробовал....ничего не получилось...не создается партиция на датафлэш....

Чувствую, что все решается очень просто....Не нужно корневая фс....нужно просто на датафлэш создать партицию и подмонтировать ее как диск... Может кто новичку в линуксе по шагам подробно расписать как это сделать? :(

 

 

конфиг ядра брал как указано....

Изменено пользователем Pasa

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробовал....ничего не получилось...не создается партиция на датафлэш....

Чувствую, что все решается очень просто....Не нужно корневая фс....нужно просто на датафлэш создать партицию и подмонтировать ее как диск... Может кто новичку в линуксе по шагам подробно расписать как это сделать? :(

 

 

конфиг ядра брал как указано....

В dataflash раздел не создадите. Почитайте как сделать раздел с JFFS, как его поддерживать (MTD) и читать-писать. Далее как его паковать. Есть скрипты в интернете для монтирования образов.Мне пришлось из любопытства разворачивать образ dataflash с JFFS. Хотел посмотреть rootfs от Atmel и Angstrom

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пробовал два варианта:

 

В ядре:

CONFIG_CMDLINE="root=/dev/ram0 rw initrd=0x23100000,0x500000 console=ttyS0,115200 mem=64M mtdparts=spi0.0-AT45DB321D:0x10800@0x100000(log)"

(как было подсказано выше - создаем партицию в датафлэш по адресу 0x100000)

 

SAM-BAой предварительно прошиваю img.jffs2(файл-образ ) в датафлэш по адресу 0x100000

 

После загрузки:

 

mknod mtdblock0 b 31 0 (появляется mtdblock0)

 

mount -t jffs2 /dev/mtdblock0 /mnt (получаемв ответ Invalid argument)

 

 

 

Второй вариант:

 

В ядре:

CONFIG_CMDLINE="root=/dev/ram0 rw initrd=0x23100000,0x500000 console=ttyS0,115200 mem=64M mtdparts=spi0.0-AT45DB321D:0x10800@0x100000(log)"

 

После загрузки:

 

mknod mtdblock0 b 31 0 (появляется mtdblock0)

 

cp /home/img.jffs2 /dev/mtdblock0 (img.jffs2 грузится вместе с корневой фс, лежит в папке home)

 

mount -t jffs2 /dev/mtdblock0 /mnt (получаемв ответ Invalid argument)

 

 

Что делаю не так?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что делаю не так?

 

Не видится dataflash потому что я забыл сказать что нужно отключить в ядре MMC_AT91 или поправить файл board-sam9260ek.c на предмет таблицы spi-устройств, например у меня так

 
/*
* SPI devices.
*/
static struct spi_board_info ek_spi_devices[] = {
    {    /* DataFlash chip */
        .modalias    = "mtd_dataflash",
        .chip_select    = 0,
        .max_speed_hz    = 15 * 1000 * 1000,
        .bus_num    = 0,
    },
};

 

потому что в ядреном варианте есть такой момент

 

/*
* SPI devices.
*/
static struct spi_board_info ek_spi_devices[] = {
#if !defined(CONFIG_MMC_AT91)
.....

и наша dataflash в таблицу spi-устройств не попадает. Почему в "стандартном" ваарианте mmc и dataflash взаимоисключающие устройства я не знаю, после правки ничего подозрительного не наблюдал.

Кпроме этого вы все же проигнорировали мои предупреждения:)

1 Размер блока в dataflash 1056 байт - размер раздела должен быть кратен ему, иначе он будет доступен только в режиме чтения (0x100000 не делится нацело на 0x420)

2 Вместо блочного устройства при копировании cp /home/img.jffs2 /dev/mtdblock0 нужно использовать символьное устройство /dev/mtd0, то что у вас прошло копирование без ошибок говорит лишь о том что реально раздел не существует и создание файла устройств через mknod ничего не решает и при копировании он был замещен файлом img.jffs2.

 

PS Не уверен все же что нужно делать размер раздела кратным 1056 байт, возможно достаточно кратным

pagesize 528 bytes

я делал кратным 1056, что автоматически означает и кратность 528, так что если это критично - можно попробовать.

Изменено пользователем sasamy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

to sasamy !!!!!!

 

ВСЕ!!!!! УРААААААААААААААААА!!!!! ЗАРАБОТАЛО!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

 

ОГРОМНОЕ!!!! ОГРОМНОЕ!!!! ОГРОМНОЕ!!! СПАСИБО!!!!

 

ВСЕ МОНТИРУЕТСЯ!!!! ПИШЕТСЯ!!!!! СТИРАЕТСЯ!!!! КОНЕЦ МУЧЕНИЯМ!!!!

 

 

Извините за эмоции....не могу сдержаться...уж очень мне этот результат был нужен и важен. Все...платформа есть...можно спокойно начать изучать программирование для линукса и писать само приложение. Главное что лопату смастерил с Вашей помощью!!! А канаву копать - теперь все от меня зависит. Главное успеть к сроку....а то все время отпущенное на программирование ушло на создание инструмента, а не на сам продукт. Хотя должен признать, что время не пропало впустую. Полгода назад я впервые "взял в руки" линукс и смотрел на эту штуку не понимая с какой стороны подступиться....был не просто полный ноль....а скажем даже "глубокий минус". Надеюсь со временем смогу гораздо глубже разобраться во всей этой кухне.

 

Еще раз ОГРОМНОЕ СПАСИБО!!! На дворе светает...надо поспать....Днем проведу эксперименты более полно, и отпишусь здесь. Есть кое-какие вопросы....но это чуть позже.

 

Главное - лед тронулся!!!

 

Еще раз СПАСИБО!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Некоторые итоги....

 

Все работает если делаю вот так:

 

в ядре поправил как указано выше(в структуре для SPI оставил только DataFlash и убрал условную компиляцию)

 

CONFIG_CMDLINE="root=/dev/ram0 rw initrd=0x23100000,0x500000 console=ttyS0,115200 mem=64M mtdparts=spi0.0-AT45DB321D:0x305700@0x108000(log)"

 

После загрузки ядра и rootfs уже в консоли:

 

cp /home/image.jffs2 /dev/mtd0

mount -t jffs2 /dev/mtdblock0 /mmm (папку /mmm естественно сделал заранее)

 

В ответ:

JFFS2 write-buffering enabled buffer (528) erasesize (8448)

 

И все работает на ура.... Но

 

 

Иногда, не могу определить в каких случаях, после повторения этих же операций в такой же последовательности на чинаются чудеса.

 

 

# cp /home/image.jffs2 /dev/mtd0

# mount -t jffs2 /dev/mtdblock0 /mmm

JFFS2 write-buffering enabled buffer (528) erasesize (8448)

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00008400: 0x0012 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00008404: 0xf014 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00008408: 0xf014 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000840c: 0xf014 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00008410: 0xf014 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00008414: 0xf014 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00008418: 0xf014 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000841c: 0xf014 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00008420: 0x00a0 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00008424: 0x0100 instead

Further such events for this erase block will not be printed

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000a500: 0x4a44 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000a504: 0xe3f8 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000a508: 0x4a40 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000a50c: 0xe410 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000a510: 0x6f64 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000a514: 0xe42c instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000a518: 0xe43c instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000a51c: 0x01e8 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000a520: 0x3780 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000a524: 0xe454 instead

Further such events for this erase block will not be printed

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000c600: 0x2000 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000c604: 0x3022 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000c608: 0x3008 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000c60c: 0x3000 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000c610: 0x2000 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000c614: 0x200c instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000c61c: 0xd004 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000c620: 0x4ef0 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000c624: 0x57a7 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000c62c: 0xd004 instead

Further such events for this erase block will not be printed

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000e700: 0xa001 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000e704: 0x0006 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000e708: 0xb001 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000e70c: 0xb001 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000e710: 0x1004 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000e714: 0xe00f instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000e718: 0xf030 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000e71c: 0x300b instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000e720: 0x0023 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000e724: 0x0006 instead

Further such events for this erase block will not be printed

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00010800: 0x1d5b instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00010808: 0x000c instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0001080c: 0x0007 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00010810: 0x0390 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00010814: 0x1b66 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00010818: 0x00a4 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0001081c: 0x1cbf instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00010820: 0x200c instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00010824: 0x700b instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00010828: 0x20a4 instead

Further such events for this erase block will not be printed

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00012904: 0x0310 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00012908: 0x8010 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0001290c: 0x4ef0 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00012910: 0xa001 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00012914: 0x9002 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00012918: 0x5003 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0001291c: 0x7000 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00012920: 0x27fc instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00012924: 0x41b4 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00012928: 0xb068 instead

Further such events for this erase block will not be printed

Old JFFS2 bitmask found at 0x000146a4

You cannot use older JFFS2 filesystems with newer kernels

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00014a00: 0x3010 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00014a04: 0x4006 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00014a08: 0x7223 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00014a0c: 0x5007 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00014a10: 0x001d instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00014a14: 0xc00d instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00014a18: 0x1010 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00014a1c: 0x200f instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00014a20: 0x300e instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00014a24: 0xc000 instead

Further such events for this erase block will not be printed

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00016b00: 0x4ef0 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00016b04: 0x5000 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00016b08: 0x0e11 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00016b0c: 0x0002 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00016b10: 0x1005 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00016b14: 0xffcd instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00016b18: 0x7000 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00016b1c: 0x6005 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00016b20: 0xb007 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00016b24: 0x9009 instead

Further such events for this erase block will not be printed

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00018c00: 0x7004 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00018c04: 0x6004 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00018c08: 0x5000 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00018c0c: 0xffef instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00018c10: 0x3040 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00018c18: 0x2004 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00018c1c: 0x3008 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00018c20: 0x2014 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00018c24: 0x2008 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00018c28: 0x2001 instead

Further such events for this erase block will not be printed

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0001ad04: 0xc001 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0001ad08: 0x1068 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0001ad0c: 0x000c instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0001ad10: 0x1102 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0001ad14: 0xd014 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0001ad18: 0x1402 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0001ad1c: 0xc0ff instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0001ad20: 0xe000 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0001ad24: 0x1d03 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0001ad28: 0xc004 instead

Further such events for this erase block will not be printed

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0001ce00: 0x3000 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0001ce04: 0x2000 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0001ce08: 0x1001 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0001ce0c: 0x2030 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0001ce10: 0x30ff instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0001ce14: 0x0009 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0001ce18: 0xfff6 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0001ce1c: 0xf004 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0001ce20: 0x4ef0 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0001ce24: 0xd054 instead

Further such events for this erase block will not be printed

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0001ef00: 0x700b instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0001ef04: 0x7003 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0001ef08: 0x1000 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0001ef0c: 0x0019 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0001ef10: 0x2028 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0001ef18: 0x2001 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0001ef1c: 0x0008 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0001ef20: 0x3001 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0001ef24: 0x9028 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0001ef28: 0xba13 instead

Further such events for this erase block will not be printed

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00021000: 0x206c instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00021004: 0x6000 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00021008: 0x6402 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0002100c: 0x41ac instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00021014: 0x500c instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00021018: 0xc000 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0002101c: 0x5000 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00021020: 0x0002 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00021024: 0x500c instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00021028: 0xcdb6 instead

Further such events for this erase block will not be printed

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00023100: 0x0002 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00023104: 0x3010 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00023108: 0x3000 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00023114: 0xdc02 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00023118: 0x80f0 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0002311c: 0x2404 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00023120: 0x2410 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00023124: 0x241c instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00023128: 0x4070 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0002312c: 0x4108 instead

Further such events for this erase block will not be printed

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00025200: 0x201c instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00025204: 0x100c instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00025208: 0x3000 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0002520c: 0x0004 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00025210: 0x3000 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00025214: 0x3001 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0002521c: 0x300c instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00025220: 0x9001 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00025224: 0xa008 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00025228: 0x002e instead

Further such events for this erase block will not be printed

Empty flash at 0x00026244 ends at 0x00026248

Empty flash at 0x00026258 ends at 0x00026260

Empty flash at 0x00026268 ends at 0x00026270

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00027300: 0x622d instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00027308: 0x414e instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0002730c: 0x3120 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00027310: 0x2042 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00027314: 0x5633 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00027318: 0x622d instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00027320: 0x414e instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00027324: 0x3120 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00027328: 0x2042 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0002732c: 0x5638 instead

Further such events for this erase block will not be printed

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00029400: 0x4920 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00029404: 0x7265 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00029408: 0x206c instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0002940c: 0x736d instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00029410: 0x7548 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00029414: 0x206e instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00029418: 0x6574 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0002941c: 0x6361 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00029420: 0x5320 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00029424: 0x6c63 instead

Further such events for this erase block will not be printed

Empty flash at 0x0002b230 ends at 0x0002b238

Empty flash at 0x0002b23c ends at 0x0002b240

Empty flash at 0x0002b278 ends at 0x0002b2bc

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0002b514: 0xebcc instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0002b518: 0x006e instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0002b51c: 0x0100 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0002b520: 0x0001 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0002b524: 0x1000 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0002b52c: 0xebe0 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0002b530: 0x0064 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0002b534: 0x0100 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0002b538: 0x0002 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0002b53c: 0x1000 instead

Further such events for this erase block will not be printed

Empty flash at 0x0002bbf0 ends at 0x0002bbf4

Empty flash at 0x0002c010 ends at 0x0002c014

#

 

Если после этого передернуть питание, то оказывается, что Bootstrap, Uboot стерты....и мы выскакиваем в ROMboot

 

 

Не могу понять в чем дело....

 

 

 

Ну вот....опять заработало....мда....тут есть какая-то тайна....

Продолжим исследования...

Изменено пользователем Pasa

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Некоторые итоги....

 

Иногда, не могу определить в каких случаях, после повторения этих же операций в такой же последовательности на чинаются чудеса.

 

# cp /home/image.jffs2 /dev/mtd0

 

Имхо - это из-за кривого драйвера atmel_spi, лучше не использовать для записи cp, вместо этого попробовать flashcp из состава mtd-utils.

 

#flashcp -v /home/image.jffs2 /dev/mtd0

Изменено пользователем sasamy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уважаемый господин Pasa! Нельзя ли длинные логи размещать в виде ссылки на http://pastebin.com или подобные ресурсы? ;)

 

Есть вопрос, навеянный этой темой, возможно пригодится многим...

Можно ли сделать корневую файловую систему доступной только для чтения, но чтобы если какие-либо программы захотели что-то записать в корневую - они писали только в ОЗУ? т.е. чтобы не маралась флэшка, и в то же время программы, которым приспичит, могли записать что-то как бы в КФС, но изменения бы пропали после перезагрузки? "различные варианты unionfs" - это то что надо, да?

 

Просто помнится, есть такие программы, которые что-то пишут и отказываются корректно работать если у них это не получается... У кого-нибудь есть опыт/статистика по подобным программам?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно ли сделать корневую файловую систему доступной только для чтения, но чтобы если какие-либо программы захотели что-то записать в корневую - они писали только в ОЗУ? т.е. чтобы не маралась флэшка, и в то же время программы, которым приспичит, могли записать что-то как бы в КФС, но изменения бы пропали после перезагрузки? "различные варианты unionfs" - это то что надо, да?

 

Да запросто :) помоему на нетбуках с linux так и делают чтобы не насиловать ssd диски. Загружают initrd/initramfs, там монтируют основной раздел в read only, создают в озу tmpfs с правами read-write, объединяют их при помощи unionfs и делают pivot_root. При этом запись прозрачно производится на носитель который смонтирован с правами на запись (в данном случае ram). Помоему сейчас более популярна aufs (Another Union File System). Сам не пользовался но думаю никаких проблем не будет найти пошаговое руководство в гугле.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...