在linux内核映射物理地址的简单代码。 使用request_mem_region和ioremap映射物理地址。 映射之后,可通过虚拟地址读写对应的寄存器。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/133118.html原文链接:https://javaforall.cn
SPI总线由四根通信线组成,全双工、主从方式串行同步通信,一次传输8bit,高位在前,低位在后。
在linux内核系统中,各个模块、子系统之间是相互独立的。Linux内核可以通过通知链机制来获取由其它模块或子系统产生的它感兴趣的某些事件。
1.NFC基本概念: NFC 又称为近场通信,是一种新兴技术,可以在彼此靠近的情况下进行数据交换,是由非接触式射频识别(RFID)及互连互通技术整合演变而来,通过单一芯片集成感应式读卡器; NFC有效通讯距离一般不超过10厘米,其传输速度有106 Kbit/秒、212 Kbit/秒或者424 Kbit/秒三种。 2.NFC的工作模式: 读卡器模式(Reader / Writer Mode) 仿真卡模式(Card Emulation Mode) 点对点模式(P2P Mode) 读卡器模式: 读卡器模式本质
有时我们需要在 Linux 内核中预留一部分内存空间用作特殊用途(给安全模块使用,给其它处理器使用,或是给特定的驱动程序使用等),在 Device Tree 中有提供两种方法对预留内存进行配置:memreserve 和 reserved-memory。
static struct s3c_ts_mach_info s3c_ts_platform __initdata = { .delay = 10000, /*转化延迟*/ .presc = 49, /*转化时钟分频*/ .oversampling_shift = 2, /*转化次数 1<<2 == 4次*/ .resol_bit = 12, /*转化进度*/ .s3c_adc_con = ADC_TYPE_2, }; /*s3c_ts所列的资源*/ static
来自: http://www.diybl.com/course/6_system/linux/Linuxjs/200871/129585.html
转载请标明出处floater的csdn blog,http://blog.csdn.net/flaoter
设备上一共有四个网口,一个是原生的mac,另外三个是USB扩展的RTL8152,为了生产时候方便mac地址统一,所以需要所有的mac地址都存在一个存储空间里,然后四个mac去获取设置。这里比较简单的是将ethaddr这些参数在uboot通过bootargs传递给内核驱动。设备上有一个eeprom,可以把mac存储在里面,uboot启动时候去读取,然后设置到环境变量,再传递给内核的mac驱动。
/*分析DM9000网卡驱动之初始化*/ /*找到DM9000.c 文件路径: linux/drivers/net下 找到模块的入口函数处 */ static int __init dm9000_init(void) { printk(KERN_INFO "%s Ethernet Driver, V%s\n", CARDNAME, DRV_VERSION); return platform_driver_register(&dm9000_driver); } /*很明显DM9000
继上一篇文章:高通Audio中ASOC的machine驱动(一) ASOC的出现是为了让codec独立于CPU,减少和CPU之间的耦合,这样同一个codec驱动就无需修改就可以匹配任何一款平台。 在M
从Linux 2.6起引入了一套新的驱动管理和注册机制:Platform_device和Platform_driver。
ASoC被分为Machine、Platform和Codec三大部分,其中的Machine驱动负责Platform和Codec之间的耦合以及部分和设备或板子特定的代码,再次引用上一节的内容:Machine驱动负责处理机器特有的一些控件和音频事件(例如,当播放音频时,需要先行打开一个放大器);单独的Platform和Codec驱动是不能工作的,它必须由Machine驱动把它们结合在一起才能完成整个设备的音频处理工作。 ASoC的一切都从Machine驱动开始,包括声卡的注册,绑定Platform和Codec驱动
Version: [ 2.6.11.8 ][ 2.6.25 ][ 2.6.25.8 ][ 2.6.31.13 ] Architecture:[ i386 ]
在目录下amp\a53_linux\drv\extdrv\touchpad\ft6236下可以看到ft6236.c的文件
sprd_2721_charge.c 命名以 pmic 型号+charge 为规则,实现平台默认线性充电方案,文件将硬件实现和逻辑接口注册放在同一个文件中。
这篇文章介绍一下在调试camera驱动的过程,最常见的一个问题,i2c不通导致驱动注册不上,应该如何排查。常见的报错log如下:
在上节Linux音频驱动-ALSA概述中介绍了整个ALSA的构成,接口以及函数入口的分析。
2、在已经存在驱动文件中搜索”DEVICE_ATTR”关键字,如果存在,直接参考已经存在的方法添加一个即可,如下:
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/115460.html原文链接:https://javaforall.cn
看门狗是linux驱动的一个重要环节。某些特殊的设备,有时候需要放在一些环境恶劣的地方,比如电信设备。但是,任何软件都不可能100%没有bug。如何保证软件在遇到严重bug、死机的时候也能正常运行呢,那么看门狗就是有效的一种方法。看门狗一般要求用户定时喂狗,如果一段时间没有喂狗的话,那么系统就会自动重启。今天,我们就来看看这个看门狗驱动怎么编写?
在ASOC小节中描述了整个ASOC的架构,其中Machine是ASOC架构中的关键部件,没有Machine部件,单独的Codec和Platform是无法工作的。因此本节则先从Machine部分开始,那应该如何开始呢? 答案当然是从代码入手,先进入ASOC在kernel中的位置: kernel/sound/soc下
如何点亮一个LED灯,等同于驱动一个LED灯,再复杂一些可以控制LED灯亮灭,更复杂的是远程控制LED灯。
如今复杂的Soc由多个并行工作的子模块组成。在一个执行各种用例的操作系统中,不是Soc中的所有模块都一直以其最高的执行频率工作。为了实现这一目的,Soc中的子模块被分组成域,允许一些域以较低的频率和电压运行,而其他的域运行在较高的电压和频率上。将域中每个设备支持的电压和频率的离散元组的集合称为Operating Performance Points(OPP)。
源码中会涉及到一部分SMBus相关内容,SMBus是Intel在I2C的基础上开发的类似I2C的总线,本文不探讨SMBus相关内容(其实说白了,还是懒QAQ)。笔者会大体上对I2C子系统的源码进行分析,如若分析的有出入,还望指出。
早在诺基亚手机还比较流行的时候,那时候触摸屏用的还不多。但是随着触摸屏手机、即智能手机的流行,触摸屏基本成了手机的标配。所以,今天可以看看触摸屏驱动在linux上是如何进行的。
SDIO-WiFi即基于SDIO接口符合WiFi标准的嵌入式模块,内置802.11协议栈以及TCP/IP协议栈,可实现主平台铜鼓SDIO到无线网络之间转换 SDIO:传输数据块,兼容SD,MMC接口等 先以SDIO设备注册,然后检测到再注册WiFi功能,即用SDIO协议发送命令和数据
把某个结构体,左右的放入链表,一一比较,匹配调用probe函数 设备链表 driver链表, 总线提供了match函数
pdata->num_row_gpios = nrow = of_gpio_named_count(np, “row-gpios”);
当我们休眠时,如果想唤醒,则需要添加中断唤醒源,使得在休眠时,这些中断是设为开启的,当有中断来,则会退出唤醒,常见的中断源有按键,USB等.
网络设备不同于字符设备和块设备,并不对应于/dev目录下的文件,应用程序通过 socket 完成与网络设备的交互,在网络设备上并不体现”一切皆文件”的设计思想。
目前在kernel驱动代码中,都不再建议直接使用printk直接添加打印信息,而是使用dev_info,dev_dbg,dev_err之类的函数代替,虽然这些dev_xxx函数的本质还是使用printk打印的,但是相比起printk:
mfd是Multifunction device的简称,即多功能设备,是许多有共性的设备的集合,mfd由核心层(core)以及其下的“子设备”组成。从下文将会看到,mfd只是将设备注册到platform总线——因此,其子设备属于platform设备。它并没有对涉及到的设备或驱动做实质性改变。但是,因为某些设备的共性,所以可以在mfd中提供共同的函数给其下子设备进行调用。
igb_uio 是 dpdk 内部实现的将网卡映射到用户态的内核模块,它是 uio 模块的一个实例。
platform 总线上的驱动注册一般使用module_platform_driver宏,如goldfish设备的注册 module_platform_driver(goldfish_pipe); 这个宏定义在/goldfish/include/linux/platform_device.h文件
继上一篇:https://cloud.tencent.com/developer/article/1054078 一、驱动流程解析: 1、模块加载: 1 static struct of_device_id stk_match_table[] = { 2 { .compatible = "stk,stk3x1x", }, 3 { }, 4 }; 5 6 static struct i2c_driver stk_ps_driver = 7 { 8 .driver =
②使用media-ctl工具可以看到pipeline,可以看到sensor具体的分辨率和格式;
pwm方波可以用来控制很多的设备,比如它可以被用来控制电机。简单来说,就是单位时间内的方波越多,那么电机的转速就会越快;反之就越慢。通过这个特性,soc就可以轻松地利用pwm对外设进行自动控制。所以,今天的主题就是pwm驱动。
linux中的rtc驱动位于drivers/rtc下,里面包含了许多开发平台的RTC驱动,我们这里是以S3C24xx为主,所以它的RTC驱动为rtc-s3c.c 1.进入./drivers/rtc/
在内核kernel/drivers/regulator/dummy.c文件中构造了一个虚拟的regulator,参考此文件编写一个虚拟的regulator driver。
之前在Linux系统移植时提到过LCD驱动,本篇来看下Linux设备树如何配置LCD驱动。
在ASOC在Platform部分,主要是平台相关的DMA操作和音频管理。大概流程先将音频数据从内存通过DMA方式传输到CPU侧的dai接口,然后通过CPU的dai接口(通过I2S总线)将数据从达到Codec中,数据会在Codec侧会解码的操作,最终输出到耳机/音箱中。依然已下图作为参考:
对于嵌入式设备来说,合适的电源管理,不仅可以延长电池的寿命,而且可以省电,延长设备运行时间,在提高用户体验方面有很大的好处。所以,各个soc厂家在这方面花了很多的功夫。下面,我们可以看看linux是如何处理电源管理驱动的。
实际项目过程中应用层需要操作内核中GPIO, 除了应用层直接通过export方式操作,具体操作方法[Linux驱动炼成记] 02-用户空间控制GPIO, 还可以通过sysfs设备节点方式操作
本文主要介绍了如何为树莓派开发一款支持200万像素摄像头的LCD驱动程序。首先介绍了LCD驱动的整体流程,然后重点讲解了树莓派上的LCD驱动实现。在实现过程中,详细描述了LCD驱动程序的框架设计、寄存器配置、中断处理、视频处理流程等内容。最后通过实际案例演示了该驱动程序的具体使用方法。
嵌入式系统一般要求低功耗,出于这个原因,一般只把需要使用到的外设时钟源打开,其他不需要使用到的模块,则默认关闭它们。
/* LCD驱动程序分析 和别的驱动程序一样,首先找到模块函数的入口处 */ #include "s3c2410fb.h" /* Debugging stuff */ #ifdef CONFIG_FB_S3C2410_DEBUG static int debug = 1; #else static int debug = 0; #endif #define dprintk(msg...) if (debug) { printk(KERN_DEBUG "s3c2410fb: " msg); }
Linux 自带的耳机拔插检测驱动是混在声卡驱动中,耳机拔插状态通过 input 子系统上报。
1、DTS相应修改: DTS相关代码:kernel/arch/arm/boot/dts/qcom/msm8909-qrd-skuc.dtsi: 1 sound { 2 compatible = "qcom,msm8x16-audio-codec"; 3 qcom,model = "msm8909-skuc-snd-card"; 4 qcom,msm-snd-card-id = <0>; 5 qcom,msm-codec-typ
领取专属 10元无门槛券
手把手带您无忧上云