青与鱼博客

@青与鱼

October 8th 2019 / 玩玩编程

linux设备驱动--1

既然说道Linux设备驱动,那也不用多介绍了,直接开始吧。
首先是Makefile
这个是在linux下编译多个文件的配置文件,了解一下就行了
Makefile实例:


#如果已经定义KERNELRELEASE,说明是从内核调用的,所以可以直接用内建语句
ifneq ($(KERNELRELEASE),)
 obj-m := hello.o
else
#否则就要调用内核构造系统
    KERN_DIR ?= /usr/src/linux-headers-$(shell uname -r)/
    PWD := $(shell pwd)
default:
    $(MAKE) -C $(KERN_DIR) M=$(PWD) modules
endif
#清除中间产生的文件
clean:
    rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions


接着我们编写驱动的代码

#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和C文件目录下,执行Make命令,就可以看到生成的文件了。
我们主要需要hello.ko这个文件,执行sudo insmod hello.ko,进行安装驱动
sudo rmmod hello进行卸载驱动。

怎么查看驱动是否安装成功呢?
有lsmod这个命令,同时,我们也可以使用dmesg这个命令,用来打印所有驱动的输出,我们需要过滤一下


dmesg | grep world

过滤含有world字符的消息

简单的驱动就弄完了

发表评论
已登录为 [退出]


x