
kernel-driver
文章平均质量分 73
kernel-driver
kunkliu
good good study
展开
-
eMMC驱动分析
转载地址:https://blog.youkuaiyun.com/aningsk/article/details/81260816 基于ATMEL-sama5d3芯片与Linux-3.6.9内核。 SD卡系列简介这些都是网上找出来的,权当作为开场白了。 MMC卡全称Multi Media Card,由西门子公司和SanDisk公司1997年推出的多媒体...转载 2019-07-11 17:13:28 · 1730 阅读 · 0 评论 -
Linux音频OSS编程指南
转载地址:https://blog.youkuaiyun.com/TJU355/article/details/6943202OSS--跨平台的音频接口简介http://bbs.lemote.com/viewthread.php?tid=20410 OSS(Open Sound System)是 unix 平台上一个统一的音频接口, 即只要音频处理应用程序按照OSS的API来编写,那么在移植到另外一个平...转载 2018-04-19 08:37:01 · 2154 阅读 · 0 评论 -
“热散由心静,凉生为室空” - linux温控的那些事儿
阅读目录一、背景二、Linux温控框架三、Thermal Zone(温区)与Cooling Device(冷却设备)四、Thermal Governor(温控算法)五、后续Linux thermal发展方向 正文回到顶部一、背景在科技发展日新月异的如今,随着设备性能越来越强劲,设备中各个器件工作时产生的热量也越来越高。而移动设备发热是影响用户体验的重要因素,SoC 等硬件芯片也会因过热而造成系统不稳定,甚至缩减芯片寿命,“如何给设备降温“成为了当下一个重要的课题。移动终端结构紧凑,内部空间可转载 2022-05-09 16:34:19 · 1529 阅读 · 0 评论 -
WFE和WFI的区别
1. 概念:WFI(Wait for interrupt)和WFE(Wait for event)是两个让核进入low-power standby模式的指令,由ARM architecture定义,由ARM core实现。转载 2023-04-07 09:53:08 · 2093 阅读 · 0 评论 -
__raw_writel, writel_relaxed 和 writel的区别
write_relaxed: 在ARM平台上与__raw_writel一样,因为与__raw_writel相比,它只多做。一个DSB和L2的sync。内容在DMA开始之前都到memory里,所以开始DMA的指令(writel)里加了。对于ARM而言,当多个写以代码的顺序到达相同设备时,执行的顺序也是被保证的,不过。其实: writel也不能保证写的东西一定完成,它只能保证写的指令或写的内容。所以说: 只有在有DMA操作的代码里,writel才是必须的,其实它是一个。对于不同的设备,执行的顺序就不被保证了。转载 2023-04-03 21:27:22 · 1551 阅读 · 0 评论 -
linux的uapi文件夹,【linux】Linux kernel uapi header file(用户态头文件)
例如:在A.h中inline function时发现里面用到的某些struct定义在B.h中,而B.h中又有inline function需要用到A.h中的struct,就会造成循环包含recursive include。转发自:http://vh21.github.io/linux/2014/11/21/linux-kernel-uapi-include-file.html。把userspace API的文件独立到 include/uapi跟arch/xxxx/include/uapi下,转载 2023-04-03 21:13:23 · 900 阅读 · 0 评论 -
Linux内存管理之CMA简介
1.概述在过程中经常需要使用到连续大块物理内存,尤其是DMA设备。而实际在系统经过长时间的允许之后,物理内存会出现比较严重的碎片化现象,虽然通过内存规整,内存回收等手动可以清理出一段连续的物理内存,但是并不能保证一定能够申请较大连续物理块。最初连续申请较大块物理内存,一般都是只在DMA场景中使用,因此内核专门把物理内存划分出ZONE_DMA专门用于DMA内存申请(当然划分DMA_ZONE还有其他原因,在较早DMA中由于DMA寻址地址限制 只能将一定范围的物理内存),用于解决DMA申请连续物理内存问题。转载 2023-04-01 21:23:32 · 489 阅读 · 0 评论 -
dma_alloc_coherent的2种内存分配方式
rmem_dma_ops.device_init() = rmem_dma_device_init 将reserved-memory内存一致性建页表(memremap(MEMREMAP_WC))并绑定到dev->dma_mem中。dma_alloc_coherent(dev, GFP_ATOMIC) = pci_alloc_consistent 从预留的cma_pool分配,不可被中断。of_reserved_mem_device_init (要求reserved内存shared-dma-pool)转载 2023-04-01 21:07:17 · 1192 阅读 · 0 评论 -
宋宝华: 关于DMA ZONE和dma alloc coherent若干误解的彻底澄清
宋宝华,他有10几年的Linux开发经验。他长期在大型企业担任一线工程师和系统架构师,编写大量的Linux代码,并负责在gerrit上review其他同事的代码。Barry Song是Linux的活跃开发者,是某些内核版本的最活跃开发者之一(如https://lwn.net/Articles/395961/ 、转载 2023-04-01 20:50:16 · 465 阅读 · 0 评论 -
dma_alloc_coherent 申请内存用法和问题总结
检查内核打印,给cma分配的地址是否在4G以上,dma_allocat_coherent() 要求地址低于掩码[(0x1 << 32)-1] = 0xFFFFFFFF。4M这个限制是本身应该是分的普通内存的限制, 例如把配置加一个CONFIG_FORCE_MAX_ZONEORDER=16把最大限制改成128M也能解决。使用这个接口最大只能申请到4M的内存,申请超过4M时,报。在dts中添加cma节点,可指定cma大小和空间。,dma分配默认会走cma,空间会大点。可配置大小,也可指定地址。转载 2023-04-01 19:22:00 · 6957 阅读 · 0 评论 -
Linux Kernel编程 --- Mailbox驱动框架
(1)driver 通过mbox_controller_register 注册controller;(2)client 通过mbox_request_channel调用driver->startup;(3)client 通过mbox_send_message调用driver->send_data,并等待txdone;(4)driver 收到remote的中断读取数据调用mbox_chan_received_data将数据放到 client->rx_buffer中;转载 2023-03-22 21:04:46 · 4306 阅读 · 0 评论 -
linux mailbox模型
irq读取寄存器得到消息,调用mailbox.c中的mbox_chan_received_data,再调用client的rx_callback将得到的数据放到client->rx_buffer中。driver 收到remote的中断读取数据调用mbox_chan_received_data将数据放到 client->rx_buffer中。client 通过mbox_send_message调用driver->send_data,并等待txdone。配置of_xlate回调,获取chan。转载 2023-03-22 19:01:26 · 577 阅读 · 0 评论 -
今天我以fb设备的注册过程来分析platform设备的添加流程
转载地址:http://www.cnblogs.com/armlinux/archive/2010/11/24/2396889.htmlplatform总线是kernel中最近加入的一种虚拟总线,它被用来连接处在仅有最少基本组件的总线上的那些设备.这样的总线包括许多片上系统上的那些用来整合外设的总线, 也包括一些”古董” PC上的连接器; 但不包括像PCI或USB这样的有庞大正规说明的总线.转载 2017-09-20 18:34:48 · 1356 阅读 · 0 评论 -
Linux驱动之定时器和延时
转载地址:http://blog.youkuaiyun.com/king523103/article/details/43450345内核中有一个时钟,时钟每次的tick都会触发一个时钟中断,中断时将检查是否有定时器到期,根据需要在软件中断中执行定时器函数。因此:内核定时器在时钟中断的下半段执行,非进程的上下文不能使用休眠函数不能访问用户空间更详细的执行过程:参考:http://w转载 2017-11-20 13:03:55 · 323 阅读 · 0 评论 -
卸载驱动出现:rmmod: can't change directory to '/lib/modules': No such file or directory
转载地址:https://www.cnblogs.com/asulove/p/6043975.htmlrmmod: can't change directory to '/lib/modules': No such file or directory新建目录/lib/modules#mkdir -p /lib/modules又出现rmmod: can't change di转载 2017-11-17 18:31:29 · 1459 阅读 · 0 评论 -
linux驱动之定时器的使用
转载地址:https://www.cnblogs.com/hjj801006/p/4551378.htmlLinux的内核中定义了一个定时器的结构:#includestruct timer_list { struct list_head list; unsigned long expires; //定时器到期时间 unsigned long data;转载 2017-11-17 16:13:16 · 533 阅读 · 0 评论 -
container_of分析
转载地址:http://blog.youkuaiyun.com/tigerjibo/article/details/82995891.container_of宏1> Container_of在Linux内核中是一个常用的宏,用于从包含在某个结构中的指针获得结构本身的指针,通俗地讲就是通过结构体变量中某个成员的首地址进而获得整个结构体变量的首地址。2>接口:container_of(转载 2017-10-11 10:56:46 · 179 阅读 · 0 评论 -
Linux设备子系统初始化
转载地址:http://www.cnblogs.com/helloahui/p/3551231.html本文介绍的内容是基于Linux3.1源码,并参考了很多网上找来的资料 Linux内核的启动的流程如下:start_kernel->rest_init->kernel_init->do_basic_setup->driver_init由driver_init函数完成设备驱动子系统的初始化转载 2017-09-20 19:00:05 · 345 阅读 · 0 评论 -
我对linux理解之driver_register
转载地址:http://blog.chinaunix.net/uid-26874138-id-3430395.html本文系本站原创,欢迎转载!转载请注明出处:amingriyue.blog.chinaunix.net——————————————/* driver_register - register driver with bus * @drv: driver to regist转载 2017-09-20 18:47:36 · 721 阅读 · 0 评论 -
我对linux理解之driver_register
转载地址:http://blog.chinaunix.net/uid-20602659-id-2921577.html本文系本站原创,欢迎转载!转载请注明出处:amingriyue.blog.chinaunix.net——————————————/ * device_register - register a device with the system. * @dev: pointe转载 2017-09-20 18:49:14 · 298 阅读 · 0 评论 -
platform总线注册过程及platform_driver与platform_device的匹配
转载地址:http://xl028.blog.163.com/blog/static/199730242201231592010799/ 我们知道,按platform结构写驱动,我们只需注册platform_device和platform_driver而不需要我们自己去注册platform总线,因为系统启动就有那条总线,那么它是怎么得到的呢?这里进行具体跟踪一下:start_kernel——转载 2017-09-20 18:50:45 · 425 阅读 · 1 评论 -
嵌入式Linux下PWM功能调试
转载地址:http://www.eefocus.com/toradex/blog/17-05/420816_04520.htmlBy Toradex秦海1). 简介PWM(Pulse-width modulation)接口是嵌入式设备最为常用的接口之一,常用于电机驱动,蜂鸣器,脉冲计数等嵌入式领域,因此本文就基于嵌入式Linux演示使用PWM接口。 本文所演示的平台来自于T转载 2018-01-31 14:33:11 · 1107 阅读 · 0 评论 -
如何将驱动或模块编译进内核
转载地址:http://blog.youkuaiyun.com/marz07101/article/details/7647400我们知道若要给linux内核添加模块(驱动)有如下两种方式:(1)动态方式:采用insmod命令来给运行中的linux加载模块。(2)静态方式:修改linux的配置菜单,添加模块相关文件到源码对应目录,然后把模块直接编译进内核。对于动态方式,比较简单转载 2018-03-08 08:57:55 · 9145 阅读 · 0 评论 -
linux 系统 ko模块编译
转载地址:http://blog.youkuaiyun.com/elfylin/article/details/5908265今天整理以前笔记,发现曾经里面有一个Makefile文件。 仔细一看是以前实习做linux内核程序设计时候写的模块makefile。刚好我电脑也有linux系统,就拿来回顾一下。写个my.c和一个Makefile文件,然后make编译一下,就成功了,生成转载 2018-03-08 08:58:09 · 748 阅读 · 0 评论 -
linux内核sysfs详解-1
转载地址:http://blog.youkuaiyun.com/u014213012/article/details/53141835sysfs是 Linux 内核中设计较新的一种虚拟的基于内存的文件系统,它的作用与 proc 有些类似,但除了与 proc相同的具有查看和设定内核参数功能之外,还有为 Linux 统一设备模型作为管理之用。相比于 proc 文件系统,使用 sysfs导出内核数据的方转载 2017-09-25 14:11:43 · 859 阅读 · 0 评论 -
内核添加dts后,device和device_driver的match匹配的变动:通过compatible属性进行匹配
转载地址:内核添加dts后,device和device_driver的match匹配的变动:先看platform总线:/driver/base/platform.c文件:static int platform_match(struct device *dev, struct device_driver *drv){struct platform_device *pdev = to_platform...转载 2018-03-29 13:47:24 · 1264 阅读 · 0 评论 -
linux编译驱动之 make modules SUBDIRS
转载地址:https://yq.aliyun.com/articles/10538补充:make modules SUBDIRS=指定编译那个目录下的Makefile今天在编译linux kernel的时候发现make menuconfig中配置成<M>模式的驱动模块没有加入编译之,下面命令编译内核的:make uImage通过查看kernel的makefile发些了一些蛛丝马迹,现在...转载 2018-03-23 14:35:23 · 1384 阅读 · 0 评论 -
编译某一个ko模块make modules SUBDIRS=drivers/xxx/
转载地址:https://blog.youkuaiyun.com/wh_19910525/article/details/8079037make modules SUBDIRS=drivers/usb/gadget/这样可以只是编译drivers/usb/gadget/目录下的ko模块---------------------------------------在drivers/char/Makefile文件...转载 2018-03-23 14:38:17 · 410 阅读 · 0 评论 -
insmod与make modules_install有什么区别
转载地址:https://bbs.youkuaiyun.com/topics/390816030引用 4 楼 sdkhy0808 的回复:Quote: 引用 2 楼 colddown 的回复:insmod是把模块加载进内核,加载之后才能运行。make modules_install 只是把编译好的模块拷贝到系统目录下(一般是/lib/modules/)。谢谢你的回答。那make modules_install...转载 2018-03-23 14:42:42 · 5341 阅读 · 0 评论 -
Linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解
转载地址:https://www.linuxidc.com/Linux/2011-10/44721p4.htm前面我们介绍模块编程的时候介绍了驱动进入内核有两种方式:模块和直接编译进内核,并介绍了模块的一种编译方式——在一个独立的文件夹通过makefile配合内核源码路径完成 那么如何将驱动直接编译进内核呢? 在我们实际内核的移植配置过程中经常听说的内核裁剪又是转载 2018-03-09 08:46:03 · 271 阅读 · 0 评论 -
在menuconfig中选择m和 y的区别
转载地址:http://blog.youkuaiyun.com/david_xtd/article/details/25974927在menuconfig中选择m和 y的区别: y: 模块驱动编译到内核中,启动时自动加载 m:模块会被编译,但是不会被编译到内核中,只是生成.o文件,我们可以收集这些.o文件做到linux的文件系统中,然后用insmod实现动态加载。转载 2018-03-09 08:45:39 · 2849 阅读 · 0 评论 -
在Linux内核中单独编译KO文件
转载地址:http://blog.youkuaiyun.com/suntao222/article/details/7457886在当前模块目录下创建Makefile: obj-m := mxt224.o然后再该模块目录下打开终端输入:make -C /home/kernel_path/ M=$(pwd) modules/home/kernel_path/ 是内核所在路径转载 2018-03-08 08:58:27 · 6305 阅读 · 0 评论 -
Linux .ko模块的生成方式
转载地址:http://blog.youkuaiyun.com/tugouxp/article/details/69053633#include "linux/init.h" #include "linux/module.h" #include "linux/kernel.h" //必选 //模块许可声明 MODULE_LICENSE("Dual BSD/GPL"); //模块加载函...转载 2018-03-08 08:58:19 · 2653 阅读 · 0 评论 -
[驱动注册]platform_driver_register()与platform_device_register()
转载地址:http://blog.youkuaiyun.com/ufo714/article/details/8595021 设备与驱动的两种绑定方式:在设备注册时进行绑定及在驱动注册时进行绑定。 以一个USB设备为例,有两种情形:(1)先插上USB设备并挂到总线中,然后在安装USB驱动程序过程中从总线上遍历各个设备,看驱动程序是否与其相匹配,如果匹配就将两者邦定。这就是platform_drive转载 2017-09-20 18:43:26 · 10200 阅读 · 0 评论 -
linux驱动开发(一)—GPIO驱动框架
转载地址:http://blog.youkuaiyun.com/zengxianyang/article/details/50589214前言 GPIO驱动是Linux驱动开发中最基础、但却是很常用、很重要的驱动。比如你要点亮一个LED灯、键盘扫描、输出高低电平等等。而Linux内核的强大之处在于对最底层的GPIO硬件操作层的基础上封装了一些统一的GPIO操作接口,也就是所谓的GP转载 2017-09-20 18:37:15 · 1205 阅读 · 0 评论 -
Linux下GPIO驱动模型
转载地址:http://blog.sina.com.cn/s/blog_5ef638bc0100rzve.htmlGPIO是与硬件体系密切相关的,linux提供一个模型来让驱动统一处理GPIO,当然你也可以选择不用这个模型实现gpio。具体见说明文档Documention/gpio.txt。下面粗略说一下这个模型关键的数据结构和函数: 为了给不同GPIO控制器提供一个转载 2017-09-20 11:00:12 · 2455 阅读 · 0 评论 -
系统启动时在bus系统中注册platform总线
转载地址:http://blog.youkuaiyun.com/tongxinv/article/details/54853494 系统启动时在bus系统中注册platform总线 platform总线的注册是由platform_bus_init函数完成的,主要的内容是注册bus_type结构体类型的变量Linux设备模型–设备驱动模型和sysfs文件转载 2017-09-18 12:36:58 · 623 阅读 · 0 评论 -
基于S3C2440的Linux-3.6.6移植 PWM蜂鸣器驱动
转载地址:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=23795897&id=4537163Linux带有基于PWM蜂鸣器的通用驱动程序——Pwm-beeper.c(位于drivers/input/misc目录下),它是属于输入子系统的。因此要移植该驱动,只需要在自己的开发板程序文件中添加PWM蜂鸣器的平台设备及相关属性即转载 2017-09-26 16:13:11 · 642 阅读 · 0 评论 -
基于tiny4412的Linux内核移植 -- PWM子系统学习
转载地址:http://www.cnblogs.com/pengdonglin137/p/5171275.htmlExynos4412一共可以输出4路PWM(timer0、timer1、timer2、timer3产生的PWM有对应的输出引脚,timer4没有对应的引脚),但是在tiny4412上只有两路PWM引出供片外外设使用,分别来自timer0和timer1,其中timer0输出的PW转载 2017-09-26 15:44:05 · 936 阅读 · 0 评论 -
Linux系统PWM驱动
转载地址:http://blog.youkuaiyun.com/borntox/article/details/51879786硬件平台:IMX6内核版本:kernel3.0.35在linux内核中有一个规律,Linux内核开发者把通用的东西都总结出来,个性化的东西就留出接口,和GPIO驱动类似,PWM驱动在内核中也提供了对应的接口函数,内核提供的接口函数声明在include/linu转载 2017-09-26 15:39:00 · 1375 阅读 · 0 评论