
Linux驱动
文章平均质量分 79
曼巴精神传承人
一个热爱自由的技术宅
展开
-
什么是I/O内存?
I/O内存也称为Memory-Mapped I/O(MMIO), 它是指一种编址方式,不同cpu平台使用的编址方式不同,一种是“IO内存”方式,也叫统一编址方式,是指内存和外设的地址是在同一个地址空间上的,比如我们常见的ARM、MIPS等平台;还有另外一种叫独立编址方式,是指内存的地址空间和外设的地址空间是分开的,比如x86平台。原创 2022-09-18 10:55:04 · 1471 阅读 · 0 评论 -
Linux驱动分析之MMC子系统框架
前言上一篇《一文搞懂SDIO》简单介绍了SDIO接口及相关的协议。接下来来看一下Linux提供的驱动框架。MMC子系统介绍Linux内核中,MMC不仅是一个驱动,而是一个子系统。内核把mmc, sd以及sdio三者的驱动代码整合在一起,俗称MMC子系统。源码位于drivers/mmc下。mmc目录下有core和host两个文件夹(以前的版本可能还有card目录,现在已经和core目录合并了)。MMC整体框架Host:针对不同主机端的SDHC、MMC控制器的驱动,这部分需要由驱动工程师来完成。原创 2022-05-01 10:38:14 · 2175 阅读 · 1 评论 -
Linux驱动分析之MMC Host驱动
前言前面聊了MMC子系统《Linux驱动分析之MMC子系统框架》,接下来我们拿个MMC Host驱动分析一下,来看看大致流程是怎样的。文章很长,代码很多,看个流程即可。Host驱动分析Linux版本:5.15芯片平台:RK3288部分源码路径:drivers/mmc/host/dw_mmc-rockchip.cdrivers/mmc/host/dw_mmc_pltfm.cdrivers/mmc/host/dw_mmc.c1.装载和卸载函数//驱动数据static const struc原创 2022-05-01 10:31:29 · 2617 阅读 · 0 评论 -
一文了解USB Type-C
前言现在的USB Type-C已经被广泛使用,移动设备基本都是使用Type-C。它主要是用于快充和作为音频接口。最近欧盟还要求电子设备统一使用Type-C接口,来防止浪费。接下来我们来简单了解这个接口。USB Type-C简介USB Type-C,又称USB-C,外观上最大特点在于其上下端完全一致,它不再区分USB正反面。USB-C只是一个接口,不一定支持USB 3.x或Power Delivery(有些手机的Type-C仍然使用USB 2.0)。接口定义母头公头通过上面的图可以看出P原创 2021-10-15 10:31:04 · 17022 阅读 · 0 评论 -
Linux驱动分析之Framebuffer驱动
点击上方 蓝字关注我们! 前言 前面我们了解了LCD的基本架构《Linux驱动分析之LCD驱动架构》,接下来我们拿个具体的实例来分析分析。这样可以了解其大概是如何使用和工作的。F...原创 2020-08-15 17:14:49 · 11793 阅读 · 1 评论 -
Linux驱动分析之LCD驱动架构
在Linux设备中,LCD显示采用了帧缓冲(framebuffer)技术,所以LCD驱动也叫Framebuffer驱动,所以L...原创 2020-08-06 08:15:00 · 12154 阅读 · 0 评论 -
Linux内核中断系统
点击上方蓝色字关注我们!前言 中断在驱动中是非常常用的,无论是外部的GPIO中断,还是SPI,I2C等发送或接收中断,都是必不可少的。所以今天来看看Linux中的中断处理。中断分类...原创 2020-07-20 13:18:15 · 11519 阅读 · 0 评论 -
Linux驱动分析之Uart驱动
前言 之前对Uart驱动的整体架构做了介绍,现在来分析具体的驱动程序。我们以NXP 的 IMX6来进行分析。Uart驱动分析内核:4.20芯片:NXP IMX6...原创 2020-06-29 21:42:10 · 13278 阅读 · 1 评论 -
Linux驱动分析之Uart驱动架构
Uart体系结构 UART设备驱动可以使用tty驱动的框架来实现,但是因为串口之间有共性,所以Linux在tty接口上封装了一层(serial core)。后面我...原创 2020-06-20 12:26:25 · 13045 阅读 · 0 评论 -
Linux驱动分析之SPI控制器
前言之前对SPI驱动的整体架构做了介绍,现在来分析具体的驱动程序。之前说过,SPI驱动分为设备驱动和控制器驱动。先来分析控制器驱动。我们以RockChip的控制器来作为分析。SP...原创 2020-04-23 21:28:20 · 12157 阅读 · 2 评论 -
Linux驱动分析之SPI驱动架构
SPI体系结构主要由三部分组成:(1) SPI核心(2) SPI控制器驱动(3) SPI设备驱动基本和I2C的架构差不多重要结构体内核版本:3.7.6spi_master//SPI控制器...原创 2020-04-14 19:46:12 · 11675 阅读 · 0 评论 -
Linux信号及工作原理
什么是信号 信号可以理解为软件中断,是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是差不多的。信号是异步的,一个进程不必通过任何...原创 2020-05-06 18:05:00 · 11805 阅读 · 0 评论 -
Linux驱动分析之SPI设备
前言前面我们对SPI控制器驱动进行了分析,接下来来分析SPI设备驱动。我们以DS1302驱动作为分析对象。DS1302是一款RTC芯片,估计很多人在学单片机时用到过。RTC芯片算是比较简...原创 2020-04-29 09:05:00 · 12286 阅读 · 0 评论 -
Linux驱动之I2C设备驱动
内核:4.20芯片:HYM8563 RTC下面的代码分析主要都在注释中,会按照驱动中函数的执行顺序分析。一、加载和卸载函数static const struct i2c_device_id hym8563_id[] = { { "hym8563", 0 }, {},};MODULE_DEVICE_TABLE(i2c, hym8563_id);static const str...原创 2020-05-01 21:05:01 · 22503 阅读 · 0 评论 -
嵌入式开发资料汇总
一、单片机51单片机普中开发板资料:https://pan.baidu.com/s/1eQgPuL0原创 2019-10-23 13:38:07 · 27660 阅读 · 0 评论 -
Linux驱动之I2C控制器驱动
平台: 三星2440内核版本:4.20分析将会按照驱动中函数的执行顺序。一、装载和卸载函数static const struct platform_device_id s3c24xx_driver_ids[] = { { .name = "s3c2410-i2c", .driver_data = 0, }, { .name = "s3c2440-i2c", .dri...原创 2019-10-09 19:52:36 · 25247 阅读 · 1 评论 -
Linux驱动之I2C驱动架构
一、Linux的I2C体系结构主要由三部分组成:(1) I2C核心提供I2C控制器和设备驱动的注册和注销方法,I2C通信方法,与适配器无关的代码以及探测设备等。(2) I2C控制器驱动(适配器)(3) I2C设备驱动二、重要的结构体i2c_adapter//i2c控制器(适配器)struct i2c_adapter { struct module *owner; uns...原创 2019-09-15 11:13:47 · 24011 阅读 · 0 评论 -
字符设备驱动基础知识
一、字符设备结构体(cdev)在Linux内核中, 使用cdev结构体来描述一个字符设备。struct cdev { struct kobject kobj; //内嵌的kobject对象 struct module *owner;//所属模块 const struct file_operations *ops; //文件操作结构体 struct list_head list; de...原创 2019-07-20 21:28:48 · 23932 阅读 · 0 评论 -
[DTS]设备树实践
以下内容以RK3288作为讲解kernel\arch\arm\boot\dts\rk3288.dts(1) 头文件#include <dt-bindings/gpio/gpio.h>#include <dt-bindings/interrupt-controller/irq.h>#include <dt-bindings/interrupt-controll...原创 2019-04-13 13:05:17 · 25208 阅读 · 0 评论 -
poll_wait新的理解
应用程序使用 select() 或 poll() 调用设备驱动程序的 poll() 函数,该函数把输入输出复用处理的等待队列追加到由内核管理的进程的 poll_table()上。此时,poll() 函数上传递的参数包括含有设备文件信息的 struct file 结构体的指针参数 struct file *filp ,以及追加到设备驱动上的 poll_table结构体指针参数 poll_tabl转载 2016-10-23 14:39:25 · 15290 阅读 · 0 评论 -
linux中的kill_async与fasync_helper函数使用
fasync是为了使驱动的读写和应用程序的读写分开,使得应用程序可以在驱动读写的时候去做别的事。应用程序通过fcntl给自己的SIGIO信号安装自己的响应函数,驱动通过kill_fasync(&async, SIGIO, POLL_IN); 发SIGIO信号给应用程序,应用程序就调用自己安装的响应函数去处理。fasync_helper作用就是初始化fasync,包括分配内存原创 2016-10-23 20:14:30 · 21070 阅读 · 3 评论 -
Linux原子操作及函数
所谓的原子操作,就是该操作绝不会在执行完毕前被任何其他任务或事件打断,也就是说,它的最小的执行单位,不能有比它更小的执行单元,因此这里的原子实际是使用了物理学里物质微粒的概念。原子操作需要硬件的支持,因此是架构相关的,其API和原子类型的定义都定义在内核源码树的include/sam/atomic.h文件中,它们都是使用汇编语言实现,因为c语言并不能实现这样的操作。原子操作转载 2016-10-24 12:08:52 · 20251 阅读 · 0 评论 -
wait_event_interruptible和wake_up_interruptible
wait_event_interruptible和wake_up_interruptible这两个是内核定义的宏原型:wait_event_interruptible(wq, condition)wake_up_interruptible(x)wq:等待队列,当后面的条件不成立则进程进入休眠condition:判断条件 ,0或非0值x: 等待队列,要唤醒的等原创 2016-10-22 20:03:38 · 15654 阅读 · 0 评论 -
linux输入子系统
一、input子系统介绍Linux系统提供了input子系统,按键、触摸屏、键盘、鼠标等输入都可以利用input接口函数来实现设备驱动。输入子系统由驱动层(Drivers),输入子系统核心层( Input Core )和事件处理层(Event Handler)三部份组成。一个输入事件,如鼠标移动,键 盘按键按下等都是通过 Driver -> InputCore -> Event...原创 2016-11-05 11:10:18 · 14791 阅读 · 0 评论 -
Linux字符设备驱动
一、函数解析1、int register_chrdev_region(dev_t first, unsigned int count, char *name)参数解析:first:是你要分配的起始设备编号.,first 的次编号部分常常是 0。使用MKDEV(major, 0) 来获取dev_t类型的设备编号count:是你请求的连续设备编号的总数 name:是应原创 2016-11-08 10:12:58 · 14519 阅读 · 0 评论 -
字符设备驱动--信号量
驱动程序:/*******************************************使用linux3.2.81内核********************************************/#include #include #include #include #include #include #include #include #inc原创 2017-03-28 13:00:42 · 20466 阅读 · 0 评论 -
字符设备驱动---Led
/*******************************************使用linux3.2.81内核********************************************/#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init原创 2017-03-22 09:03:01 · 20700 阅读 · 0 评论 -
字符设备驱动--interrupt
驱动文件/*******************************************使用linux3.2.81内核********************************************/#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/原创 2017-03-22 10:49:45 · 20683 阅读 · 0 评论 -
platform_device与platform_driver
一、驱动模型当驱动或设备注册到总线上后,有发现与之匹配的驱动或设备时回调probe函数.二、结构体介绍//平台设备struct platform_device{ const char * name; u32 id; struct device dev; u32 num_resources原创 2017-05-11 14:15:39 · 20337 阅读 · 0 评论 -
linux设备驱动那点事儿之SD卡驱动理论篇
一.SD/MMC卡介绍 1.1.什么是MMC卡 MMC:MMC就是MultiMediaCard的缩写,即多媒体卡。它是一种非易失性存储器件,体积小巧(24mm*32mm*1.4mm),容量大,耗电量低,传输速度快,广泛应用于消费类电子产品中。 1.2.什么是SD卡 SD:SD卡为Secure Digita转载 2017-05-23 08:54:33 · 20646 阅读 · 0 评论 -
Linux下移植LCD驱动
使用Linux3.2.81内核4.3寸LCD 修改arch/arm/mach-s3c2440/mach-smdk2440.cstaticstruct s3c2410fb_display smdk2440_lcd_cfg __initdata = { .lcdcon5 =S3C2410_LCDCON5_FRM565 |原创 2017-04-23 15:08:38 · 22576 阅读 · 0 评论 -
Linux下SD卡驱动移植
使用Linux3.2.81内核 1.arch/arm/mach-s3c2440/mach-smdk2440.c platform结构中增加&s3c_device_sdi语句。static structplatform_device*smdk2440_devices[] __initdata ={&s3c_device_usb,&s3c_d原创 2017-04-23 14:17:59 · 21169 阅读 · 0 评论 -
HWMON(ADC)驱动移植
使用Linux3.2.81内核 1.在arch/arm/mach-s3c2440/mach-smdk2440.c中添加 #include staticstruct platform_device *smdk2440_devices[] __initdata = {&s3c_device_ohci,&s3c_device_lcd,&s3c_devi原创 2017-04-23 17:54:50 · 20848 阅读 · 0 评论 -
Linux设备驱动基本概念
一、Linux 系统的设备文件分为三类:块设备文件、字符设备文件和网络设备文件。· 块设备文件通常指一些需要以块(如512 字节)的方式写入的设备,如IDE 硬盘、SCSI硬盘、光驱等。· 字符型设备文件通常指可以直接读写,没有缓冲区的设备,如并口、虚拟控制台等。· 网络设备文件通常是指网络设备访问的BSD socket接口,如网卡等。二、设备号设备号包含主设备号和原创 2017-03-21 14:35:54 · 21105 阅读 · 0 评论 -
linux设备驱动学习--proc文件系统
一、proc文件系统proc文件系统是一种虚拟文件系统,所以该目录下的文件不占用存储空间。可以通过它来了解系统信息最初开发 /proc 文件系统是为了提供有关系统中进程的信息。但是由于这个文件系统非常有用并且使用简单,因此内核中的很多元素也开始使用它来报告信息,或启用动态运行时配置。可以通过proc文件系统来调试内核模块。二、proc文件系统API1.创建proc入口文件s原创 2018-01-13 20:35:09 · 20457 阅读 · 0 评论 -
request_irq() 注册中断服务函数
函数原型:int request_irq(unsigned int irq, irq_handler_t handler, unsigned long irqflags, const char *devname, void *dev_id)参数:irq:申请的硬件中断号 handler:向系统注册的中断处理函数,当中断发生时会触发该函数. dev_id参数将被传递给它原创 2016-10-22 19:29:07 · 7691 阅读 · 0 评论