实现一个最简单的Linux驱动程序#

环境搭建请参考:在Ubuntu中构建Linux内核源码树

  • hello.c
#include<linux/init.h>
#include<linux/kernel.h>
#include<linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
    printk(KERN_EMERG "Hello, Linux Driver!\n");
    return 0;   
}
static void hello_exit(void)
{
    printk(KERN_EMERG "Hello, Diver Exit!\n");  
}
module_init(hello_init);
module_exit(hello_exit);
  • Makefile
obj-m := hello.o
# it is linux kernel dir
KERNELDIR := /lib/modules/$(uname -r)/build
PWD :=$(shell pwd)

modules:  
    $(MAKE)  -C  $(KERNELDIR)  M=$(PWD)  modules

 .PHONY :clean
clean:
    rm -rf *.o *ko
  • 安装模块
sudo  insmod  ./hello.ko
  • 查看模块
sudo  lsmod 
  • 移除模块
sudo  rmmod  hello
  • 查看驱动程序的输出

因为驱动程序中使用的是Linux Kernel的printk函数,所以信息不回直接输出到终端,可以通过下面的程序查看。

dmesg
# or
dmesg | grep Hello

Hello ,Linux Driver!
Hello Diver Exit !