Linux设备驱动(一)

认识Linux设备驱动

  • 驱动:让硬件动起来,是硬件和软件的桥梁。
  • 裸机驱动:没有操作系统,简单中断控制,直接操作寄存器。
  • 系统驱动: 有操作系统,编写驱动比较复杂,特别基于Linux的各种驱动框架需按规定编写,统一规则后,就可以提供统一的接口给应用程序调用。

驱动分类:字符设备,块设备,网络设备三大类。

  • 字符设备:串行顺序访问的设备,鼠标
  • 块设备:任意顺序访问的设备,硬盘
  • 网络设备:面向数据包接收和发送的设备,网卡

LInux源码目录:


第一个驱动程序

知道编写、编译、加载、卸载基本操作

头文件(必须有)
必须包含 内核头文件<linux/module.h>和<linux/init.h>
驱动加载函数(必须有)
加载驱动自动执行 __init
驱动卸载函数(必须有)
卸载驱动自动执行 __exit
(__init和__exit会将函数存放到特殊的FILE段中,加载或卸载完自动释放空间,static关键字默认生命周期为全局)
开源许可声明(必须有)
Linux内核是开源的,遵循GPL协议
模块参数(可选)作者版本信息(可选)
#include <linux/module.h>
#include <linux/init.h>
static int __init helloworld_init(void){
    printk("hello wrold init\n");
    return 0;
}
static void __exit hellowrold_exit(void){
    printk("hello wrold exit\n");
}
module_init(helloworld_init);       //将初始化函数加载到内核表
module_exit(hellowrold_exit);       //将销毁函数加载到内核表
MODULE_LICENSE("GPL");              //不加会报错污染
MODULE_AUTHOR("fashi");
MODULE_VERSION("V1.0");

__init是告知编译器将变量或函数放在一个特殊的区域(初始化代码段或初始化数据段),代码使用后的内存使用后会被释放。__exit只在模块卸载时才会调用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值