我開發了一個Linux設備驅動程序。截至目前,我正在使用交叉編譯器爲arm編譯Ubuntu 12.04,然後在我的arm Linux映像中進行insmoding。但我想學習如何將它添加到Linux源代碼中,並通過配置arm Linux來添加/刪除選項,以便我可以使用Linux源代碼編譯進行編譯?將新驅動程序代碼添加到linux源代碼
任何想法?
我開發了一個Linux設備驅動程序。截至目前,我正在使用交叉編譯器爲arm編譯Ubuntu 12.04,然後在我的arm Linux映像中進行insmoding。但我想學習如何將它添加到Linux源代碼中,並通過配置arm Linux來添加/刪除選項,以便我可以使用Linux源代碼編譯進行編譯?將新驅動程序代碼添加到linux源代碼
任何想法?
在解壓縮內核tarball之後,配置/編譯之前,創建補丁並添加應用此補丁作爲步驟。
您需要在將放置設備驅動程序的內核源子目錄的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中放置的配置選項,你可以選擇它編譯進內核或者作爲模塊構建或者根本不編譯。
在您的驅動程序的子系統目錄中查找示例。
要在arm架構中交叉編譯自己的驅動程序,您必須按照下面所述的一些步驟進行操作。
爲您的驅動器一樣my_drvr內部驅動程序的目錄(這是在Linux的源代碼),並把你的驅動程序(my_driver.c)這個目錄中的文件。它會看起來像 /linux_source_code/drivers/my_drvr/my_driver.c
創建驅動程序目錄裏一個Makefile文件(用vi編輯任何),並在這裏面把obj-$(CONFIG_MY_DRIVER) += my_driver.o
並保存此文件。這就會出現像/linux_source_code/drivers/my_drvr/Makefile
創建驅動程序目錄(使用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.
保存此文件,這就會出現像/linux_source_code/drivers/my_drvr/Kconfig
在Linux源驅動程序Makefile
和Kconfig
文件中添加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
文件轉換爲體系結構s這將是在kernel_source/arch/arm/configs/--defconfig
在這個pecific配置文件中添加下面一行在過去
CONFIG_MY_DRIVER=y
注: - 最後一步將根據你的架構不同,因此,你必須要小心。 現在您可以使用make命令編譯驅動程序。 (eg:sun7i_defconfig)
優秀。準確和簡潔。謝謝。 – 2015-07-19 12:19:44
感謝您的回覆。我想出了它,並做了與你所提到的相同的事情。但現在有一個新問題。當我將驅動程序代碼編譯爲模塊並在linux內核中執行insmod時,我可以看到我的設備在/ dev /下創建。但是當我將代碼放入內核樹並編譯內核時,我無法在/ dev下看到我的設備。請注意,我使用class_create()和device_create()來創建設備節點。同樣,我也按照上面所述的方式將我的代碼添加到內核樹中。 – Ravi 2012-07-31 08:29:07
您是否已經設置了內置驅動程序?即突出顯示驅動程序並按下'Y',以便前綴爲星號,如下所示:[*] – microMolvi 2013-07-20 19:10:27