Добавление нового кода драйвера в исходный код Linux

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

Есть идеи?

Ответы на вопрос(3)

дра и перед настройкой / компиляцией.

должны выполнить несколько шагов, как указано ниже.

Create a directory like my_drvr inside drivers(which is in the Linux source code) for your driver and put your driver (my_driver.c) file inside this directory. It will looks like /linux_source_code/drivers/my_drvr/my_driver.c

Create one Makefile inside your driver directory (using vi any editor) and inside this put obj-$(CONFIG_MY_DRIVER) += my_driver.o and save this file. This will appears like /linux_source_code/drivers/my_drvr/Makefile

Create one Kconfig file inside your driver directory (using vi any editor) and inside this put

config MY_DRIVER
tristate "my driver" //gives your driver description like vendor name etc.
depends on ARM
default y if ARM
help
  my driver module.

Save this file, this will appears like /linux_source_code/drivers/my_drvr/Kconfig

Add both Makefile and Kconfig file in the Linux source drivers Makefile and Kconfig file which are at /linux_source_code/drivers/Makefile and /linux_source_code/drivers/Kconfig

In the Makefile add below in last line

 obj-y    += my_drvr/ 

or

 obj-$(CONFIG_MY_DRIVER)   += my_drvr/

In Kconfig file add below in last line

source "drivers/my_drvr/Kconfig"

Finally have to add Kconfig file into architecture specific config file which will be at kernel_source/arch/arm/configs/--defconfig in this add below line in the last

CONFIG_MY_DRIVER=y

Примечание: - Последний шаг будет отличаться в зависимости от вашей архитектуры, так что вы должны позаботиться. Теперь вы можете скомпилировать драйвер с помощью команды make. (например: sun7i_defconfig)

 19 июл. 2015 г., 14:19
отлично. точный и лаконичный. благодарю вас.

источника ядра, в который будет помещен драйвер вашего устройства. Вам также необходимо добавить строки в Makefile этого каталога. Очевидно, что вам также нужно скопировать исходные файлы в этот каталог.

Поскольку ваш драйвер зависит от архитектуры ARM, в Kconfig вам необходимо установить параметр «зависит от». лайк:

config SND_ARMAACI
tristate "ARM PrimeCell PL041 AC Link support"
depends on ARM_AMBA

и ваш Makefile будет выглядеть

obj-$(CONFIG_SND_ARMAACI)   += snd-aaci.o
snd-aaci-objs       := aaci.o

Так что теперь, когда вы делаете make menuconfig в дереве исходного кода ядра, вы найдете опцию config, которую вы поместили в Kconfig, и вы сможете выбрать его для компиляции в ядро или сборки в виде модуля или вообще не компилирования.

Ищите примеры в каталоге подсистем, для которого предназначен ваш драйвер.

 20 июл. 2013 г., 21:10
Вы установили драйвер для встраивания. Т.е. выделите драйвер и нажмитеY так что перед ним стоит звездочка, например: [*]
 Ravi31 июл. 2012 г., 10:29
Спасибо за ваш ответ. Я понял это и сделал то же самое, что вы упомянули. Но теперь появилась новая проблема. Когда я компилирую код своего драйвера как модуль и выполняю insmod в ядре Linux, я вижу, что мое устройство создается в / dev /. Но когда я помещаю свой код в дерево ядра и компилирую ядро, я не вижу своего устройства в / dev. Обратите внимание, что я использую class_create () и device_create () для создания узла устройства. Также я добавил свой код в дерево ядра так же, как вы указали выше.

Ваш ответ на вопрос