реклама на сайте
подробности

 
 
> AT91SAM9260+Linux... как подключить jffs2 на DataFlash?
Pasa
сообщение Sep 2 2009, 13:00
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 107
Регистрация: 4-03-09
Из: Беларусь, Минск
Пользователь №: 45 665



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

Сгенерил ядро и 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 и нужно ее подмонтировать?
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 16)
mdmitry
сообщение Sep 2 2009, 15:06
Сообщение #2


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



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


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
sasamy
сообщение Sep 2 2009, 15:35
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



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


Нужно указать геометрию разделов ядру и работать как с обычными дисками. Самое простое - через параметры загрузки ядру указать, у меня например так
mtdparts=spi0.0-AT45DB321x:0x1080(mbs),-(kernel). Это кстати давно обсуждалось на форуме где все молчат smile.gif и если использовать в качестве корневой фс раздел то нужно блочное устройство и указывать и тип фс, например
root=/dev/mtdblock1 rootfstype=jffs2
если для логов использовать - то можно просто подмонтировать нужный раздел в нужную директорию, еще сейчас многие используют различные варианты unionfs которая позволяет сделать прозрачной запись на две фс одна из которых в ro а друга в rw смонтирована.

Сообщение отредактировал sasamy - Sep 2 2009, 15:43
Go to the top of the page
 
+Quote Post
Pasa
сообщение Sep 2 2009, 16:27
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 107
Регистрация: 4-03-09
Из: Беларусь, Минск
Пользователь №: 45 665



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


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


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

Цитата(sasamy @ Sep 2 2009, 19:05) *
Нужно указать геометрию разделов ядру и работать как с обычными дисками. Самое простое - через параметры загрузки ядру указать, у меня например так
mtdparts=spi0.0-AT45DB321x:0x1080(mbs),-(kernel). Это кстати давно обсуждалось на форуме где все молчат smile.gif и если использовать в качестве корневой фс раздел то нужно блочное устройство и указывать и тип фс, например
root=/dev/mtdblock1 rootfstype=jffs2
если для логов использовать - то можно просто подмонтировать нужный раздел в нужную директорию, еще сейчас многие используют различные варианты unionfs которая позволяет сделать прозрачной запись на две фс одна из которых в ro а друга в rw смонтирована.


Планируется использовать только для логов. А rootfs пусть остается в озу... Я просто не знаю как объяснить ядру все это. Где лежат эти параметры загрузки ядра, что каждый из них означает, как их можно видоизменить....ищу инфу и не могу найти описания всей этой кухни...Может плохо или не там ищу...если можно - киньте ссылку....буду очень благодарен...уж очень тяжко как-то идет освоение линукса... smile3046.gif
Go to the top of the page
 
+Quote Post
sasamy
сообщение Sep 2 2009, 20:36
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(Pasa @ Sep 2 2009, 20:27) *
Планируется использовать только для логов. А 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 карте - мне так удобней smile.gif Грузимся

Код
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 думаю сами разберетесь smile.gif
Go to the top of the page
 
+Quote Post
Pasa
сообщение Sep 3 2009, 01:22
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 107
Регистрация: 4-03-09
Из: Беларусь, Минск
Пользователь №: 45 665



Спасибо огромное! Утром начну штудировать! Хоть не все сразу понятно, но надеюсь разобраться.
Еще раз спасибо за такой подробный ответ! a14.gif 08.gif
Go to the top of the page
 
+Quote Post
Pasa
сообщение Sep 28 2009, 20:23
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 107
Регистрация: 4-03-09
Из: Беларусь, Минск
Пользователь №: 45 665



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


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

Сообщение отредактировал Pasa - Sep 28 2009, 20:40
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Sep 29 2009, 07:41
Сообщение #8


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(Pasa @ Sep 29 2009, 00:23) *
Попробовал....ничего не получилось...не создается партиция на датафлэш....
Чувствую, что все решается очень просто....Не нужно корневая фс....нужно просто на датафлэш создать партицию и подмонтировать ее как диск... Может кто новичку в линуксе по шагам подробно расписать как это сделать? sad.gif


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

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


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
Pasa
сообщение Sep 29 2009, 15:48
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 107
Регистрация: 4-03-09
Из: Беларусь, Минск
Пользователь №: 45 665



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

В ядре:
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)


Что делаю не так?
Go to the top of the page
 
+Quote Post
sasamy
сообщение Sep 29 2009, 19:31
Сообщение #10


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(Pasa @ Sep 29 2009, 19:48) *
Что делаю не так?


Не видится 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 взаимоисключающие устройства я не знаю, после правки ничего подозрительного не наблюдал.
Кпроме этого вы все же проигнорировали мои предупрежденияsmile.gif
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 - Sep 29 2009, 20:21
Go to the top of the page
 
+Quote Post
Pasa
сообщение Sep 30 2009, 02:25
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 107
Регистрация: 4-03-09
Из: Беларусь, Минск
Пользователь №: 45 665



to sasamy !!!!!!

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


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

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


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

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

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

Еще раз СПАСИБО!!!
Go to the top of the page
 
+Quote Post
Pasa
сообщение Oct 7 2009, 01:40
Сообщение #12


Частый гость
**

Группа: Свой
Сообщений: 107
Регистрация: 4-03-09
Из: Беларусь, Минск
Пользователь №: 45 665



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

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

в ядре поправил как указано выше(в структуре для 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 - Oct 7 2009, 01:38
Go to the top of the page
 
+Quote Post
sasamy
сообщение Oct 10 2009, 08:37
Сообщение #13


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(Pasa @ Oct 7 2009, 05:40) *
Некоторые итоги....

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

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


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

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

Сообщение отредактировал sasamy - Oct 10 2009, 08:46
Go to the top of the page
 
+Quote Post
AVR
сообщение Oct 11 2009, 17:39
Сообщение #14


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



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

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

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


--------------------
Go to the top of the page
 
+Quote Post
sasamy
сообщение Oct 11 2009, 21:11
Сообщение #15


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(AVR @ Oct 11 2009, 20:39) *
Можно ли сделать корневую файловую систему доступной только для чтения, но чтобы если какие-либо программы захотели что-то записать в корневую - они писали только в ОЗУ? т.е. чтобы не маралась флэшка, и в то же время программы, которым приспичит, могли записать что-то как бы в КФС, но изменения бы пропали после перезагрузки? "различные варианты unionfs" - это то что надо, да?


Да запросто smile.gif помоему на нетбуках с linux так и делают чтобы не насиловать ssd диски. Загружают initrd/initramfs, там монтируют основной раздел в read only, создают в озу tmpfs с правами read-write, объединяют их при помощи unionfs и делают pivot_root. При этом запись прозрачно производится на носитель который смонтирован с правами на запись (в данном случае ram). Помоему сейчас более популярна aufs (Another Union File System). Сам не пользовался но думаю никаких проблем не будет найти пошаговое руководство в гугле.
Go to the top of the page
 
+Quote Post
Pasa
сообщение Nov 4 2009, 15:29
Сообщение #16


Частый гость
**

Группа: Свой
Сообщений: 107
Регистрация: 4-03-09
Из: Беларусь, Минск
Пользователь №: 45 665



Цитата(AVR @ Oct 11 2009, 21:09) *
Уважаемый господин Pasa! Нельзя ли длинные логи размещать в виде ссылки на http://pastebin.com или подобные ресурсы? wink.gif


Ок...учту на будущее.

По теме...касательно ошибок jffs2 c длинными логами. Разобрался вроде....дело было в том, что создавались еще mtd-устройства(жестко заданы в ядре на NandFlash) без какой-либо файловой системы и у меня просиходила путаница при связывании этих разных областей с конкретными блочными mtd-девайсами. По неопытности я пропустил соответствующие сообщения ядра при старте. Теперь поправил и все работает просто замечательно - корневая фс сидит в RAM, а настройки, логи и статистика пишутся(будут писаться) на jffs2 на DataFlash.

Проверял на работоспособность копирванием файлов и на самой плате(средствами Linux через cp), и с внешеней машины по сети с помощью WinSCP....все отлично. Надеюсь, что больше глюков не будет.

Большое спасибо за помощь.

На всякий случай, если новички, вроде меня, столкнутся с проблемами

ICQ 218596258
Skype p.a.khatsianovich
Go to the top of the page
 
+Quote Post
MTh
сообщение Nov 5 2009, 12:08
Сообщение #17


Местный
***

Группа: Свой
Сообщений: 234
Регистрация: 28-02-06
Из: Иркутск
Пользователь №: 14 771



Позволю себе внести небольшую лепту по поводу mtd устройств.

Прежде всего необходимо убедиться что в ядре включено все необходимое (тут надо конкретную версию ядра, небольшие различия есть).
Второй момент dataflash и карта памяти MMC, сидят на одном CS да и еще на одном SPI (если ничего не путаю - могу ошибаться). Потому либо то либо то.

Если в ядре все включили, в /dev появятся два типа устройств mtdX и mtdblockX (если в ядре включили mtdblock support) - соответственно character device и block device. Все мои мучения привели к тому что форматирирование идет через через один тип, а монтирование через другой.

В процессе работы старались переводить датафлэш в режим только чтение, перемонтируя его при необходимости записи - иначе начинали появляться badblock'и...

Поддержку jffs utils тоже надо включать...

Ну вот примерно и все. Надеюсь помог кому-нибудь...
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 18:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.01598 секунд с 7
ELECTRONIX ©2004-2016