linux下添加新驅動的方法

來源:互聯網
上載者:User

下面以UCLINUX為例,介紹在一個以模組方式出現的驅動程式test.c基礎之上,將其編譯進核心的一系列步驟:

(1) 改動test.c源帶代碼

第一步,將原來的:

#include

#include

char kernel_version[]=UTS_RELEASE;

改動為:

#ifdef MODULE

#include

#include

char kernel_version[]=UTS_RELEASE;

#else

#define MOD_INC_USE_COUNT

#define MOD_DEC_USE_COUNT

#endif

第二步,建立函數int init_test(void)

將裝置註冊寫在此處:

result=register_chrdev(254,"test",&test_fops);

(2)將test.c複製到/uclinux/linux/drivers/char目錄下,並且在/uclinux/linux/drivers/char目錄下mem.c中,int chr_dev_init( )函數中增加如下代碼:

#ifdef CONFIG_TESTDRIVE

init_test();

#endif

(3) 在/uclinux/linux/drivers/char目錄下Makefile中增加如下代碼:

ifeq($(CONFIG_TESTDRIVE),y)

L_OBJS+=test.o

Endif

(4)在/uclinux/linux/arch/m68knommu目錄下config.in中字元裝置段裡增加如下代碼:

bool 'support for testdrive' CONFIG_TESTDRIVE y

(5) 運行make menuconfig(在menuconfig的字元裝置選項裡你可以看見我們剛剛添加的'support for testdrive'選項,並且已經被選中);make dep;make linux;make linux.text;make linux.data;cat linux.text linux.data > linux.bin。

(6) 在 /uclinux/romdisk/romdisk/dev/目錄下建立裝置:

mknod test c 254 0

並且在/uclinux/appsrc/下運行make,產生新的Romdisk.s19檔案。

到這裡,在UCLINUX中增加裝置驅動程式的工作可以說是完成了,只要將新的linux.bin與Romdisk.s19燒入目標板中,你就可以使用自己的新裝置test了。

當然,還可以使用模組的方法.把新驅動編譯成一個模組.使用make menuconfi類的命令.添進核心裡面.重新編譯或手動載入模組.lsmod rmod insmod溫習溫習一切都快忘了喲

linux核心驅動模組載入方式

2009-02-05 10:37

linux核心驅動模組載入方式

在類unix作業系統中,驅動載入方式一般分為:動態載入和靜態載入,下面分別對其詳細論述。

一、動態載入

動態載入是將驅動模組載入到核心中,而不能放入/lib/modules/下。

在2.4核心中,載入驅動命令為:insmod ,刪除模組為:rmmod;

在2.6以上核心中,除了insmod與rmmod外,載入命令還有modprobe;

insmod與modprobe不同之處:

insmod 絕對路徑/××.o,而modprobe ××即可,不用加.ko或.o尾碼,也不用加路徑;最重要的一點是:modprobe同時會載入當前模組所依賴的其它模組;

lsmod查看當前載入到核心中的所有驅動模組,同時提供其它一些資訊,比如其它模組是否在使用另一個模組。

二、靜態載入

(一)概念

在執行make menuconfig命令進行核心配置裁剪時,在視窗中可以選擇是否編譯入核心,還是放入/lib/modules/下相應核心版本目錄中,還是不選。

(二)操作步驟

linux裝置一般分為:字元裝置、塊裝置和網路裝置,每種裝置在核心原始碼分類樹drivers/下都有對應的目錄,其載入方法類似,以下以字元裝置靜態載入為例,假設驅動程式原始碼名為ledc.c,具體操作步驟如下:

第一步:將ledc.c來源程式放入核心源碼drivers/char/下;

第二步:修改drivers/char/Config.in檔案,具體修改如下:

按照開啟檔案中的格式添加即可;

在檔案的適當位置(這個位置隨便都可以,但這個位置決定其在make menuconfig視窗中所在位置)加入以下任一段代碼:

tristate 'LedDriver' CONFIG_LEDC

if [ "$CONFIG_LEDC" = "y" ];then

bool ' Support for led on h9200 board' CONFIG_LEDC_CONSOLE

fi

說明:以上代碼使用tristate來定義一個宏,表示此驅動可以直接編譯至核心(用*選擇),也可以編製至/lib/modules/下(用M選擇),或者不編譯(不選)。

bool 'LedDriver' CONFIG_LEDC

if [ "$CONFIG_LEDC" = "y" ];then

bool ' Support for led on h9200 board' CONFIG_LEDC_CONSOLE

fi

說明:以上代碼使用tristate來定義一個宏,表示此驅動只能直接編譯至核心(用*選擇)或者不編譯(不選),不能編製至/lib/modules/下(用M選擇)。

第三步:修改drivers/char/Makefile檔案

在適當位置加入下面一行代碼:

obj-$(CONFIG_LEDC) += ledc.o

或者在obj-y一行中加入ledc.o,如:

obj-y += ledc.o mem.o 後面不變;

OK,經過以上的設定就可以在執行make menuconfig命令後的視窗中的character devices---> 中進行選擇配置了。選擇後重新編譯就ok了。

複製搜尋

複製搜尋
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.