2012-07-29 142 views
16

我開發了一個Linux設備驅動程序。截至目前,我正在使用交叉編譯器爲arm編譯Ubuntu 12.04,然後在我的arm Linux映像中進行insmoding。但我想學習如何將它添加到Linux源代碼中,並通過配置arm Linux來添加/刪除選項,以便我可以使用Linux源代碼編譯進行編譯?將新驅動程序代碼添加到linux源代碼

任何想法?

回答

3

在解壓縮內核tarball之後,配置/編譯之前,創建補丁並添加應用此補丁作爲步驟。

6

您需要在將放置設備驅動程序的內核源子目錄的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中放置的配置選項,你可以選擇它編譯進內核或者作爲模塊構建或者根本不編譯。

在您的驅動程序的子系統目錄中查找示例。

+0

感謝您的回覆。我想出了它,並做了與你所提到的相同的事情。但現在有一個新問題。當我將驅動程序代碼編譯爲模塊並在linux內核中執行insmod時,我可以看到我的設備在/ dev /下創建。但是當我將代碼放入內核樹並編譯內核時,我無法在/ dev下看到我的設備。請注意,我使用class_create()和device_create()來創建設備節點。同樣,我也按照上面所述的方式將我的代碼添加到內核樹中。 – Ravi 2012-07-31 08:29:07

+0

您是否已經設置了內置驅動程序?即突出顯示驅動程序並按下'Y',以便前綴爲星號,如下所示:[*] – microMolvi 2013-07-20 19:10:27

35

要在arm架構中交叉編譯自己的驅動程序,您必須按照下面所述的一些步驟進行操作。

  1. 爲您的驅動器一樣my_drvr內部驅動程序的目錄(這是在Linux的源代碼),並把你的驅動程序(my_driver.c)這個目錄中的文件。它會看起來像 /linux_source_code/drivers/my_drvr/my_driver.c

  2. 創建驅動程序目錄裏一個Makefile文件(用vi編輯任何),並在這裏面把obj-$(CONFIG_MY_DRIVER) += my_driver.o 並保存此文件。這就會出現像/linux_source_code/drivers/my_drvr/Makefile

  3. 創建驅動程序目錄(使用vi任何編輯器)內的一個Kconfig文件,這裏面放

    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. 保存此文件,這就會出現像/linux_source_code/drivers/my_drvr/Kconfig

  5. 在Linux源驅動程序MakefileKconfig文件中添加MakefileKconfig文件,這些文件位於/linux_source_code/drivers/Makefile/linux_source_code/drivers/Kconfig

  6. 在Makefile中下方添加在最後一行

     obj-y += my_drvr/

     obj-$(CONFIG_MY_DRIVER) += my_drvr/
  7. 在的Kconfig文件中最後一行下面添加

    source "drivers/my_drvr/Kconfig"
  8. 最後不得不增加將Kconfig文件轉換爲體系結構s這將是在kernel_source/arch/arm/configs/--defconfig在這個pecific配置文件中添加下面一行在過去

    CONFIG_MY_DRIVER=y

注: - 最後一步將根據你的架構不同,因此,你必須要小心。 現在您可以使用make命令編譯驅動程序。 (eg:sun7i_defconfig)

+1

優秀。準確和簡潔。謝謝。 – 2015-07-19 12:19:44