Linux驱动开发
从基础学起,逐步掌握嵌入式Linux驱动开发知识。
我一个平民
学习,进步,生产,价值。
展开
-
Linux应用模拟输入事件
参考资料:doc/input/uinput.rst (Linux Kernel 5.x/Documentation/input/uinput.rst)drivers/input/misc/uinput.c (项目使用的是 Kernel 4.x )1 概念uinput 是一个内核模块,可以从用户空间模拟输入设备。通过写入 /dev/uinput(/dev/input/uinput)设备,进程可以创建具有特定功能的虚拟输入设备。一旦创建了这个虚拟设备,进程就可以通过它发送事件,这些事件将被传递给用户空原创 2021-06-21 10:21:56 · 548 阅读 · 0 评论 -
环形缓存区
应用场景主要应用于嵌入式平台,uart收发,RS232,RS485等,因为需要时间去处理数据,为防止数据丢失,把数据存储在缓存区里。环形缓存区代码根据韦东山老师的代码更改。ring_buffer.c#include "ring_buffer.h"/** * 初始化新缓冲区 * @handle : ring_buffer句柄 * @addr : 数组地址 * @size : 数组大小 */void ring_buffer_init(ring_buffer *handle, Eleme原创 2021-06-11 14:46:16 · 190 阅读 · 1 评论 -
display_timing 转 drm_display_mode
//drivers/gpu/drm/panel/panel-simple.cstatic unsigned int panel_simple_get_timings_modes(struct panel_simple *panel) videomode_from_timing(dt, &vm); mode = drm_mode_create(drm); drm_display_mode_from_videomode(&vm, mode); dmode->hdispla原创 2021-06-01 14:33:42 · 1175 阅读 · 0 评论 -
Linux内核工作队列使用
VERSION:5.4.24参考:include/linux/workqueue.h实际需要定时器、下半部 tasklet,它们都是在中断上下文中执行,它们无法休眠。当要处理更复杂的事情时,往往更耗时。这些更耗时的工作放在定时器或是下半部中,会使得系统很卡;并且循环等待某件事情完成,这样太浪费 CPU 资源了。如果使用线程来处理这些耗时的工作,那就可以解决系统卡顿的问题:因为线程可以休眠。在内核中,我们并不需要自己去创建线程,可以使用“工作队列”(workqueue)。内核初始化工作队列时,就为原创 2021-06-01 11:24:55 · 500 阅读 · 0 评论 -
Linux内核定时器使用
Linux 内核定时器使用VERSION:5.4.24参考:include/linux/timer.hkernel/time/timer.cinclude/linux/jiffies.h重要的结构体,函数定时器结构体struct timer_list { /* * All fields that change during normal runtime grouped to the * same cacheline */ struct hlist_node entry;原创 2021-05-31 14:04:33 · 452 阅读 · 0 评论 -
Linux系统SPI驱动总结
平台:rk3288系统:Android7.1 kernel4.4.143linuxspi驱动分为三部分:SPI外设驱动:我们写。oled,spiflash等 linuxspi核心层:drivers/spi/spi.c 芯片的SPI控制器驱动:drivers/spi/spi-rockchip.cLinux SPI 框架理解1、首先看dts:arch/arm/boot/dts/rk3288.dtsispi0: spi@ff110000 { compatible =...原创 2020-05-09 14:30:13 · 2564 阅读 · 0 评论