#linux #linux-kernel #kernel #linux-device-driver #embedded-linux
#linux #linux-ядро #ядро #linux-device-driver #встроенный-linux
Вопрос:
Я планирую переписать драйвер моего датчика, чтобы попытаться получить мой модуль в ядре Linux. Мне было интересно, существуют ли требования к организации исходного кода. Обязательно ли хранить весь код в одном исходном файле или можно разделить его на несколько?
Я бы предпочел модульный подход для моей реализации, с одним файлом, содержащим API и все структуры, необходимые для регистрации ядра, и другим файлом с низкоуровневыми операциями для обмена данными с датчиком (т.Е. mysensor.c amp; mysensor_core.c).
Каковы требования с этой точки зрения?
Существует ли ограничение в отношении строк кода для каждого файла?
Примечание:
Я попытался взглянуть на официальный репозиторий github, и мне кажется, что код всегда ограничен одним исходным файлом.
Комментарии:
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».