歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Ubuntu Linux >> Ubuntu 16.04下Linux驅動編寫第一步,ubuntu16.04

Ubuntu 16.04下Linux驅動編寫第一步,ubuntu16.04

日期:2017/3/3 18:02:08   编辑:Ubuntu Linux

Ubuntu 16.04下Linux驅動編寫第一步,ubuntu16.04

Ubuntu 16.04下Linux驅動編寫第一步,ubuntu16.04


源碼環境的搭建

    • Install源碼

      >sudo apt-cache search linux-source

linux-source - Linux kernel source with Ubuntu patches

linux-source-4.4.0 - Linux kernel source for version 4.4.0 with Ubuntu patches

  因差異這個略有不同,選擇linux-source-4.4.0即可。按照你顯示的版本號而定。

>sudo apt-get install linux-source-4.4.0

  安裝完成後,在/usr/src/ 目錄下會出現兩個新文件,一個為linux-source-4.4.0文件夾,另外一個為 linux-source-4.4.0.tar.bz2。

>tar jxvf linux-source-4.4.0.tar.bz2 -C /home/yourdir/Kernel

  解壓到你的文件夾下 或者解壓到當前目錄下也行。

在解壓出來的的linux-source-4.4.0目錄下執行配置內核的工作

>sudo make oldconfig //配置內核

>sudo make //編譯內核 此處時間花費較長 若出現類似openssl/opensslv.h No such file or directory 這樣的 錯誤則表明需要安裝 libssl-dev 執行sudo apt-get install libssl-dev

>sudo make modules //編譯模塊

  >sudo make modules_install //安裝模塊

第一個.c文件與Makefile文件

  • 在自己工作目錄下新建一個文件夾並在此下建立hello.c與Makefile文件
  • Makefile文件可以直接用vim Makefile建立,注意M為大寫。

hello.c代碼

 1 #include <linux/init.h>
 2 #include <linux/module.h>
 3 MODULE_LICENSE("Dual BSD/GPL");
 4 static int hello_init(void)
 5 {
 6     printk(KERN_ALERT "Hello, world\n");
 7     return 0;
 8 }
 9 static void hello_exit(void)
10 {
11     printk(KERN_ALERT "Goodbye, cruel world\n");
12 }
13 
14 module_init(hello_init);
15 module_exit(hello_exit);

Makefile文件。//注意空格與Tab

obj-m :=hello.o
hellomodule-objs :=module #可以把hello這個改成你的命名
KERNELDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules

保存後執行 >sudo make

即可生成hello.ko文件。既可以利用此文件來裝載到內核中去了。

裝載命令 >sudo insmod ./hello.ko

裝載完成後可以使用 > lsmod //查看當前安裝的驅動模塊。

> cat /var/log/syslog 中可以直接看到輸出的 hello 與Goodbye // 或者使用 >dmesg | tail 此條命令更簡潔

卸載命令 > sudo rmmod ./hello.ko

第一次配置環境及編寫Makefile的過程中遇到了很多坑,關於驅動的進一步學習還需要參考相關的Linxu驅動開發的相關書籍及教程。

關於文中的hello.c以及Makefile文件中的各種內容為什麼這樣子寫,相信你查看相關的資料之後即可了然於胸了。

http://xxxxxx/Linuxjc/1176893.html TechArticle

Copyright © Linux教程網 All Rights Reserved