linux驱动入门(一、 HelloWorld)

近期由于项目需求,需要在linux写个驱动,特此记录入门过程

HelloWorld

国际惯例,码农的所有入门都是从helloworld开始(手动狗头)。
驱动属于内核的部分,所以就老老实实的用C语言吧,另外,标准库也不要想了,不过linux内核里面实现了大部分我们需要的方法,还是很方便的。
闲话少说,建立一个hello.c的文件,进行编辑

#include <linux/init.h>
#include <linux/module.h>

MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void){
    printk(KERN_EMERG "Load Hello World\n");
    return 0;
}

static void hello_exit(void){
    printk(KERN_EMERG, "Remove Hello world\n");
}
module_init(hello_init);
module_exit(hello_exit);

第一步,告诉linux内核你拥有许可证
第二部,编写init回调函数,该函数在驱动加载时由linux内核调用
第三部,编写exit回调函数,该函数在驱动卸载时由linux内核调用。
源文件编写完成。
注意:上面的printk是内核的打印函数,第一个参数是打印的等级。可以用
cat /proc/sys/kernel/printk 来查看你的内核支持的打印等级。而KERN_EMERG是最高等级,也就是一定会打印的等级。
注意:如果你使用的是X11的界面,内核是不会打印在这个终端里的,需要切换到原生终端才行,可以CTRL+ALT+NUM来切换。
接下来要写个Makefile文件

obj-m := hello.o
KERNELDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
modules:
        $(MAKE) -C $(KERNELDIR) M=$(PWD) modules

其中uname -r是查看你的内核版本的,Makefile基本都一样,照抄就好。
然后make就编译完成了,你可以看到当前文件夹下多了个hello.ko的文件,这个就是驱动文件了。
然后sudo insmod,安装驱动,就可以看到你的打印信息了。
卸载驱动可以用sudo rmmod

打完收工,没错,就是这么简答,你已经会写驱动了!

下一章我们来介绍设备驱动,也就是可以在/dev下看到你的驱动设备了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值