自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 资源 (8)
  • 收藏
  • 关注

原创 如何定义中断的设备树结点?

怎样在设备树中添加中断信息的描述,为什么采用这种结构?

2023-01-29 21:51:11 262

原创 LINUX应用和驱动交互的四种方式

驱动和应用的同步模式简介

2023-01-28 21:12:52 935

原创 音频设备树结点分析

音频设备设备树结点解析

2023-01-15 21:44:24 352

原创 linux应用访问硬件全流程

(2)根据主设备号,找到要使用的驱动函数,也就是要使用哪一个file_operation结构体。对于字符设备,所有驱动函数都放在一个成员为file_operation结构体的数组中,暂且称它为char_devs。主设备号,就是驱动在这个数组中的下标。驱动在访问硬件以前,需要先映射寄存器地址,将寄存器地址和虚拟地址绑定在一起,驱动通过向虚拟地址写入数据来访问硬件。(1)判定打开文件的性质,比如打开的文件是否是驱动程序。(3)根据寄存器R0的值判断系统要使用file_operation中的哪个函数。

2022-11-27 10:01:41 473

原创 使用内核线程驱动SR501模块

内核线程驱动框架

2022-07-03 17:56:38 104

原创 红外监测模块Sr501驱动调试笔记(三)

在前两章中实现了模块的驱动框架,实现了轮询监测模块的输出信号。实际应用中,需要同时执行多个任务,不可能让一个线程持续地占用CPU。这就需要使用中断模式,在没有有效信号时,让线程进入休眠,从而节省CPU。下面就在前两节的基础上,添加中断的框架。......

2022-06-19 17:31:59 352

原创 SR501调试笔记(二)

红外检测模块的LINUX驱动

2022-06-11 20:15:33 180

原创 SR501驱动调试笔记(一)

SR501的设备节点编写及调试

2022-06-05 16:47:15 332

原创 字符设备驱动出入口函数简析

linux的驱动ch/* Each module must use one module_init(). */#define module_init(initfn) \ static inline initcall_t __inittest(void) \ { return initfn; } \ int init_module(void) __attribute__((alias(#initfn))); /* This is only required if y

2022-04-14 13:34:05 243

原创 linux应用怎样向字符设备传输数据?

linux应用开发同单片机开发最大的不同是程序的分层机制,也就是说应用程序是不能直接操作硬件的。应用程序发出的数据需要经过驱动的处理才能再硬件上有所输出,本文结合应用层和驱动层的调用来解析数据的传输过程。以OPEN函数为例,应用层调用open(“/dev/100ask_led0”, O_RDWR),此时系统会触发SWI中断。系统会根据文件的属性来判断需要调用哪种类型的中断。如果是字符设备驱动,系统会根据主设备号调用对应的驱动程序。应用的数据不能直接传入驱动程序中,驱动程序需要使用copu_to_

2022-04-13 20:46:59 407

原创 那什么解析你?设备树节点中断信息

上一期我们解析了如何在设备树中定义一个使用中断的设备树节点。这一期我们以按键为例,解析一下如何提取这个节点中的中断信息。在设备树中,按键节点的定义如下: gpio_keys_100ask { compatible = "100ask,gpio_key"; interrupt-parent = <&gpio5>; interrupts = <1 IRQ_TYPE_EDGE_BOTH>; };1.提取节点的中断信息

2022-03-21 14:55:27 467

原创 拿什么定义你?设备树中断节点

一个硬件中断产生以后,会经过GPIOx,SOC,GPC,GIC四层上报到CPU。下面对在设备树中的每一层级进行解析。下面的所有定义都在.dtsi文件中定义intc描述的是中断总开关ARM系统的中断控制器(GIC)用于管理单核或多核系统中的中断的硬件资源。这个单元用如下的代码来描述,intc下的中断需要用三个参数来定义(#interrupt-cells = <3>;)intc: interrupt-controller@00a01000 { compatible = "arm,

2022-03-15 16:46:38 964

原创 如何在设备树中定义一个GPIO?

像单片机一样,linux中也需要定义引脚的功能。就像硬件有IOMUX一样,软件也需要有个模块去快速的定义引脚功能。

2022-03-11 15:37:51 3753

原创 设备树趣味演义

设备树的作用其实就是硬件资源的配置文件,Bootloader会将这些配置传递给内核,内核识别配置后,将配置展开为Linux内核中的platform_device、i2c_client、spi_device等设备,而这些设备用到的内存、IRQ等资源,也被传递给了内核,内核会将这些资源绑定给展开的相应的设备。设备树中的每个节点都会在“/sys/firmware/devicetree/base”文件夹下生成一个文件夹,每个节点的属性都会生成一个对应的属性文件。这些文件夹对应内核中的device_node.

2022-03-07 12:52:04 513

原创 platform框架演义

platform是为了分离操作和资源而设置的机制。有platform_bustype统一管理。结构如下图所示:

2022-03-04 14:32:19 446

原创 QT5制作定制进度条(二)

现在开始使用这些资源制作自己的进度条。达到下图的效果首先,需要设置进度条的背景图片,这个工作用QPalette类来实现。QPalette palette =this->palette();pix.load(bPath);//将控件设置为和图片一样的形状resize(pix.size());setMask(pix.mask());palette.setBrush(QPalette::Background, QBrush(pix));setPalette(palette);

2022-03-01 16:45:03 1728

原创 QT5制作定制进度条(一)

QT5虽然提供了进度条控件,但是背景和进度条的图片都没有替换的接口,今天介绍一种通过重载paintEvent函数来实现进度条的方法。第一步是要准备资源,所谓的资源就是进度条图片,及其背景图片。添加步骤如下:1. 添加.qrc文件,用来存放图片2.给.qrc文件添加前缀,程序中使用前缀来调用文件存放的图片第三步,添加图片文件添加完成以后,就可以在文件下看到图片资源第四步,在应用中使用palette.setBrush(QPalette::Backg...

2022-02-28 13:11:19 490

原创 struct和typedef struct谁是真正的缔造者

大家好,请看下面一段代码typedef struct DispOpr { char *name; int (*DeviceInit)(void); int (*DeviceExit)(void); int (*GetBuffer)(PDispBuff ptDispBuff); int (*FlushRegion)(PRegion ptRegion, PDispBuff ptDispBuff); struct DispOpr *ptNext;}DispOpr, *PDispOpr;请

2022-02-27 16:21:33 54

原创 量产工具液晶屏部分调试记录

今天调试韦东山老师量产工具项目的显示部分是遇到了奇怪的问题,明明输入了停止LVGL界面系统的界面也执行了测试程序,为什么界面毫无反应?看不到视频中的‘A’字符呢?检查了代码也没有发现逻辑错误啊?一开始怀疑是不是液晶屏的设备节点开启错误,就使用 fd_fb = open("/dev/fb0", O_RDWR); if (fd_fb < 0) { printf("can't open /dev/fb0\n"); return -1; } if (ioctl(fd

2022-02-26 19:47:12 1926

原创 趣味解析linux字符设备注册

大家好,我是闪电狐。关于LINUX字符设置驱动的注册有很多解析,今天做一个生活化的解析来帮助大家的理解。linux的驱动设备框架就好像我们的公安局,而每个设备驱动就好像是我们每一个公民,那我们到年龄了想要去领身份证需要提供什么信息呢?首先最重要的当然是我们的姓名了。而注册驱动时是调用register_chrdev,其中的*name参数就是我们设备的姓名了。其次我们是不是要提供一下出生地啊,姓名一类的信息来方便发证机关定位我们这个人呢?这个时候做为设备驱动需要提供的就是file_operati

2022-02-26 14:35:52 237

原创 makefile.build解析

顶层目录的makefile的关键编译操作都是在makefile.build中定义的。//把“__build”设置为假想目标PHONY := __build__build://清零obj-y,subdir-y ,EXTRA_CFLAGS变量obj-y:=subdir-y :=EXTRA_CFLAGS :=//包含Makefile,提取Makefile中的变量include Makefile# obj-y := a.o b.o c/ d/# $(filter %.

2022-02-25 16:23:03 1397

原创 通用makefile之顶层makefile解析

最近在学习韦东山老师的makefile,感觉只看视频总是看了前面忘了后面,所以决定将理解过程记录下来,在巩固自己所学基础上对大家有所帮助。

2022-02-23 13:50:48 1064

原创 __define_initcall解析

单片机程序很难做到驱动和应用分层,在cola这种体系中,利用__define_initcall宏定义初步实现了这一目的,对这个宏定义的理解的难点总结如下:#define __define_initcall(fn, id) \ static const initcall_t __initcall_##fn##id __used \ __attribute__((__section__("initcall" #id "init"))) = fn;1.__attribute__ 机制...

2022-02-22 10:45:28 1006

红外检测模块SR501在IMX6ULL开发板的驱动,测试和设备树代码,亲测有效

使用唤醒休眠机制,驱动SR501模块,如果是百问网IMX6ULL开发板,设备树可直接替换使用

2022-06-19

QT5定制化进度条,进度条类已封装

在Qt Creator 4.5.0上运行,使用Desktop_Qt_5_9_4_MinGW_32bit编译,直接调用ProgressBar类即可使用,欢迎指正

2022-03-01

u-blox8-M8_ReceiverDescrProtSpec_(UBX-13003221)_Public

ublox8M8的通信协议

2016-06-03

neo-m8硬件设计手册

neo-m8原厂硬件设计手册,集合gps机北斗定位

2016-06-02

ublox8_m8通信协议

ublox8_m8通信协议

2016-05-31

u-blox通信协议

u-blox通信协议

2016-05-31

液晶屏ILI9163驱动

液晶屏ILI9163驱动,stm32驱动,标志SPI口,有画点,线,图画函数

2016-05-25

adxl345三轴驱动代码

三轴芯片的驱动代码,附带计步算法,经过实际应用测试

2015-04-24

空空如也

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

TA关注的人

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