Linux核心大講堂 (一) 裝置驅動的基石驅動模型(3)

來源:互聯網
上載者:User

轉載請註明出處:http://blog.csdn.net/z2007b,請勿未經本人許可用於商業用途。著作權歸無為和尚所有。

 

實在是讓大家久等了,因為最近離職,所以繁鎖的事情很多,今天終於把離職手續給辦完了,不過還有一堆事情沒有做,如果更新的慢的話,請大家多多包涵。言歸正傳。
俗話說的好:光說不練假把式。很明顯本帥哥不是假把式。為了讓大家一起對驅動模型有直觀的認識,小弟花了一點點時間寫了幾個小例子(目前只有一個)。就是為了讓大家領會最神秘的驅動模型,有了這些小例子,結合我前面兩篇源碼分析的文章,哥可以告訴你,你已經具備核心分析的基本能力了。

首先說一下我的環境:我linux是裝在虛擬機器上的,裝的linux發行版是centos5.4。後面將核心升級到了2.6.32.3。為什麼要選這個版本呢?因為網上有對應的核心升級教程,這可以省掉我很多在我看來不是很重要的文字(哥很懶滴)。可能有的朋友會說直接裝一個發行版的linux不就得了,為什麼要升級自已的核心呢?這個我覺得有必要說明一下。你如果直接從網上下個發行版裝上以後,只有一堆核心標頭檔(我喜歡用的centos5和rhel5是這樣的),如果你要在不是自已寫的核心源碼中加入調試資訊就非常不方便了,如果你自已下載源碼編譯核心,你就可以直接在核心源碼中加調試資訊,再編譯就OK了。再說了,如果沒玩過的同志花個一天時間把這個東西給搞好了,也會增加自已的信心。OK。遊戲開始了:
先給出源碼:
#include <linux/module.h>
#include <linux/device.h>
#include <linux/kernel.h>
#include <linux/init.h>

#define wwhs_dbg(dbgbuf) printk(KERN_ERR"wwhs:%s/n",dbgbuf);

static struct kobject *wwhs_kobj;

static int __init wwhs_drvmode_init()
{
 wwhs_dbg("drvmode_init");
 wwhs_kobj = kobject_create_and_add("wwhs_drvmode",NULL);
 if (!wwhs_kobj)
 wwhs_dbg("out of memory");
 return 0;
}

static void __exit wwhs_drvmode_exit()
{
 wwhs_dbg("drvmode_exit");
 kobject_del(wwhs_kobj);
}

module_init(wwhs_drvmode_init);
module_exit(wwhs_drvmode_exit);
MODULE_AUTHOR("wwhs");
MODULE_DESCRIPTION("wwhs_drvmode");
MODULE_LICENSE("GPL");
下面給出makefile,makefile請根據自已的開發環境進行適當調整。

obj-m+=wwhs_drvmode.o
KERNELDIR=/opt/linux-2.6.32.3
PWD:=$(shell pwd)
all:
 make -C $(KERNELDIR) M=$(PWD) modules
clean:
 rm -rf *.o* *.ko* *.mod.c *.cmd *.symvers .tmp_versions .*.cmd

將這兩個檔案放在同一目錄下,然後進入root 模式。
make一下。
如果不出意外的話應該可以產生wwhs_drvmode.ko這樣一個核心模組。
執行:insmod wwhs_drvmode.ko
執行:dmesg
應該可以看到列印資訊了吧。
好,我們進去/sys目錄下看看。
見證奇蹟的時候到了,我們可以激動的看到在/sys目錄下面多了一個名為wwhs_drvmode的目錄。
執行:rmmod wwhs_drvmode
執行:dmesg
可以看到有exit的列印。
再進/sys目錄下,wwhs_drvmode這個目錄不見了。
神奇啊!
這與我們之前的源碼分析是一一對應的,真是太神奇了。
如果對之前的源碼分析沒興趣的同志現在應該有興趣了吧,如果沒看懂馬上回過頭去看第一二小節,再仔細看一遍。後面遊戲會越來越好玩。先抽根煙。下回見。

 

本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/z2007b/archive/2011/05/06/6400561.aspx

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.