linux下的第乙個驅動

2021-05-25 05:19:42 字數 1646 閱讀 8845

前段時間忙著學python語言,其實,學得不咋滴~~從習慣的底層程式設計換到上層程式設計,不用考慮記憶體的東西,還不用申請變數,總感覺不太習慣,相信久了就會好了,不過已經基本可以看懂程式了,語言確實簡單。留著以後慢慢琢磨吧。

現在需要學習linux下的驅動了,一直都想學,上學期學習迷茫期中,有個機會去廣州參加尚觀的乙個七天免費培訓,學了一下,可惜回來後沒有繼續搞驅動,而是自己找了乙個專案自己從上層開始折騰了——就是那個遠端監控的東東。

因為給自己定的方針是先易後難,逐漸摸索,有了一定能力就去多了解背景架構的東西,最好快點兒讓自己有些成就感。廢話不多說了,反正這兩天開始學習驅動了。

按照網上的hello world驅動教程,總會 有些問題,今日忽然解決了,糊里糊塗的不太清楚什麼原因,只是把系統源**路徑改為了本系統的就好了。

下面我也把**貼一遍:

檔案內容我就不多解釋了,網上大把

然後是makefile檔案:

pwd = $(shell pwd)

kernel_src = /usr/src/linux-headers-2.6.35-22-generic/  ###我就是改的這句粗體字,我的系統是這個通用版本的,更好的辦法是用$(shell uname -r)代替

obj-m:=hello.o

module-objs:=hello.o

all:

$(make) -c $(kernel_src) m=$(pwd) modules #####記住有tab鍵,不要複製我的,我這是空格鍵

## -c 是改變它的目錄到$(kernel_src) 目錄下,執行完該目錄下的modules之後,回到$(pwd)當前路徑下

clean:

rm *.ko

rm *.o

rm -f *mod*

rm  -f mod*

以前,有段時間學過《跟我一起寫makefile》,只是一直沒怎麼用過,都忘記了,到現在具體規則記不住了,只記得就是這麼簡單一回事,編譯誰,生成誰,怎麼編譯。一直不明不白的為什麼只是make一下就會自動編譯,今天實驗了一下,把all: 和clean: 順序調換了一下,然後使用make,發現會出錯,終於明白:使用make命令會預設執行第乙個標籤的命令!!

執行insmod hello.ko 

知性rmmod hello.ko 

命令列沒有任何顯示

檢視系統日誌,  vim /var/log/kern.log(syslog也行),  然後shift + g 看到底行出現了預期的列印字元。成功了。

從網上看到的,這個makefile作為模板挺不錯,像python語言一樣優美整潔:

obj-m : = test.o

kerneldir := /lib/modules/$(shell uname -r)/build

default:

(tab鍵)make -c $(kerneldir) m=$(shell pwd) modules

install:

insmod test.ko

uninstall:

rmmod test.ko

clean:

make -c $(kerneldir) m=$(shell pwd) clean

ok,驅動大概流程怎樣,應該怎麼走知道了,下面就是折騰具體技術問題了。預祝成功。

第乙個linux 驅動

以前看過很多次linux相關的資料,一直沒親自動手寫,今天通過半天努力,終於完成了乙個自己的linux小驅動 hello.c include include module license dual bsd gpl static int hello init void static void hell...

第乙個Linux驅動 流水燈

本節介紹如何利用板載的led和linux的核心定時器實現乙個簡單的流水燈的驅動,所使用的開發板是tq2440,核心版本2.6.30.4。程式比較簡單,也沒涉及到什麼機制,直接上 了!關於定時器的使用模板可以參考 驅動程式 include include include include include...

linux第乙個驅動模組編譯

我們的源程式是乙個簡單的程式 include include module license dual bsd gpl static int hello init void static void hello exit void module init hello init module exit h...