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

 
 
> 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
 
Start new topic
Ответов
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
Pasa
сообщение Sep 2 2009, 16:27
Сообщение #3


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

Группа: Свой
Сообщений: 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
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 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
Сообщение #5


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

Группа: Свой
Сообщений: 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
Сообщение #6


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

Группа: Свой
Сообщений: 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
Сообщение #7


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

Группа: Свой
Сообщений: 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
Сообщение #8


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

Группа: Свой
Сообщений: 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
Сообщение #9


Знающий
****

Группа: Участник
Сообщений: 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
Сообщение #10


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

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



to sasamy !!!!!!

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


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

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


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

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

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

Еще раз СПАСИБО!!!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Pasa   AT91SAM9260+Linux... как подключить jffs2 на DataFlash?   Sep 2 2009, 13:00
|- - Pasa   to sasamy !!!!!! ВСЕ...   Sep 30 2009, 02:25
|- - Pasa   Некоторые итоги.... Все работает если делаю вот т...   Oct 7 2009, 01:40
|- - sasamy   Цитата(Pasa @ Oct 7 2009, 05:40) Некоторы...   Oct 10 2009, 08:37
- - sasamy   Цитата(Pasa @ Sep 2 2009, 16:00) Вопрос т...   Sep 2 2009, 15:35
- - AVR   Уважаемый господин Pasa! Нельзя ли длинные лог...   Oct 11 2009, 17:39
- - sasamy   Цитата(AVR @ Oct 11 2009, 20:39) Можно ли...   Oct 11 2009, 21:11
- - Pasa   Цитата(AVR @ Oct 11 2009, 21:09) Уважаемы...   Nov 4 2009, 15:29
- - MTh   Позволю себе внести небольшую лепту по поводу mtd ...   Nov 5 2009, 12:08


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 05:14
Рейтинг@Mail.ru


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