1.驱动介绍
定义:驱使硬件动起来的软件
种类:裸机驱动---》需求分析--》查看原理图--》查看芯片手册---》code
系统驱动--》需求分析--》查看原理图--》查看芯片手册---》设备树文件--》dts/uImage hello.ko--》安装到LInux内核当中
应用程序 | 驱动程序 | |
加载方式 | 主动加载 | 被动加载 |
运行空间 | user | kernel |
执行程序 | 低 | 高 |
影响 | 局部 | 全局 |
函数来源 | 自定义/库系统调用 | 内核提供的函数 |
Linux内核和驱动模块的关系和关联?
关系:包含和被包含的关系
关联:将驱动模块用指令安装到内核中sudo insmod hello.ko
注意:当被驱动的设备要工作时,驱动模块被调用
2 驱动模块
模块:能够单独命名并且独立完成一定功能的程序语句的集合(程序代码和数据结构-)
驱动模块:能够单独命名并且独立完成特定外设功能的程序语句的集合
注意:一个驱动模块就是一个完整的外设驱动程序。驱动模块被安装到LInux内核中,当该驱动模块对应的外设要工作时,该驱动模块被调用。
2.1如何写一个驱动模块?
模块初始化函数:int 函数名1(void)
模块清除函数:void 函数名2(void)
模块加载函数:module_init(函数名1)--->sudo insmod hello.ko-->调用函数1
模块退出函数:module_exit(函数名2)---->sudo rmmod hello.ko -->调用了函数2
MODULE_LICENSE("GPL")
2.2 如何编译驱动代码hello.c-->hello.ko
需要实现一个Makefile
ifeq ($(KERNELRELEASE),)
KERNELDIR ?= /lib