Linux內核模塊編程——Hello World模塊


Linux內核模塊編程


編程環境

Ubuntu 16.04 LTS

什么是模塊

內核模塊的全稱是動態可加載內核模塊(Loadable Kernel Modul,KLM),可以動態載入內核,讓它成為內核代碼的一部分。

一個模塊一般由一組函數和數據結構組成。

如何編寫最簡單的Hello World模塊

  • 首先要創建一個工作目錄,取名叫hello,在命令行輸入如下命令
mkdir hello
cd hello
  • hello.c代碼如下:
#include<linux/module.h>   //每個模塊都要包括的頭文件
#include<linux/kernel.h>   //用到了printk()函數
#include<linux/init.h>

MODULE_LICENSE("GPL");  //沒有指定license會出現error

static int hello_init(void)    //static使得該文件以外無法訪問
{
	printk(KERN_ALERT "Hello World\n"); //只能使用內核里定義好的C函數,printk會根據日志級別將指定信息輸出到控制台或日志文件中,KERN_ALERT會輸出到控制台
	return 0;
}
static void hello_exit(void)
{
	printk(KERN_ALERT "Goodbye World\n");
}

module_init(hello_init);
module_exit(hello_exit);
  • Makefile代碼如下:
obj-m := hello.o

KERNEL_DIR := /lib/modules/$(shell uname -r)/build   #指定內核源碼
PWD := $(shell pwd)  #指向當前目錄

all:
	make -C $(KERNEL_DIR) M=$(PWD) modules
clean:
	make -C $(KERNEL_DIR) M=$(PWD) clean

檢驗模塊工作情況

在命令行輸入:

modinfo hello.ko    #modinfo用來查看模塊信息
insmod hello.ko    #加載模塊
lsmod   #查看已經載入的模塊,看看有沒有hello!
dmesg   #如果成功應該可以看到最后一行輸出了hello world
rmmod hello   #卸載模塊


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM