linux驅動學習之路一
最簡單的驅動程式
#include // linux很重要的標頭檔案之一包含 module_init module_exit 等巨集定義
#include // __init __exit
// 模組安裝函式
static int __init chrdev_init(void)
// 模組解除安裝函式
static void __exit chrdev_exit(void)
//注意:核心中不能用printf
module_init(chrdev_init); //當在linux中命令列輸入insmod的時候進行會自動跳到chrdev_init中載入函式
module_exit(chrdev_exit); //當在linux中命令列輸入rmmod的時候進行會自動跳到chrdev_exit中解除安裝函式
// module_***這種巨集作用是用來新增模組描述資訊
module_license("gpl"); // 描述模組的許可證
module_author("nexyho"); // 描述模組的作者
module_description("module test"); // 描述模組的介紹資訊
module_alias("nexyho***");
編寫好上面的**後,然後讓我們編寫makefile
# linux核心的原始碼樹目錄 其實就是核心原始碼的目錄,這個核心原始碼要通過編譯,並且能在主機或開發板跑起來!我這裡用的是linux 3.8.3
#kern_dir = /root/driver/kernel
kern_dir = /usr/x210v3_bsp/linux-3.8.3
#kern_dir = /usr/x210v3_bsp/porting_samsun/qt_x210v3/kernel
#這裡0bj-m 的意思是編譯成ko模組,然後+= 要編譯的檔案就行
obj-m += module_test.o
all:
make -c $(kern_dir) m=`pwd` modules
cp: cp *.ko /usr/x210v3_bsp/rootfs/rootfs/usr/program -f
.phony: clean
clean:
make -c $(kern_dir) m=`pwd` modules clean
編譯好後,在目標機使用nfs連線到主機。。。。然後insmod載入剛剛編譯好的ko模組,在lsmod檢視ko模組,然後用rmmod解除安裝模組,這個程式嚴格來說不算是linux的驅動,因為他沒有任何硬體操作。。在後面的學習我會把這個驅動的**完善,逐漸一步一步的操控硬體
Linux驅動學習之路二
linux驅動學習之路二 上次我們寫了乙個最簡單的驅動程式,但是那個驅動程式中沒有介面可供linux上層應用程式呼叫 這次讓我們新增乙個linux呼叫驅動的介面,讓上層應用可以呼叫 1.首先讓咱們來了解一下linux 中file operations結構體,這個結構體在 include linux ...
linux學習之路(一)
關於執行檔案路徑的變數 環境變數 path 大寫 的內容是由一堆目錄組成,每個目錄中間用冒號 來隔開,每個目錄有順序之分。path決定shell將到哪些目錄中尋找命令或者程式,當你執行乙個程式是,linux會在這些目錄下進行搜尋 編譯 鏈結。自己可以加上指定路徑,中間也要用冒號隔開 當環境變數更改後...
Linux驅動學習 初識PCI驅動 一
pci是什麼 pci peripheral component interconnect,外圍裝置互 線。是一種廣泛採用的匯流排標準,它提供了許多優於其它匯流排標準 如eisa 的新特性,目前已經成為計算機系統中應用最為廣泛,並且最為通用的匯流排標準。對於pci的一些具體介紹可以參考 pci具體介紹...