嵌入式驱动开发之框架及调试技巧累积

这篇具有很好参考价值的文章主要介绍了嵌入式驱动开发之框架及调试技巧累积。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

知识储备。

基本的框架

在linux系统中,App无法操作硬件的,不具备相应的权限。在mmu(内存管理单元)作了划分的,应用层只能操作属于它的mmu部分。操作硬件只能是通过驱动程序。应用程序与驱动程序之间有严格的界限。驱动程序在内核中。

app如何调用驱动机制

如App使用open函数打开设备时,会先设置某个寄存器,会触发一个异常swi指令(此时由用户态切换到内核态才有更高的权限),此时会有中断服务程序被调用。然后根据先前设置的寄存器判断是什么操作;然后去读写硬件。

字符设备驱动编写步骤

1. 实现入口函数 XXX_init()和卸载函数 XXX_exit()

2. 申请设备号 register_chrdev_region(与内核相关)

静态分配设备号:在事先知道设备主设备号的情况下通过参数函数指定第一个设备号而向系统申请分配一定数目的设备号。
动态分配:alloc_chrdev_region():通过参数仅设置第一个次设备号(通常为0,事先不会知道主设备号)和要分配的设备数目而系统动态分配所需的设备号

3. 注册字符设备驱动 cdev_alloc / cdev_init /cdev_add(与内核相关)

4. 利用udev/mdev机制创建设备文件(节点)class_create,device_create(与内核相关)

5. 硬件部分初始化

io资源映射 ioremao,内核提供gpio库函数(与硬件相关)
注册中断(与硬件相关)
初始化等待队列(与内核相关)
初始化定时器(与内核相关)

6. 构建file_operation结构(与内核相关)

7. 实现硬件操作方法 XXX_open,XXX_read,XXX_write…(与硬件相关)

通用GPIO驱动框架的问题及理解

setup_timer()函数

原型:#define setup_timer(timer, fn, data) \ __setup_timer((timer), (fn), (data), 0)
第一个参数文章来源地址https://www.toymoban.com/news/detail-741601.html

到了这里,关于嵌入式驱动开发之框架及调试技巧累积的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 驱动开发——嵌入式(驱动)软开基础(十)

    1. 64位的计算机有哪些优点? (1)可以进行更大范围的整数计算。 (2)可以支持更大的内存,虚拟内存空间大小一般为2^48(256TB)。64位的Linux一般使用48位表示虚拟内存空间地址,40位表示物理内存地址。 2. 中断分为哪两种? (1) 异步中断 :也叫 外部中断 ,由CPU外设产

    2024年02月06日
    浏览(40)
  • 驱动开发——嵌入式(驱动)软开基础(七)

    1 Linux驱动程序的功能是什么? (1)对设备初始化和释放。 (2)进行内核与硬件的数据交互。 (3)检测和处理设备出现的错误。 2. 内核程序中申请内存使用什么函数? 答案:kmalloc()、kzalloc()、vmalloc()。 解读: (1)void *kmalloc(size_t size, gfp_t flags); ①申请连续的物理内存,

    2024年02月06日
    浏览(83)
  • 嵌入式开发板qt gdb调试

    1) 启动 gdbserver ssh 或者 telnet 登陆扬创平板 192.168.0.253, 进入命令行执行如下: chmod 777 /home/HelloWorld (2) 打 开 QTcreator-Debug-StartDebugging-Attach to Running Debug Server 进行如下设置,设置监听端口10000. 点击上图中的按钮,由于按钮中的函数设置了断点,则跳到断点,界面如下

    2024年02月04日
    浏览(84)
  • 嵌入式内核及驱动开发高级

    仅devfs,导致开发不方便以及一些功能难以支持: 热插拔 不支持一些针对所有设备的统一操作(如电源管理) 不能自动mknod 用户查看不了设备信息 设备信息硬编码,导致驱动代码通用性差,即没有分离设备和驱动 uevent机制:sysfs + uevent + udevd(上层app) sysfs用途:(类似于

    2024年02月16日
    浏览(43)
  • 嵌入式LinuxLED驱动开发实验

    我们在裸机实验的时候,都是通过配置底层的寄存器来进行点亮LED灯的操作的。我们现在还没有学习到设备树的相关知识,所以,我们也是通过在字符设备驱动框架的基础上来配置底层寄存器来实现LED灯的点亮,但是,与之前不同的是,在Linux系统中会存在地址映射的方式,

    2024年02月15日
    浏览(37)
  • 【嵌入式Linux内核驱动】SPI子系统 | 硬件原理 | 应用编程 | 内核驱动 | 总体框架

    1.1 SPI通信协议 SPI(Serial Peripheral Interface)是由Motorola公司开发的一种通用数据总线 四根通信线:SCK(Serial Clock)、MOSI(Master Output Slave Input)、MISO(Master Input Slave Output)、SS(Slave Select) 同步,全双工 支持总线挂载多设备(一主多从) 1.2 硬件连接 多NSS独立片选方式 菊花

    2024年02月16日
    浏览(48)
  • 全志V3S嵌入式驱动开发(驱动开发准备)

    【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】         之前的文章都是教大家怎么搭建环境、看原理图、编译内核和根文件系统、做镜像,直到现在才进入驱动开发的主题。 毕竟整个专栏的目的,还是希望大家能够学会驱动外部硬件。

    2024年02月13日
    浏览(49)
  • 嵌入式:驱动开发 Day4

    驱动程序:myled.c 应用程序:test.c 头文件:head.h

    2024年02月09日
    浏览(34)
  • 嵌入式Linux驱动开发之点灯

      使用驱动开发的方式点亮一个LED灯。看看两者有啥区别不? 首先查看原理图,看看我们的板子上的LED等接在哪一个IO口上面。 好了,看原理图我们知道LED灯接在芯片的GPIO1的第三个引脚上面,也就是GPIO1_IO03。 先掌握三个名词 CCM: Clock Controller Module (时钟控制模块) IOMUXC : I

    2024年02月01日
    浏览(85)
  • 嵌入式Linux开发-USB驱动

    哥们马上就要被裁了,总得整理一下技术方面的积累,准备开始下一轮的面试和找工作之旅了。。。。 通用串行总线(USB)是主机和外围设备之间的一种连接。 从拓扑上来看,是一颗由几个点对点的连接构建而成的树。这些连接是连接设备和集线器(hub)的四线电缆(底线、电源线

    2024年02月20日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包