先前介紹了一個簡單的字元範例,這個範例不需要任何硬體線路單純只使用printk函數輸出,一個標準的HELLO WORLD程式。那建立完範本該如何編譯? 如何掛載? 如何使用? 往後一一講解。

首先我的開發環境是使用ubuntu,核心版本是2.6.24,PC環境基本上用哪個版本的套件對以下步驟無多大影響,在這先以PC環境為主,往後在介紹ARM的cross compiler。而我們開發的是linux driver,因此編譯的時候linux核心src是不能缺少,所編譯的driver版本與核心版本必須是近似甚至相同的,反則會面臨雖然編譯程公卻無法掛載的命運,所幸PC環境上的套件都會有src,因此這部分無需擔心。

現在先將先開啟一新的資料夾,並將先前介紹的範本檔案建立存入該資料夾中。在開一個新檔案叫Makefile,對linux開發不熟的可能對此檔不清楚,這是make編譯程式的批次檔,方便開發使用,該檔案內容如下:

TARGET=demo
KDIR:=/lib/modules/$(shell uname -r)/build PWD:=$(shell pwd) obj-m:=$(TARGET).o default: make -C $(KDIR) M=$(PWD) modules clean: rm -rf *.o *.ko modules.* Modules.* *.mod.c

存檔即可,此批次檔TARGET設的參數將為該資料夾編譯後的檔名,在此設定為demo,編譯後產生demo.ko為我們所要掛載的driver module。之後在該資料夾下打入make即可編譯成功。

在Linux下掛載driver的相關命令如下:

1. 掛載:insmod <檔名>
2. 狀態:lsmod
3. 卸載:rmmod <名稱>

當然,如果你使用的事ubuntu,以上命令前要加sudo。打入 sudo insmod demo.ko,輸入管理者密碼即可成功掛載。當然畫面上不會出現任何訊息,因為printf是寫入核心態,我們的畫面是使用者態,核心的printf只能從log或dmesg命令查看,因此打入dmesg,就可以看到掛載訊息了。至於相同的,卸載就打入 sudo rmmod demo,從dmesg也可以看到成功卸載的log。

arrow
arrow
    全站熱搜

    傑克鼠 發表在 痞客邦 留言(1) 人氣()