學(xué)習(xí)啦 > 學(xué)習(xí)電腦 > 操作系統(tǒng) > Linux教程 >

linux驅(qū)動編寫方法與實現(xiàn)教程

時間: 加城1195 分享

  現(xiàn)在linux驅(qū)動比較流行,主要有幾個方面的原因:1)linux平臺免費,很多芯片廠商希望linux平臺支持自己的產(chǎn)品;2)最近android平臺很火,這在無形之中幫了linux的忙,搞linux驅(qū)動的人也開始多了起來;本篇文章主要介紹了詳解linux驅(qū)動編寫(入門),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧。

  方法步驟

  (01)找兩臺電腦,一臺電腦安裝windows系統(tǒng),另外一臺電腦安裝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啟動的時候選擇剛剛編譯的內(nèi)核版本,這樣就可以在linux上開發(fā)kernel驅(qū)動了;

  (07)在windows 平臺安裝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)編譯的時候,直接make即可,當(dāng)然前提是這兩個文件必須在一個目錄下;

  (10)編譯后生成hello.ko文件,大家可以把它想象成一個普通的執(zhí)行文件;

  (11)如果需要安裝,直接insmod hello.ko即可,輸入dmesg | tail 可以看到打印的內(nèi)容,輸入lsmod | grep hello也可以看一下模塊是否已經(jīng)安裝;

  (12)如果刪除模塊,直接輸入rmmod hello即可,當(dāng)然添加和刪除的操作都需要在root模式下進(jìn)行操作。

  所以說,linux驅(qū)動簡單的開發(fā)步驟就是這些。

  補(bǔ)充:Linux基本命令

 ?、賚s 意為list 列出當(dāng)前文件夾中的文件

  -l 顯示文件的屬性 可用ll來表示

 ?、赼lias 別名 看看是否有別名的文件

 ?、踓d dir 跳躍目錄 -P選項 將路徑中的鏈接文件替換成鏈接指向的文件路徑

 ?、躳wd 查看當(dāng)前工作的文件夾名 使用-P的選項,會直接進(jìn)入到其中,相當(dāng)于cd

  相關(guān)閱讀:Linuxshell腳本不執(zhí)行問題實例分析

  shell腳本不執(zhí)行問題:某天研發(fā)某同事找我說幫他看看他寫的shell腳本,死活不執(zhí)行,報錯。我看了下,腳本很簡單,也沒有常規(guī)性的錯誤,報“:badinterpreter:Nosuchfileordirectory”錯??催@錯,我就問他是不是在windows下編寫的腳本,然后在上傳到linux服務(wù)器的……果然。原因:在DOS/windows里,文本文件的換行符為rn,而在*nix系統(tǒng)里則為n,所以DOS/Windows里編輯過的文本文件到了*nix里,每一行都多了個^M。解決:

  1)重新在linux下編寫腳本;

  2)vi:%s/r//g:%s/^M//g(^M輸入用Ctrl+v,Ctrl+m)附:sh-x腳本文件名,可以單步執(zhí)行并回顯結(jié)果,有助于排查復(fù)雜腳本問題。


Linux驅(qū)動相關(guān)文章:

1.linux安裝顯卡驅(qū)動命令

2.如何編譯加載linux驅(qū)動和內(nèi)核模塊

3.linux安裝usb驅(qū)動命令

4.如何在Linux系統(tǒng)安裝騰達(dá)U1網(wǎng)卡

5.linux瀏覽器命令

4016657