驅動程式的載入方式

2021-06-21 14:37:38 字數 1376 閱讀 4460

linux裝置驅動程式有兩種載入方式。第一種是直接編譯進linux核心,在linux啟動時載入;第二種是採用核心模組方式,利用模組可動態載入。

如果希望將新驅動程式編譯進核心,需要修改核心**和編譯選項。下面以字元型裝置為例,說明如何在linux 2.6核心中新增乙個新的裝置驅動程式。如果驅動程式**原始檔為infrared_s3c2410.c,將infrared_s3c2410.c複製到核心**的/drivers/char目錄,並在該目錄下的kconfig檔案中新增如下語句:

config infrared_remote  

tristate "infrared driver for remote"  

depends on arch_s3c64xx || arch_s3c2410  

default y  

help  

在該目錄下的makefile中新增如下語句:

obj-$(config_infrared_remote)+= infrared_s3c2410.o 

進入linux 2.6核心源**目錄,執行make menuconfig命令後,單擊【device drivers】→【character devices】,進入如圖1-3所示的核心配置視窗。

在核心配置視窗中可以使用上下鍵、空格鍵和回車鍵來進行選擇、移動和取消選擇。核心配置視窗中以< >開頭的行表示核心模組的配置,以[ ]開頭的行表示核心功能的配置。選項前如果為,表示相應的模組將被編譯進核心。如果選項前是< >則表示不編譯進核心。這裡在【infrared driver for remote】行前面配置為,則infrared_ s3c2410.o將被編譯進核心。在使用make zimage命令編譯核心時所有配置為的項都將被包含在核心映像中。

圖1-3  在核心中增加新驅動程式

採用可載入模組方式可以讓驅動程式的執行更加靈活,也更利於除錯。可載入模組是用於擴充套件linux系統功能的。使用模組的優點是可以按照需要進行載入,而且不需要重新編譯核心。這種方式控制了核心的大小,而模組一旦被插入核心,它就和核心其他部分一樣,可以訪問核心的位址空間、函式和資料。可載入模組通常以.ko為副檔名。在圖1-3中選項前如果為,表示編譯成可載入模組。在使用make modules命令編譯核心時,所有配置為的項都將被編譯。make modules結束後可以使用下面的命令安裝核心中的可載入模組檔案到乙個指定的目錄:

make modules_install 

install_mod_path

=/home/usr/modules 

如果使用make命令編譯核心相當於執行make zimage和make modules兩個命令

驅動程式的載入機制

裝置 驅動程式的載入過程如下 圖所示 1.當在oal 中的oeminit 執行時,需要啟動乙太網除錯 串列埠除錯等除錯服務 2.oal可能需要配置和列舉乙個匯流排,如 pci匯流排,以便操作乙個用於除錯的裝置 3.oal負責將這個資源資訊放到乙個登錄檔鍵,並使驅動程式可訪問它。然後,device.e...

驅動程式開機自動載入

將驅動程式編譯進核心的方法比較多,既可以進行靜態編譯,也可以動態載入。所以的靜態編譯,也就是在直接將驅動程式原始碼放入核心原始碼,在編譯核心原始碼時,就已經將驅動程式編譯進了核心。但是,我們也經常會遇到需要動態載入核心驅動。在編譯生成了驅動程式後,使用insmod命令載入即可,例如 insmod k...

USB驅動程式的載入 二

應用程式 usb client driver 層一 usbd.dll 層二 ohci.dll 層三 wince的usb驅動分為三層,如上圖所示.從上到下,姑且將其稱為層一,層二,層三。層一通過gc usbfuncs來呼叫層二所提供的功能,而層二通過gc hcdfuncs來呼叫層三實現的功能,而應用程...