没有系统学习过驱动的开发,但是我想要…
总是要开头的,就像学编程一样,总要懵懵懂懂的经历第一个hello world,以下内容都是网上学习的,这里做个记录:
第一步:
了解:
1.在linux系统下,系统内核分为三种类型,字符设备/块设备/网络设备
2.第一个驱动程序 hello world 将按照块设备进行
3.有两种方式加进内核,分别是动态加载,按我理解应该就是insmod,另一种是编译内核时加入
第二步:
代码
//hello.c //auther:heat nan //programe:char driver-hello world #include <linux/init.h> #include <linux/module.h> MODULE_LICENSE("Dual BSD/GPL"); //内核2.6以上版本建议我们加上这个license 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 文件:
obj-m:=hello.o KERNELDIR:=/lib/modules/4.4.0-98-generic/build PWD:=$(shell pwd) modules: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules modules_install: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
第四步:
编译: 直接 make
编译后可以发现当前目录出现了 hello.ko的文件,这个就是我们常见的驱动文件了。
第五步:
insmod hello.ko
通过动态加载的方式,我们第一个驱动程序就成功加载了。
通过 lsmod 可以看到。
查看输出:通过 dmesg | tail 命令可以看到 helloworld。