Linux驱动基础
文章平均质量分 87
honghong96
这个作者很懒,什么都没留下…
展开
-
Linux驱动基础:三星平台Linux SPI驱动
http://blog.csdn.net/hustyangju/article/details/20474659http://www.embedu.org/Column/Column367.htm以三星平台为例,说明spi的驱动和使用方法概述spi-s3c64xx.c文件就是三星exynos5433平台中的spi驱动控制器。 其中一个spi_2的device tree设置如下: spi_2:原创 2017-02-22 23:13:30 · 947 阅读 · 0 评论 -
Linux驱动基础:va_arg,va_start,va_end等介绍
va_arg1.概述由于在C语言中没有函数重载,解决不定数目函数参数问题变得比较麻烦;即使采用C++,如果参数个数不能确定,也很难采用函数重载.对这种情况,有些人采用指针参数来解决问题.下面就c语言中处理不定参数数目的问题进行讨论.2.定义大家先看几宏. 在VC++6.0的include有一个stdarg.h头文件,有如下几个宏定义:#define _INTSIZEOF(n) ((sizeof(n原创 2017-02-22 23:11:13 · 1102 阅读 · 0 评论 -
Linux内核相关论坛问题回复(1)
http://bbs.csdn.net/topics/391048758?page=1#post-399361268 有人在论坛提了下面的问题,比较典型。最近在调试SPI子系统时发现如下错误:[ 3777.005000] BUG: scheduling while atomic: spi0/25/0x00000002[ 3777.005000] Modules linked in: focal原创 2017-02-22 23:07:51 · 439 阅读 · 0 评论 -
高通SDHCI(SDC)接口,SD卡初始化,检测等
sdhc_2: sdhci@7864900 { compatible = "qcom,sdhci-msm"; reg = <0x7864900 0x11c>, <0x7864000 0x800>; reg-names = "hc_mem", "core_mem"; interrupts = <0 125 0>, <0 221 0>;原创 2017-03-01 17:15:25 · 7708 阅读 · 0 评论 -
msm平台GPIO相关的device tree设置
GPIO相关的dvice tree设置和interrupt设置gpoi号以及gpio相关的属性设置以tsp的proxy_en端口为例: i2c@78b6000 { /* BLSP1 QUP2 */ compatible = "qcom,i2c-msm-v2"; ... tmd3782@39 { com原创 2017-02-19 16:07:43 · 1558 阅读 · 0 评论 -
Linux驱动基础:device tree
Bootloader设置msm平台为例,在bootloader代码中会根据当前ddr开始的地址,按照一定的offset定义了kernel开始的地址,ramdisk开始地址以及TAG开始的地址。其中kernel代码开始的地址和ramdisk的地址自不必说,这两个不对的话再加载完kernel代码之后跳到kernel代码都会有问题,或者ramdisk的mount都会有问题。Device Tree也一原创 2017-02-19 16:07:18 · 4264 阅读 · 0 评论 -
Linux 中断(irq)控制器以及device tree设置
GPIO相关中断(高通平台为例)gpio相关的中断控制器(msm_tlmm_irq) 初始化(1) IRQCHIP_DECLARE定义irq chip#define IRQCHIP_DECLARE(name,compstr,fn) \ static const struct of_device_id irqchip_of_match_##n原创 2017-02-19 16:05:29 · 6398 阅读 · 0 评论 -
MDM9x25 Flashless boot(Power Manager)
设置的device tree和相关的platform初始化函数,主要设置HOST_WAKE, DEVICE_RDY, HOST_RDY 三个GPIO和设置 HOST_WAKE和DEVICE_RDY的中断函数。并设置PM和HSIC的power manager相关的notifier call函数。 mdmpm_pdata { compatible = "qcom,md原创 2017-02-19 16:04:55 · 1155 阅读 · 0 评论 -
Linux驱动基础:platform设备驱动
初始化以高通平台为例,会在kernel/arch/arm/mach-msm下的相应的board-xxx.c文件里边用 DT_MACHINE_START()这个宏定义一系列的芯片。以高通8916为例: 在kernel/arch/arm/mach-msm/board-8916.c文件里定义了//当然下面使用哪个要看一下。DT_MACHINE_START(MSM8916_DT,原创 2017-02-19 16:02:49 · 3499 阅读 · 0 评论 -
MDM9x25 Flashless boot&IPC over HSIC
概述以EXYNOS加MDM9x25为例,连接示意图如下: Exynos5433需要这几个GPIO以及HSIC,给MDM9x25上电,下载MDM9x25的binary,efs同步以及MDM9x25出错的时候的ramdump collection等工作。 下面按如下步骤来介绍每个部分所需的代码移植,修改以及流程。 - MDM9x25启动,控制GPIO配置 - MDM9x25代码下载以及e原创 2017-02-05 23:22:16 · 2637 阅读 · 0 评论 -
Linux:低分辨率定时器的原理和实现
http://blog.csdn.net/droidphone/article/details/8051405利用定时器,我们可以设定在未来的某一时刻,触发一个特定的事件。所谓低分辨率定时器,是指这种定时器的计时单位基于jiffies值的计数,也就是说,它的精度只有1/HZ,假如你的内核配置的HZ是1000,那意味着系统中的低分辨率定时器的精度就是1ms。早期的内核版本中,内核并不支持高精度定时器,转载 2017-02-05 15:30:21 · 544 阅读 · 0 评论 -
Linux Malloc分析-从用户空间到内核空间
本文介绍malloc的实现及其malloc在进行堆扩展操作,并分析了虚拟地址到物理地址是如何实现映射关系。 ordeder原创,原文链接: http://blog.csdn.net/ordeder/article/details/41654509背景知识进程的用户空间该结构是由进程task_struct.mm_struct进行管理的mm_struct的定义如下:struct mm_struct {转载 2017-02-05 14:58:10 · 706 阅读 · 0 评论 -
Linux SPI总线和设备驱动架构之一:系统概述
SPI是”Serial Peripheral Interface” 的缩写,是一种四线制的同步串行通信接口,用来连接微控制器、传感器、存储设备,SPI设备分为主设备和从设备两种,用于通信和控制的四根线分别是:CS 片选信号SCK 时钟信号MISO 主设备的数据输入、从设备的数据输出脚MOSI 主设备的数据输出、从设备的数据输入脚 因为在大多数情况下,CPU或SOC一侧通常都是工原创 2017-02-22 23:15:10 · 379 阅读 · 0 评论 -
Linux SPI总线和设备驱动架构之二:SPI通用接口层
通过上一篇文章的介绍,我们知道,SPI通用接口层用于把具体SPI设备的协议驱动和SPI控制器驱动联接在一起,通用接口层除了为协议驱动和控制器驱动提供一系列的标准接口API,同时还为这些接口API定义了相应的数据结构,这些数据结构一部分是SPI设备、SPI协议驱动和SPI控制器的数据抽象,一部分是为了协助数据传输而定义的数据结构。另外,通用接口层还负责SPI系统与Linux设备模型相关的初始化工作。本原创 2017-02-22 23:19:09 · 2651 阅读 · 0 评论 -
sysfs接口说明
以gpiolib.c文件里边的sysfs接口为例。device attr定义方式有好几种,1. 下面是通过DEVICE_ATTR宏定义的方式static const DEVICE_ATTR(active_low, 0644,gpio_active_low_show, gpio_active_low_store);stati原创 2017-02-02 16:46:42 · 655 阅读 · 0 评论 -
Linux Module详解
Module的一个例子: 创建两个文件hello.c文件#include <linux/init.h>#include <linux/module.h>MODULE_LICENSE("Dual BSD/GPL");static int hello_init(void){ printk(KERN_ALERT "Hello, world\n"); return 0;}stati原创 2017-02-02 16:44:03 · 8872 阅读 · 0 评论 -
STM32F10x DMA介绍以及 dma usart数据收发
DMA方式1. DMA 介绍 Direct memory access (DMA) is used in order to provide high-speed data transfer between peripherals and memory and between memory and memory. Data can be quickly moved by DMA withou原创 2017-02-22 23:42:24 · 1909 阅读 · 0 评论 -
STM32F10x usart数据收发
STM32F10x uart的数据发送接收就三种基本方式,轮询、中断和DMA1. 轮询(polling)方式以下是轮询的uart初始化以及发送接收的例子,发送和接收都用轮询的方式。uint8_t TxBuffer[] = "Buffer Send from USARTy to USARTz using Flags";uint8_t RxBuffer[TxBufferSize];int main原创 2017-02-22 23:41:53 · 1783 阅读 · 0 评论 -
STM32F10x uart连接端口以及功能描述
USART功能描述USART双向通信至少需要两个管脚:Receive Data In(RX) and Transmit Data Out(Tx)。 如果是同步模式(synchronous mode)的话,需要SCLK pin。 SCLK pin:Transmitter clock output. This pin outputs the transmitter data clock for原创 2017-02-22 23:40:52 · 2136 阅读 · 0 评论 -
STM32F10x uart初始化以及寄存器说明
USART(Universal Synchronous Asynchronous Receiver Transmitter) 也就是通用同步异步收发。它根据NRZ非同步串行数据工业标准,提供了灵活的全双工数据交换功能。它支持同步单向通信和半双工单线通信,也支持LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及硬件控制操作(需要增加两个管脚,分别是CTS/RTS)。原创 2017-02-22 23:40:05 · 5540 阅读 · 0 评论 -
Linux内核驱动:ion memory
高通msm平台为例,以下是这个平台定义的几个ion内存。 qcom,ion { compatible = "qcom,msm-ion"; #address-cells = <1>; #size-cells = <0>; qcom,ion-heap@25 { reg = <25>; qc原创 2017-02-22 23:32:21 · 2909 阅读 · 0 评论 -
Linux 中断(irq)控制器以及device tree设置
GPIO相关中断(高通平台为例)gpio相关的中断控制器(msm_tlmm_irq) 初始化(1) IRQCHIP_DECLARE定义irq chip#define IRQCHIP_DECLARE(name,compstr,fn) \ static const struct of_device_id irqchip_of_match_##name \原创 2017-02-22 23:30:06 · 1116 阅读 · 0 评论 -
Linux驱动基础:msm平台,modem等framework加载
msm平台,AP和CP封装在一起,公用一块内存。所以AP需要负责把整个modem, TZ , rpm等binary拷贝到内存中以供modem等subsystem去运行。那AP这边是怎么分配这些内存,又是怎么读出来相关的binary,又如何把binary上传上去的呢??相关的featureCONFIG_FW_LOADERCONFIG_FW_LOADER_USER_HELPERmodem使用的内存申原创 2017-02-22 23:29:24 · 1461 阅读 · 0 评论 -
Linux中断(interrupt)子系统
中断系统基本原理这个中断系列文章主要针对移动设备中的Linux进行讨论,文中的例子基本都是基于ARM这一体系架构,其他架构的原理其实也差不多,区别只是其中的硬件抽象层。内核版本基于3.3。虽然内核的版本不断地提升,不过自从上一次变更到当前的通用中断子系统后,大的框架性的东西并没有太大的改变。1. 设备、中断控制器和CPU一个完整的设备中,与中断相关的硬件可以划分为3类,它们分别是:设备、中断控制器原创 2017-02-22 23:27:55 · 4537 阅读 · 0 评论 -
Linux ALSA声卡驱动
概述ALSA是Advanced Linux Sound Architecture 的缩写,目前已经成为了linux的主流音频体系结构,想了解更多的关于ALSA的这一开源项目的信息和知识,请查看以下网址:http://www.alsa-project.org/。在内核设备驱动层,ALSA提供了alsa-driver,同时在应用层,ALSA为我们提供了alsa-lib,应用程序只要调用alsa-lib提原创 2017-02-22 23:27:09 · 9628 阅读 · 0 评论 -
Linux驱动基础:MSM平台AP/CP通信机制
概述MSM平台AP和CP封装到一个芯片,共享内容。所以之前也说过,高通的MSM解决方案中,CP的代码都是由AP放到指定地址的内存中以供CP运行。那上传完代码,CP开始跑之后,AP/CP之间的通信又是怎么弄的呢? 其实也是在内存中开辟一段共享内存进行通信的。高通文档中有介绍以下三种。SMD : Shared Memory DriverSMEM : Shared Memory ManagerS原创 2017-02-22 23:25:59 · 2008 阅读 · 0 评论 -
MSM平台RPM
Software Component Block DiagramRPM(Resource Power Manager)是高通MSM平台另外加的一块芯片,虽然与AP芯片打包在一起,但其是一个独立的ARM Core。之所以加这个东西,就是要控制整个电源相关的shared resources,比如ldo,clock。负责与SMP,MPM交互进入睡眠或者唤醒整个系统。 以下是高通文档中对各个功能模块的说明原创 2017-02-22 23:24:54 · 4633 阅读 · 0 评论 -
Linux SPI总线和设备驱动架构之四:SPI数据传输的队列化
我们知道,SPI数据传输可以有两种方式:同步方式和异步方式。所谓同步方式是指数据传输的发起者必须等待本次传输的结束,期间不能做其它事情,用代码来解释就是,调用传输的函数后,直到数据传输完成,函数才会返回。而异步方式则正好相反,数据传输的发起者无需等待传输的结束,数据传输期间还可以做其它事情,用代码来解释就是,调用传输的函数后,函数会立刻返回而不用等待数据传输完成,我们只需设置一个回调函数,传输完成后原创 2017-02-22 23:20:28 · 393 阅读 · 0 评论 -
Linux时间系统:时钟源clocsource
时钟源(clock source)clock source顾名思义就是提供给系统提供时钟的时钟源。 clock source负责读取芯片中按时间增加的值(所谓cycle),并提供给timekeeper,当然也要提供按cycle的值计算时间间隔的内容。 clocksource以及timer相关的内容都在kernel/kernel/time目录下面。obj-y += timekeeping.o nt原创 2017-02-05 12:13:25 · 4524 阅读 · 0 评论