linux驅(qū)動(dòng)編寫方法與實(shí)現(xiàn)教程
現(xiàn)在linux驅(qū)動(dòng)比較流行,主要有幾個(gè)方面的原因:1)linux平臺(tái)免費(fèi),很多芯片廠商希望linux平臺(tái)支持自己的產(chǎn)品;2)最近android平臺(tái)很火,這在無形之中幫了linux的忙,搞linux驅(qū)動(dòng)的人也開始多了起來;本篇文章主要介紹了詳解linux驅(qū)動(dòng)編寫(入門),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧。
方法步驟
(01)找兩臺(tái)電腦,一臺(tái)電腦安裝windows系統(tǒng),另外一臺(tái)電腦安裝linux系統(tǒng),至于類型沒有限制;
(02)查看linux系統(tǒng)的版本類型,輸入uname -r即可;
(03)根據(jù)獲取的linux kernel版本,尋找合適的kernel版本,直接用wget下載即可;
(04)用tar解壓內(nèi)核版本,將boot下config文件拷貝到本地,輸入make menuconfig,直接保存即可;
(05)輸入make -j2 & make modules_install & make install即可,系統(tǒng)重啟;
(06)在linux系統(tǒng)起來后,注意在grub啟動(dòng)的時(shí)候選擇剛剛編譯的內(nèi)核版本,這樣就可以在linux上開發(fā)kernel驅(qū)動(dòng)了;
(07)在windows 平臺(tái)安裝secureCRT工具,和linux取得連接;
(08)輸入下面的代碼,分別是hello.c和Makefile,其中hello.c內(nèi)容如下
#include
#include
#include
MODULE_LICENSE("GPL");
MODULE_AUTHOR("feixiaoxing");
MODULE_DESCRIPTION("This is just a hello module!\n");
static int __init hello_init(void)
{
printk(KERN_EMERG "hello, init\n");
return 0;
}
static void __exit hello_exit(void)
{
printk(KERN_EMERG "hello, exit\n");
}
module_init(hello_init);
module_exit(hello_exit);
Makefile的內(nèi)容如下所示
ifneq ($(KERNELRELEASE),)
obj-m := hello.o
else
PWD := $(shell pwd)
KVER := $(shell uname -r)
KDIR := /lib/modules/$(KVER)/build
all:
$(MAKE) -C $(KDIR) M=$(PWD) modules
clean:
rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions
endif
(09)編譯的時(shí)候,直接make即可,當(dāng)然前提是這兩個(gè)文件必須在一個(gè)目錄下;
(10)編譯后生成hello.ko文件,大家可以把它想象成一個(gè)普通的執(zhí)行文件;
(11)如果需要安裝,直接insmod hello.ko即可,輸入dmesg | tail 可以看到打印的內(nèi)容,輸入lsmod | grep hello也可以看一下模塊是否已經(jīng)安裝;
(12)如果刪除模塊,直接輸入rmmod hello即可,當(dāng)然添加和刪除的操作都需要在root模式下進(jìn)行操作。
所以說,linux驅(qū)動(dòng)簡單的開發(fā)步驟就是這些。
補(bǔ)充:Linux基本命令
?、賚s 意為list 列出當(dāng)前文件夾中的文件
-l 顯示文件的屬性 可用ll來表示
?、赼lias 別名 看看是否有別名的文件
③cd dir 跳躍目錄 -P選項(xiàng) 將路徑中的鏈接文件替換成鏈接指向的文件路徑
?、躳wd 查看當(dāng)前工作的文件夾名 使用-P的選項(xiàng),會(huì)直接進(jìn)入到其中,相當(dāng)于cd
相關(guān)閱讀:Linuxshell腳本不執(zhí)行問題實(shí)例分析
shell腳本不執(zhí)行問題:某天研發(fā)某同事找我說幫他看看他寫的shell腳本,死活不執(zhí)行,報(bào)錯(cuò)。我看了下,腳本很簡單,也沒有常規(guī)性的錯(cuò)誤,報(bào)“:badinterpreter:Nosuchfileordirectory”錯(cuò)??催@錯(cuò),我就問他是不是在windows下編寫的腳本,然后在上傳到linux服務(wù)器的……果然。原因:在DOS/windows里,文本文件的換行符為rn,而在*nix系統(tǒng)里則為n,所以DOS/Windows里編輯過的文本文件到了*nix里,每一行都多了個(gè)^M。解決:
1)重新在linux下編寫腳本;
2)vi:%s/r//g:%s/^M//g(^M輸入用Ctrl+v,Ctrl+m)附:sh-x腳本文件名,可以單步執(zhí)行并回顯結(jié)果,有助于排查復(fù)雜腳本問題。
Linux驅(qū)動(dòng)相關(guān)文章:
2.如何編譯加載linux驅(qū)動(dòng)和內(nèi)核模塊