Требования к структуре исходного кода драйвера для восходящего потока ядра Linux

#linux #linux-kernel #kernel #linux-device-driver #embedded-linux

#linux #linux-ядро #ядро #linux-device-driver #встроенный-linux

Вопрос:

Я планирую переписать драйвер моего датчика, чтобы попытаться получить мой модуль в ядре Linux. Мне было интересно, существуют ли требования к организации исходного кода. Обязательно ли хранить весь код в одном исходном файле или можно разделить его на несколько?

Я бы предпочел модульный подход для моей реализации, с одним файлом, содержащим API и все структуры, необходимые для регистрации ядра, и другим файлом с низкоуровневыми операциями для обмена данными с датчиком (т.Е. mysensor.c amp; mysensor_core.c).

Каковы требования с этой точки зрения?

Существует ли ограничение в отношении строк кода для каждого файла?

Примечание:

Я попытался взглянуть на официальный репозиторий github, и мне кажется, что код всегда ограничен одним исходным файлом.

https://github.com/torvalds/linux/tree/master/drivers/misc

Комментарии:

1. «мне кажется, что код всегда ограничен одним исходным файлом». — Насколько я понимаю, для драйвера с несколькими исходными кодами вы всегда можете создать подкаталог , подобный этому: github.com/torvalds/linux/tree/master/drivers/misc/lis3lv02d .

2. Следуйте руководству по стилю в каталоге документации ядра.

3. Скорее всего, вам нужно обратиться к документации IIO. И найдите примеры в drivers / iio в дереве исходных текстов. drivers/misc — это не папка для драйверов датчиков!

Ответ №1:

Вот выдержка из «linux / drivers / iio / gyro / Makefile» в качестве примера:

 # Currently this is rolled into one module, split it if
# we ever create a separate SPI interface for MPU-3050
obj-$(CONFIG_MPU3050)  = mpu3050.o
mpu3050-objs := mpu3050-core.o mpu3050-i2c.o
  

Файл «mpu3050.o», используемый для сборки модуля «mpu3050.ko», создается путем связывания двух объектных файлов «mpu3050-core.o» и «mpu3050-i2c.o», каждый из которых создается путем компиляции исходного файла с соответствующим именем.

Обратите внимание, что если модуль собран из нескольких исходных файлов, как указано выше, базовое имя конечного модуля «mpu3050» должно отличаться от базового имени каждого из исходных файлов «mpu3050-core» и «mpu3050-i2c». Итак, в вашем случае, если вы хотите, чтобы конечный модуль назывался «mysensor.ko», вам нужно будет переименовать файл «mysensor.c».