编写一个最简单的驱动例子,然后动态加载到Linux操作系统上。
在开始之前,首先学几个命令,在下文中将要用到。
1:lsmod 。显示所有动态加载模块。
2:insmod file_name.ko 。
加载驱动程序,注意,执行此条命令需要root权限,file_name.ko是编译好的驱动文件。
3:rmmodfile_name。卸载file_name驱动。
新建文件夹mydrv,进入后,新建文件hello.c
#include
#include
static int __init hello_init(void)
{
printk("hello_init\n");
return 0;
}
static void __exit hello_exit(void)
{
printk("hello_exit\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_AUTHOR("Hahahashiqi");
MODULE_DESCRIPTION("show demo hello drvier");
MODULE_LICENSE("GPL");
新建Makefile文件
obj-m:= hello.o
KDIR=/lib/modules/3.2.0-29-generic-pae/build
PWD=$(shell pwd)
all:
$(MAKE) -C $(KDIR) M=$(PWD) modules
modules_nstall:
$(MAKE) -C $(KDIR) M=$(PWD) modules_install
说明: KDIR
是内核头文件的目录,这里的目录是我这个自己操作系统的。
打开终端,cd到mydrv文件夹,输入make命令,对文件进行编译,即可得到hello.ko文件。
输入insmod hello.ko
即可完成将hello驱动程序加载到系统中(要用root权限身份执行命令),不会显示任何信息。
输入dmesg | tail
可查看到驱动加载时的init输出信息“hello_init”
字符。
输入lsmod即可看到hello这个动态的驱动程序。
输入rmmod hello 即可卸载这个动态驱动。
dmesg : 查看内核日志或信息,专业称为ring
buffer。
用法:
dmesg : 直接将显示所有的ring buffer
信息。
dmesg -c : 先打印显示所有的ring
buffer信息,然后清空ring buffer。
dmesg -C : 直接清空ring
buffer。
dmesg | tail : 显示尾部的ring
buffer 信息,默认10个。
demsg | tail -20 :显示尾部的ring
buffer 信息,20个。