- Уникальный идентификатор устройства хранения
- 2 ответа 2
- Внутренняя информация SD-карты
- Как прочитать CID с SD-карты
- Forum Japan Navigation Group
- Чтение внутренних регистров SD-карт
- Чтение внутренних регистров SD-карт
- Как прочитать идентификационный номер SD-карты?
- ОТВЕТЫ
- Ответ 1
- Ответ 2
- Ответ 3
- Ответ 4
- Ответ 5
- Ответ 6
- Ответ 7
- Ответ 8
- Ответ 9
- Ответ 10
- Ответ 11
Уникальный идентификатор устройства хранения
Я сталкивался с лицензионными системами, которые как-то связаны с носителем данных. Хотя основывать это на UUID на файловой системе довольно просто, я не верю, что это так (см. Ниже). Типичный пример такого поведения выглядит следующим образом:
- При каждой загрузке генерируется id-файл.
- Система проверит ключевой файл для лицензии. Если ключ совпадает с идентификатором, то все хорошо.
- Если ключ отсутствует или ключ не соответствует идентификатору (как, например, скопирован из другой системы), лицензия недействительна.
Я наблюдал следующее поведение:
- Полное стирание CF-карты и переустановка результатов в том же генерируемом файле идентификатора, таким образом, новый файл ключа не требуется.
- Использование одного и того же ключа на другом CF не работает, так как он не соответствует содержимому нового файла идентификатора.
Это приводит меня к выводу, что есть способ получить уникальный идентификатор CF-карты. Как можно добиться этого в Linux?
PS: я намеренно пропустил какие-либо подробности о самом продукте, так как мне интересно больше в общих чертах, как такая система может создать уникальный идентификатор CF-карты.
2 ответа 2
Как прокомментировали другие, это может быть связано с тем, как была удалена CF-карта, но более вероятно, что программное обеспечение идентифицирует CF-карту на основе встроенного программного обеспечения в карте —
Эта информация обычно читается с использованием «udevinfo» — например, если CF-карта /dev /sdb udevinfo -a -p $(udevinfo -q путь -n /dev /sdb) — это, скорее всего, будет содержать достаточно информации для однозначно идентифицировать карту.
Примечание : в дистрибутивах на основе udevadm info udevadm заменяет udevinfo :
udevadm info -a -p $( udevadm info -q path -n /dev/sdb )
На карте будет много информации, зарегистрированной только для чтения.
Внутренняя информация SD-карты
Информация о SD-карте закодирована в ее внутренних реестрах. Одним из них является регистр идентификации карты (CID) , 16-байтовый код, который содержит информацию, которая однозначно идентифицирует SD-карту, включая серийный номер карты (PSN), идентификационный номер производителя (MID) и дату изготовления (MDT). Регистр CID устанавливается при изготовлении карты и не может быть изменен после ее установки. (Согласно спецификации SD-карты информация должна быть записана только один раз, однако, если карта не соответствует спецификации, эта информация может быть изменена!)
Как прочитать CID с SD-карты
Один из способов прочитать CID — использовать ноутбук с гнездом для SD-карты. Кард-ридеры в ноутбуках обычно подключаются напрямую через шину PCI (или шину IDE). Это не будет работать через устройство чтения карт USB, потому что команда для получения информации о карте перехвачена и не понята устройствами чтения карт. Не все компьютеры со встроенными слотами для карт памяти будут работать, некоторые внутренние устройства чтения карт подключены через шину USB.
Предполагая, что у вас есть подходящее оборудование, есть несколько методов, которые вы можете использовать для получения информации о карте. В Linux считывание информации с внутренней SD-карты просто. Вставьте карту и посмотрите в /sys/block/mmcblk0/device/ (это расположение может меняться в зависимости от вашего устройства). Вы увидите несколько доступных атрибутов, которые включают в себя регистр CID и информацию внутри него.
Источник
Forum Japan Navigation Group
Форум по японским магнитолам с навигацией
- Темы без ответов
- Активные темы
- Поиск
- Пользователи
- Наша команда
Чтение внутренних регистров SD-карт
Чтение внутренних регистров SD-карт
Сообщение bellic » 10 ноя 2017, 11:57
В SD-карте есть программно доступные регистры, в которых храниться параметры карты и её настройки. Можно прочитать регистры и узнать какую-нибудь полезную информацию. Регистров около 10-и, в спецификации вы можете узнать о каждом из них.
Спецификацию можно скачать на официальном сайте «SD Association»
( На сайте, в левой колонки перейдите в раздел Downloads -> Simplifed Specifications, соглашаетесь и жмете « I Accept» и качаете » Physical Layer Simplified Specification«). В результате вы скачаете pdf-документ — спецификацию на SD-карты, в ней все подробным образом расписано — какие бывают карты и как с ними работать.)
Кроме того, на этом сайте в разделе » Downloads» имеется утилита » SD Memory Card Formatter» от Ассоциации для правильного форматирования карт.
Вот небольшое пояснение к ней от самой Ассоциации:
Наиболее интересные регистры:
—Регистр CID ( Card identification data) — содержит данные, по которым можно идентифицировать карту памяти (серийный номер, ID производителя, дату изготовления и т.д.)
—Регистр CSD ( Card-specific data) — содержит всевозможную информацию о карте памяти (от размера сектора карты памяти до потребления в режиме чтения/записи).
—Регистр OCR ( Operation Conditions Register) — содержит напряжения питания карты памяти, тип питания карты памяти, статус процесса инициализации карты.
Структура CID регистра следующая:
Расшифровать данные регистра можно на сайте: Secure Digital Card CID Decoder
Внутренняя информация SD-карты
Информация о SD-карте закодирована в его внутренних регистрах карт. Одним из них является регистр идентификатора карты ( CID), 16-байтовый код, который содержит информацию, которая однозначно идентифицирует SD-карту, включая серийный номер карты (PSN), идентификационный номер производителя ( MID) и дату изготовления (MDT). Регистр CID устанавливается, когда карта изготовлена и не может быть изменена после ее установки. (Согласно спецификации SD-карты информация должна быть написана только один раз, однако если карта не соответствует спецификации, эта информация может быть изменена!)
Как прочитать CID с SD-карты
Один из способов прочитать CID — использовать ноутбук с гнездом для SD-карт. Считыватели карт в ноутбуках обычно подключаются непосредственно через шину PCI (или IDE-шину). Это не будет работать через устройство чтения карт USB, потому что команда для извлечения информации о карте перехватывается и не понимается считывателями карт. Не все компьютеры со встроенными слотами для карт будут работать, некоторые внутренние считыватели карт подключаются через шину USB.
Предполагая, что у вас есть подходящее оборудование, есть несколько способов, которые вы можете использовать для получения информации о карте. С Linux чтение внутренней SD-карты является простым. Вставьте карту и посмотрите в /sys/block/mmcblk0/device/ (это местоположение может меняться в зависимости от вашей платформы, оно может быть mmcblk1 или в другом месте). В этом месте вы увидите несколько доступных атрибутов, которые включают регистры CID и CSD и информацию внутри него.
Для просмотра CID, выполняем команду из терминала (вызывается Ctrl + Alt + T):
Какая информация находится в CID?
В CID сохраняется следующая информация:
Необходимые инструменты и условия для чтения регистров SD-карты:
1) наличие SD-карты;
2) ноутбук со встроенным кардридером( USB-кардридер для этой цели не подходит) +
3) загрузочная флешка с линукс-дистрибутивом для чтения CID SD-карты;
4) Android-девайс — телефон/планшет с картридером;
5) минимальные навыки пользователя Android/ Linux.
Подробности:
1) Для чтения CID оригинальной навигационной SD-карты потребуется ноутбук со встроенным кардридером и загрузочная флешка с Линукс дистрибутивом.
Я использовал ASUS X301A в связке с Linux Mint 18 «Sarah» — Cinnamon (32-bit).
Этот же дистрибутив Линукса в связке с SONY VAIO VGN-TZ3RMN/N не видел SD-карты.
Не волнуйтесь, операционную систему на ноутбуке переустанавливать не придется. Достаточно создать загрузочную флешку (DVD диск) с Linux Mint и загрузить с нее лаптоп.
Далее, вставляем SD-карту во встроенный кардридер ноута, видим появившееся уведомление о новом девайсе:
Появившиеся обоими способами цифры/буквы конспектируем удобным способом (или просто копируем файл /sys/block/mmcblk0/device/cid в удобное место для дальнейшего чтения/копирования)
Небольшое дополнение. Если на вашем ноуте нет других SD карт, то всунутая оригинальная навигационная SD карта будет определятся линуксом как mmcblk0 и все вышеприведенные команды верны.
P.S. На скринах CID абсолютно «левой» SD-карты Samsung 2GB
Способ чтения внутренних регистров с помощью Android-устройств — Будет рассмотрен позже и добавлен в этот пост.
Кстати — для профессионалов по железу будет полезно прочитать Микроконтроллер – работаем с SD картой без файловой системы.
Там рассматриваются режимы работы с SD-карточкой, в том числе с использованием ATmega328P (или Arduino UNO).
Пост так же будет подвержен информационной обработке — посему за Повторы прошу пока не пинать.
Источник
Как прочитать идентификационный номер SD-карты?
Как я могу программно считывать регистр CID SD Card, который содержит серийный номер и другую информацию? Могу ли я сделать это через Android Java или собственный код?
Спасибо заранее, Эрик
ОТВЕТЫ
Ответ 1
Вот пример кода для получения SID и CID
Ответ 2
Мне удалось найти свой SD-карту CID, подключив мой телефон к компьютеру через usb и используя инструмент adb (Android SDK)
Мой телефон укоренен, поэтому я не уверен, что это доступно на ненарушенных телефонах.
Ответ 3
Единственный код, который я нашел до сих пор для предоставления идентификатора, — это С++ или С# http://jo0ls-dotnet-stuff.blogspot.com/2008/12/read-secure-digital-sd-card-serial.html
Если вы разработчик С++, вы можете принять это и заставить его работать на Android.
Ответ 4
Как писал BMB, вы не можете узнать реальный путь к SD-карте в файловой системе /sys. Тем не менее, /sys реализует также псевдонимы, и вы можете получить CID через /sys/block/mmcblk 0/device/cid.
Например, на Tattoo running 2.2,/sys/block/mmcblk0 — это софт-ссылка (автоматически установленная системой) в/sys/devices/platform/msm_sdcc.2/mmc_host/mmc1/mmc1:aaaa/block/mmcblk0.
Ответ 5
Существует ави в android для получения серийного идентификатора sd card. Этот метод называется getFatVolumeId (String mountPoint), где «mountPoint» является именем sd-карты (вы можете получить это имя, вызывая Environment.getExternalStorageDirectory()). Но getFatVolumeId является скрытой функцией (или забытой), поэтому вы хотите создать пакет в своем проекте с именем android.os и класс в нем для ссылки на собственный метод, чтобы иметь возможность его называть:
Также см. ссылки
Ответ 6
Я сделал это. это сработало для меня. надеюсь, что это ясно и ясно!
Ответ 7
Нет Android API, который может сделать это, что я знаю, и для общего решения, которое необходимо. Чтобы обеспечить некоторый фон, SD-карта подключена к hw-контроллеру, который относится к платформе устройства. Можно узнать значение cid из файловой системы linux/sys, если вы знаете свою платформу. Следующий снипп работает на моем дроиде (платформа TI omap), но не на платформах на базе Qualcomm MSM.
На другой платформе файл sys, который мы ищем, отличается. Он может даже отличаться между разными картами на той же платформе, поскольку я не смог проверить это. На устройствах на базе MSM путь будет выглядеть как /sys/devices/platform/msm _sdcc.1/mmc_host/.
Поскольку у нас есть эта аппаратная зависимость от считывания CID SD-карты, должно появиться обновление для Android API: s, обеспечивающий общий доступ. Этот API затем должен быть реализован каждым производителем устройства для сопоставления с правильным драйвером контроллера SD-карты.
Ответ 8
Я тоже искал эту функцию, но никогда не мог получить домашнее решение. Я закончил поиск компании, которая делает читателя SID. Перейдите на страницу nexcopy.com и просмотрите раздел дубликатов SD или microSD. Он может считывать до 20 карт за раз.
Ответ 9
Несмотря на то, что относительно старые устройства Palm OS и Windows Mobile могут считывать идентификатор SD-карты, устройства Android AFAIK пока не способны. Это особенно тревожно, учитывая проблемы с параметрами Settings.Secure.ANDROID_ID, обсуждаемые здесь здесь.
Ответ 10
для mmcblk0 , просто напишите в shell как:
вы можете легко реализовать его в java.
Ответ 11
На основе ответа Динеша.
Динеш предложил посмотреть в каталоге /sys/class/mmc_host/mmc1/mmc1:*/ (где * — число) для файла с именем cid , который дает нам содержимое регистра CID карты. Это во многих случаях работает, и это очень полезно.
Но mmc1 не всегда является съемной SD-картой. Иногда, например, на Motorola Droid Pro с уровнем API Android 10, mmc0 — съемная SD-карта, а mmc1 — это что-то еще. Я предполагаю, что mmc1 , если присутствует, указывает на внутреннее хранилище какого-либо типа (возможно, несъемную карту microSD). На дешевом Android-планшете, который мы тестировали, mmc0 — это SD-карта, и нет mmc1 .
Поэтому вы не можете просто предположить, что mmc1 — это SD-карта.
Мечта надежды: Кажется (пока), что, смотря на файл type в том же каталоге, что и файл cid (например, /sys/class/mmc_host/mmc1/mmc1:0007/type ), мы можем определить, что такое: значение типа из SD указывает съемную SD-карту, а MMC — нет.
Однако, это просто от тестирования на нескольких устройствах Android. Я не могу найти никаких спецификаций о содержимом файла type , поэтому, если кто-то еще знает соответствующую документацию, сообщите мне.
Конечно, MMC и SD — это всего лишь два разных стандарта технологии хранения, а SD обратно совместим с MMC. Поэтому не обязательно, чтобы тип SD всегда соответствовал внешней карте microSD. Не похоже, что MMC может указывать на карту microSD вообще (если поле типа заполнено точно); но, с другой стороны, возможно, что несъемная SD-карта может иметь тип SD .
Для дальнейшего исследования: работает ли этот подход при подключении карты microSD через USB-адаптер? Мой единственный тест на этом, с планшетом, имел USB-подключенную карту microSD, отображаемую как mmc1 , с типом SD .
Источник