草庐IT

【IMX6ULL驱动开发学习】04.应用程序和驱动程序数据传输和交互的4种方式:非阻塞、阻塞、POLL、异步通知

目录一、数据传输1.1APP和驱动 1.2驱动和硬件二、APP使用驱动的4种方式2.1非阻塞(查询)2.2阻塞(休眠+唤醒)2.3POLL(休眠+唤醒+超时时间)2.3.1 POLL机制流程2.3.2 POLL执行流程2.3.3 POLL应用和驱动编程 2.4异步通知2.4.1异步通知流程2.4.1异步通知应用和驱动编程一、数据传输1.1APP和驱动 APP和驱动之间的数据访问是不能通过直接访问对方的内存地址来操作的,这里涉及Linux系统中的MMU(内存管理单元)。在驱动程序中通过这两个函数来获得APP和传给APP数据:copy_to_usercopy_from_user简单来讲,应用程序与

【IMX6ULL驱动开发学习】06.DHT11温湿度传感器驱动程序编写与测试

目录一、DHT11简介1.1DHT11模块硬件设计1.2DHT11模块软件设计1.3DHT11通讯协议1.4 DHT11数据格式二、相关代码2.1驱动代码2.2测试代码2.3上板子测试一、DHT11简介DHT11是一款可测量温度和湿度的传感器。比如市面上一些空气加湿器,会测量空气中湿度,再根据测量结果决定是否继续加湿。DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,具有超小体积、极低功耗的特点,使用单根总线与主机进行双向的串行数据传输。DHT11测量温度的精度为±2℃,检测范围为-20℃-60℃。湿度的精度为±5%RH,检测范围为5%RH-95%RH,常用于对精度和实

【IMX6ULL驱动开发学习】07.驱动程序分离的思想之平台总线设备驱动模型和设备树

目录一、驱动程序分离的思想二、设备树2.1使用设备树三、平台总线设备驱动模板一、驱动程序分离的思想【IMX6ULL驱动开发学习】05.字符设备驱动开发模板(包括读写函数、poll机制、异步通知、定时器、中断、自动创建设备节点和环形缓冲区)_阿龙还在写代码的博客-CSDN博客之前编写驱动程序的代码存在不少弊端:移植性差,驱动程序移植到别的板子上时,开发者需要修改引脚。,并且还要重新编译驱动程序或内核。为提高移植和开发效率,驱动程序分离编程的思想尤为重要。首先我们要知道: 内核里有个结构体platform_bus_type(虚拟的总线),总线上抽象出两个链表:设备链表和驱动链表。我们在写驱动程序时

【IMX6ULL驱动开发学习】12.Linux驱动之设备树

承接上一篇博客【IMX6ULL驱动开发学习】11.驱动设计之面向对象_分层思想(学习设备树过渡部分)代码获取:https://gitee.com/chenshao777/imx6-ull_-drivers我后面将三个层合并了(实际上只有前两层),合并成一个dev_drv.c了,暂时没有加GPIO操作,只是个框架合并前的代码在11.button_drv_chip_device-tree文件夹中合并后的代码在12.led_button_drv_tree文件夹中,文章最后把代码贴出来打算在第13次代码中加入GPIO子系统的代码,并且根据Pinctrl子系统编写设备树,使得外设控制更简单,敬请期待哦!

ARM裸机篇(一)——i.MX6ULL介绍

linux系列目录:linux基础篇(一)——GCC和Makefile编译过程linux基础篇(二)——静态和动态链接ARM裸机篇(一)——i.MX6ULL介绍ARM裸机篇(二)——i.MX6ULL启动过程ARM裸机篇(三)——i.MX6ULL第一个裸机程序ARM裸机篇(四)——重定位和地址无关码ARM裸机篇(五)——异常和中断linux系统移植篇(一)——linux系统组成linux系统移植篇(二)——Uboot使用介绍linux系统移植篇(三)——Linux内核使用介绍linux系统移植篇(四)——根文件系统使用介绍linux驱动开发篇(一)——Linux内核模块介绍linux驱动开发篇(

【IMX6ULL驱动开发学习】21.Linux驱动之PWM子系统(以SG90舵机为例)

1.设备树部分首先在imx6ull.dtsi文件中已经帮我们定义好了一些pwm的设备树节点,这里以pwm2为例pwm2:pwm@02084000{ compatible="fsl,imx6ul-pwm","fsl,imx27-pwm"; reg=0x020840000x4000>; interrupts=GIC_SPI84IRQ_TYPE_LEVEL_HIGH>; clocks=&clksIMX6UL_CLK_DUMMY>, &clksIMX6UL_CLK_DUMMY>; clock-names="ipg","per"; #pwm-cells=2>;};我们要在设备树(.dts)文件中引用和

iMX6ULL应用移植 | 移植 infoNES 模拟器(重玩经典NES游戏)

没玩过NES游戏的童年,可能不是80后的童年。我们小时候是从玩FC开始接触游戏机的,那时真的是红极一时啊,我上初中时还省吃俭用买了一台小霸王,暑假里把电视机都给打爆了!那时任天堂单是FC机的主机的发售收入就超过全美的电视台的收入的总和,在人们的心目中扎下了任天堂的这个招牌。前言1983年7月15日,由日本任天堂株式会社(原本是生产日式扑克即“花札”)的宫本茂先生领导开发的一种第三代家用电子游戏机:FC,全称:FamilyComputer,也称作:Famicom;在欧美发售时则被称为nes,全称:NintendoEntertainmentSystem;在中国大陆、台湾和香港等地,因其外壳为红白两

若依微服务整合activiti7.1.0.M6

若依微服务3.6.3版本整合activiti7(7.1.0.M6)目前有两种办法集成activiti7放弃activiti7新版本封装的API,使用老版本的API,这种方式只需要直接集成即可,在7.1.0.M6版本中甚至不需要去除security的依赖。不多介绍,需要的可以私聊找我。需要使用新版本的API,那就需要集成security,需要写一点代码实现security的集成。以下详细介绍这一种方式。步骤1在主项目的pom中添加如下代码,其中lombok和activiti-image-generator可以不加,一定要加spring-boot-starter-security,因为不知道为什么

imx6ull开发板环境配置 - libusb、libudev、eudev交叉编译

目录零、前言一、libusb交叉编译1.0前言1.1交叉编译二、usbutils交叉编译2.0前言2.1交叉编译三、libudev交叉编译3.0前言3.1交叉编译3.2错误处理-没找到usbutils3.3错误处理-没找到pci.ids (pci.idsnotfound)3.3.0前言3.3.1查找pci.ids3.3.2继续编译3.4错误处理-没找到gperf (gperfnotfound) 3.5编译并安装四、eudev交叉编译4.0前言4.1交叉编译五、测试代码5.1usb测试代码5.2编译脚本Makefile5.3运行结果零、前言背景:由于正点原子imx6ull需要使用到usblib进

【IMX6ULL驱动开发学习】22.IMX6ULL开发板读取ADC(以MQ-135为例)

IMX6ULL一共有两个ADC,每个ADC都有八个通道,但他们共用一个ADC控制器1.设备树在imx6ull.dtsi文件中已经帮我们定义好了adc1的节点部分信息adc1:adc@02198000{ compatible="fsl,imx6ul-adc","fsl,vf610-adc"; reg=0x021980000x4000>; interrupts=GIC_SPI100IRQ_TYPE_LEVEL_HIGH>; clocks=&clksIMX6UL_CLK_ADC1>; num-channels=2>; clock-names="adc"; status="disabled";};注意