- 博客(21)
- 收藏
- 关注
原创 通讯协议总结(I2C、SPI、UART、MQTT、DDS)
I2C总线是一种串行数据总线,一根是双向的数据线SDA,一根是时钟线SCL.两条线可以挂多个设备,一般IIC设备里有个固化的地址,只有传输对应固化地址时才会响应。基本谁控制时钟线谁就是主设备。I2C优缺点:优点:硬件资源节约,协议设计精巧,易用,使用广泛易移植。缺点:传输速率较慢。
2025-03-13 15:07:49
1006
原创 Qt for Android(b站讯为QT教程)
QT 是一个非常优秀的跨平台工具。所以我们只需要掌握 QT 做界面的方法,我们就可以很方便的做 QT 的跨平台应用了。为什么要学习 QT_For_Android?1. 体验 QT 跨平台的优越性2. 非常适合我们非科班出身的开发人员来开发和调试 APP。
2025-03-11 15:37:19
890
原创 Linux驱动学习笔记之I2C通信(观b站讯为电子有感)
1.1.1 I2C通信的定义I2C 是很常用的一个串行通信接口,用于连接各种外设、传感器等。I2C 总线仅仅使用时钟线SCL(Serial Clock)、数据线SDA (Serial Data)这两根信号线就实现了设备之间的数据交互,极大地简化了对硬件资源和 PCB 板布线空间的占用。本文主要介绍中在 Linux 内核中如何使用 I2C 的驱动框架。1.1.2 I2C通信的特点I2C通信是一种同步、半双工的通信方式,支持总线挂载多设备(一主多从、多主多从)。
2025-03-06 14:01:19
941
原创 Linux驱动学习笔记之input子系统(b站讯为电子)
对于键盘,鼠标,触摸屏等输入设备而已,它们的驱动有着共性,所以可以抽出来形成一套框架,这就是输入子系统(以事件为基本单元,有着type,code,value三大属性)这些输入设备的节点在/dev/input下,命名为event*所以当我们编写输入设备的驱动时,可以定义struct input_dev*test_dev,然后填充它对应的事件属性(type,code,value),比如按键中断输入设备的type为按键,code为具体某个按键。
2025-03-01 19:22:24
826
原创 Linux驱动学习笔记之等待队列和工作队列(b站讯为电子)
1.2.2 等待队列项wait_queue_t等待队列头就是一个等待队列的头部, 每个访问设备的进程都是一个队列项, 当设备不可用的时候就要将这些进程对应的等待队列项添加到等待队列里面。使用宏定义并初始化一个等待队列项,宏的内容如下:
2025-02-25 19:19:01
849
原创 Linux驱动学习笔记之中断(b站讯为电子)
为保证系统实时性,中断服务程序必须足够简短,但实际应用中某些时候发生中断时必须处理大量的 事物,这时候如果都在中断服务程序中完成,则会严重降低中断的实时性,基于这个原因,linux把中断服务程序分为两部分,中断上文和中断下文。中断上文:完成尽可能少的比较急的任务,中断上文的特点就是相应速度快。中断下文:处理中断剩余的大量比较耗费时间的例子,而且可以被新的中断打断。举例:我现在正在厨房做饭,突然电话响了,然后我关火去接电话。
2025-02-24 10:56:17
1021
原创 Linux驱动学习笔记之ioctl接口(b站讯为linux驱动教学)
在内核 3.0 以前,ioctl 接口的名字叫 ioctl;内核 3.0 以后,ioctl 接口的名字叫 unlocked_ioctl。unlocked_ioctl 就是 ioctl 接口,但是功能和对应的系统调用均没有发生变化。之前我们使用read/write函数从应用层往内核读写数据,ioctl(Input/Output Control)是Unix/Linux系统中用于设备控制的接口,允许用户空间程序与内核空间设备驱动程序进行交互。它通过文件描述符操作,
2025-02-21 20:13:36
915
原创 Linux驱动学习笔记之pinctrl和gpio子系统(b站讯为linux驱动教学)
我们使用pinctrl和gpio子系统控制imx6ull蜂鸣器的开关,打开开发板的原理地板图,蜂鸣器使用的是SNVS_TEMPER1引脚,打开开发板手册发现这个引脚的复用模式MUX_MODE只有一个就是复用成GPIO5_IO01,即第五组的第一个管脚1、使用pinctrl子系统设置引脚的复用关系我们修改设备树文件 imx6ull-14x14-evk.dts,路径在源码目录 arch/arm/boot/dts/目录下,修改 test 节点。
2025-02-18 20:49:07
591
原创 Linux驱动学习笔记之设备树(b站讯为linux驱动教学)
设备树文件在内核源码路径下的/arch/arm/boot/dts,根据自己实际的开发板的型号选取对应的设备树文件,这里以讯为的topeet_emmc_4_3.dts为例,如图为对应的dts文件可以根据头文件的包含关系和父子节点关系,找到根节点所在的地方,这里的根节点在imx6ull-14x14-evk.dts里面2、添加设备树节点我们在根节点文件的如下图位置添加自定义的节点(1)如何查看是否添加成功。
2025-02-17 16:17:16
610
原创 Linux驱动学习笔记之平台总线模型platform
平台总线模型将驱动分为device.c和driver.c其中device.c用于存放设备的硬件资源的信息,当二者匹配的时候,会进入到driver.c里面的probe函数,进而进一步操作例如注册杂项设备或者是注册字符设备。利用platform总线就可以连接不同的设备和驱动,记住这个例子,你就明白了platform平台总线的作用a -- 红娘(总线)负责男方(设备)和女方(驱动)的撮合;b --
2025-02-12 19:37:25
775
原创 Linux驱动学习笔记之字符设备驱动
(1)杂项设备的驱动框架杂项设备主设备号为10,只需要设置次设备号.minor,不需要去人为分配设备号,而且杂项设备能够自动生成设备节点,可以在/dev/下看到(2)字符设备的驱动框架区别:字符设备需要分配设备号(推荐自动分配设备号使用函数alloc_chrdev_region);字符设备的注册函数和步骤不同(使用cdev_init初始化,再用cdev_add函数注册);此外字符设备还需要人为去创建设备节点(推荐自动创建,先创建一个类class,再在类下面创建一个设备device)
2025-02-11 23:06:39
977
原创 Linux驱动学习笔记之蜂鸣器(b站讯为电子)
使用杂项设备来完成一个蜂鸣器的应用,上层应用发送1来打开蜂鸣器,发送0来关闭蜂鸣器。开发板使用imx6ull。要控制蜂鸣器的逻辑操作,就涉及到了对寄存器的操作,Linux开发不同于单片机或者裸机开发不能直接对硬件寄存器进行操作,需要将物理地址映射为虚拟地址进行操作。
2025-02-07 11:22:58
156
原创 Linux驱动学习笔记之应用层和内核层数据传输(学习b站讯为电子驱动有感)
1、设备节点是连接上层应用和底层驱动的中间桥梁,如图所示,如果在应用层read、write或者open等系统调用的时候,会触发驱动里面的文件操作集file_operations结构体里面对应的成员函数。也就是说,linux应用层的函数API,比如read(),write()等的调用实质是调用Linux内核里面底层驱动的file_operations这个文件操作集结构体里面对应的函数。2、较为完整的杂项设备驱动代码file_operations我们需要编写应用app.c来进一步验证。
2025-02-06 14:42:18
283
原创 Linux驱动学习笔记之杂项设备(讯为电子驱动)
Linux三大设备驱动:(1)字符设备驱动IO的传输过程以字符为单位,并且没有缓存。比如I2C,SPI都是字符设备。(2)块设备驱动IO的传输过程以块为单位。比如跟存储相关的都属于块设备,例如tf卡。(3)网络设备驱动与前两个不一样,是以socket套接字来访问。杂项设备是字符设备中的一种,杂项设备可以自动生成设备节点。可以利用cat /proc/misc命令查看开发板的杂项设备。
2025-02-06 11:22:02
461
原创 I/O多路复用学习笔记(尚硅谷Linux应用开发)
定义:I/O多路复用是Linux中处理多个I/O操作的机制,使得单个线程或进程可以同时监视多个文件描述符,以处理多路I/O请求。避免创建多个线程和进程带来的资源浪费情况。总结:I/O多路复用就是节约资源,单个进程或者线程监控多个文件描述符。实现机制:select、poll和epoll(目前最新)
2025-01-19 17:06:49
211
原创 守护进程学习笔记(尚硅谷Linux应用篇)
守护进程是在操作系统后台运行的一种特殊类型的进程,它独立于前台用户界面,不与任何终端设备直接关联。守护进程通常在系统启动时启动,直到系统关闭时关闭,具有稳定性,脱离终端,在后台稳定运行,具有稳定性和安全性。比如服务端server就适合写成守护进程。守护进程的特点:运行在后台、脱离用户控制、稳定性、安全性。
2025-01-17 19:42:02
681
原创 使用socket实现进程通信,由输入参数觉得客户端还是服务端(依据尚硅谷linux应用ipc_使用套接字进程通信)
【代码】使用socket实现进程通信,由输入参数觉得客户端还是服务端(依据尚硅谷linux应用ipc_使用套接字进程通信)
2025-01-16 16:13:52
94
原创 学习讯为电子linux驱动时候加载模块遇到了问题
我的开发板uname -a显示的是4.1.15,misc.ko文件用modinfo 显示的是4.1.15,我在虚拟机上就是用4.1.15版本编译的,我的虚拟机本身的uname -a是4.15.0。相关图片和makefile文件如下图所示。同时我注意网上说的,我的开发板的/lib/modules/下面并不是4.1.15而是4.1.15加一些后缀,正如我前面所说的我的开发板uname-a 是4.1.15请问是不是这个开发板模块和开发板内核不匹配造成的问题,如果是的话我该如何修改?
2024-06-18 11:17:43
373
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人