2012-07-29 9 views
16

He desarrollado un controlador de dispositivo Linux. A partir de ahora estoy compilando en Ubuntu 12.04 con compilador cruzado para arm y luego insmodinándolo en mi brazo con la imagen de Linux. Pero quiero aprender cómo puedo agregarlo en el código fuente de Linux y dar y la opción de agregar/eliminar mediante la configuración de armar Linux, para que pueda compilarlo con la compilación de código fuente de Linux.Agregando un nuevo código de controlador al código fuente de Linux

¿Alguna idea?

Respuesta

3

Cree el parche y agregue la aplicación de este parche como un paso después de descomprimir el kernel tarball y antes de configurar/compilar.

6

Debe agregar una opción de configuración en el archivo Kconfig del subdirectorio de origen del kernel en el que se colocará el controlador de su dispositivo. También necesita agregar líneas al Makefile de ese directorio. Obviamente también necesita copiar los archivos fuente a ese directorio.

Desde su conductor depende de la arquitectura ARM, en el KConfig, hay que poner una opción de 'depende' como:

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

y su Makefile se verá como

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

Entonces, cuando hagas un make menuconfig en el árbol fuente de tu kernel, encontrarás la opción de configuración que colocaste en Kconfig y podrás seleccionarla para ser compilada en el kernel o compilada como un módulo o no compilada en absoluto.

Busque ejemplos en el directorio del subsistema para el que está diseñado su controlador.

+0

Gracias por su respuesta. Lo descubrí e hice lo mismo que usted mencionó. Pero ahora hay un nuevo problema. Cuando compilo mi código de controlador como un módulo y hago insmod en Linux kernel, puedo ver que mi dispositivo se crea en/dev /. Pero cuando pongo mi código en kernel tree y compilo el núcleo, no puedo ver mi dispositivo en/dev. Tenga en cuenta que estoy usando class_create() y device_create() para crear el nodo del dispositivo. También agregué mi código al kernel tree de la misma manera que lo indicado anteriormente. – Ravi

+0

¿Ha configurado el controlador para que esté incorporado. Es decir, resalte el controlador y presione 'Y' para que aparezca el asterisco como sigue: [*] – microMolvi

35

Para realizar una compilación cruzada de su propio controlador en la arquitectura de brazo, debe seguir algunos pasos como se menciona a continuación.

  1. Crear un directorio como my_drvr conductores en el interior (que está en el código fuente de Linux) para su conductor y poner su controlador (my_driver.c) presentar dentro de este directorio. Será parece /linux_source_code/drivers/my_drvr/my_driver.c

  2. Crear un Makefile dentro de su directorio controlador (vi usando cualquier editor) y dentro de ésta puso obj-$(CONFIG_MY_DRIVER) += my_driver.o y guardar este archivo.Esta voluntad se presenta como /linux_source_code/drivers/my_drvr/Makefile

  3. Crear una Kconfig archivo dentro de su directorio controlador (usando vi cualquier editor) y dentro de ésta puso

    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.
  4. Guardar este archivo, esto aparece como /linux_source_code/drivers/my_drvr/Kconfig

  5. Agregue los archivos Makefile y Kconfig en los controladores fuente de Linux Makefile y Kconfig que están en /linux_source_code/drivers/Makefile/linux_source_code/drivers/Makefile y /linux_source_code/drivers/Kconfig

  6. En el Makefile añadir a continuación en la última línea

     obj-y += my_drvr/

    o

     obj-$(CONFIG_MY_DRIVER) += my_drvr/
  7. En archivo KConfig añadir a continuación en la última línea

    source "drivers/my_drvr/Kconfig"
  8. Por último hay que añadir Kconfig archivo en arquitectura s ESPECÍFICOS archivo de configuración que será a las kernel_source/arch/arm/configs/--defconfig en este añadir debajo de la línea en el último

    CONFIG_MY_DRIVER=y

Nota: - El último paso será diferente de acuerdo a su arquitectura, por lo que tiene cuidar. Ahora puede compilar su controlador utilizando el comando make. (por ejemplo: sun7i_defconfig)

+1

excelente. preciso y conciso. gracias. –

Cuestiones relacionadas