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

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

Любые идеи?

Ответ 1

Чтобы скомпилировать собственный драйвер в архитектуре руки, вы должны выполнить некоторые шаги, как указано ниже.

  • Создайте такой каталог, как my_drvr внутри драйверов (который находится в исходном коде Linux) для вашего драйвера, и поместите файл драйвера (my_driver.c) в этот каталог. Это будет выглядеть /linux_source_code/drivers/my_drvr/my_driver.c

  • Создайте один Makefile внутри каталога вашего драйвера (с помощью vi любого редактора) и внутри этого put obj-$(CONFIG_MY_DRIVER) += my_driver.o и сохраните этот файл. Это будет выглядеть как /linux_source_code/drivers/my_drvr/Makefile

  • Создайте один Kconfig файл внутри вашего каталога драйверов (используя vi любой редактор) и внутри этого клана

    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.
  • Сохраните этот файл, это будет выглядеть как /linux_source_code/drivers/my_drvr/Kconfig

  • Добавьте файлы Makefile и Kconfig в файлы исходных драйверов Linux Makefile и Kconfig, которые находятся в /linux_source_code/drivers/Makefile и /linux_source_code/drivers/Kconfig

  • В Makefile добавить ниже в последней строке

     obj-y    += my_drvr/ 

    или

     obj-$(CONFIG_MY_DRIVER)   += my_drvr/
  • В файле Kconfig добавьте ниже в последней строке

    source "drivers/my_drvr/Kconfig"
  • Наконец, нужно добавить файл Kconfig в конфигурационный файл конфигурации, который будет находиться в kernel_source/arch/arm/configs/--defconfig в этой строке ниже в последнем

    CONFIG_MY_DRIVER=y

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

Ответ 2

Вам нужно добавить опцию конфигурации в файле Kconfig исходного каталога источника ядра, в который будет установлен ваш драйвер устройства. Вам также нужно добавить строки в 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 в своем исходном дереве ядра, вы найдете параметр конфигурации, который вы добавили в Kconfig, и вы сможете выбрать его для компиляции в ядро ​​или встроенного в модуль или не скомпилированного на всех.

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

Ответ 3

Создайте патч и добавьте применение этого патча в качестве шага после распаковки архива ядра и перед настройкой/компиляцией.