歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Ubuntu 16.04下Linux驅動編寫初入門

源碼環境的搭建

    • 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代碼

#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
    printk(KERN_ALERT "Hello, world\n");
    return 0;
}
static void hello_exit(void)
{
    printk(KERN_ALERT "Goodbye, cruel world\n");
}

module_init(hello_init);
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文件中的各種內容為什麼這樣子寫,相信你查看相關的資料之後即可了然於胸了。

Copyright © Linux教程網 All Rights Reserved