



下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Linux設備驅動程序Hello, world!模塊 Linux設備驅動程序的第一個例程:/* * $Id: hello.c,v 1.5 2004/10/26 03:32:21 corbet Exp $ */ #include <linux/init.h>#include <linux/module.h>MODULE_LICENSE("Dual BSD/GPL");static int hello_init(void)printk("Hello, worldn");return 0;static void hello_e
2、xit(void)printk("Goodbye, cruel worldn");module_init(hello_init);module_exit(hello_exit);我將其復制到我的工作目錄,并編寫了一個簡單的Makefile文件:obj-m:=hello.oCROSS_COMPILE = arm-linux-CC = $(CROSS_COMPILE)gccKDIR:=/work/kernel/linux-2.6.14#KDIR:=/lib/modules/2.6.21-1.3194.fc7/buildPWD:=$(shell pwd)default:$(MAK
3、E)-C$(KDIR)SUBDIRS=$(PWD) modulesclean:rm -rf *.o* * core .depend .*.cmd *.ko *.mod.crm -rf .tmp_versions/install:cp *.ko /work/rootfile/rootfs/lib/modules/2.6.14/在我的開發板上的操作:rootNEU/# insmod /lib/modules/2.6.14/hello.koHello, worldrootNEU/# lsmodhello 1024 0 - Live 0xbf000000rootNEU/# rmmod helloGoo
4、dbye, worldrootNEU/# lsmodrootNEU/#學習心得:(1)驅動模塊運行在內核空間,運行時不能依賴于用戶空間的任何函數庫和模塊連接,所以在寫驅動時所調用的函數只能是作為內核一部分的函數,或者說只能調用內核的API函數。(2)驅動模塊和應用程序的一個重要不同是:應用程序退出時可不管資源釋放或者其他的清除工作,但模塊的退出函數必須仔細撤銷初始化函數所作的一切,否則,在系統重新引導之前某些東西就會殘留在系統中。(3)處理器的多種工作模式(級別)其實就是為了操作系統的用戶空間和內核空間設計的。在Unix類的操作系統中只用到了兩個級別:最高和最低級別。(4)要十分注意驅動程序的
5、并發處理。(5)內核API中具有雙下劃線(_ _)的函數,通常是接口的底層組件,應慎用。(6)內核代碼不能實現浮點數運算。(7)Makefile文件分析:obj-m := hello.o 代表了我們要構造的模塊名為hell.ko,make 會在該目錄下自動找到hello.c文件進行編譯。如果 hello.o是由其他的源文件生成(比如file1.c和file2.c)的,則在下面加上(注意紅色字體的對應關系):hello-objs := file1.o file2.o . $(MAKE) -C $(KDIR) M=$(PWD) modules其中 -
6、C $(KDIR) 指定了內核源代碼的位置,其中保存有內核的頂層makefile文件。而且zImage一定要編譯出來,否則編譯模塊化得驅動的時候會有錯誤。 M=$(PWD) 指定了模塊源代碼的位置(8)所有模塊代碼中都包含一下兩個頭文件:#include <linux/init.h>#include <linux/module.h> (9)所有模塊代碼都應該指定所使用的許可證:MODULE_LICENSE("Dual BSD/GPL");此外還有可選的其他描述性定義:MODULE_AUTHOR("
7、;");MODULE_DESCRIPTION("");MODULE_VERSION("");MODULE_ALIAS("");MODULE_DEVICE_TABLE("");上述MODULE_聲明習慣上放在文件最后。(12)初始化和關閉初始化的實際定義通常如下:static int _ _init initialization_function(void)/*初始化代碼*/module_init(initialization_function)清除函數的實際定義通常如下:static int _ _exi
8、t cleanup_function(void)/*清除代碼*/module_exit(cleanup_function)(14)模塊參數:內核允許對驅動程序指定參數,而這些參數可在裝載驅動程序模塊時改變。在學習過程中找到了幾篇很好的參考文檔:(1)第一章 模塊(Modules) URL:(2)從 2.4 到 2.6:Linux 內核可裝載模塊機制的改變對設備驅動的影響URL:(3)Linux2.6內核驅動移植參考 URL:以上就是我對Linux設備驅動程序(第3版)的第二章 構造和運行模塊 的學習總結。 問題集錦:1、 makefile中obj-m這個是關鍵字,小寫 ,注意。CC大寫,CROSS_COMPILE大寫。2、 makefile中default:clean:install:下面的命令行前面是tab空格,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 收入分配差距與公平效率考核試卷
- 護理病情評估與匯報指南 2
- 小學四年級數學上冊乘法練習題
- 5-18一般時序電路的設計3-化簡、編碼和實現
- 安徽省2023~2024學年高一數學下學期4月期中試題
- 統編版語文五年級下冊第21課《楊氏之子》精美課件
- 吉林省伊通滿族自治縣聯考2024-2025學年中考化學試題原創模擬卷(四)含解析
- 江蘇省無錫市青陽片2025屆中考模擬最后十套:數學試題(二)考前提分仿真卷含解析
- 山東財經大學燕山學院《統計學基礎與SPSS應用》2023-2024學年第二學期期末試卷
- 焦作大學《財務會計綜合模擬實驗》2023-2024學年第二學期期末試卷
- 茶百道結業試題及答案
- 2025年濮陽職業技術學院高職單招語文2019-2024歷年真題考點試卷含答案解析
- 農田水土保持的技術與治理策略研究試題及答案
- 2024農業考試重要措施試題及答案
- 甲亢病人護理講課
- 2025年安徽滁州中鹽東興鹽化股份有限公司招聘筆試參考題庫含答案解析
- 2024年陜西高中學業水平合格考試化學試卷真題(含答案詳解)
- 2025年金麗衢十二校高三語文第二次模擬聯考試卷附答案解析
- 廣東省深圳市福田區2023-2024學年六年級下學期英語期中試卷(含答案)
- 國際貿易實務與案例教程題庫及答案
- 2025新能源考試試題及答案
評論
0/150
提交評論