驱动 模块 模块传参 符号导出

基于linux内核的驱动开发

Day1:驱动 模块 模块传参 符号导出

驱动

  1. 定义:驱使硬件动起来的程序

  1. 裸机驱动:需求分析—》查看原理图—》查芯片手册—》code

系统驱动:需求分析--》查原理图—》查新品手册—》设备树—》code—》安装到内核中

裸机开发&系统开发的优缺点?

裸机开发:成本低 运行速率高 安全性低 单任务

系统开发:成本高 信息效率低 安全性低 多任务

应用程序和驱动程序的区别

应用程序 驱动程序

1、加载方式 主动加载 被动加载

2、运行空间 用户空间 kernel空间

3、执行权限 低 高

4、影响力 局部 全局

5、函数来源 自定义/库/系统调用 内核函数/自定义

内核函数:纯内核函数 系统调用函数

  1. 模块—》驱动模块

模块:能够单独命名并且独立完成一定功能的程序语句的集合(C程序代码和数据结构)

驱动模块:能够单独命名并且独立完成特定外设功能的程序语句的集合。

注:一个驱动模块就是一个完整的外设驱动程序,驱动程序被安装到操作系统的内核。

当该驱动程序对应的外设要工作时,该驱动模块被调用。

2、1 如何写一个驱动模块

1、模块初始化函数 int 函数名1(void)

2、模块清除函数 void 函数名2(void)

3、模块加载函数 module_init(函数名1)

4、模块卸载函数 module_exit(函数名2)

5、声明该驱动遵守GPL----》宏 MODULE_LICENSE(“GPL”)

《include/linux/init.h》 模块初始化函数

#define module_init(initfn)

Static inline initcall_t_intitest(void)

{return initfn;}

#define module_exit(exitfn) 模块卸载函数

Static inline exitcall_t_exittest(void)

{return exitfn}

2.2如何编译驱动模块

hello.c-->hello.ko

test.c-->a.out

需要实现一个Makefile:

Makefile:

ifeq($(KERNELRELEASE),)

KERNELDIR?= /lib/modules/$(shell uname -r)/build

PWD:= $(shell pwd)

modules:

$(MAKE)-C $(KERNELDIR) M=$(PWD) modules

//进入/lib/modules/3.5.0-23-generic/buil

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值