В чем разница между kobject, device_create и моим кодом? - PullRequest
0 голосов
/ 29 мая 2018

В настоящее время я читаю книгу под названием "Драйверы устройств Linux" от O'Reilly .

Дело в том, что эта книга на самом деле не является руководством по как , чтобы написать драйверы, но вместо этого он объясняет все API и их принципы.Поэтому я попытался написать небольшой драйвер - который не делает ничего интересного - с тем, что я прочитал до сих пор.Дело в том, что:

  • Я не знаю, какой файл я могу выполнить cat или echo для того, чтобы вызвать мои функции обратного вызова

  • это не похоже на все остальные фрагменты кода, которые я нашел в Интернете

Различные фрагменты кода:

  • мой код (https://paste.ubuntu.com/p/8tVyTJTPBQ/) создает:

    $ls /sys/module/main/ oresize holders initsize initstate notes refcnt sections srcversion taint uevent

    no new entry in /dev

  • фрагмент кода с использованием device_create: https://paste.ubuntu.com/p/cJxjdyXjhX/ source создает:

    $ ls /sys/module/main/ coresize holders initsize initstate notes refcnt sections srcversion taint uevent

    $ ls -l /dev/ebbchar crw------- 1 root root 238, 0 Mai 28 07:52 /dev/ebbchar

  • код с использованием kobjects: https://paste.ubuntu.com/p/nt3XvZs7vF/ source создает:

    $ls -l /sys/kernel/ drwxr-xr-x 2 root root 0 Dec 17 16:29 etx_sysfs

Я вижу, что мой код успешно создал кучу файловв / sys / kernel. Теперь, какова разница в конечной цели между моим кодом и двумя другими фрагментами? Должен ли я использовать device_create / kobjects или, возможно, ни один из них? В книге, которую я читаю, нигде не упоминаются функции, используемые 2другие части кода. Так что не супо какому пути я должен следовать ...

Спасибо_xe

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Отвечая на ваш вопрос о том, как идти в ногу с последними API-интерфейсами. Большинство переименованных или обновленных API-интерфейсов сохраняют аналогичное имя и находятся в основном в одном и том же заголовочном файле, поэтому быстрый поиск источника или проще - http://elixir.bootlin.com/ и поискисходный документ для конкретной функции в версии Linux, над которой вы работаете.если вы не можете найти API в этом выпуске, то просмотрите заголовок, чтобы найти новый API, так как имя будет почти таким же, например, когда вы прочитаете главу Timer, вы обнаружите, что setup_timer () был изменен на timer_setup ().и несколько других изменений здесь и там.Если вы чувствуете, что можете быть в курсе последних обсуждений, подписавшись на список рассылки ядра или читая документацию.

0 голосов
/ 29 мая 2018

device_create() создает устройство, регистрирует его с помощью sysfs и создает необходимые kobject-ы.

Для создания необходимых kobject-ов вызываются функции, связанные с kobject-ами (kobject_init(), kobject_add(), ...).в device_create().

Если вам нужно создать устройство, вы должны вызвать одну из функций создания устройства, например device_create().

...