Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:0
Поисковых ботовПоисковых ботов:2
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:3
Форум » starterkit.ru » Старый форум » SK-MAT91SAM9XE512
MTD или как писать dataflash удаленно...
repairman (Guest)
Добавлено 30.11.1999 00:00 Редактировалось 13.04.2009 12:34
0
Сообщение: 1
repairman (Guest)

Topic opened
Спуститься к концу Подняться к началу
repairman (Guest)
Добавлено 22.12.2008 16:54 Редактировалось 22.12.2008 16:54 Сообщение: 2
repairman (Guest)

Доброго времени, господа.
Вопрос следующий: работает ли / пользует ли кто MTD на onboard AT45DB321 ?
Мысль такова - изменил корневую ОС через консоль или через ssh - записал изменения в флешку, т.е. меняем rootfs прямо на девайсе без участия u-boot и без перезагрузки..., вроде MTD позволяет это делать...

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Отредактированно repairman 22.12.2008 г. в 17:30:31
Спуститься к концу Подняться к началу
repairman (Guest)
Добавлено 12.01.2009 23:22 Редактировалось 12.01.2009 23:22 Сообщение: 3
repairman (Guest)

Ладно... сам спросил, сам отвечу... время не прошло зря...

Имеем:
Рабочий драйвер MTD для dataflash AT45DB321D, произвольное деление места на партиции, чтение и запись чипа через простое копирование... т.е. для перезаписи ядра, ramdisk , uboot и bootstrap - достаточно дать команду, например, cp в загруженном линукс.

Фрагмент загрузки ядра:
Код

...
MACB_mii_bus: probed
eth0: Atmel MACB at 0xfffc4000 irq 21 (04:25:fe:ed:00:18)
eth0: attached PHY driver [Generic PHY] (mii_bus:phy_addr=ffffffff:01, irq=-1)
Driver 'sd' needs updating - please use bus_type methods
atmel_spi atmel_spi.0: Atmel SPI Controller at 0xfffc8000 (irq 12)
mtd_dataflash spi0.0: AT45DB321x (4224 KBytes) pagesize 528 bytes, OTP
Creating 5 MTD partitions on "at45db321d":
0x00000000-0x00004200 : "Bootstrap"
0x00004200-0x00008400 : "UBoot_data"
0x00008400-0x00042000 : "UBoot"
0x00042000-0x001ce000 : "Kernel"
0x001ce000-0x00420000 : "RootFS"
ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
at91_ohci at91_ohci: AT91 OHCI
...


Разделы MTD

Код

# cat /proc/mtd
dev: size erasesize name
mtd0: 00004200 00000210 "Bootstrap"
mtd1: 00004200 00000210 "UBoot_data"
mtd2: 00039c00 00000210 "UBoot"
mtd3: 0018c000 00000210 "Kernel"
mtd4: 00252000 00000210 "RootFS"


Линки в /dev

Код

# ls -la /dev |grep mtd
crw-r----- 1 root disk 90, 0 Jan 1 1970 mtd0
crw-r----- 1 root disk 90, 1 Jan 1 1970 mtd0ro
crw-r----- 1 root disk 90, 2 Jan 1 1970 mtd1
crw-r----- 1 root disk 90, 3 Jan 1 1970 mtd1ro
crw-r----- 1 root disk 90, 4 Jan 1 1970 mtd2
crw-r----- 1 root disk 90, 5 Jan 1 1970 mtd2ro
crw-r----- 1 root disk 90, 6 Jan 1 1970 mtd3
crw-r----- 1 root disk 90, 7 Jan 1 1970 mtd3ro
crw-r----- 1 root disk 90, 8 Jan 1 1970 mtd4
crw-r----- 1 root disk 90, 9 Jan 1 1970 mtd4ro
brw-r----- 1 root disk 31, 0 Jan 1 1970 mtdblock0
brw-r----- 1 root disk 31, 1 Jan 1 1970 mtdblock1
brw-r----- 1 root disk 31, 2 Jan 1 1970 mtdblock2
brw-r----- 1 root disk 31, 3 Jan 1 1970 mtdblock3
brw-r----- 1 root disk 31, 4 Jan 1 1970 mtdblock4


Смена ядра, например, так:

Код

tftp -g -r uImage 10.0.2.1
cp uImage /dev/mtd3
reboot


Таким же образом остальные компоненты в любом направлении... по ssh, telnet с помощью wget... все что позволит фантазия, откуда угодно (пока загружается система...)

Также есть спец-утилиты для работы с флеш из пакета jffs2/mtd utilities (входит в buildroot)...
flash_erase
flash_eraseall
flash_lock
flash_unlock
flashcp
и т.д. и т.п.

Например:
Код

# flashcp -v uImage /dev/mtd3
Erasing blocks: 2666/2666 (100%)
Writing data: 1374k/0k (100%))
Verifying data: 1374k/0k (100%))


Источники:
http://www.linux-mtd.infradead.org/
http://www.at91.com/samphpbb/viewtopic.php?f=12&t=2963

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Отредактированно repairman 13.01.2009 г. в 11:45:50
Спуститься к концу Подняться к началу
repairman (Guest)
Добавлено 12.01.2009 23:33 Редактировалось 12.01.2009 23:33 Сообщение: 4
repairman (Guest)

diff для файла:
<сырец вашего ядра>/arch/arm/mach-at91/board-sam9260ek.c

Код

33d32
< #include <linux/spi/flash.h>
138,171d135
< static struct mtd_partition __initdata dataflash_partitions[] = {
< {
< .name = "Bootstrap",
< .offset = 0,
< .size = 0x4200,
< },
< {
< .name = "UBoot_data",
< .offset = MTDPART_OFS_NXTBLK,
< .size = 0x4200,
< },
< {
< .name = "UBoot",
< .offset = MTDPART_OFS_NXTBLK,
< .size = 0x39c00,
< },
< {
< .name = "Kernel",
< .offset = MTDPART_OFS_NXTBLK,
< .size = 0x18c000,
< },
< {
< .name = "RootFS",
< .offset = MTDPART_OFS_NXTBLK,
< .size = MTDPART_SIZ_FULL,
< },
< };
<
< static struct flash_platform_data dataflash_data = {
< .name = "at45db321d",
< .parts = dataflash_partitions,
< .nr_parts = ARRAY_SIZE(dataflash_partitions)
< };
<
173,174c137,138
< /*#if !defined(CONFIG_MMC_AT91)
< { // DataFlash chip
---
> #if !defined(CONFIG_MMC_AT91)
> { /* DataFlash chip */
177c141
< .max_speed_hz = 33 * 1000 * 1000,
---
> .max_speed_hz = 15 * 1000 * 1000,
180c144
< #if defined(CONFIG_MTD_AT91_DATAFLASH_CARD)*/
---
> #if defined(CONFIG_MTD_AT91_DATAFLASH_CARD)
184c148
< .max_speed_hz = 33 * 1000 * 1000,
---
> .max_speed_hz = 15 * 1000 * 1000,
186d149
< .platform_data = &dataflash_data,
188,189c151,152
< //#endif
< //#endif
---
> #endif
> #endif


Адреса и размеры разделов ставьте СВОИ... у меня дефолтовые от buildroot... для сборки выставить нужные опции в /drivers/MTD, например, через menuconfig...

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Отредактированно repairman 12.01.2009 г. в 23:44:33
Спуститься к концу Подняться к началу
sasamy (Guest)
Добавлено 13.01.2009 03:44 Редактировалось 13.01.2009 03:44 Сообщение: 5
sasamy (Guest)

Интересный материал. Думаю пригодится, особенно актуально для меня перезапись bootsrap и uboot без самбы. Имхо вот это
Цитата
173,174c137,138
< /*#if !defined(CONFIG_MMC_AT91)
< { // DataFlash chip
---
> #if !defined(CONFIG_MMC_AT91)
> { /* DataFlash chip */
177c141
< .max_speed_hz = 33 * 1000 * 1000,
---
> .max_speed_hz = 15 * 1000 * 1000,
180c144
< #if defined(CONFIG_MTD_AT91_DATAFLASH_CARD)*/
---
> #if defined(CONFIG_MTD_AT91_DATAFLASH_CARD)
184c148
< .max_speed_hz = 33 * 1000 * 1000,
---
> .max_speed_hz = 15 * 1000 * 1000,
186d149
< .platform_data = &dataflash_data,
188,189c151,152
< //#endif
< //#endif
---
> #endif
> #endif

вообще лишнее кроме .platform_data = &dataflash_data
, или все же в ядре нужно отключать модуль CONFIG_MTD_AT91_DATAFLASH_CARD ? Как показала практика на высокие скорости с spi не стоит рассчитывать, а первый #if !defined(CONFIG_MMC_AT91) автоматом проигнорирует следующий за ним код у большинства (тех кто использует mci на плате и mmc/sd :) Вообще интересно было бы узнать - может уже есть более цивилизованный способ сообщять ядру о разметке партиций на mtd - устройставах ?

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Отредактированно sasamy 13.01.2009 г. в 04:04:15
Спуститься к концу Подняться к началу
sasamy (Guest)
Добавлено 13.01.2009 05:33 Редактировалось 13.01.2009 05:33 Сообщение: 6
sasamy (Guest)

Грепнул доки ядра - и правда есть что-то похожее о чем я говорил
linux-2.6.27.8/Documentation/kernel-parameters.txt

Цитата
MTD_Partition= [MTD]
Format: <name>,<region-number>,<size>,<offset>

Думаю если сработает - это лучше чем патчить ядро, достаточно один раз прописать например в конфиг ядра в CONFIG_CMDLINE

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Отредактированно sasamy 13.01.2009 г. в 05:38:19
Спуститься к концу Подняться к началу
sasamy (Guest)
Добавлено 13.01.2009 08:03 Редактировалось 13.01.2009 08:03 Сообщение: 7
sasamy (Guest)

Цитата
вообще лишнее кроме

Прошу прощения - я был похоже не прав и патчить все равно придется - diff не очень привычного вида был :) Без этого ядро не увидит автоматом dataflash на spi0.0 ...
Спуститься к концу Подняться к началу
sasamy (Guest)
Добавлено 13.01.2009 10:40 Редактировалось 13.01.2009 10:40 Сообщение: 8
sasamy (Guest)

Цитата
Адреса и размеры разделов ставьте СВОИ... у меня дефолтовые от buildroot...

На этом кстати есть небольшие грабли для тех кто пользуется авторскими версиями bootsrap & etc - адреса в dataflash не выровнены на границе страниц (528 байт) поэтому разделы автоматом переводятся в режим только чтения. В общем информация о разделах вполне нормально передается через командную строку, параметр mtdparts=.
Спуститься к концу Подняться к началу
repairman (Guest)
Добавлено 13.01.2009 11:07 Редактировалось 13.01.2009 11:07 Сообщение: 9
repairman (Guest)

Рабочие параметры .config ядра, касающиеся MTD:

Код

#
# AT91 Board Options
#
CONFIG_MTD_AT91_DATAFLASH_CARD=y

#
# Generic Driver Options
#

CONFIG_MTD=y
# CONFIG_MTD_DЁBUG is not set
CONFIG_MTD_CONCAT=y
CONFIG_MTD_PARTITIONS=y
# CONFIG_MTD_REDBOOT_PARTS is not set
CONFIG_MTD_CMDLINE_PARTS=y
# CONFIG_MTD_AFS_PARTS is not set
# CONFIG_MTD_AR7_PARTS is not set

#
# User Modules And Translation Layers
#
CONFIG_MTD_CHAR=y
CONFIG_HAVE_MTD_OTP=y
CONFIG_MTD_BLKDEVS=y
CONFIG_MTD_BLOCK=y
# CONFIG_FTL is not set
# CONFIG_NFTL is not set
# CONFIG_INFTL is not set
# CONFIG_RFD_FTL is not set
# CONFIG_SSFDC is not set
# CONFIG_MTD_OOPS is not set

#
# RAM/ROM/Flash chip drivers
#
# CONFIG_MTD_CFI is not set
# CONFIG_MTD_JEDECPROBE is not set
CONFIG_MTD_MAP_BANK_WIDTH_1=y
CONFIG_MTD_MAP_BANK_WIDTH_2=y
CONFIG_MTD_MAP_BANK_WIDTH_4=y
# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
CONFIG_MTD_CFI_I1=y
CONFIG_MTD_CFI_I2=y
# CONFIG_MTD_CFI_I4 is not set
# CONFIG_MTD_CFI_I8 is not set
CONFIG_MTD_RAM=y
# CONFIG_MTD_ROM is not set
# CONFIG_MTD_ABSENT is not set

#
# Mapping drivers for chip access
#
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
# CONFIG_MTD_PLATRAM is not set

#
# Self-contained MTD device drivers
#
CONFIG_MTD_DATAFLASH=y
CONFIG_MTD_DATAFLASH_WRITE_VERIFY=y
CONFIG_MTD_DATAFLASH_OTP=y
# CONFIG_MTD_M25P80 is not set
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_PHRAM is not set
# CONFIG_MTD_MTDRAM is not set
# CONFIG_MTD_BLOCK2MTD is not set

#
# Disk-On-Chip Device Drivers
#
# CONFIG_MTD_DOC2000 is not set
# CONFIG_MTD_DOC2001 is not set
# CONFIG_MTD_DOC2001PLUS is not set
# CONFIG_MTD_NAND is not set
# CONFIG_MTD_ONENAND is not set

#
# UBI - Unsorted block images
#
# CONFIG_MTD_UBI is not set


p.s. слово DЕBUG (как и DRОP) форумом не воспринимается, англ. Е я заменил на Ё...

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Отредактированно repairman 13.01.2009 г. в 11:09:47
Спуститься к концу Подняться к началу
starterkit (Guest)
Добавлено 13.01.2009 11:17 Редактировалось 13.01.2009 11:17 Сообщение: 10
starterkit (Guest)

Да, забодала CMS своими подозрениями, ничего скоро на новую начну переезжать ...
Спуститься к концу Подняться к началу
Форум » starterkit.ru » Старый форум » SK-MAT91SAM9XE512