Adding new driver code to linux source code

前端 未结 3 835
故里飘歌
故里飘歌 2020-12-02 11:07

I have developed a Linux device driver. As of now I am compiling it on Ubuntu 12.04 with cross-compiler for arm and then insmoding it in my arm Linux image. But I want to le

相关标签:
3条回答
  • 2020-12-02 11:21

    To cross compile your own driver in the arm architecture you have to follow some steps as mentioned below.

    1. 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

    2. 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

    3. 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.
    4. Save this file, this will appears like /linux_source_code/drivers/my_drvr/Kconfig

    5. 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

    6. In the Makefile add below in last line

       obj-y    += my_drvr/ 

      or

       obj-$(CONFIG_MY_DRIVER)   += my_drvr/
    7. In Kconfig file add below in last line

      source "drivers/my_drvr/Kconfig"
    8. 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

    Note:- Last step will differ according to your architecture, so that you have take care. Now you can compile your driver by using make command. (eg: sun7i_defconfig)

    0 讨论(0)
  • 2020-12-02 11:24

    You need to add a config option in the Kconfig file of the kernel source subdirectory in which your device driver will be put. You also need to add lines to the Makefile of that directory. Obviously you need to copy the source files to that directory too.

    Since your driver depends on the ARM architecture, in the Kconfig, you need to put an option of 'depends on' like:

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

    and your Makefile will look like

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

    So now when you do a make menuconfig in your kernel source tree, you will find the config option you put in the Kconfig and you will be able to select it to be compiled into the kernel or built as a module or not compiled at all.

    Look for examples in the subsystem directory your driver is meant for.

    0 讨论(0)
  • 2020-12-02 11:28

    Create patch and add applying of this patch as a step after decompressing kernel tarball and before configuring/compilation.

    0 讨论(0)
提交回复
热议问题