4.2 MTD — Технологическое Устройство Памяти
Глава 4, Хранение данных во встраиваемых системах | 60 |
Как бы вы хотели получать доступ к разделам, как к необработанным данным, или вы хотели бы использовать файловую систему? Простые разделы могут быть полезны для загрузчика, потому что не будет необходимости в файловой системе; вы можете выделить сектор флеш-памяти для хранения данных конфигурации загрузки, а остальные секторы для хранения кода загрузчика. Тем не менее, для разделов, содержащих данные Linux, безопаснее идти через файловые системы. Выбор файловой системы для данных также играет важную роль в создании карты флеш-памяти.
Как бы вы хотели делать обновления? Обновления на встроенной системе может быть выполнено на работающей системе или через загрузчик. В случае, если обновления предполагают изменение только данных для чтения (как это обычно бывает), то лучше разделить флеш-память на разделы только для чтения и только для записи, так что вам не придётся делать резервного копирования и восстановления для читаемых/ записываемых данных.
Рисунок 4.1 показывает карту флеш-памяти для 4 Мб флеш-памяти, содержащей загрузчик, образ ОС и приложения. Как видно, только читаемые данные хранятся в файловой системе CRAMFS, которая является файловой системы только для чтения, а читаемые и записываемые данные хранятся в файловой системе JFFS2, которая является файловой системой для чтения и записи.
Рисунок 4.1 Карта памяти для 4-х Мб флеш-памяти.
MTD означает Memory Technology Device, Технологическое Устройство Памяти, и является подсистемой, используемой для управления устройствами хранения данных, находящихся на плате. Является ли MTD отдельным классом набора драйверов, как символьные или блочные? Простой ответ: нет. Тогда в чём заключается работа MTD и когда и как устройства флеш-памяти включаются в подсистему MTD? Как на MTD устройство будут помещаться файловые системы? На эти вопросы отвечают следующие подразделы.
61Разработка и внедрение системы на встраиваемом Linux
4.2.1Модель MTD
Хотя устройства флеш-памяти являются устройствами хранения, похожими на жёсткие диски, между ними существуют некоторые фундаментальные различия.
Обычно жёсткие диски имеют сектор, который делится по размерам страницы (обычно 4096 байт). Стандартным значением является 512 байт. Модель файловой системы Linux, особенно буфер кэша (кэш памяти между файловой системой и уровнем блочного устройства), основана на этом предположении. Микросхемы флеш-памяти, с другой стороны, имеют большие размеры сектора; стандартный размер составляет 64 Кб.
Секторы флеш-памяти обычно перед записью в них должны быть стёрты; операции записи и стирания могут быть независимыми, что зависит от программного обеспечения, использующего флэш-память.
Обычные файловые системы не могут быть использованы поверх флеш-памяти, потому что это проходит через буферный кэш. Обычный дисковый ввод-вывод медленный; чтобы ускорить его, используется кэш в памяти, называемой кэш-буфером, который хранит данные для ввода-вывода на диск. Пока эти данные не записаны обратно на диск, файловая система находится в неустойчивом состоянии. (Это и является причиной, почему вы должны выключать ОС на ПК перед выключением его питания.) Тем не менее, встроенные системы могут быть выключены без надлежащего завершения работы и всё же иметь непротиворечивые данные; так что обычные файловые системы и модель блочного устройства не очень подходят для встраиваемых систем.
Традиционным методом, используемым для доступа к флеш-памяти, является FTL, то есть Flash Translation Layer, Уровень Трансляции Флеш-памяти. Этот уровень эмулирует на флеш-памяти поведение блочного устройства, чтобы обеспечить на них работу обычных файловых систем. Однако, создание новой файловой системы или нового драйвера флешпамяти, работающего с FTL, является сложной задачей и это является причиной изобретения подсистемы MTD. (Владельцем подсистемы MTD является Дэвид Вудхаус, а разработки, связанные с MTD, можно получить на веб-сайте http://www.linuxmtd.infradead.org/. Подсистема MTD была создана как часть основного ядра версии 2.4.) Решение MTD вышеуказанных проблем простое: рассматривать устройства памяти как устройства памяти, а не как диски. Поэтому вместо изменения низкоуровневых драйверов или введения уровня трансляции, измените приложение, чтобы использовать устройства памяти такими, как они есть. MTD очень привязано к приложениям; подсистема MTD состоит из двух частей: драйверы и приложения.
Подсистема MTD не реализует новый вид драйвера, но скорее она связывает любое устройство с драйверами символьных и блочных устройств. Когда драйвер зарегистрирован в подсистеме MTD, она экспортирует такое устройство в оба этих вида драйверов. Почему это делается именно так? Символьное устройство может позволить непосредственный доступ к устройству памяти с использованием стандартных вызовов open/read/write/ ioctl. Но в случае, если вы захотите смонтировать обычную файловую систему на такое устройство памяти с помощью традиционного метода, вы сможете также смонтировать её используя блочный драйвер.
Глава 4, Хранение данных во встраиваемых системах | 62 |
Мы разберёмся с каждым уровнем на Рисунке 4.1, но перед этим давайте разберёмся с двумя устройствами, которые в настоящее время поддерживаются MTD: микросхемы флешпамяти и флеш-диски.
4.2.2 Микросхемы флеш-памяти
Рассмотрим различные микросхемы флеш-памяти, поддерживаемые подсистемой MTD. Устройства флеш-памяти поставляются в двух вариантах: NAND и NOR флеш-память. Хотя оба варианта созданы примерно в одно время (NOR была представлена Intel, а NAND — Toshiba в конце 1980 года), NOR быстрее вошла в мир встраиваемых устройств, поскольку она проще в использовании. Однако, когда встраиваемые системы эволюционировали к необходимости иметь больше места для хранения (например, медиаплееры и цифровые камеры), для приложений хранения данных стала популярной NAND Flash.
Таблица 4.1 Сравнение NOR и NAND Flash
| NOR | NAND |
|
|
|
Доступ к данным | К данным можно обращаться в | В микросхемах NAND флеш |
| случайном порядке, так же как к | пространство разделено на |
| SRAM. Операциями с флеш- | блоки, которые также |
| памятью могут быть: | разделены на страницы. Каждая |
| Процедура чтения: чтение | страница разделена на |
| содержимого флеш-памяти. | обычные данные и |
| Процедура стирания: стирание | дополнительные (out-of-band) |
| — это процесс установки всех | данные. Дополнительные |
| битов флеш-памяти в 1. | данные используются для того, |
| Стирание в микросхемах NOR | чтобы хранить метаданные, |
| происходит в терминах блоков | такие как ECC (Error-Correction |
| (называемых областями | Code, Код для коррекции |
| ошибок) данные и информацию | |
| Процедура записи: запись — это | о неисправном блоке. NAND |
| процесс изменения во флеш- | флеш, как и NOR флеш, имеет |
| памяти 1 в 0. После того, как бит | три основные операции: |
| стал 0, он не может быть | чтение, стирание и запись. |
| записан, пока блок не будет | Однако, в отличие от NOR, к |
| стёрт, что означает установку | данным которой можно |
| всех битов в блоке в 1. | обращаться в произвольном |
|
| порядке, чтение и запись в |
|
| NAND флеш выполняются в |
|
| терминах страниц, тогда как |
|
| стирание происходит в |
|
| терминах блоков. |
|
|
|
Подключение к | Подключается как обычное | Существуют несколько способов |
плате | устройство SRAM к шинам | подключения NAND флеш к |
| адреса и данных процессора. | CPU, зависящих от |
|
| производителя. Для доступа к |
|
|
|
63 Разработка и внедрение системы на встраиваемом Linux
|
| NAND выполняется соединение |
|
| выводов данных и команд к |
|
| обычно 8 выводам ввода- |
|
| вывода на микросхеме флеш- |
|
| памяти. |
|
|
|
Выполнение кода | Код может быть выполнен прямо | Если код находится в NAND |
| из NOR, поскольку она | флеш, для запуска он нуждается |
| подключена непосредственно к | в копировании в память. |
| шинам адреса и данных. |
|
|
|
|
Производительность | Флеш-память NOR | Флеш-память NAND |
| характеризуется медленным | характеризуется быстрым |
| стиранием, медленной записью | стиранием, быстрой записью и |
| и быстрым чтением. | быстрым чтением. |
|
|
|
Неисправные блоки | Неисправные блоки в | Эти микросхемы были |
| микросхемах NOR флеш не | разработаны в основном как |
| ожидаются, поскольку они были | устройства хранения медиа- |
| разработаны, чтобы хранить | данных с более низкой ценой, |
| системные данные. | поэтому стоит ожидать, что они |
|
| имеют неисправные блоки. |
|
| Обычно такие микросхемы |
|
| флеш-памяти поставляются с |
|
| помеченными неисправными |
|
| участками. Также сектора NAND |
|
| флеш больше страдают от |
|
| проблемы переключения битов, |
|
| когда бит становится |
|
| перевернутым во время записи; |
|
| это обнаруживается |
|
| алгоритмами коррекции ошибок, |
|
| называемых ECC/EDC, которые |
|
| выполняются либо в |
|
| оборудовании, либо в |
|
| программном обеспечении. |
|
|
|
Применение | В основном используются для | Используются главным образом в |
| выполнения кода. На NOR флеш | качестве устройств хранения |
| могут находиться загрузчики, | для встраиваемых систем, |
| потому что код из такой флеш- | таких как приставки к |
| памяти может быть выполнен | телевизорам и MP3-плееры. |
| напрямую. Такая флеш-память | Если вы планируете |
| довольно дорогая и она | использовать плату только с |
| обеспечивает меньшие | NAND, вам придётся добавить |
| плотности памяти и имеет | дополнительное ПЗУ загрузки. |
| относительно более короткую | Они предлагают высокие |
| продолжительность жизни | плотности при более низких |
| (приблизительно 100 000 циклов | ценах и имеют более |
| стирания). | длительный срок службы (около |
|
| 10 в 6-ой степени циклов |
|
| стирания). |
|
|
|
Memory Technology Device (MTD) support
Skip to content
Найти: Close
Memory Technology Device (MTD) support
Memory Technology Devices are flash, RAM and similar chips, often used for solid state file systems on embedded devices. This option will provide the generic support for MTD drivers to register themselves with the kernel and for potential users of MTD devices to enumerate the devices which are present and obtain a handle on them. It will also allow you to select individual drivers for particular hardware and users of MTD devices. If unsure, say N.
Устройства памяти — это флэш-память, оперативная память и аналогичные микросхемы, которые часто используются для создания твердотельных файловых систем на встроенных устройствах. Эта опция обеспечит общую поддержку для драйверов MTD для регистрации себя в ядре и для потенциальных пользователей устройств MTD для перечисления имеющихся устройств и получения указателя на них. Это также позволит вам выбрать отдельные драйверы для конкретного оборудования и пользователей устройств MTD.
Если не уверены, скажите N.
Debugging
This turns on low-level debugging for the entire MTD sub-system. Normally, you should say N.
Включает низкоуровневую отладку для всей подсистемы MTD.
Обычно вы должны сказать N.
MTD concatenating support
Support for concatenating several MTD devices into a single (virtual) one. This allows you to have -for example- a JFFS(2) file system spanning multiple physical flash chips. If unsure, say Y.
Поддержка объединения нескольких устройств MTD в одно (виртуальное). Это позволяет вам иметь, например, файловую систему JFFS (2), охватывающую несколько физических флеш-чипов.
Если не уверены, скажите Y.
MTD partitioning support
If you have a device which needs to divide its flash chip(s) up into multiple ‘partitions’, each of which appears to the user as a separate MTD device, you require this option to be enabled. If unsure, say ‘Y’.
Note, however, that you don’t need this option for the DiskOnChip devices. Partitioning on NFTL ‘devices’ is a different — that’s the ‘normal’ form of partitioning used on a block device.
Если у вас есть устройство, которому необходимо разделить свои флеш-чип(ы) на несколько «разделов», каждый из которых представляется пользователю как отдельное устройство MTD, вам необходимо включить эту опцию. Если вы не уверены, скажите «Y».
Обратите внимание, что вам не нужна эта опция для устройств DiskOnChip. Разбиение на «устройствах» в NFTL отличается — это «нормальная» форма разбиения, используемая на блочных устройствах.
Direct char device access to MTD devices
This provides a character device for each MTD device present in the system, allowing the user to read and write directly to the memory chips, and also use ioctl() to obtain information about the device, or to erase parts of it.
Предоставляет символьное устройство для каждого устройства MTD, присутствующего в системе, позволяя пользователю читать и записывать данные непосредственно в микросхемы памяти, а также использовать ioctl () для получения информации об устройстве или для его удаления.
Caching block device access to MTD devices
Although most flash chips have an erase size too large to be useful as block devices, it is possible to use MTD devices which are based on RAM chips in this manner. This block device is a user of MTD devices performing that function.
At the moment, it is also required for the Journalling Flash File System(s) to obtain a handle on the MTD device when it’s mounted (although JFFS and JFFS2 don’t actually use any of the functionality of the mtdblock device).
Later, it may be extended to perform read/erase/modify/write cycles on flash chips to emulate a smaller block size. Needless to say, this is very unsafe, but could be useful for file systems which are almost never written to.
You do not need this option for use with the DiskOnChip devices. For those, enable NFTL support (CONFIG_NFTL) instead.
Хотя большинство флэш-чипов имеют слишком большой размер стирания, чтобы их можно было использовать в качестве блочных устройств, таким образом можно использовать устройства MTD, основанные на чипах ОЗУ. Это блочное устройство является пользователем устройств MTD, выполняющих эту функцию.
В настоящий момент также требуется, чтобы Journalling Flash файловая система(ы) получала дескриптор устройства MTD при его монтировании (хотя JFFS и JFFS2 фактически не используют никаких функций устройства mtdblock).
Позже он может быть расширен для выполнения циклов чтения/стирания/изменения/записи на чипах флэш-памяти, чтобы эмулировать меньший размер блока. Излишне говорить, что это очень небезопасно, но может быть полезно для файловых систем, в которые почти никогда не записываются данные.
Вам не нужна эта опция для использования с устройствами DiskOnChip. Для них включите поддержку NFTL (CONFIG_NFTL).
Readonly block device access to MTD devices
This allows you to mount read-only file systems (such as cramfs) from an MTD device, without the overhead (and danger) of the caching driver.
You do not need this option for use with the DiskOnChip devices. For those, enable NFTL support (CONFIG_NFTL) instead.
Позволяет вам монтировать файловые системы только для чтения (например, cramfs) с устройства MTD без лишних затрат (и опасности) драйвера кэширования.
Вам не нужна эта опция для использования с устройствами DiskOnChip. Для них включите поддержку NFTL (CONFIG_NFTL).
FTL (Flash Translation Layer) support
This provides support for the original Flash Translation Layer which is part of the PCMCIA specification. It uses a kind of pseudo- file system on a flash device to emulate a block device with 512-byte sectors, on top of which you put a ‘normal’ file system.
You may find that the algorithms used in this code are patented unless you live in the Free World where software patents aren’t legal — in the USA you are only permitted to use this on PCMCIA hardware, although under the terms of the GPL you’re obviously permitted to copy, modify and distribute the code as you wish. Just not use it.
Обеспечивает поддержку оригинального Flash Translation Layer, который является частью спецификации PCMCIA. Он использует своего рода псевдофайловую систему на флэш-устройстве для эмуляции блочного устройства с 512-байтовыми секторами, поверх которого вы помещаете «нормальную» файловую систему.
Вы можете обнаружить, что алгоритмы, используемые в этом коде, запатентованы, если вы не живете в Свободном мире, где патенты на программное обеспечение не являются законными — в США вам разрешено использовать это только на оборудовании PCMCIA, хотя согласно условиям GPL вам, разумеется, разрешено копировать, модифицировать и распространять код по своему усмотрению. Просто не используйте это.
NFTL (NAND Flash Translation Layer) support
This provides support for the NAND Flash Translation Layer which is used on M-Systems’ DiskOnChip devices. It uses a kind of pseudo- file system on a flash device to emulate a block device with 512-byte sectors, on top of which you put a ‘normal’ file system.
You may find that the algorithms used in this code are patented unless you live in the Free World where software patents aren’t legal — in the USA you are only permitted to use this on DiskOnChip hardware, although under the terms of the GPL you’re obviously permitted to copy, modify and distribute the code as you wish. Just not use it.
Обеспечивает поддержку NAND Flash Translation Layer, который используется на устройствах DiskOnChip компании M-Systems. Он использует своего рода псевдофайловую систему на флэш-устройстве для эмуляции блочного устройства с 512-байтовыми секторами, поверх которого вы помещаете «нормальную» файловую систему.
Вы можете обнаружить, что алгоритмы, используемые в этом коде, запатентованы, если вы не живете в Свободном мире, где патенты на программное обеспечение не являются законными — в США вам разрешено использовать это только на оборудовании DiskOnChip, хотя на условиях GPL вам, разумеется, разрешено копировать, модифицировать и распространять код по своему усмотрению. Просто не используйте это.
Write support for NFTL
Support for writing to the NAND Flash Translation Layer, as used on the DiskOnChip.
Поддержка записи в NAND, используется в устройствах типа ДискНаКристале.
INFTL (Inverse NAND Flash Translation Layer) support
This provides support for the Inverse NAND Flash Translation Layer which is used on M-Systems’ newer DiskOnChip devices. It uses a kind of pseudo-file system on a flash device to emulate a block device with 512-byte sectors, on top of which you put a ‘normal’ file system.
You may find that the algorithms used in this code are patented unless you live in the Free World where software patents aren’t legal — in the USA you are only permitted to use this on DiskOnChip hardware, although under the terms of the GPL you’re obviously permitted to copy, modify and distribute the code as you wish. Just not use it.
Обеспечивает поддержку обратного уровня NAND Flash Translation Layer, который используется на более новых устройствах DiskOnChip компании M-Systems. Он использует своего рода псевдофайловую систему на флэш-устройстве для эмуляции блочного устройства с 512-байтовыми секторами, поверх которого вы помещаете «нормальную» файловую систему.
Вы можете обнаружить, что алгоритмы, используемые в этом коде, запатентованы, если вы не живете в Свободном мире, где патенты на программное обеспечение не являются законными — в США вам разрешено использовать это только на оборудовании DiskOnChip, хотя на условиях GPL вам, разумеется, разрешено копировать, модифицировать и распространять код по своему усмотрению. Просто не используйте это.
Resident Flash Disk (Flash Translation Layer) support
This provides support for the flash translation layer known as the Resident Flash Disk (RFD), as used by the Embedded BIOS of General Software. There is a blurb at:
http://www.gensw.com/pages/prod/bios/rfd.htm
Обеспечивает поддержку уровня трансляции флэш-памяти, известного как Resident Flash Disk (RFD), который используется встроенным BIOS общего программного обеспечения. Существует реклама на:
http://www.gensw.com/pages/prod/bios/rfd.htm
RAM/ROM/Flash chip drivers
Detect flash chips by Common Flash Interface (CFI) probe
The Common Flash Interface specification was developed by Intel, AMD and other flash manufactures that provides a universal method for probing the capabilities of flash devices. If you wish to support any device that is CFI-compliant, you need to enable this option. Visit <http://www.amd.com/products/nvd/overview/cfi.html> for more information on CFI.
Спецификация Common Flash Interface была разработана Intel, AMD и другими производителями флэш-памяти, которая предоставляет универсальный метод для исследования возможностей флэш-устройств. Если вы хотите поддерживать любое устройство, совместимое с CFI, вам необходимо включить эту опцию. Посетите <http://www.amd.com/products/nvd/overview/cfi.html> для получения дополнительной информации о CFI.
Detect non-CFI AMD/JEDEC-compatible flash chips
This option enables JEDEC-style probing of flash chips which are not compatible with the Common Flash Interface, but will use the common CFI-targetted flash drivers for any chips which are identified which are in fact compatible in all but the probe method. This actually covers most AMD/Fujitsu-compatible chips, and will shortly cover also non-CFI Intel chips (that code is in MTD CVS and should shortly be sent for inclusion in Linus’ tree)
Эта опция позволяет выполнять тестирование флэш-чипов в стиле JEDEC, которые не совместимы с интерфейсом Common Flash, но будет использовать общие флэш-драйверы, нацеленные на CFI, для любых идентифицированных чипов, которые на самом деле совместимы со всеми, кроме метода зонда. На самом деле это относится к большинству AMD/Fujitsu-совместимых чипов и в скором времени охватит также чипы Intel без CFI (этот код находится в CVS MTD и вскоре должен быть отправлен для включения в дерево Линуса)
Flash chip driver advanced configuration options
If you need to specify a specific endianness for access to flash chips, or if you wish to reduce the size of the kernel by including support for only specific arrangements of flash chips, say ‘Y’. This option does not directly affect the code, but will enable other configuration options which allow you to do so.
If unsure, say ‘N’.
Если вам нужно указать конкретный порядок байтов для доступа к флеш-чипам или вы хотите уменьшить размер ядра, включив поддержку только определенных типов флеш-чипов, скажите «Y». Этот параметр напрямую не влияет на код, но включает другие параметры конфигурации, которые позволяют вам это делать.
Если не уверены, скажите «N».
Support for Intel/Sharp flash chips
The Common Flash Interface defines a number of different command sets which a CFI-compliant chip may claim to implement. This code provides support for one of those command sets, used on Intel StrataFlash and other parts.
Common Flash Interface определяет ряд различных наборов команд, которые CFI-совместимый чип может реализовывать. Этот код обеспечивает поддержку одного из этих наборов команд, используемых в Intel StrataFlash и других частях.
Support for AMD/Fujitsu flash chips
The Common Flash Interface defines a number of different command sets which a CFI-compliant chip may claim to implement. This code provides support for one of those command sets, used on chips including the AMD Am29LV320.
Common Flash Interface определяет ряд различных наборов команд, которые CFI-совместимый чип может реализовывать. Этот код обеспечивает поддержку одного из этих наборов команд, используемых на чипах, включая AMD Am29LV320.
И т.д.
Self-contained MTD device drivers
NAND Flash Device Drivers
OneNAND Flash Device Driver
Retry failed commands (erase/program)
Some chips, when attached to a shared bus, don’t properly filter bus traffic that is destined to other devices. This broken behavior causes erase and program sequences to be aborted when the sequences are mixed with traffic for other devices.
SST49LF040 (and related) chips are know to be broken.
Некоторые микросхемы, подключенные к общей шине, неправильно фильтруют трафик шины, предназначенный для других устройств. Это нарушенное поведение приводит к тому, что последовательности стирания и программы отменяются, когда последовательности смешиваются с трафиком для других устройств.
Известно, что чипы SST49LF040 (и связанные с ними) сломаны.
Support for ST (Advanced Architecture) flash chips
The Common Flash Interface defines a number of different command sets which a CFI-compliant chip may claim to implement. This code provides support for one of those command sets.
Common Flash Interface определяет ряд различных наборов команд, которые CFI-совместимый чип может реализовывать. Этот код обеспечивает поддержку одного из этих наборов команд.
Support for RAM chips in bus mapping
This option enables basic support for RAM chips accessed through a bus mapping driver.
Эта опция включает базовую поддержку микросхем ОЗУ, доступ к которым осуществляется через драйвер отображения шины.
Support for ROM chips in bus mapping
This option enables basic support for ROM chips accessed through a bus mapping driver.
Эта опция включает базовую поддержку микросхем ПЗУ, доступ к которым осуществляется через драйвер отображения шины.
Support for absent chips in bus mapping
This option enables support for a dummy probing driver used to allocated placeholder MTD devices on systems that have socketed or removable media. Use of this driver as a fallback chip probe preserves the expected registration order of MTD device nodes on the system regardless of media presence. Device nodes created with this driver will return -ENODEV upon access.
Этот параметр включает поддержку фиктивного пробного драйвера, используемого для распределенных устройств MTD-заполнителей в системах с сокетами или со съемными носителями. Использование этого драйвера в качестве запасного чип-зонда сохраняет ожидаемый порядок регистрации узлов устройства MTD в системе независимо от наличия носителя. Узлы устройства, созданные с помощью этого драйвера, вернут -ENODEV при доступе.
Mapping drivers for chip access
Support non-linear mappings of flash chips
This causes the chip drivers to allow for complicated paged mappings of flash chips.
Драйверы микросхем допускают сложные постраничные отображения микросхем флэш-памяти.
И т.д.
Self-contained MTD device drivers
NAND Flash Device Drivers
OneNAND Flash Device Driver
Понравилось это:
Нравится Загрузка…
Рубрики
РубрикиВыберите рубрикуLinux (262) Kubernetes (96) Mikrotik (12) Puppet (5) Мониторинг (17) Почта (5)Mac (1)Windows (22)Без рубрики (206)Виртуалки (11) Vmware (2)Железо (6)Мемо (11)Новости (2)Про жизнь (98) Война (24) Здоровье (4) Мысли (13) Настроение (13)Программирование (21) java (14)Работа (147) Devops (9) VOIP (6) Курсы (97)Разное (15)Спорт (3)Это (148) идиотизмы (22) креатив (8) лохотрон (12) негатив (39) позитив (52) приколы (22) странное (9) черный пиар (18)Метки
CI|CD (1) devops (17) ekasticsearch (1) java (4) kubernetes (95) linux (53) mac (1) mikrotik (11) openvpn (1) rancher (1) routing (2) voip (3) youtube (1) виртуалки (5) документация (1) жизня (2) здоровье (2) идиотизмы (2) курсы (58) логи (2) мониторинг (18) музыка (1) настроение (2) негатив (3) новости (1) переводы (1) позитив (2) почта (1) приколы (1) прог (1) программирование (8) про жизнь (4) работа (2) черный пиар (1) это (3)
Архив
Архив Выберите месяц Январь 2023 (1) Декабрь 2022 (1) Ноябрь 2022 (1) Октябрь 2022 (1) Сентябрь 2022 (2) Август 2022 (2) Июль 2022 (3) Июнь 2022 (1) Май 2022 (1) Март 2022 (6) Февраль 2022 (5) Январь 2022 (2) Декабрь 2021 (9) Ноябрь 2021 (3) Октябрь 2021 (3) Сентябрь 2021 (1) Август 2021 (3) Июль 2021 (6) Июнь 2021 (2) Май 2021 (5) Апрель 2021 (6) Март 2021 (1) Февраль 2021 (1) Январь 2021 (3) Декабрь 2020 (4) Ноябрь 2020 (4) Октябрь 2020 (3) Сентябрь 2020 (5) Август 2020 (4) Июль 2020 (9) Июнь 2020 (3) Май 2020 (2) Апрель 2020 (6) Март 2020 (2) Декабрь 2019 (2) Октябрь 2019 (4) Август 2019 (6) Июль 2019 (1) Июнь 2019 (4) Май 2019 (9) Апрель 2019 (8) Март 2019 (2) Октябрь 2018 (2) Сентябрь 2018 (1) Август 2018 (1) Июнь 2018 (4) Май 2018 (1) Февраль 2018 (1) Январь 2018 (1) Ноябрь 2017 (1) Октябрь 2017 (2) Сентябрь 2017 (1) Июнь 2017 (2) Апрель 2017 (1) Март 2017 (5) Февраль 2017 (1) Январь 2017 (2) Декабрь 2016 (1) Июль 2016 (1) Апрель 2016 (1) Февраль 2016 (2) Январь 2016 (2) Декабрь 2015 (5) Ноябрь 2015 (7) Октябрь 2015 (9) Сентябрь 2015 (8) Июль 2015 (2) Март 2015 (1) Февраль 2015 (1) Июль 2014 (1) Июль 2013 (1) Май 2013 (1) Апрель 2013 (1) Февраль 2013 (2) Январь 2013 (1) Декабрь 2012 (1) Ноябрь 2012 (1) Октябрь 2012 (7) Сентябрь 2012 (2) Август 2012 (3) Июль 2012 (2) Июнь 2012 (2) Май 2012 (1) Апрель 2012 (3) Март 2012 (6) Январь 2012 (2) Декабрь 2011 (7) Ноябрь 2011 (3) Октябрь 2011 (4) Сентябрь 2011 (2) Август 2011 (8) Июль 2011 (1) Июнь 2011 (3) Май 2011 (2) Апрель 2011 (4) Март 2011 (14) Февраль 2011 (8) Январь 2011 (2) Декабрь 2010 (2) Ноябрь 2010 (2) Сентябрь 2010 (1) Август 2010 (3) Июль 2010 (3) Июнь 2010 (3) Май 2010 (3) Апрель 2010 (1) Март 2010 (2) Февраль 2010 (4) Январь 2010 (3) Декабрь 2009 (3) Ноябрь 2009 (5) Октябрь 2009 (8) Сентябрь 2009 (7) Август 2009 (5) Июль 2009 (13) Июнь 2009 (10) Май 2009 (15) Апрель 2009 (6) Март 2009 (12) Февраль 2009 (6) Январь 2009 (5) Декабрь 2008 (9) Ноябрь 2008 (8) Октябрь 2008 (7) Сентябрь 2008 (14) Август 2008 (21) Июль 2008 (19) Июнь 2008 (9) Май 2008 (12) Апрель 2008 (11) Март 2008 (16) Февраль 2008 (16) Январь 2008 (18) Декабрь 2007 (16) Ноябрь 2007 (15) Октябрь 2007 (22) Сентябрь 2007 (23) Август 2007 (2) Июль 2007 (3) Март 2006 (2) Февраль 2006 (6) Январь 2006 (7) Декабрь 2005 (15) Ноябрь 2005 (3)Я там
Мои твиты%d такие блоггеры, как:
Memory Technology Device (MTD) для Linux.
Содержание
- Обзор MTD
- МТД API
- МПД-тесты
- Драйвер
mtdblock
- Старая документация MTD
Подсистема MTD (расшифровывается как Memory Technology Devices) обеспечивает абстракцию слой для необработанных флэш-устройств. Это позволяет использовать один и тот же API, когда работа с различными типами флэш-памяти и технологиями, например. NAND, OneNAND, НО, AG-И, ECC’d NOR и т. д.
Подсистема MTD не работает с блочными устройствами, такими как MMC, eMMC, SD, CompactFlash и т. д. Эти устройства не являются необработанными флэш-памятью, но имеют флэш-память. Трансляционный слой внутри, что делает их похожими на блочные устройства. Эти устройства являются предметом блочной подсистемы Linux, а не MTD. Пожалуйста, обратитесь к этот раздел часто задаваемых вопросов для краткости перечень основных отличий блочных устройств от МПД. И Необработанная флэш-память против FTL-устройств Раздел UBIFS обсуждает это более подробно.
Подсистема МПД имеет следующие интерфейсы.
- Символьные устройства MTD, обычно называемые
/dev/mtd0
,/dev/mtd1
и так далее. Эти символьные устройства обеспечивают доступ ввода-вывода к необработанной флэш-памяти. Они поддерживают количество вызововioctl
для стирания стираемых блоков, маркировки их как плохие или проверка, если блок стирания плохой, получение информации о приборах МПД и др. - Интерфейс
sysfs
относительно новее и обеспечивает полная информация о каждом устройстве МПД в системе. Этот интерфейс легко расширяемый, и разработчикам рекомендуется использовать 9Интерфейс 0012 sysfs вместо старогоioctl
или/proc/mtd
интерфейсы, если это возможно.sysfs
интерфейс для подсистемы mtd задокументирован в ядре, и в настоящее время можно найти наДокументация/ABI/тестирование/sysfs-class-mtd
. - Файл файловой системы
/proc/mtd
proc предоставляет общие Информация МТД. Это устаревший интерфейс и интерфейс sysfs. предоставляет больше информации.
Подсистема MTD поддерживает чистую флэш-память NAND с программно-аппаратный ECC, флэш-память OneNAND, CFI (Общий интерфейс флэш-памяти) Вспышки NOR и другие типы вспышек.
Кроме того, MTD поддерживает устаревшие «уровни перевода» FTL/NFTL,
Чипы DiskOnChip 2000 и Millennium от M-Systems и флэш-памяти PCMCIA
(драйвер pcmciamtd
). Но соответствующие драйвера очень старые и
не очень поддерживается.
API подсистемы MTD определен в include/linux/mtd/mtd.h
.
Методы и структуры данных в этом файле используются ядром более высокого уровня.
код, такой как файловые системы флэш-памяти, для доступа к устройствам mtd и управления ими, а также
авторами драйверов устройств для сопряжения своего устройства с подсистемой mtd.
определены различные методы, с помощью которых драйвер предоставляет доступ к устройству
в течение структура mtd_info
. До версии ядра 3. 4 более высокие уровни
вызывал методы драйвера напрямую через указатель на структуру mtd_info
. Начиная с ядра 3.4, эти методы реализованы в пакете mtd.
код ядра подсистемы, который затем вызывает соответствующие методы драйвера. Пользователи
ядра 3.4 и более поздних версий не должны вызывать методы драйвера напрямую, а вместо этого
используйте прототипы в mtd.h
за пределами структуры mtd_info
. Эти методы включают mtd_read()
, mtd_write()
и т. д.
При отсутствии ошибки методы API вернут ноль, за двумя важными исключениями. mtd_read()
и mtd_read_oob()
могут вернуться -EUCLEAN
в некоторых случаях. Этот код возврата применим
в основном на устройства флэш-памяти NAND и используется для обозначения того, что некоторые битовые ошибки были
исправляется средством ECC устройства. До версии ядра 3.4, - EUCLEAN
возвращался, если одна или несколько битовых ошибок были исправлены. во время операции чтения. Начиная с ядра 3.4 значение более тонкое, и
можно широко интерпретировать как означающее, что «было опасно большое количество битовых ошибок».
исправлено». - Код возврата EUCLEAN
предназначен для
слои обнаруживают деградацию блоков стирания. Условия, по которым mtd_read()
и mtd_read_oob()
возврат -EUCLEAN
можно настроить с помощью bitflip_threshold
элемент интерфейса sysfs. См. документацию ядра для MTD.
sysfs (см. выше) перед настройкой этого значения.
В состав mtd-utils входит набор тестовых программ, которые можно запустить для проверки ваше флэш-оборудование и драйверы. Программы только недавно были портированы в пространство пользователя, а также доступны в виде модулей ядра.
В отличие от модулей, тесты пользовательского пространства также предлагают более тонкие детализированные варианты управления их поведением, такие как использование только определенных удалить блоки или страницы.
Тесты пользовательского пространства компилируются автоматически, когда
компиляции mtd-utils, но
не устанавливается по умолчанию. Для установки тестов через make install
, опция настройки --enable-install-tests
должен быть установлен.
Тесты модулей ядра доступны в основных ядрах
начиная с версии ядра 2.6.29
и они живут в drivers/mtd/tests
Каталог исходных кодов ядра Linux. Ты
может компилировать тесты как модули ядра, включив их в ядре
меню конфигурации, пометив: « Драйверы устройств » ->
« Memory Technology Device (MTD) support » -> « MTD Tests support » (или
символ MTD_TESTS
в файле .config
).
Если у вас ядро до 2.6.29
, вы можете найти тесты
здесь:
git://git.infradead.org/users/ahunter/nand-tests.git
Набор тестов MTD содержит следующие тесты:
- nandbiterrs : применимо только для битовые ошибки и тесты на восстановление многобитных ошибок на странице NAND. Этот в основном тестирует контроллер/драйвер ECC. Версия модуля ядра называется mtd_nandbiterrs .
- flash_speed : измеряет и сообщает скорость чтения/записи/стирания устройства МПД. Версия модуля ядра называется mtd_speedtest .
- flash_stress : выполняет случайные операции чтения/записи/стирания и проверяет возможности ввода/вывода устройства MTD. Модуль ядра версия называется mtd_stresstest .
- flash_readtest : тестирует чтение с устройства MTD, один NAND страницы за раз, включая OOB (или 512 байт за раз в случае флэш-памяти). как NOR) и проверяет правильность чтения. Модуль ядра версия называется mtd_readtest .
- nandpagetest : актуально только для флэш-памяти NAND, страница тестов NAND письмо и чтение в разном размере и порядке; этот тест был изначально разработан для тестирования драйвера OneNAND, так что это может быть немного ориентирован на OneNAND, но должен работать на любой флэш-памяти NAND. Ядро версия модуля называется mtd_pagetest .
- mtd_oobtest : в настоящее время существует только как модуль ядра. Актуально только для флэш-памяти NAND, проверяет работу ввода-вывода области OOB. правильно, записывая данные по разным смещениям и проверяя их.
- nandsubpagetest : актуально только для флэш-памяти NAND, тесты ввод/вывод подстраницы. Модуль ядра версия называется mtd_subpagetest .
- flash_torture : этот тест предназначен для износа flash
стереть блоки. Повторно записывает и стирает одну и ту же группу
стирает блоки до тех пор, пока не произойдет ошибка ввода-вывода, поэтому будьте осторожны! Это может быть очень
хорошая идея запустить этот тест на некоторое время и проверить ваш прошивальщик
и HW, если у вас есть запасное устройство. Например, мы поймали
довольно редкие и неприятные проблемы с DMA на плате OMAP2 с флэш-памятью OneNAND,
просто запустив эти тесты в течение нескольких часов. Версия модуля ядра
называется mtd_torturetest , а также поддерживает ряд опций
(см.
modinfo mtd_torturetest
). - mtd_nandecctest : простой тест, который проверяет правильность встроенный программный ECC для 256 и 512-байтных буферов; этот тест не зависит от драйвера, но тестирует общий код поддержки NAND. Это тесты только существует как модуль ядра, так как он тестирует внутреннее программное обеспечение ECC реализация.
Драйвер mtdblock
, доступный в MTD, является архаичным инструментом
который эмулирует блочные устройства поверх устройств MTD. У него даже нет
плохая обработка стирания блоков, поэтому его нельзя использовать с флэш-памятью NAND. И это
работает, кэшируя весь блок стирания флэш-памяти в ОЗУ, изменяя его по запросу,
затем стирание всего блока и запись измененного. Это значит, что mtdblock
не пытается выполнять какие-либо оптимизации, и вы
потерять много данных в случае отключения электроэнергии. И последнее но не менее важное, mtdblock
не выполняет выравнивание износа или обработку бит-флипов.
Часто люди рассматривают mtdblock
как общий слой FTL и пытаются
использовать блочные файловые системы поверх голых флэш-памяти, используя мтдблок
. Это неправильно в большинстве случаев.
Другими словами, пожалуйста, не используйте mtdblock
, если вы
точно знать, что ты делаешь.
Существует также версия этого драйвера только для чтения, в основном для использования с uCLinux, где потребность в дополнительной оперативной памяти считалась слишком большой. Однако только как и версия драйвера R / W, нет выравнивания износа и бит-флипов умение обращаться.
Вместо использования этого старого драйвера вы можете проверить устройство блокировки R/O
эмуляция предоставлена UBI
полезно. Пожалуйста, обратитесь к
Раздел UBI для более подробной информации.
Старый веб-сайт MTD и старая документация по MTD доступны здесь. Описание старого интерфейса NAND flash доступен здесь.
Устройство технологии памяти
Интерфейс устройства технологии памяти низкого уровня. Подробнее…
Низкоуровневая технология памяти Интерфейс устройства.
Универсальный интерфейс устройства технологии памяти
В отличие от драйвера флэш-страницы, он основан на драйвере устройства (т. е. все функции принимают mtd_dev_t в качестве первого аргумента), так что к EEPROM на основе SPI (например, AT25xxx) можно получить доступ так же, как к внутренним флэш-память или SD-карты), все в одном приложении.
Устройства MTD предоставляют блочный интерфейс стирания и записи. Этим они отличаются от блочных устройств (таких как жесткие диски), на которых отдельные байты могут быть перезаписаны. В FAQ по Linux MTD есть удобное сравнение (остерегайтесь различий в терминологии, описанных ниже). Их можно стереть (с некоторой степенью детализации, часто немного изнашивая стертую область), а на стертые области можно записать (иногда несколько раз).
Устройства MTD описываются в терминах секторов, страниц и флагов функций:
Сектор — это блок стирания устройства. Вызовы mtd_erase должны работать в соответствии с этим числом (обычно где-то около 1 КБ).
(Обратите внимание, что это соответствует термину «страница», используемому в API flashpage, и термину «eraseblock» в MTD Linux).
Страница — это максимальный размер, который устройство может записать за одну передачу.
Приложениям редко приходится иметь дело с этим; он не дает никаких гарантий атомарности, но запись внутри страницы обычно выполняется быстрее, чем за ее пределами.
Страницы являются подразделением секторов.
Размер записи — это минимальный размер записи на устройство, а также требуемое выравнивание записи.
Размер записи равен разделителю страницы. Часто он имеет длину от 1 до 4 байтов, но может достигать полного размера страницы.
- Флаги устройства указывают функции, например. можно ли перезаписать ячейку памяти без ее предварительного стирания.
Если это не разрешено флагом (таким как MTD_DRIVER_FLAG_DIRECT_WRITE или MTD_DRIVER_FLAG_CLEARING_OVERWRITE), этот API MTD не позволяет дважды записывать области памяти между операциями стирания. Драйверы не должны учитывать доступ для записи, как и функции этого модуля: влияние на производительность будет слишком велико. Приложение может записывать в стертую память только один раз. Невыполнение этого требования может привести к повреждению оборудования.
Этот API MTD в настоящее время не указывает, какое значение будет считано из стертого сектора.
Native MTD | |
mtd flash emulation for native | |
file | mtd.h |
структура | mtd_dev_t |
Дескриптор устройства MTD. Подробнее. .. | |
struct | mtd_desc |
Интерфейс драйвера MTD. More… | |
#define | MTD_DRIVER_FLAG_DIRECT_WRITE (1 << 0) |
MTD driver can write any data to the storage without erasing it first. Подробнее… | |
#DEFINE | MTD_DRIVER_FLAG_CLEARING_OVERWRITE. More… |
typedef struct mtd_desc | mtd_desc_t |
MTD driver interface. Подробнее. .. | |
перечисление | mtd_power_state { MTD_POWER_UP , MTD_POWER_DOWN } |
Состояния питания МПД. More… | |
int | mtd_init (mtd_dev_t *mtd) |
mtd_init Initialize a MTD device More… | |
int | mtd_read (mtd_dev_t *mtd, void *dest, uint32_t addr, uint32_t count) |
Чтение данных с устройства MTD. More… | |
int | mtd_read_page (mtd_dev_t *mtd, void *dest, uint32_t page, uint32_t offset, uint32_t size) |
Read data from a MTD device with pagewise addressing . Подробнее… | |
int | mtd_write (mtd_dev_t *mtd, const void *src, uint32_t addr, uint32_t count) |
Запись данных на устройство MTD. More… | |
int | mtd_write_page_raw (mtd_dev_t *mtd, const void *src, uint32_t page, uint32_t offset, uint32_t size) |
Write data to a MTD device with pagewise адресация. Подробнее… | |
int | mtd_write_page (mtd_dev_t *mtd, const void *src, uint32_t page, uint32_t offset, uint392_t size)0264 |
Запись данных в устройство МПД с постраничной адресацией. More… | |
int | mtd_erase (mtd_dev_t *mtd, uint32_t addr, uint32_t count) |
Erase sectors of a MTD device. Подробнее… | |
int | mtd_erase_sector (mtd_dev_t *mtd, uint32_t сектор, uint32_t num) 9026 9 |
int | mtd_power (mtd_dev_t *mtd, enum mtd_power_state power) |
Set power mode on a MTD device. Подробнее … | |
◆ MTD_DRIVER_FLAG_CLEARING_OVERWRITE
. |
Драйвер MTD поддерживает произвольную очистку перезаписей.
Если установлено, (произвольно) разрешено много операций записи на размер записи, и результатом будет старое значение побитовое И записанное значение.
Это свойство характерно для управляемой флэш-памяти. (Для сравнения, необработанная флэш-память, часто используемая внутри микроконтроллеров, может не допускать перезаписей или может разрешать их с той же семантикой, но только для ограниченного количества записей между стираниями; в настоящее время нет флага, описывающего их дальше).
Определение в строке 137 файла mtd.h.
◆ MTD_DRIVER_FLAG_DIRECT_WRITE
#define MTD_DRIVER_FLAG_DIRECT_WRITE (1 << 0) |
Драйвер MTD может записывать любые данные в хранилище без их предварительного стирания.
Если установлено, запись полностью переопределяет предыдущие значения.
Определение в строке 124 файла mtd.h.
◆ mtd_desc_t
typedef struct mtd_desc mtd_desc_t |
Интерфейс драйвера MTD.
Определяет функции доступа к МПД.
МПД состоит из страниц, объединенных в сектора. Сектор — это наименьшая стираемая единица. Количество страниц в секторе должно быть постоянным для всего МПД.
Операция стирания доступна только для целых секторов.
Определение в строке 1 файла mtd.h.
◆ mtd_power_state
перечисление mtd_power_state |
состояний питания МПД.
Счетчик | |
---|---|
MTD_POWER_UP | Включение. |
MTD_POWER_DOWN | Отключение питания. |
Определение в строке 85 файла mtd.h.
◆ mtd_erase()
int mtd_erase | ( | mtd_dev_t * | мтд , |
uint32_t | адрес , | ||
uint32_t | количество | ||
) |
Стирание секторов МПД-устройства.
адрес
должен быть выровнен по границе сектора. count
должен быть кратен размеру сектора.
- Параметры
mtd the device to erase [in] addr the address of the first sector to erase [in] count the number of bytes to erase
- Возвращает
- 0 в случае успешного стирания
- < 0, если произошла ошибка
- -ENODEV, если
mtd
не является допустимым устройством - -ENOTSUP, если операция не поддерживается на
mtd
- -EOVERFLOW, если
адрес
илисчетчик
недействительны, т. е. вне памяти - -EIO, если произошла ошибка ввода-вывода
◆ mtd_erase_sector()
int mtd_erase_sector | ( | mtd_dev_t * | мтд , |
uint32_t | сектор , | ||
uint32_t | номер | ||
) |
Стирание секторов МПД-устройства.
- Параметры
mtd устройство для стирания [in] сектор номер первого стираемого сектора [in] num количество стираемых секторов
- Возвращает
- 0 в случае успешного стирания
- < 0, если произошла ошибка
- -ENODEV, если
mtd
не является допустимым устройством - -ENOTSUP, если операция не поддерживается на
mtd
- -EOVERFLOW, если
адрес
илисектор
недействительны, т. е. за пределами памяти - -EIO, если произошла ошибка ввода-вывода
◆ mtd_init()
int mtd_init | ( | mtd_dev_t * | тд | ) |
mtd_init Инициализировать устройство MTD
- Параметры
mtd устройство для инициализации
- Возвращает
◆ mtd_power()
int mtd_power | ( | mtd_dev_t * | мтд , |
перечисление mtd_power_state | мощность | ||
) |
Установка режима питания на МПД-устройстве.
- Параметры
mtd устройство для доступа [in] питание режим питания для установки
- Возвращает
- 0, если режим питания успешно установлен
- < 0, если произошла ошибка
- -ENODEV, если
mtd
не является допустимым устройством - -ENOTSUP, если операция или состояние
power
не поддерживается наmtd
- -EIO, если произошла ошибка ввода-вывода
◆ mtd_read()
int mtd_read | ( | mtd_dev_t * | мтд , |
пустота * | пункт назначения , | ||
uint32_t | адрес , | ||
uint32_t | количество | ||
) |
Чтение данных с устройства МПД.
Для адрес
и счет
выравнивание не требуется.
- Параметры
mtd устройство для чтения [выход] dest the buffer to fill in [in] addr the start address to read from [in] count the number of bytes to read
- Возвращает
- 0 в случае успеха
- < 0, если произошла ошибка
- -ENODEV, если
mtd
не является допустимым устройством - -ENOTSUP, если операция не поддерживается на
mtd
- -EOVERFLOW, если
адрес
илисчетчик
недействительны, т.е. вне памяти - -EIO, если произошла ошибка ввода-вывода
◆ mtd_read_page()
int mtd_read_page | ( | mtd_dev_t * | мтд , |
пустота * | пункт назначения , | ||
uint32_t | страница , | ||
uint32_t | смещение , | ||
uint32_t | размер | ||
) |
Чтение данных с устройства МПД с постраничной адресацией.
Уровень MTD позаботится о разделении транзакции на несколько операций чтения, если это требуется базовым носителем данных.
- Параметры
mtd the device to read from [out] dest the buffer to fill in [in] page Page number to start reading from [дюйм] смещение смещение от начала страницы (в байтах) [in] размер количество байтов для чтения
- Возвращает
- 0 в случае успеха
- < 0, если произошла ошибка
- -ENODEV, если
mtd
не является допустимым устройством - -ENOTSUP, если операция не поддерживается на
mtd
- -EOVERFLOW, если
адрес
илисчет
недействительны, т.е. за пределами памяти - -EIO, если произошла ошибка ввода-вывода
◆ mtd_write()
int mtd_write | ( | mtd_dev_t * | мтд , |
константа недействительна * | источник , | ||
uint32_t | адрес , | ||
uint32_t | количество | ||
) |
Запись данных в устройство МПД.
адрес
+ количество
должно находиться внутри границ страницы. адрес
может быть любым, но буфер не может перекрывать две страницы.
Оба параметра должны быть кратны размеру записи устройства.
- Параметры
mtd the device to write to [in] src the buffer to write [in] addr the start address to write to [in] count количество записываемых байтов
- Возвращает
- 0 в случае успеха
- < 0, если произошла ошибка
- -ENODEV, если
mtd
не является допустимым устройством - -ENOTSUP, если операция не поддерживается на
mtd
- -EOVERFLOW, если
адрес
илисчет
недействительны, т.е. вне памяти или перекрываются две страницы - -EIO, если произошла ошибка ввода/вывода
- -EINVAL, если параметры недействительны (например, неверное выравнивание)
◆ mtd_write_page()
int mtd_write_page | ( | mtd_dev_t * | мтд , |
константа недействительна * | источник , | ||
uint32_t | страница , | ||
uint32_t | смещение , | ||
uint32_t | размер | ||
) |
Запись данных в устройство МПД с постраничной адресацией.
Уровень MTD позаботится о разделении транзакции на несколько операций записи, если это требуется базовым носителем данных.
Если базовый сектор необходимо стереть перед записью, уровень MTD позаботится об операции чтения-изменения-записи.
смещение
должно быть меньше размера страницы
- Примечание
- для этого требуется модуль
mtd_write_page
mtd the device to write to [in] src the buffer to write [in] page Page number to start writing to [в] смещение смещение в байтах от начала страницы [in] размер количество байтов для записи
- Возвращает
- 0 в случае успеха
- < 0, если произошла ошибка
- -ENODEV, если
mtd
не является допустимым устройством - -ENOTSUP, если операция не поддерживается на
mtd
- -EOVERFLOW, если
адрес
илисчет
недействительны, т. е. вне памяти, - -EIO, если произошла ошибка ввода/вывода
- -EINVAL, если параметры неверны
◆ mtd_write_page_raw()
int mtd_write_page_raw | ( | mtd_dev_t * | мтд , |
константа недействительна * | источник , | ||
uint32_t | страница , | ||
uint32_t | смещение , | ||
uint32_t | размер | ||
) |
Запись данных в устройство МПД с постраничной адресацией.
Уровень MTD позаботится о разделении транзакции на несколько операций записи, если это требуется базовым носителем данных.