美文网首页BB-black开发板[Linux arm-v8]
我的第一个hello linux驱动--Apple的学习笔记

我的第一个hello linux驱动--Apple的学习笔记

作者: applecai | 来源:发表于2018-05-06 17:19 被阅读1次

1, 选择框架

用的是Char字符驱动框架。

2. 放置位置

自己建立一个文件夹,然后将如下2个文件添加即可。

3. 运行方式

在ubuntu中运行和在开发板上运行,在代码上唯一区别就是Makefile文件中KERNELDIR指向的kernel原始路径不同。
编译模块的命令为

make

若需要加载到arm开发板,编译模块的命令为

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules

4. 使用ko模块

最后生成hello.ko文件。

输入insmod hello.ko     加载模块
然后lsmod | grep ‘hello’  能找到此刚加入的模块
最后rmmod hello.ko     卸载模块

5.参考代码

5.1 Hello.c驱动文件

#include<linux/init.h> //模块加载卸载需要的头文件  
#include<linux/module.h> //需要内核的一些认证和许可    
// 上面两个头文件对一个内核模块程序来说是必不可少的  
  
//这是模块初始化函数,在模块加载时触发被调用  
static int __init hello_init(void)  
{  
   printk("hello world module init!\n");  
   return 0;  
}  
  
//这是模块收尾处理函数,在模块卸载时触发被调用  
static void __exit hello_exit(void)  
{  
   printk("hello world module exit!\n");  
}  
  
//下面这两个相当于是注册函数,用来加载模块和卸载模块时触发的  
module_init(hello_init);  
module_exit(hello_exit);  
  
//模块加载时一个许可认证,如果没有编译的时候会报警告  
MODULE_LICENSE("Dual BSD/GPL");  
MODULE_AUTHOR("YU ZHI HUI"); //额外的信息,模块作者信息

5.2 Makefile文件

obj-m := hello.o 
#KERNELDIR := /lib/modules/4.4.0-31-generic/build 
KERNELDIR := /home/study/test/board-support/linux-sdk 
PWD := $(shell pwd) 
modules: 
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules 
modules_install: 
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install 
clean: 
    $(MAKE) -C $(KERNELDIR) M=$(PWD) clean

相关文章

网友评论

    本文标题:我的第一个hello linux驱动--Apple的学习笔记

    本文链接:https://www.haomeiwen.com/subject/nwmurftx.html