Linux驱动
文章平均质量分 90
mfence
。
展开
-
Linux Socket CAN——驱动开发(转)
Linux Socket CAN驱动开发一 CAN总线协议CAN是Controller Area Network(控制器局域网)的缩写。CAN通信协议在1986年由德国电气商博世公司所开发,主要面向汽车的通信系统。现已是ISO国际标准化的串行通信协议。根据不同的距离、不同的网络,可配置不同的速度,最高速度为1MBit/s。CAN被细分为三个层次:(1)CAN对象层(the object layer);(2)CAN传输层(the transfer layer);(3)CAN物理层(转载 2021-01-27 14:09:57 · 931 阅读 · 0 评论 -
socket can 编程
Socket can文档原名称:can.txt,位于 linux-3.2.0-m3352/Documentation/networking/can.txt。CAN 控制器局域网络协议族之 Readme 文件(aka Socket CAN)。另外在该文档的后边附加一个CAN收发测试程序,用于与下位机通信。目录1 概述 / 什么是 Socket CAN?2 目的 / 为什么要使用 socket API?3 socket can 概念3.1 接收列表3.2 数据发送的本地回环模式(loopback转载 2021-01-27 14:03:01 · 8497 阅读 · 0 评论 -
CAN总线详解(转)
1、简介CAN是控制器局域网络(Controller Area Network, CAN)的简称,是一种能够实现分布式实时控制的串行通信网络。优点:传输速度最高到1Mbps,通信距离最远到10km,无损位仲裁机制,多主结构。近些年来,CAN控制器价格越来越低。Ø 低成本:ECUs通过单个CAN接口进行通信,布线成本低。Ø 高集成:CAN总线系统允许在所有ECUs上进行集中错误诊断和配置。Ø 可靠性:该系统对子系统的故障和电磁干扰具有很强的鲁棒性,是汽车控制系统的理想选择。Ø 高效转载 2021-01-26 09:42:07 · 2059 阅读 · 0 评论 -
DMA概述
在开始分析代码之前,先简要介绍一下DMA的基础知识。 什么是DMADMA,Direct Memory Access,直接内存访问。既然叫 直接内存访问,那么相对应地,应该就有 “间接的内存访问”。间接的内存访问,我的理解是,就是指最常见的,我们利用CPU的指令,去从一个内存地址中读出数据,然后写到另外一个内存地址中,完成对应的赋值操作。此过程,完全都是CPU去操作的,如果是单...转载 2020-04-09 19:52:52 · 3849 阅读 · 1 评论 -
RK3399 设备树获取子结点信息
驱动测试代码:#include <linux/kernel.h>#include <linux/gpio.h>#include <linux/init.h>#include <linux/module.h>#include <linux/delay.h>#include <linux/of.h>#inclu...原创 2020-04-09 19:53:39 · 582 阅读 · 0 评论 -
Dynamic DMA mapping Guide (转)
一、前言这是一篇指导驱动工程师如何使用DMA API的文档,为了方便理解,文档中给出了伪代码的例程。另外一篇文档dma-api.txt给出了相关API的简明描述,有兴趣也可以看看那一篇,这两份文档在DMA API的描述方面是一致的。二、从CPU角度看到的地址和从DMA控制器看到的地址有什么不同?在DMA API中涉及好几个地址的概念(物理地址、虚拟地址和总线地址),正确的理解这些...转载 2020-04-01 18:37:08 · 156 阅读 · 0 评论 -
Linux下DMA驱动api 以及测试实列
dmaengine framwork主要分为两部分:DMA controller 和DMA engine API。涉及内核相关文档:Documentation/damengine目录、Documentation/devicetree/bindings/dma/、Documentation/DAM-API-HOWTO.txt\DMA-API.txt\DMA-attributes.txt1、dm...转载 2020-03-31 20:04:48 · 2845 阅读 · 0 评论 -
Linux dma api
linux下的DMA驱动框架drivers\dma\dmaengine.c文件内,在linux下编写DMA的设备驱动一般步骤如下。申请DMA通道struct dma_chan *dma_request_channel(dma_cap_mask_t mask,dma_filter_fn filter_fn,void *filter_param);其中dma_cap_mase...转载 2020-03-31 20:01:30 · 328 阅读 · 0 评论 -
Linux中断下半部实现的三种机制
之前提到过,之所以中断会分成上下两部分,Linux 的上半部就是中断处理程序,下半部采用三种机制来实现,这样分两部执行的策略有利于缩短响应硬件的时限。 中断下半部的处理 对于一个中断,如何划分出上下两部分呢?哪些处理放在上半步,哪些放在下半部?这里有一些经验可供借鉴:如果一个任务对时间十分敏感,将其放在上半部。 如果一个任务和硬件有关,将其放在上半部。 如果一个任务要保...转载 2019-03-05 10:52:01 · 2340 阅读 · 0 评论 -
Linux中断上下文中为什么不能休眠
2.schedule()在切换进程时,保存当前的进程上下文(CPU寄存器的值、进程的状态以及堆栈中的内容),以便以后恢复此进程运行。中断发生后,内核会先保存当前被中断的进程上下文(在调用中断处理程序后恢复);但在中断处理程序里,CPU寄存器的值肯定已经变化了吧(最重要的程序计数器PC、堆栈SP等),如果此时因为睡眠或阻塞操作调用了schedule(),则保存的进程上下文就不是当前的进程cont...转载 2019-03-05 11:07:32 · 965 阅读 · 0 评论 -
Linux字符设备驱动框架总结
对于Linux而言,一切皆文件,在Linux系统下,所有文件都可以像文本文件一样open、read、write,那么对于Linux设备驱动而言,比如现在有一个点灯的驱动程序,它的设备节点是/dev/xxx,当应用程序执行open、read、write的时候,是如何调用到驱动程序里的open、read、write的呢,user space: APP...原创 2019-02-26 21:08:09 · 858 阅读 · 0 评论 -
mdev机制
分析过mdev(udev的BusyBox简化版)源码的都知道mdev的基本原理: a、执行mdev -s命令时,mdev扫描/sys/block(块设备保存在/sys/block目录下,内核2.6.25版本以后,块设备也保存在/sys /class/block目录下。mdev扫描/sys/block是为了实现向后兼容)和/sys/class两个目录下的dev属性文件,从该dev 属性文件中获...转载 2019-02-26 22:05:42 · 512 阅读 · 0 评论 -
Linux中断处理流程
1. 中断处理流程 当中断发生时,Linux系统会跳转到asm_do_IRQ()函数(所有中断程序的总入口函数),并且把中断号irq传进来。根据中断号,找到中断号对应的irq_desc结构(irq_desc结构为内核中中断的描述结构,内核中有一个irq_desc结构的数组irq_desc_ptrs[NR_IRQS]),然后调用irq_desc中的handle_irq函数,即中断入口函数。我们...转载 2019-03-04 17:24:56 · 298 阅读 · 0 评论 -
Linux I2C驱动--用户态驱动简单示例
1. Linux内核支持I2C通用设备驱动(用户态驱动:由应用层实现对硬件的控制可以称之为用户态驱动),实现文件位于drivers/i2c/i2c-dev.c,设备文件为/dev/i2c-02. I2C通用设备驱动以字符设备注册进内核的static const struct file_operations i2cdev_fops = { .owner = ...转载 2019-03-04 17:41:00 · 1202 阅读 · 0 评论 -
linux驱动程序中字符设备和块设备区别
设备文件分为Block Device Driver和Character Device Drive两类。Character Device Drive又被称为字符设备或裸设备raw devices; Block Device Driver通常成为块设备。而Block Device Driver是以固定大小长度来传送转移资料 ;Character Device Driver是以不定长度的字元传送资料 。...转载 2019-03-20 16:49:19 · 983 阅读 · 0 评论 -
Linux内核并发控制
1. 同步与互斥(1)互斥与同步机制是计算机系统中,用于控制进程对某些特定资源(共享资源)的访问的机制(2)同步是指用于实现控制多个进程按照一定的规则或顺序访问某些系统资源的机制。(3)互斥是指用于实现控制某些系统资源在任意时刻只能允许一个进程访问的机制。互斥是同步机制中的一种特殊情况。(4)同步机制是linux操作系统可以高效稳定运行的重要机制2. Linux系统并发主...转载 2019-03-05 10:35:31 · 529 阅读 · 0 评论 -
Linux设备驱动开发--内核定时器
1.Linux内核定时器是内核用来控制在未来某个时间点(基于jiffies)调度执行某个函数的一种机制,其实现位于<Linux/timer.h>和kernel/timer.c文件中。2.被调度的函数是异步执行的,它类似于一种“软件中断”,而且是处于非进程的上下文中,所以调度函数必须遵守以下规则:(1)没有current指针、不允许访问用户空间。因为没有进...转载 2019-03-05 10:28:48 · 248 阅读 · 0 评论 -
linux内核定时器 记录
驱动程序中使用timer的几个必要的操作1.分配static struct timer_list pwm_timer;2.设置、添加pwm_timer.function = pwm_timer_function;pwm_timer.expires = jiffies + 1*HZ;init_timer(&pwm_timer);3设置下一次启动的时间mod_ti...原创 2018-11-07 13:47:44 · 144 阅读 · 0 评论 -
rk3399下spi驱动
SPI 使用Note:本文从firefly wiki截取SPI是一种高速的,全双工,同步串行通信接口,用于连接微控制器、传感器、存储设备等。 Firefly-RK3399 开发板提供了 SPI1 (单片选)接口,具体位置如下图: SPI工作方式SPI以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,分别是:CS 片选信号SCLK 时钟信号MO...原创 2018-11-30 13:53:42 · 5943 阅读 · 0 评论 -
4412下的pwm驱动程序-寄存器形式
这是一个操作寄存器的pwm驱动,关于pwm这一块可以看芯片手册,这些寄存器至于为什么要这样设置,手册里都有说明#include <linux/init.h>#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <mach/g...原创 2018-12-05 10:37:51 · 575 阅读 · 2 评论 -
rk3399下iic驱动方式二-----设备树
方式一前面说了iic在新内核下的一种方式,下面是第二种方式,这种方式在fireflyWiki教程里面有说明代码如下#include <linux/kernel.h>#include <linux/module.h>#include <linux/platform_device.h>#include <linux/i2c.h>#i...原创 2018-11-09 11:19:20 · 2447 阅读 · 0 评论 -
rk3399下iic驱动方式一 -----Bus-devices-driver
先简要说明一下东西, 板子是rk3399的板子,跑的安卓系统,安卓7.1,由于板载一块音频编解码芯片,正好可以支持iic接口,于是就尝试读取他的Device ID 0x6281 寄存器地址0xff,内核文档下kernel\Documentation\iic目录下有iic相关的文档说明该内核版本下相对上一版本(iic的版本)改动的说明,该目录下upgrading-clients文件中有说明,U...原创 2018-11-09 10:20:08 · 2112 阅读 · 1 评论 -
rk3399下adc驱动
搞了搞ADC,突然发现像是再用库函数对32编程一样,API如下struct iio_channel *iio_channel_get(struct device *dev, const char *consumer_channel);功能:获取 iio 通道描述参数:dev: 使用该通道的设备描述指针consumer_channel: 该设备所使用的 IIO 通道描述指针void ...原创 2018-11-07 16:32:58 · 3738 阅读 · 0 评论 -
rk3399下pwm驱动
现在记录一下rk3399下pwm的驱动编写,下面是内核pwm的API,从开源论坛复制(firefly的开源论坛里面的Wiki教程)(1)、在要使用 PWM 控制的设备驱动文件中包含以下头文件:#include <linux/pwm.h>该头文件主要包含 PWM 的函数接口。(2)、申请 PWM使用struct pwm_device *pwm_request(int ...原创 2018-11-07 11:59:10 · 6046 阅读 · 10 评论 -
rk3399平台下的字符设备驱动
最近在搞一款瑞芯微平台的板子,型号:rk3399 ,这几天刚刚上手,前几天一直在搞环境,熟悉这个板子,这个板子跑的Android7.1的系统。在网上开到这块的东西不是很多,自己也想做个记录。然后,开始吧:之前一直在熟悉这个板子的目录结构,设备树文件再哪儿,以及编译脚本,关于编译源码这一块,firefly的论坛也有讲,这一块就不多说,先说说我干的事情吧:写了一个led驱动,很简单,目的当然就是点...原创 2018-11-05 17:54:24 · 2321 阅读 · 0 评论 -
rk3399 pwm3申请失败问题(错误代码-517)
如题,pwm3申请失败,wiki上面的教程里边提供的命令cat /sys/kernel/debug/pwm使用后,打印的信息如下platform/ff420020.pwm, 1 PWM devicepwm-0 (vdd-log ): requested enabled period: 24997 ns duty: 8243 ns polarity: in...原创 2018-12-21 16:50:45 · 4389 阅读 · 0 评论 -
rk3399配寄存器形式控制pwm
具体的寄存器配法,就去看一下手册吧 ,这种写寄存器的方式参考了一下本省自带的红外驱动,不过pwm的理论知识,以及为什么要这样配置这些寄存器,可以看一看ARM的教材,以前学习的时候写过代码,现在也是忘得很多了,想仔细了解的可以去找一下ARM相关的书。#include<linux/pwm.h>#include <linux/moduleparam.h>#include...原创 2018-12-21 16:52:20 · 1465 阅读 · 0 评论 -
Android 应用层调Linux驱动生成的设备节点
可能没有按照安卓标准的方式去调用,但是这种方式也可以,这是中途遇到的问题,记录一下是怎么解决的源码目录下,搜索,find -name init.rcroot@ubuntu:/g3399/g3399-v7-1-2-20180529# find -name init.rc./out/target/product/g3399/recovery/root/init.rc./out/targe...原创 2018-12-21 17:38:20 · 463 阅读 · 0 评论 -
Linux下ds18b20驱动
ds18b20的单总线协议就不叙述了,就是一种规定,哪种信号表示一,哪种信号表示零,整个过程需要按怎样的步骤来,数据手册上一般都会说明,怎样去读写,这些都是规定死的东西 ,下面是我按照正点原子的例子修改过来的#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#...原创 2019-01-02 11:04:41 · 709 阅读 · 1 评论 -
USB枚举过程
1. 枚举是什么? 枚举就是从设备读取一些信息,知道设备是什么样的设备,如何进行通信,这样主机就可以根据这些信息来加载合适的驱动程序。调试USB设备,很重要的一点就是USB的枚举过程,只要枚举成功了,那么就已经成功大半了。 USB架构中, hub负责检测设备的连接和断开,利用其中断IN端点(Interrupt IN Endpoint)来向主机(Host)报告。在系统...转载 2019-02-25 16:46:14 · 176 阅读 · 0 评论 -
IIC16bit数据读
该函数读16位数据,高位在前,低位在后 static int read_reg(const struct i2c_client *client, unsigned int *buf , unsigned char address){ struct i2c_msg msg[2]; int ret; unsigned char date1[2]; msg[0].addr = c...原创 2018-11-09 11:46:56 · 1874 阅读 · 2 评论