LINUX.ORG.RU

Накидайте бинарных (!) дампов dmidecode

 , ,


1

3

Добрый день!

Разрабатываем с коллегой большой фреймворк для декодирования SMBIOS. Это «типа» как dmidecode, только с фокусом на автоматизацию, а не просто показ на экране:

  • С библиотекой для удобного доступа из C
  • С валидацией и линковкой структур между собой
  • С большим количеством vendor-specific extensions
  • Умеет даже в big-endian by design
  • Структурным экспортом во все возможные форматы (XML, YAML, JSON)
  • Красивым выводом в терминал
  • В ближайшем будущем - модулями для Python/Go/Rust, сервисом для D-bus, а после 1.0 - и с компилятором SMBIOS

Для тестирования очень нужны бинарные (не текстовые) дампы SMBIOS, которые можно получить через dmidecode --dump-bin <file>. Не важно с какого железа и каких платформ, чем больше разного - тем лучше, так как в дампах бывают ошибки и они разнятся от вендора к вендору и от модели к модели.

Увы, это редкость. В сети валяется огромное количество расшифрованных дампов, но не бинари. Количество доступного железа ограничено, а всех друзей уже обошли :(

Накидайте, пожалуйста, дампов на dmitry@sednev.ru!

P.S. Посмотреть/попробовать/потестировать то, что есть можно по ссылке https://github.com/sdnvx/opendmi. Лучше брать main, а не 0.1.4 - там уже много фиксов, которые не вошли в ветку 0.1. И не верьте выдаче --help, пока формат вызова идентичен dmidecode, новый красивый CLI будет к 0.2. Буду рад любой обратной связи.

P.P.S. Да, ROADMAP честный - этот проект как вторая работа, потому что интересно и хочется сделать круто.



Последнее исправление: hobbit (всего исправлений: 5)
Ответ на: комментарий от anonymous

GitHub его очень просит при включении дискуссий, влияет на отображение в поиске и какая-то ещё хрень. С учётом того, что это стандартная декларация за мир во всём мире, в чем с ним проблема?

anonymous
()

Для тестирования очень нужны бинарные (не текстовые) дампы SMBIOS, которые можно получить через dmidecode –dump-bin . Не важно с какого железа и каких платформ, чем больше разного - тем лучше, так как в дампах бывают ошибки и они разнятся от вендора к вендору и от модели к модели.

Железо нужно как-то описать или что?

MoldAndLimeHoney ★★
()
Ответ на: комментарий от MoldAndLimeHoney

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

sdnvx
() автор топика
Ответ на: комментарий от anonymous

В том–то и проблема, что это не «стандартная декларация за мир во всём мире» а явно прописанное взятие на себя полицейских функций и обязательств прогибаться под профессиональных обиженцев, причём по максимально размыто–неопределённому списку требований. А если нет намерения исполнять эти обязательства и добавляется сие чисто для проформы — это втройне не красит добавившего, характеризуя его лицемером и скользким флюгером–переобувашкой.

А самое главное, никто ж не мешает просто вежливо откреститься от всех этих полицейских функций и принципиально неисполнимых обязательств — «запрещено запрещать, такая моя политика». И даже необязательно при этом глумиться, как разрабы sqlite, достаточно просто корректно но решительно отказать в подобных претензиях.

anonymous
()
Ответ на: комментарий от sdnvx

Да расслабься: в том-то и дело, что в любом КОК-е что-то кому-то будет не нравиться. Вот они и будут тебя дёргать через этот самый КОК по-любому важному для них пустяку.

anonymous
()
Ответ на: комментарий от anonymous

Честно говоря, это первый мой настолько крупный проект, который я выкладываю в open source, до этого пробавлялся патчами. Поэтому я не думал об этом в таком ключе и не сталкивался с этой стороной реальности. Они что, реально это делают? То есть вот прям настолько?

sdnvx
() автор топика
Ответ на: комментарий от anonymous

Уточню: просто для проекта/репозитория он не нужен, но включить без него дискуссии нельзя.

При нажатии на кнопку «enable discussions» сразу вылезает страница «add code of conduct» и если этого не сделать, он потом из-под каждого клика мышки будет его насильно предлагать. Типа «мы не обязываем, но так рекомендуем, что прямо настаиваем».

sdnvx
() автор топика
Ответ на: комментарий от sdnvx

На моей памяти были требования применить к разработчику некие санкции только потому, что он в своём персональном блоге допустил высказывания, которые могут быть истолкованы как неприязнь к неопределённому кругу лиц нечёткого гендерного самовыражения. Опять же, можно вспомнить Брендана Айка и как его выжили из Mozilla.

В разрезе отдельного проекта — нет ничего зазорного, в том чтобы иметь убеждения и последовательно их отстаивать. Но, IMHO, не нужно вешать на себя чужие отличительные знаки, поднимать на флаг чужие ценности и брать обязательства, которые может оказаться неудобно исполнять. Когда всплывает нечто, хотя бы отдалённо напоминающее контракт в той или иной форме — полезно вспомнить про добряка с динамитом из фильма «Трасса 60».

anonymous
()
Ответ на: комментарий от anonymous

Спасибо за развёрнутый ответ. Вы правы, это и правда выглядит как не очень здоровая тема. Я поищу, чем заменить типовой povestka-style manifest в проекте.

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

А как же Линус? С его-то неприязнью к нечёткому кругу лиц нечётких групп «идиоты», «кретины» и кого там он ещё в рассылках через упоминал…

Опять же, можно вспомнить Брендана Айка и как его выжили из Mozilla.

Эту историю я помню :(

sdnvx
() автор топика

Вот тут https://ximera.info/dmi-7-devices.zip сложил 7 штук

Huawei MateBook 16s (ноут)

Honor MagicBook Art 14 (ноут)

Asus Zenbook ux425j (ноут)

Asus Tuf Gaming a620 wifi (самосбор)

Два Beelink SER<какие-то> - минипк билинковские, один на интеле другой на амуде

Intel NUC какой-то на целероне (совсем старый)

no-dashi-v2 ★★★★
()
Последнее исправление: no-dashi-v2 (всего исправлений: 1)
Ответ на: комментарий от anonymous

А если нет намерения исполнять эти обязательства и добавляется сие чисто для проформы — это втройне не красит добавившего

Ничего подобного, этот вариант ничем не хуже «не добавлять», и «добавлять и исполнять обязательства» и вполне себе может быть осознанной формой протеста. Где-то была статья от любителей кока что кок исполнение требований которого не контролируется хуже чем когда его нет - тогда, если ты против кока, а при этом его от тебя ещё и требуют, самое логичное добавить его и его требованиями подтираться.

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

anonymous
()
Ответ на: комментарий от anonymous

С CoC

Его там уже нет

и веткой main

Все проекты когда-то начинались с ветки main :) Тем более, что я вроде бы не предлагал никому эту ветку в прод и не утверждал о готовности проекта к проду.

sdnvx
() автор топика

Отправил в почту

  • 3580 ECS-X79R-AX.bin
  • 3847 industrial-pc-Q370pch.bin
  • 4184 industrial-pc-Q670pch.bin
  • 4068 lenovo-thinkbook-15.bin

При масштабном подходе к поиску образцов я всё ж очень рекомендовал бы хотя бы какую-то часть парсинга OEM-расширений отлаживать на обратно-преобразованных частях из DMI-базы linux-hw.

В репозитории с примерами тысячи сэмплов OEM-specific Type, которые не распознал dmidecode и благодаря этому вывел в виде hexdump. Этот hexdump и следующие за ним строки позволяют полностью восстанвоить один кусок бинарщина + строки разделённые ‘\0’ для парсинга. К такому парсингу частично восстановленных данных придётся кончено адаптировать тесты, но объём базы и количество в ней граничных случаев думаю восполнит эти затраты сполна.

Handle 0x000E, DMI type 221, 82 bytes
OEM-specific Type
	Header and Data:
		DD 52 0E 00 0B 01 00 0A 00 2A 30 00 02 00 01 00
		02 00 00 03 00 0A 00 2A 30 00 04 05 FF FF FF FF
		FF 06 00 00 00 00 01 00 07 00 00 00 00 01 00 08
		00 FF FF FF FF FF 09 00 11 00 0E 00 00 0A 00 00
		00 00 DC 00 0B 00 00 00 00 00 00 0C 00 FF FF FF
		FF FF
	Strings:
		Reference Code - SA - System Agent
		Reference Code - MRC
		SA - PCIe Version
		SA-CRID Status
		Disabled
		SA-CRID Original Value
		SA-CRID New Value
		OPROM - VBIOS
		IO Manageability Engine FW Version
		PHY Build Version
		Thunderbolt(TM) FW Version
		System Agent Manageability Engine FW Version
GPFault ★★★
()
Ответ на: комментарий от GPFault

Спасибо большое!

При масштабном подходе к поиску образцов я всё ж очень рекомендовал бы хотя бы какую-то часть парсинга OEM-расширений отлаживать на обратно-преобразованных частях из DMI-базы linux-hw.

Да, обязательно чуть позже этим займусь.

Пока мне накидали довольно много данных и пришлось спешно писать скрипт для построения индексов, чтобы в базе дампов можно было нормально ориентироваться :) Следующий этап с точки зрения верификации - регрессия по существующим в репе проекта дампам и дополнение юнит-тестов (их там пока очень мало), а потом - как раз проверки по базе linux-hw. Это необходимо будет сделать хотя бы потому, что там планируется полноценный линтер.

Последнее весьма интересно, потому что, например, «магическую» структуру 221, которая встречается изначально в AMI, а потом в INSYDE и их потребителях типа Huawei, удалось отреверсить почти до конца, когда появилось больше данных.

Просто проект довольно-таки большой, уже сейчас около 40,000 SLOС, написанных месяцев за четыре-пять, и приходится приоритизировать задачи, чтобы ещё и работу успевать работать.

sdnvx
() автор топика
Ответ на: комментарий от GPFault

В репозитории с примерами тысячи сэмплов OEM-specific Type, которые не распознал dmidecode и благодаря этому вывел в виде hexdump. Этот hexdump и следующие за ним строки позволяют полностью восстанвоить один кусок бинарщина + строки разделённые ‘\0’ для парсинга. К такому парсингу частично восстановленных данных придётся кончено адаптировать тесты, но объём базы и количество в ней граничных случаев думаю восполнит эти затраты сполна.

Блин, реально классная идея! Возьмём на вооружение :)

sdnvx
() автор топика