Внимание! Это временный неофициальный архив старой версии форума Полигон Призраков, созданный сочувствующим форуму участником. Этот сайт просуществует лишь до тех пор, пока администрация Полигона не сдержит своё обещание и не откроет официальный архив по адресу old.sannata.org.

Полигон-2

Форум о старых компьютерах

Объявление форума

Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС.

Полигон-2 »   Технический флейм »   Как прочитать linear Flash карту в Win7
RSS

Как прочитать linear Flash карту в Win7

Нужно прочитать/извлечь данные с linear Flash карты в Win7.

<<Назад  Вперед>> Страницы: 1 2 3 4 5 6 7 8 9 * 10
Печать
 
alecv
Advanced Member


Откуда: Санкт-Петербург
Всего сообщений: 5545
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
5 окт. 2004
ys05 cs - это Card Socket служба PCMCIA. В Линухе как было отмечено ранее, такие устройства долдны видится как mtd (memory technology device).

http://pcmcia-cs.sourceforge.net/ftp/doc/PCMCIA-HOWTO.html
http://pcmcia-cs.sourceforge.net/ftp/doc/PCMCIA-PROG.html

попробовать
# pccardctl ls
и
# lspcmcia
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
Хочу поделиться простым способом чтения linear flash PCMCIA карт,
наличие микросхемы памяти атрибутов внутри карты не требуется.

Первоначально пробовалось с linux slackware, результат был примерно
как у VAL123.

Достаточно воспользоваться FreeBSD 4.11. Имеется команда pccardc,
которая в том числе позволяет читать память атрибутов:
pccardc rdattr slot length offset

slot это номер PCMCIA слота (как правило 0 или 1), lenght и offset в
комментариях не нуждаются.

Достаточно в коде утилиты сбросить флаг MDF_ATTR, что заставит драйвер
читать common memory, что нам и нужно (я на всякий случай взвел еще
флаг 1WS и некоторые другие). После этого можно получать дампы главной
памяти в hex виде. Чтобы получить нормальный дамп, я добавил в код
создание файла flash.bin.

Прилагаю измененный rdattr.c (/usr/src/usr.sbin/pccard/pccardc).
Конечно правильнее (и без проблем!) добавить новый ключ, типа rdcommem,
это было сделано на скорую руку, как быстрое решение проблемы чтения
карты без атрибутного чипа. Проверялось только с одной картой.

Надеюсь пригодится кому-нибудь.

Вот измененный rdattr.c
https://yadi.sk/d/Efl61XyjG5uU_w
KALDYH
Advanced Member
Технонекромант

Откуда: Кемерово
Всего сообщений: 2355
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
5 июня 2009
Перепали и мне в лапы три карточки от сетевого оборудования Cisco, две на 12 Мб и одна на 20 Мб. Воткнул в ноут с линуксом, сдампил без проблем, ничего интересного в содержимом не увидел. Решил попробовать заставить её работать как обычный (почти) сменный (почти) диск. В результате это вылилось в целое исследование с элементами археологии и детектива, на которое я убил несколько дней.

Начнём с теории. Флеш-память не может напрямую использоваться как блочное устройство, т.е. подобно дискете или жёсткому диску. Во-первых, на неё нельзя сразу писать новую информацию поверх старой - нужно сначала стереть нужный блок. Во-вторых, блоки для стирания довольно велики, гораздо больше типичного размера сектора. В-третьих, имеет место износ ячеек, для противостояния которому необходимы специальные файловые системы и учёт числа записей и стираний. В-четвёртых, запись во флеш-чип требует выдерживания временных диаграмм.

FTL
Чтобы работать с флеш-памятью как с традиционным диском, не задумываясь об особенностях носителя, нам необходим уровень абстракции FTL (Flash translation layer), который обслуживает эмуляцию секторов, запись, стирание, распределение свободных блоков, контроль и обход сбойных блоков, подробнее - тут: http://www.linux-mtd.infradead...raw_vs_ftl


PCMCIA Flash - чуть ли не первый стандарт сменных флеш-накопителей для ПК, и соответственно стандарты на его организацию древние, как говно мамонта. Базируются они на разработках компании M-Systems 1993 года. Эта компания более известна по собственным устройствам DiskOnChip (даташит), о котором так или иначе придётся тоже рассказать. В нём использовалась TrueFFS - программа в начале флешки, сочетавшая в себе функции загрузчика и драйвера уровня BIOS, и обеспечивающая FTL. Поверх этого уровня использовались обычные ФС, например FAT. Доступ к флешке и обслуживание FTL в Linux осуществляется(-лся?) драйвером doc.
Так вот, архитектура ихней FTL была стандартизирована PCMCIA Group. Краткую версию стандарта можно глянуть Understanding%20the%20flash%20...on.pdf]тут. Пример работы с картами Linear Flash в старом Linux можно глянуть тут: http://pcmcia-cs.sourceforge.n...html#ss3.7 Обслуживались карты драйвером ftl_cs.
Усовершенствованием FTL для поддержки NAND Flash является NFTL. В Linear Flash, насколько мне известно, встречается только NOR Flash.

MTD (Memory Technology Device)
http://dmilvdv.narod.ru/Translate/ELSDD/elsdd_mtd_model.html
[q]
Традиционным методом, используемым для доступа к флеш-памяти, является FTL, то есть Flash Translation Layer, Уровень Трансляции Флеш-памяти. Этот уровень эмулирует на флеш-памяти поведение блочного устройства, чтобы обеспечить на них работу обычных файловых систем. Однако, создание новой файловой системы или нового драйвера флеш-памяти, работающего с FTL, является сложной задачей и это является причиной изобретения подсистемы MTD. (Владельцем подсистемы MTD является Дэвид Вудхаус, а разработки, связанные с MTD, можно получить на веб-сайте http://www.linux-mtd.infradead.org/. Подсистема MTD была создана как часть основного ядра версии 2.4.) Решение MTD вышеуказанных проблем простое: рассматривать устройства памяти как устройства памяти, а не как диски. Поэтому вместо изменения низкоуровневых драйверов или введения уровня трансляции, измените приложение, чтобы использовать устройства памяти такими, как они есть. MTD очень привязано к приложениям; подсистема MTD состоит из двух частей: драйверы и приложения.

Подсистема MTD не реализует новый вид драйвера, но скорее она связывает любое устройство с драйверами символьных и блочных устройств. Когда драйвер зарегистрирован в подсистеме MTD, она экспортирует такое устройство в оба этих вида драйверов. Почему это делается именно так? Символьное устройство может позволить непосредственный доступ к устройству памяти с использованием стандартных вызовов open/read/write/ioctl. Но в случае, если вы захотите смонтировать обычную файловую систему на такое устройство памяти с помощью традиционного метода, вы сможете также смонтировать её используя блочный драйвер.
[/q]
http://dmilvdv.narod.ru/Transl...cture.html

Во всех современных системах встроенная флеш-память поддерживается в Linux как раз как архитектура MTD. Аналогично была унифицирована и поддержка старых PCMCIA Linear Flash: http://www.linux-mtd.infradead.org/doc/general.html
[q]
Additionally, MTD supports legacy FTL/NFTL "translation layers", M-Systems' DiskOnChip 2000 and Millennium chips, and PCMCIA flashes (pcmciamtd driver). But the corresponding drivers are very old and not maintained very much.
[/q]
Вот фрагмент вывода dmesg при втыкании одной из моих карт:

[ 1638.316056] pcmcia_socket pcmcia_socket0: pccard: PCMCIA card inserted into slot 0
[ 1638.316331] pcmcia 0.0: pcmcia: registering new device pcmcia0.0 (IRQ: 21)
[ 1638.320064] pcmciamtd 0.0: pcmcia: could not parse base and rmask0 of CIS
[ 1638.320471] Found: AMD AM29F080
[ 1638.320477] SMART Modular Technologies 12MB FLASH Card  : Found 2 x8 devices at 0x0 in 16-bit bank
[ 1638.320493] SMART Modular Technologies 12MB FLASH Card  : Found 2 x8 devices at 0x200000 in 16-bit bank
[ 1638.320510] SMART Modular Technologies 12MB FLASH Card  : Found 2 x8 devices at 0x400000 in 16-bit bank
[ 1638.320529] SMART Modular Technologies 12MB FLASH Card  : Found 2 x8 devices at 0x600000 in 16-bit bank
[ 1638.320583] SMART Modular Technologies 12MB FLASH Card  : Found 2 x8 devices at 0x800000 in 16-bit bank
[ 1638.320627] SMART Modular Technologies 12MB FLASH Card  : Found 2 x8 devices at 0xa00000 in 16-bit bank
[ 1638.320646] number of JEDEC chips: 6
[ 1638.326266] pcmciamtd 0.0: mtd0: SMART Modular Technologies 12MB FLASH Card  

Видно, что происходит регистрация устройства 0 на шине pcmcia 0 и вступает в действие драйвер pcmciamtd, который подключает его под именем mtd0, а также нам показывают имя устройства, тип и и число установленных чипов и их адреса в адресном пространстве.

Кроме того, это ещё и PCMCIA устройство, а значит, оно оперируется стандартными утилитами для этой шины. Например, pccardctl
user@host:~$ pccardctl ls
Socket 0 Bridge:     [yenta_cardbus]   (bus ID: 0000<img src="smiles/jeer.gif" align=absmiddle alt=":06:">0b.0)
Socket 0 Device 0:  [pcmciamtd]    (bus ID: 0.0)

user@host:~$ pccardctl ident
Socket 0:
  product info: "SMART Modular Technologies
", "12MB FLASH Card
", "", ""
  function: 1 (memory)


Можно убедиться, что это не блочное, а символьное устройство:
ls -l /dev/mtd0
crw------- 1 root root 90, 0 ноя 19 21:53 /dev/mtd0

ср. с жёстким диском:
ls -l /dev/sda
brw-rw---- 1 root disk 8, 0 ноя 19 21:26 /dev/sda

Символьное устройство обслуживается драйвероом mtdchar, он также предоставляет дополнительные ioctl команды, которые используются, например, утилитами из пакета mtd-utils (см. ниже). Ядро Linux содержит простейший драйвер эмуляции устройства MTD как блочного - mtdblock, но для использования "в лоб" он не подходит.

А почему в быту компьютерщики с этими подробностями не сталкиваются? Дело в том, что на всех потребительских накопителях (карты памяти, USB флешки, SSD) уровень FTL обеспечивается аппаратным контроллером, детали работы которого пользователю и даже системному администратору недоступны (частично могут быть доступны сервисными утилитами, если кому интересно), а программная реализация встречается в таких закрытых устройствах, как в КПК, роутерах, телефонах, планшетах и т.п. Linear Flash - один из немногих примеров, когда всем этим нужно заниматься вручную на ПК, другие примеры - карточки Smart Media/xD и микросхемы DiskOnChip.

Чтение
Скопировать дамп нашей карточки в файл очень просто:

sudo cp /dev/mtd0 путь/имя_файла

Дальше можно карту вынуть и полученный файл спокойно анализировать. Я на своей карточке нашёл прошивку для роутера, в ней ничего интересного. Попробуем теперь эту карту задействовать как диск.

Файловые системы
Как видно из блок-схемы, уровень FTL в архитектуре MTD возлагается на файловую систему. Традиционные ФС, разработанные для магнитных дисков, работают с флеш-чипами неоптимально и приводят к быстрому износу ячеек. Поэтому были разработаны специальные ФС
  • JFFS - первая файловая система в Linux для Flash памяти (только NOR типа)
  • JFFS2 - добавлена поддержка NAND, сжатие, улучшена производительность
  • YAFFS.
    Эти три работают поверх mtdblock.
  • UBI (Unsorted Block Images) - скорее ближе к диспетчеру разделов. Работает на более низком уровне, обеспечивая несколько логических дисков и производя общее для них выравнивание износа и обработку бэд-блоков, а стиранием блоков и минимизацией износа занимается файловая системе UBIFS. Разработано компанией Nokia и Сегедским университетом (Венгрия) в 2007 году. Наилучшая производительность. Обслуживается отдельным драйвером.
  • LogFS, F2FS - пока в статусе экспериментальных, углубляться в них не буду.

Есть ещё файловые системы только для чтения, squashfs например.
Подробнее о файловых системах для flash в Linux: https://www.ibm.com/developerw...index.html

Форматирование Linear Flash по стандарту PCMCIA
Для начала нам понадобится пакет mtd-utils (установку пакетов гуглите сами). Список команд устарел, смотрите https://packages.debian.org/sid/amd64/mtd-utils/filelist например. Документации к пакету НЕ ИДЁТ! (в Ubuntu, во всяком случае), и иногда она даже не гуглится.

Попробуем почитать информацию об устройствах MTD
mtdinfo
Count of MTD devices:           1
Present MTD devices:            mtd0
Sysfs interface supported:      yes

sudo mtdinfo /dev/mtd0
mtd0
Name:                           SMART Modular Technologies 12MB FLASH Card  
Type:                           nor
Eraseblock size:                131072 bytes, 128.0 KiB
Amount of eraseblocks:          96 (12582912 bytes, 12.0 MiB)
Minimum input/output unit size: 1 byte
Sub-page size:                  1 byte
Additional erase regions:       0
Character device major/minor:   90:0
Bad blocks are allowed:         false
Device is writable:             true
Eraseblock region 0:  offset: 0 size: 0x20000 numblocks: 0x10
Eraseblock region 1:  offset: 0x200000 size: 0x20000 numblocks: 0x10
Eraseblock region 2:  offset: 0x400000 size: 0x20000 numblocks: 0x10
Eraseblock region 3:  offset: 0x600000 size: 0x20000 numblocks: 0x10
Eraseblock region 4:  offset: 0x800000 size: 0x20000 numblocks: 0x10
Eraseblock region 5:  offset: 0xa00000 size: 0x20000 numblocks: 0x10

Эта информация пригодится нам, если форматировать в UBIFS, да и просто из интереса глянуть можно.

Обслуживанием старого PCMCIA FTL занимается драйвер ftl, переписанный для взаимодействия с подсистемой MTD. Загрузим его: sudo modprobe ftl

Если карточка ранее уже была отформатирована в TrueFFS, можно посмотреть детали:
ftl_check /dev/mtd0Memory region info:
  Region size = 12 mb  Erase block size = 128 kb

Partition header:
  Formatted size = 11640 kb, erase units = 96, transfer units = 1
  Erase unit size = 128 kb, virtual block size = 512 bytes

Erase unit 0:
  Logical unit 0, erase count = -1
  Block allocation: 3 control, 187 data, 47 free, 18 deleted

и т.д.



Форматируем карточку под старый FTL:
sudo ftl_format -r 0 /dev/mtd0
Partition size = 12 mb, erase unit size = 128 kb, 1 transfer units
Reserved 0%, formatted size = 12305920 bytes
Erasing all blocks...
+++++++*++++
Writing erase unit headers...
format successful.

Передёргиваем карточку (без передёргивания у меня не заработало). Появляется новое блочное устройство:
brw------- 1 root root 44, 0 ноя 20 14:57 /dev/ftla
Его размер 11.4 Мб. Это и есть наш FTL раздел.

Дальше, по идее, на нём должны располагаться разделы. Вот как это выглядит на отформатированной под Win9x карточке:
fdisk -l /dev/ftla
Диск /dev/ftla: 11,4 MiB, 11919360 байт, 23280 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0x00000000

Устр-во    Загрузочный начало Конец Секторы Размер Идентификатор Тип
/dev/ftla1 *                2 23279   23278  11,4M             4 FAT16 >32M


fdisk в Linux не позволяет задать начальный сектор менее 2048 (в режиме dos compatibility - менее 8), так что мы воспользуемся sfdisk. Запускаем его (с правами root):
sfdisk /dev/ftla
и создаём новый раздел:
>>> 2,,0x04,*
Записываем его:
write
Появляется новое устройство /dev/ftla1. Теперь форматируем создаём таблицу файлов:
mkfs.fat /dev/ftla1
Всё, можно монтировать это устройство и писать на него файлы.

Баги
...Вот только отформатированная нами карточка под виндой не откроется, скажет "Диск не отформатирован". И даже если на отформатированную под виндой карточку попытаться записать файлы под линуксом, на винде они не увидятся. В общем, поддержка FTL в линуксе так и осталась недопиленной, нормально работает только чтение.
Кроме того, драйвер ftl зависал. Чтобы поставить все эти эксперименты, мне пришлось через более опытного товарища связываться с разработчиками драйверов mtd, чтобы те пофиксили причину зависания, для диагностики пересобирать ядро с включенной отладкой блокировок, патчить и пересобирать драйверы mtd. Конечный результат достигнут на патченых драйверах.

Незаконченное
И это я ещё с карточкой на 20 Мб не игрался. В линуксе она как типичное PCMCIA устройство не определяется.
[ 1357.484062] pcmcia_socket pcmcia_socket0: pccard: PCMCIA card inserted into slot 0
[ 1357.484072] pcmcia_socket pcmcia_socket0: cs: memory probe 0x0d0000-0x0d3fff:
[ 1357.487086]  clean
[ 1357.487092] pcmcia_socket pcmcia_socket0: cs: memory probe 0x0dc000-0x0dffff:
[ 1357.490124]  clean
[ 1357.490130] pcmcia_socket pcmcia_socket0: cs: memory probe 0xf8200000-0xf99fffff:
[ 1357.508485]  excluding 0xf8f80000-0xf90fffff

Я читал про это, за двумя другими руки до неё не дошли.
Также не рассмотрено форматирование карточки в типично линуксовые JFFS и UBIFS.



При подготовке использовались материалы:
https://bootlin.com/blog/managing-flash-storage-with-linux/
http://dmilvdv.narod.ru/Translate/ELSDD/index.html
http://www.linux-mtd.infradead.org/index.html
http://pcmcia-cs.sourceforge.n....html#toc3

Эксперименты велись на Ubuntu 18.10, ядро 4.18.12
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
KALDYH, поздно увидел Ваш комментарий, спасибо, интересно!

Судя по выводам dmesg, Ваши Linear flash оснащены памятью атрибутов?
KALDYH
Advanced Member
Технонекромант

Откуда: Кемерово
Всего сообщений: 2355
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
5 июня 2009
i8088, на 12 Мб - оснащена. На 20 Мб - по-видимому нет, но под Windows 98 тем не менее опознаётся корректно (ёмкость, тип микросхем и т.д.). Будут проведены дополнительные исследования на эту тему, заодно попытаемся с товарищем разобраться, почему записанное под Linux не открывается под Win9x.
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
KALDYH написал:
[q]
i8088, на 12 Мб - оснащена. На 20 Мб - по-видимому нет, но под Windows 98 тем не менее опознаётся корректно (ёмкость, тип микросхем и т.д.). Будут проведены дополнительные исследования на эту тему, заодно попытаемся с товарищем разобраться, почему записанное под Linux не открывается под Win9x.
[/q]
Это интересно, перед тем как вышеупомянутую 1MB карту мне дали
для чтения, мой товарищ пробовал прочитать ее под разными Win,
но ничего путного не получилось. W98 определяет параметры
Вашей карты сама или с сторонним софтом?

А может быть так, что ATTR memory есть, просто не все поля
заполнены? Хорошо бы дамп памяти атрибутов попробовать снять.
Относительно читаемости под W98 - проблема в интерпретации
FS или с доступом к носителю?
KALDYH
Advanced Member
Технонекромант

Откуда: Кемерово
Всего сообщений: 2355
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
5 июня 2009
i8088 написал:
[q]
W98 определяет параметры
Вашей карты сама или с сторонним софтом?
[/q]
С драйвером от M-Systems. Как видится без драйвера - не проверял, позже займусь.

i8088 написал:
[q]
Относительно читаемости под W98 - проблема в интерпретации
FS или с доступом к носителю?
[/q]
Проблема в интерпретации FTL. Мы сравнивали - разметка блоков не совпадает.
<<Назад  Вперед>> Страницы: 1 2 3 4 5 6 7 8 9 * 10
Печать
Полигон-2 »   Технический флейм »   Как прочитать linear Flash карту в Win7
RSS

0 посетителей просмотрели эту тему за последние 15 минут
В том числе: 0 гостей, 0 скрытых пользователей

Последние RSS
[Москва] LIQUID-Акция. Сливаются разъемы CF
МС7004 и 7004А на AT и XT
Пайка термотрубок
Проммать s478 PEAK 715VL2-HT ( Full-Size SBC)
Подскажите по 386 материке по джамперам.

Самые активные 5 тем RSS