| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 嵌入式知识框架之五 - 编写驱动程序的框架 -> 正文阅读 |
|
[嵌入式]嵌入式知识框架之五 - 编写驱动程序的框架 |
1.什么是驱动程序?驱动程序是对硬件的具体操作,比如让LED的亮灭,在LCD上显示一个像素等,设计到对GPIO或者硬件的设置。 2.驱动程序如何加载进内核?linux设备驱动是以内核模块的形式出现,Linux系统整体架构庞大,组价非常多,但是需要什么功能就重新编译内核,费时费力。linux提供一种模块机制,1.模块本身可以不被编译进入内核,控制内核映像的大小;2.一旦模块加载,就和编译进内核是一样的。 linux提供了模块程序结构
?3.驱动如何编写框架+成员函数? 4. 框架是什么?
?Linux中文件操作的系统调用,包括创建、打开、读写和关闭文闭等操作
C库同样有以上操作,自行查看,推荐使用C库,C库最后也是调用系统调用,使用C库可以使程序与系统无关,利于移植程序。 ?应用程序,VFS,设备驱动关系 按键驱动的例子: 1.注册模块:
?当编译好驱动文件.ko文件时,使用insmod命令就会调用module_init()函数,使用rmmod会调用module_exit()函数,module_license是必须的内容。其余的信息时可选项。 2.init模块的sixth_drv_init是一个函数的名,或者说函数符号。来看这个函数的内容有什么:
最基础的功能有 带双引号是名称,无关紧要,自己起,来看取址符号后面的内容, 3.sencod_drv_fops,这里是一个结构体的名字:
这个结构体里里面东西就是驱动的真正内容。open通常是对引脚进行配置,或者设置中断,在终中断里面做引脚的设置工作;read,通常是读取某个DATA寄存器的值,返回给用户程序;write通常是给data寄存器里面写一个值。 4.中断函数如何使用:
1.参数1是将哪个引脚设置为中断模式 总结下框架包括:注册模块,初始化模块,分配file_operation结构体并写成员函数(驱动的主要内容),卸载模块 5.把自己写的驱动融合进现有的驱动框架?输入子系统框架: 比如scanf();tty1;而不是打开一个你的/dev/first_dev这样的操作。 核心层在drives/input.c
输入子系统分为两层,最上层是核心层,里面同样是注册函数等,注册的file_operation结构体中的成员函数只有open函数,非常简单,但open函数只是一个中转,open函数中,会根据设备节点的传进来的次设备号,在一个数组中,找到一个input_handler结构体,然后调用其中的open函数,并且把这个文件的fop指向input_handler里面的fop,以后要读或者写,都是调用这个input_handler里面的write/read函数。那么这个数组是如何被构建的?都是一些纯软件的input_handler,通过调用上层input.c中的input_register_handler来组成的这个表。纯软件的肯定不够,还需要硬件的部分才能控制硬件,硬件部分同样有一个input_dev结构体,会向上注册到到input_dev_list链表中,每次调用注册函数,会同时调用list_for_each_entry()函数下的input_attach_handler()函数,该函数通过他自己的input_match_device()函数来匹配软硬的ID,如果匹配成功,将会建立“连接”
所以在往后写驱动程序的时候只需要分配一个input_dev结构体(不同的设备结构体不同),然后注册到对应的链表中去。比如:fb_info结构体,注册register_frambuffer,不需要再进行创建设备节点等操作。 总结:类似上面的框架在linux中有很多,一般步骤都是:1.分配结构体,2.设置;3.注册;4.硬件操作相关。 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/27 10:04:51- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |