自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 Linux驱动开发之中断处理

在驱动程序中我们不乏使用中断机制,中断属于异常的一种,一般用于打断当前线程,进而去执行比较紧急的事件,当紧急事件处理完成再回来继续执行前面线程工作的一种机制。中断的应用在驱动程序中比较常见,比如按键驱动、触摸屏驱动都用到中断机制。中断还有底半部机制,用来处理耗时较长的任务,可以提高驱动执行效率。中断的底半部有多种实现方式比如tasklet机制与工作队列机制(work queue)以及中断线程化。linux内核中不支持中断嵌套操作。

2025-03-14 21:35:33 781

原创 基于IMX6ULL的安防监控项目

该项目主要应用的技术是boa服务器的移植及使用,mjpg-streamer库的移植,该库是控制摄像头数据采集的神器,在需要使用使用摄像头的地方可以将部分代码移植过来使用。使用到了多线程技术,还有进程间通信的消息队列,还有进程的同步与互斥机制互斥锁和条件变量的使用。在底层需要LED灯与蜂鸣器的驱动代码,还有ov5640摄像头驱动的移植。当然,在这个项目的基础上可以增加其他功能,比如温湿度,烟雾报警、光传感器等等。就是在该基础上增加传感器的驱动以及处理逻辑,问题不大。

2025-03-12 19:18:35 902

原创 Linux设备驱动开发之摄像头驱动移植(OV5640)

这里用的是NXP提供的原厂linux内核源码,目的是学习ov5640相关摄像头驱动的移植。

2025-03-05 23:11:34 952

原创 Linux驱动开发之串口驱动移植

从上图可以看到RS232的串口接的是UART3,接下来我们需要使能UART3的收发功能。一般串口的驱动程序在内核中都有包含,我们配置使能适配即可。

2025-03-03 21:47:14 368

原创 Linux驱动开发之触摸屏驱动(GT911)

devm_request_threaded_irq是Linux内核的一个函数,用于请求并注册线程化的中断处理。它接受中断号、主处理函数、线程处理函数等参数,中断处理分为快速处理和线程化执行,便于管理复杂操作。该函数利用devm机制自动管理资源,防止泄漏。每个参数的含义:struct device *dev: 指向表示设备的 struct device 结构体的指针。unsigned int irq: 中断号,表示要请求和注册的中断线路。

2025-02-26 22:23:23 1069

原创 Linux设备驱动开发之input子系统(按键)

由上图可知,当按下按键管脚电平为低电平。底板原理图参考之前的按键开发图片,设备树也没有改变。

2025-02-23 12:19:45 526

原创 Linux驱动开发之SPI设备驱动开发(icm20608)

从底板原理图可以看出icm20608挂在SPI3总线上,片选管脚默认接低电平。

2025-02-19 16:40:08 626

原创 Linux驱动开发之I2C设备驱动(ap3216c)

由上面原理图可知,AP3216C设备挂在I2C1总线上:在内核源码目录下搜索:在I2C1控制器节点添加ap3216c设备节点: 根据ap3216c芯片手册编写驱动代码,芯片手册的主要数据如下: 应用层测试代码参考 Makefile文件参考驱动代码验证将make生成的ap3216c.ko文件与test文件拷贝到开发板,进行功能验证:

2025-02-17 22:52:31 641

原创 Linux驱动之LCD屏幕驱动移植及应用

这里以IMX6ULL开发板为例,NXP已经提供完整的LCD驱动,我们需要修改设备树,使该驱动正常工作。

2025-02-14 18:08:07 1139

原创 Linux驱动开发之温度传感器(ds18b20)

选择一个没有被使用的IO口来驱动ds18b20,这里选择GPIO_2为例子: 在linux源码目录下查找IO复用配置: 在数据手册查找gpio电器属性配置寄存器,驱动ds18b20一般可以配置成上拉电阻开漏输出特性:将上面配置00111 1000 0110 1001转换成16进制:0X7869。添加设备树节点如下: make dtbs生成设备树文件,拷贝到开发板替换原来设备树文件,重启开发板。 先编写platform平台总线驱动框架,保证device与driver

2025-02-14 07:00:00 788

原创 Linux驱动开发之温湿度传感器(DHT11)

由数据手册可以看出,电器属性可以配置成01101000,转换成16进制为:0X68。

2025-02-11 22:50:57 337

原创 Linux驱动开发之按键驱动

拷贝到开发板进行验证,加载驱动,执行key_test后,按下按键打印key_down;松开按键打印key_up。

2025-02-11 07:00:00 427

原创 Linux驱动开发延时操作与定时器

所谓忙等待类延时就是白白消耗CPU的时间来达到延时的目的。如果没有特殊理由(比如在中断上下文或获得自旋锁的情况下),不推荐使用这些函数延迟较长时间。ndelay、udelay和mdelay分别表示纳秒级延时、微秒级延时和毫秒级延时。查看代码,在ARM体系结构下,ndelay与mdelay都是基于udelay的。

2025-02-09 17:35:54 1065

原创 Linux驱动开发IO操作之阻塞与非阻塞

当应用程序通过read读取或write写入设备文件的某些数据时,就会调用驱动程序的read或者write函数,此时可能会遇到没有数据可读或者写满的情况,这时如果驱动程序会进入睡眠,当有数据可读或者可写的时候唤醒再返回,我们称这种操作为阻塞IO。

2025-02-08 19:56:48 1055

原创 Linux设备驱动开发之LED

path:带有全路径的节点名,返回值:找到的节点,如果为 NULL 表示查找失败。

2025-02-06 23:50:01 1174

原创 Linux字符设备驱动框架

是一个用于创建一个新的设备类的函数。驱动的入口函数一般是由module_init()来指定,驱动的出口函数一般由module_exit()函数来指定。当加载驱动程序时,驱动入口函数的代码开始执行,当卸载该驱动程序时,驱动出口函数得到执行。在驱动入口函数中一般是驱动初始化代码,比如申请设备号,创建字符设备,自动创建设备节点等。传入cdev 结构的指针,起始设备编号,以及设备编号范围,成功返回0,失败返回负数。如果请求的设备编号范围太大,可能会导致溢出到下一个主设备号,但只要编号范围可用,操作仍然会成功‌。

2025-02-06 17:54:09 1107

基于IMX6ULL的安防监控项目

基于IMX6ULL的安防监控项目

2025-03-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除