Модификация корневого образа — FRUCT Maemo wiki (Russian)

Проверьте онлайн для MTD, значения MTD и другие аббревиатура, акроним, и синонимы.

Что такое MTP Device?

Вообще технология MTP (Media Transfer Protocol) впервые увидела свет еще в 2008 году на мобильных гаджетах с Honeycomb в OS Android Ice Cream Sandwich. В то время она считалась составной частью пакета Windows Media, но затем была стандартизирована как один из основных типов USB-устройств.

mtp device

Именно поэтому сейчас стационарные операционные системы при подключении мобильного гаджета и определяют его как MTP Device. По сути, сама разработка чем-то новым не явилась, поскольку очень сильно напоминает протоколы PTP (Picture Transfer Protocol), точнее, является одной из его разновидностей в виде дополнительных расширений.

дальнейшее чтение

  • Кристофер Халлинан (2010). Учебник по встроенному Linux: практический подход в реальном мире (2-е изд.). Глава 10: Образование Пирсона. ISBN   978-0-13-706110-5 . CS1 maint: location ( ссылка )

Подготовка к работе

В рамках настройки MTD в партнерской консоли MTD вы создали политику, которая разделяет различные угрозы по уровням (высокий, средний, низкий). В политике соответствия устройств Intune затем задайте уровень Mobile Threat Defense.

Необходимые условия для политики соответствия устройств с MTD:

  • настройка интеграции MTD и Intune;

4.2.1Модель MTD

Хотя устройства флеш-памяти являются устройствами хранения, похожими на жёсткие диски, между ними существуют некоторые фундаментальные различия.

htmlconvd-SMabJC70xi1.jpg Обычно жёсткие диски имеют сектор, который делится по размерам страницы (обычно 4096 байт). Стандартным значением является 512 байт. Модель файловой системы Linux, особенно буфер кэша (кэш памяти между файловой системой и уровнем блочного устройства), основана на этом предположении. Микросхемы флеш-памяти, с другой стороны, имеют большие размеры сектора; стандартный размер составляет 64 Кб.

htmlconvd-SMabJC70xi2.jpg Секторы флеш-памяти обычно перед записью в них должны быть стёрты; операции записи и стирания могут быть независимыми, что зависит от программного обеспечения, использующего флэш-память.

htmlconvd-SMabJC70xi3.jpg Микросхемы флеш-памяти имеют ограниченный срок службы, который определяется в терминах числа раз стирания сектора. Так что если какой-то сектор становится записываемым очень часто, его срок службы уменьшается. Чтобы предотвратить это, записи на флеш-память должны быть распределены по всем секторам. Это называется выравниванием износа и не поддерживается блочными устройствами.

htmlconvd-SMabJC70xi4.jpg Обычные файловые системы не могут быть использованы поверх флеш-памяти, потому что это проходит через буферный кэш. Обычный дисковый ввод-вывод медленный; чтобы ускорить его, используется кэш в памяти, называемой кэш-буфером, который хранит данные для ввода-вывода на диск. Пока эти данные не записаны обратно на диск, файловая система находится в неустойчивом состоянии. (Это и является причиной, почему вы должны выключать ОС на ПК перед выключением его питания.) Тем не менее, встроенные системы могут быть выключены без надлежащего завершения работы и всё же иметь непротиворечивые данные; так что обычные файловые системы и модель блочного устройства не очень подходят для встраиваемых систем.

Традиционным методом, используемым для доступа к флеш-памяти, является 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: микросхемы флешпамяти и флеш-диски.

Основные значения MTD

На следующем изображении представлены наиболее часто используемые значения MTD. Вы можете записать файл изображения в формате PNG для автономного использования или отправить его своим друзьям по электронной почте.Если вы являетесь веб-мастером некоммерческого веб-сайта, пожалуйста, не стесняйтесь публиковать изображение определений MTD на вашем веб-сайте.

Что означает аббревиатура mtd

Linux mtd system

MTD (Memory Technology Device), устройство с технологией памяти, является подсистемой устройств хранения Linux. Целью разработки этой системы является предоставление уровня абстракции и интерфейса для запоминающих устройств, так что разработчикам драйверов аппаратного обеспечения необходимо предоставить только простейшую функцию чтения / записи / стирания базового аппаратного устройства. Да, вам не нужно заботиться о том, как данные представляются верхним пользователям, потому что подсистема устройства хранения MTD сделала это за вас.

Рамки 1.MTD

Устройство Linux MTD находится в каталоге drivers / mtd /, здесь приведен только приблизительный анализ его структуры каталогов. Если вы хотите узнать конкретные детали, вы можете проверитьблог Крифана, Есть много ссылок и статей для справки, и анализ очень тщательный. Содержимое файла MTD выглядит следующим образом:

3482555-2a59f7aa69be5d55

Структура каталогов

Оборудование MTD обычно можно разделить на четыре уровня

Сверху вниз находятся: узел устройства, уровень устройства MTD, уровень исходного устройства MTD и уровень драйвера оборудования.

3482555-bc0b6b3deea36be4

Каркас оборудования

1.cmdlinepart.c

Когда таблица разделов mtd переносится из u-boot в linux через параметры cmd, ядру linux не нужно регистрироваться и добавлять mtdparts, просто включите параметр разделения командной строки в MTD. Используя этот метод, u-boot должен поддерживать MTD, а передаваемые параметры раздела mtd должны соответствовать требованиям формата.

Папка 2.devices

Когда у нас есть устройство spi flash и нам нужно использовать mtd для управления, мы обычно помещаем его в папку устройств, например, m25p80.c в папке устройств – это типичное устройство spi flash.

Папка 3.chips / nand / onenand

Флеш-драйвер nand находится в папке nand;

Flash-драйвер onenand находится в папке onenand;

И флэш не сложнее, там будут все следующие файлы:

  • фишки: универсальный драйвер интерфейса cfi / jedec
  • устройства: ни флэш нижний драйвер (spi flash)
  • карты: ни функции, связанные с отображением флэш-карт

4. Основные файлы

mtdchar.c: реализация интерфейса с символьным устройством MTD, номер устройства 31;

mtdblock.c: реализация, связанная с интерфейсом блочного устройства MTD, номер устройства 90;

mtdcore.c: реализация, связанная с оригинальным интерфейсом устройства MTD;

mtdpart.c: реализация интерфейса раздела MTD.

5.ubi

Слой поддержки файла ubifs. При использовании файловой системы ubifs необходимо выбрать «Включить UBI» в разделе «Драйверы устройств» -> «Поддержка устройств с технологией памяти (MTD)» -> UBI – Несортированный образ блока.

Выберите поддержку файловой системы UBIFS в Файловые системы -> Другие файловые системы.

2. Реализация таблицы разделов MTD

Во время процесса загрузки вы часто можете увидеть информацию, похожую на следующую из консоли,

0x000000000000-0x000000100000 : “Bootloade”0x000000100000-0x000002000000 : “Kernel”0x000002000000-0x000003000000 : “User”0x000003000000-0x000008000000 : “File System”

Это наиболее интуитивное представление, которое дает нам MTD, показывающее нам структуру разделов каждого модуля в памяти, но как эти разделы реализованы? Существует несколько способов реализации таблицы разделов, которые описаны ниже:

Примечание. Обязательным условием реализации таблицы разделов является успешное выполнение драйвера устройства MTD, в противном случае раздел не будет создан даже в случае сбоя драйвера.

1. Добавлено в ядро

Добавление этого в ядро ​​является более часто используемым методом. Он должен быть доступен в любой книге о трансплантации драйверов. Главное – добавить mtd_partition к устройству платформы и добавить информацию, подобную следующей. Я не буду описывать ее здесь.

struct mtd_partition s3c_nand_part[] = { { .name = “Bootloader”, .offset = 0, .size = (1 * SZ_1M), .mask_flags = MTD_CAP_NANDFLASH, }, { .name = “Kernel”, .offset = (1 * SZ_1M), .size = (31 * SZ_1M) , .mask_flags = MTD_CAP_NANDFLASH, }, { .name = “User”, .offset = (32 * SZ_1M), .size = (16 * SZ_1M) , }, { .name = “File System”, .offset = (48 * SZ_1M), .size = (96 * SZ_1M), }};static struct s3c_nand_set s3c_nand_sets[] = { [0] = { .name = “nand”, .nr_chips = 1, .nr_partitions = ARRAY_SIZE(s3c_nand_part), .partitions = ok6410_nand_part, },};static struct s3c_platform_nand s3c_nand_info = { .tacls = 25, .twrph0 = 55, .twrph1 = 40, .nr_sets = ARRAY_SIZE(s3c_nand_sets), .sets = ok6410_nand_sets,};static void __init s3c_machine_init(void){ s3c_nand_set_platdata(&s3c_nand_info); }

Поскольку наш драйвер MTD завершен, при совпадении устройства и драйвера будет вызвана функция интерфейса датчика в драйвере, и нам нужно вызвать его в функции датчикаadd_mtd_partitions(s3c_mtd, sets->partitions, sets->nr_partitions);Реализуйте добавление таблицы разделов.

2.u-boot параметры передачи

Под u-boot вы можете добавить информацию mtdparts в bootargs.После запуска u-boot информация из bootargs будет передаваться ядру, и ядро ​​будет анализировать часть bootargs mtdparts при запуске. Вот пример:

mtdparts=nand.0:1M(Bootloader)ro,31M(Kernel)ro,16M(User),96M(File System)Более конкретный формат mtdparts можно найти в соответствующей информации.

Чтобы ядро ​​могло анализировать информацию mtdparts, нам нужно включить опцию «Драйверы устройств -> Поддержка устройств с памятью (MTD)» -> «Разбор таблицы разделов командной строки» в ядре, как было упомянуто выше.

При добавлении таблицы разделов в ядро ​​мы добавляем информацию mtd_partition на устройство платформы. Передача параметров через u-boot здесь отменяет информацию о разделах в устройстве платформы, а затем, как нам нужно проанализировать mtdparts, переданные u-boot.

После того, как u-boot передаст параметры, эти параметры будут проанализированы в cmdlinepart.c и сохранены внутриLIST_HEAD(part_parsers)В связанном списке мы затем в функции зонда драйвера, вызываяmtd_device_parse_register(mtd, probe_types,&ppdata, NULL, 0);функция.

mtd_device_parse_register()Функция находится в drivers / mtd / mtdcore.c, и ее содержимое выглядит следующим образом:

int mtd_device_parse_register(struct mtd_info *mtd, const char * const *types, struct mtd_part_parser_data *parser_data, const struct mtd_partition *parts, int nr_parts){ int err; struct mtd_partition *real_parts; err = parse_mtd_partitions(mtd, types, &real_parts, parser_data); if (err <= 0 && nr_parts && parts) { real_parts = kmemdup(parts, sizeof(*parts) * nr_parts, GFP_KERNEL); if (!real_parts) err = -ENOMEM; else err = nr_parts; } if (err > 0) { err = add_mtd_partitions(mtd, real_parts, err); kfree(real_parts); } else if (err == 0) { err = add_mtd_device(mtd); if (err == 1) err = -ENODEV; } return err;}

Вы можете видеть, что функция будет выполнена первойparse_mtd_partitions(mtd, types, &real_parts, parser_data);Функция, позже черезadd_mtd_partitions()Функция для реализации добавления таблицы разделов.

parse_mtd_partitions()Функция находится в drivers / mtd / mtdpart.c, и ее содержимое выглядит следующим образом:

int parse_mtd_partitions(struct mtd_info *master, const char *const *types, struct mtd_partition **pparts, struct mtd_part_parser_data *data){ struct mtd_part_parser *parser; int ret = 0; if (!types) types = default_mtd_part_types; for ( ; ret <= 0 && *types; types++) { parser = get_partition_parser(*types); if (!parser && !request_module(“%s”, *types)) parser = get_partition_parser(*types); if (!parser) continue; ret = (*parser->parse_fn)(master, pparts, data); put_partition_parser(parser); if (ret > 0) { printk(KERN_NOTICE “%d %s partitions found on MTD device %sn”, ret, parser->name, master->name); break; } } return ret;}

войтиparse_mtd_partitions()Функция сначала определит тип типа, и если он будет пустым, он даст значение по умолчанию. Обычно существует два типа типов:

static const char * const default_mtd_part_types[] = { “cmdlinepart”, “ofpart”, NULL};

Первый «cmdlinepart» – это способ передачи параметров в u-boot, а второй «ofpart» – это способ передачи параметров с использованием dts, как указано ниже. После оценки типа passget_partition_parserРазобратьpart_parsersДанные в связанном списке завершат анализ параметров загрузки.

Передача параметров 3.dts

В версии Linux после Linux3.14 добавлено новое знание DTS (Дерево устройств). Фактически, DTS решает избыточный код в ARM Linux. В Linux2.6 версии arch / arm / plat.xxx и arch / Файл Arm / mach.xxx заполнен большим количеством мусорного кода. После принятия дерева устройств многие детали аппаратного обеспечения могут напрямую передаваться в Linux через Linux вместо большого количества избыточного кодирования в ядре. Вы можете обращаться к dts самостоятельно. данные.

Принцип передачи параметров dts фактически тот же, что и для u-boot, разница в том, что u-boot использует файл cmdlinepart.c для записи информации о разделах.LIST_HEAD(part_parsers)Связанный список, dts использует файл ofpart.c для записи информации о разделах.LIST_HEAD(part_parsers)Связанный список, поэтому следует также открыть макрос файла ofpart.c иmtd_device_parse_register(mtd, probe_types,&ppdata, NULL, 0);Тип функции должен быть установлен на ofpart.

Если вы сравните версию для Linux 2.6 и версию для Linux 3.14, вы обнаружите, что файлы drivers / mtd / ofpart.c и drivers / mtd / mtdpart.c отличаются. Версия Linux 3.8 включает дерево устройств. Те, кто заинтересован, могут вникать в это самостоятельно.

Вот пример dts:

pinctrl-0 = <&s3c_nand_flash>; ranges = <0 0 0x000000000000 0x000008000000>; /* CS0: NAND */ [email protected],0 { [email protected] { label = “Bootloader”; reg = <0x000000000000 0x000000100000>; }; [email protected] { label = “Kernel”; reg = <0x000000100000 0x000002000000>; }; [email protected] { label = “User”; reg = <0x000002000000 0x000003000000>; }; [email protected] { label = “File System”; reg = <0x000003000000 0x000008000000>; }; };

Анализ системы Linux Mtd здесь, и она будет обновляться, когда у вас есть чувства.

Примечание. Приведенное выше содержание является частью моего опыта, накопленного в процессе обучения. Это неизбежно, что я буду ссылаться на некоторые знания других статей. Если есть какие-либо нарушения, пожалуйста, сообщите мне вовремя. Я буду удалять или отмечать источник контента в срок. Пожалуйста, укажите, обсудите и изучите. Эта статья является лишь руководством. Для подробного анализа данных, пожалуйста, ознакомьтесь с руководствами по Linux. Спасибо за чтение.

MTP Device Driver как альтернатива USB Mass Storage

Что касается функционирования такой системы, наверное, понятно, что без установки драйвера она в принципе невозможна. Однако по сравнению с обычным обменом данными через USB MTP Device драйвер работает несколько иначе.

mtp device драйвер

Самое главное отличие, оно же преимущество новой технологии, состоит в следующем. Дело в том, что при использовании стандартного подключения при помощи USB Mass Storage создаются два раздела (для медиафайлов и для приложений отдельно), причем один из них всегда зависит от другого. Возникает ситуация, когда смартфон или планшет к одному из разделов доступа не имеет, а компьютер воспринимает оба. Именно поэтому и возникает ситуация, когда приложения, установленные на SD-карту, не то что не работают, но и даже не запускаются.

В случае использования MTP Device таких ограничений нет. Кроме того, отпадает даже необходимость использования файловой системы FAT. И если ранее перераспределение свободного места происходило за счет влияния одного раздела на другой, в данном случае ничего подобного нет. Проще говоря, раньше увлечение свободного пространства одного раздела приводило к уменьшению размера другого. Теперь оба раздела остаются неизменными.

Внешние ссылки

  • http://www.linux-mtd.infradead.org

Дальнейшие шаги

  • Включение MTD с помощью Intune

Инсталляция в Linux (Ubuntu)

В системах Linux в силу их специфичности установка драйверов MTP Device выглядит несколько сложнее. В качестве примера рассмотрим этот процесс для версии Ubuntu при инсталляции драйвера для Nexus.

mtp device драйвер samsung

Итак, используем командное окно, в котором сначала прописываем sudo nano -w /etc/udev/rules.d/51-android.rules (установка UDEV rules). Затем вводим команду SUBSYSTEM==”usb”, ATTR{idVendor}==”04e8″, ATTR{idProduct}==”6860″, MODE=”0600″, OWNER=”<Имя пользователя>”, после чего последовательно исполняем строки sudo apt-get install mtpfs, sudo mkdir/media/GNexus и sudo chmod 775/media/GNexus.

Далее подключаем гаджет к компьютеру и вводим sudo mtpfs -o allow_other /media/GNexus. Все, теперь, используя Nutilus, можно заняться перемещением любых файлов и папок. Да, самое главное. Когда все операции будут завершены, не забудьте использовать конечную команду sudo umount mtpfs.

Рейтинг
( 1 оценка, среднее 5 из 5 )
Загрузка ...