首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Linux RTC驱动模型分析

linux为新的接口设计一套驱动模型,如果驱动工程师想增加某一个驱动,只需要将芯片相关的代码编写,然后注册到rtc核心层中即可。...RTC驱动框架 RTC涉及的代码如下: driver/rtc/class.c: 此文件向linux内核驱动模型注册了一个类RTC, 同时为底层的RTC驱动提供了注册/注销RTC接口。...rtc-dev.c是对各式各样的rtc驱动的一个抽象,所以下一步先分析rtc-dev.c。...基本数据结构 在分析代码之前需要了解一些必要的数据结构 1. struct rtc-device数据结构 struct rtc_device { struct device dev; struct...rtc-dev.c代码分析 rtc-dev.c是对形形色色的rtc设备进行抽象,实现一些公共的功能,然后将此抽象rtc设备注册为字符设备。

6K41

Linux 驱动挂载顺序分析

手把手教你分析 Linux 启动流程 从上文可以得出,start_kernel 函数最后调用的是 rest_init 函数,其实 rest_init 函数不光产生了最重要的 kernel_init (...linux4.14/init/main.c 驱动的优先级:Linux 把系统中需要挂载的各种东西,都分为14个等级,分别为 1--1s--2--2s--3--3s--4--4s--5--5s--6-...-6s--7--7s,数字越小优先级越高,定义在: linux4.14/include/linux/init.h 一般我们自己写的驱动模块,文件最后会声明一个 module_init 和 module_exit...(静态编译) 3、动态加载驱动模块:等 Linux 系统起来以后,手动执行 insmod 和 rmmod 即可挂载和卸载驱动,顺序自己决定。测试成功后,再搞到内核中静态编译。...有两种方式: 1、找到编译后的 Linux 内核源码,根目录下面有个 System.map 文件,这里记载了 Linux 内核所做的所有的事情,是按顺序记载的(也有可能在其他输出目录)。

2.3K30

郭健: Linux时间子系统之ARM generic timer驱动代码分析

本文主要描述了Generic Timer的相关硬件知识以及在linux kernel中如何驱动该硬件。...Generic Timer的代码位于linux-3.14/drivers/clocksource/目录下,该目录保存了所有clock source相关的driver,arm_arch_timer.c就是驱动...这个table也就保存了kernel支持的所有的clock source的ID信息(最重要的是驱动代码初始化函数和DT compatible string)。...2、CP15 Timer初始化代码分析 CP15 Timer初始化代码如下所示: ? (1)arch_timers_present用来记录系统中的timer情况,定义如下: ?...3、memory mapped Timer初始化代码分析 TODO 四、和linux kernel时间子系统的接口 linux的时间子系统需要两种时间相关的硬件:一个是free running

3.4K20

19.Linux-USB总线驱动分析

一个传输方向下 传输方向都是基于USB主机的立场说的, 比如:鼠标的数据是从鼠标传到PC机, 对应的端点称为"中断输入端点" 其中端点0是设备的默认控制端点, 既能输出也能输入,用于USB设备的识别过程 同样linux...从上面函数中得到, 要想执行hub_events(),都要等待khubd_wait这个中断唤醒才行 2.我们搜索”khubd_wait”,看看是被谁唤醒  找到该中断在kick_khubd()函数中唤醒,代码如下...其中usb_bus_type是一个全局变量, 它和我们之前学的platform平台总线相似,属于USB总线, 是Linux中bus的一种....devmap.devicemap);     //设置位 udev->devnum = devnum;               } } 从上面代码分析到每次的地址编号是连续加的...id_table来匹配该USB设备 USB总线驱动程序大概流程就此结束,未完待续——分析完后下节开始写USB驱动

8.6K91

Linux笔记(21)| platform总线驱动分析

为了使这部分设备的驱动开发也能够遵循设备驱动模型,Linux内核引入了一种虚拟的总线——平台总线(platform bus)。...今天的重点就是和大家分享一下我是如何分析在平台总线下led的设备文件和驱动文件是怎么写的。 先来看设备文件。...我们来看一下代码里相应的部分: ? name就是设备的名字,这个要和驱动里面一致,因为总线是通过名字来匹配的。 id是相同类型设备的区分,比如都是led设备,名字可以一样,只要id不同就行。...在Linux里面用了几个宏来定义资源 ? 在嵌入式中,基本上没有IO地址空间,所以通常使用IORESOURCE_MEM。代码中是这样定义的。 ? 我们把宏一层层展开,就得到下面这样子: ?...这样,我们就把驱动分析完了,最后编写Makefile来编译程序,生产.ko文件,安装模块,就可以在/dev目录下看到注册的led设备文件,往设备文件里进行读写就可以操控硬件了。

2.3K40

30.Linux-RTC驱动分析及使用

linux中的rtc驱动位于drivers/rtc下,里面包含了许多开发平台的RTC驱动,我们这里是以S3C24xx为主,所以它的RTC驱动为rtc-s3c.c 1.进入....这里注册了一个“s3c2410-rtc”名称的平台设备驱动 而“s3c2410-rtc”的平台设备,在....接下来便来看rtc_device_register(),代码如下: struct rtc_device *rtc_device_register(const char *name, struct device...添加一个从设备到系统中 显然这里的注册字符设备,和我们上节讲的http://www.cnblogs.com/lifexy/p/7827559.html一摸一样的流程 所以“s3c2410-rtc”平台设备驱动的...5.1接下来,便开始设置RTC时间 在linux里有两个时钟: 硬件时钟(2440里寄存器的时钟)、系统时钟(内核中的时钟) 所以有两个不同的命令: date命令、hwclock命令 5.2 date命令使用

2.7K80

Linux的I2C驱动框架分析

驱动 简单的说驱动代表着操作设备的方式和流程。 Linux总线设备框架的工作原理 如果想要弄清楚I2C驱动框架,必须深刻的理解Linux的总线设备框架。...之所以会形成这样的框架,很重要的原因是为了代码的复用性。因为驱动和设备的关系是一对多的,对于相同类型的不同的设备,可共用同一套驱动程序接口。为了提高驱动的可移植性,Linux抽象出一套管理资源的函数。...3.Linux下I2C驱动程序的体系结构 ---- 对于Linux下的I2C驱动,其体系结构的组成主要分为三个部分 (1)I2C核心:I2C核心提供了I2C总线驱动和设备驱动的注册,注销方法,I2C通信方法...(”algorithm”)上层的,与具体适配器无关的代码以及探测设备,检测设备地址的上层代码等。...下面来基本分析一下其调用过程: 当应用程序通过ioctl传递VIDIO_S_FMT,是可以设置摄像头输出的格式 ? 然后看一下写寄存器的过程 ?

4.7K11

全志T3 Linux显示驱动分析

1、总体架构         全志T3处理器的显示框架是基于标准Linux的帧缓冲架构,其结构如图 1.1所示。...显示控制器DE的驱动架构如图 1.2所示,包括屏蔽差异的显示管理抽象层,以及显示图层驱动、显示设备驱动、背光驱动、enhance驱动和capture驱动。 ? 图 1.1帧缓冲设备驱动结构 ?...、smbl驱动、enhance驱动、cptr驱动、图层驱动以及管理层的相关操作接口,并且disp_drv_info中包含有struct disp_manager类型的成员。...        显示驱动初始化总体流程如图 3.1所以,驱动注册为Linux的平台设备,初始化入口是disp_probe。...DE的enhance驱动; 初始化显示控制器DE的背光控制驱动; 初始化显示控制器DE的capture驱动; 将管理层驱动与抽象图层、lcd设备驱动、enhance驱动、背光控制驱动、capture驱动关联起来

2.7K10

34.Linux-printk分析、使用printk调试驱动

本节学习目的 1)分析printk()函数 2)使用printk()调试驱动 1.在驱动调试中,使用printk(),是最简单,最方便的办法 当uboot的命令行里的“console=tty1”时,表示...2.我们以“console=ttySA0,115200”为例,进入linux-2.6.22.6\kernel\printk.c 找到以下一段: __setup("console=", console_setup...setup()的作用就是: 若uboot传递进来的命令行字符串里含有“console=”,便调用console_setup()函数,并对“console=”后面带的字符串"ttySA0,115200"进行分析...,接下来便来说说如何使用printk()来调试驱动 只需要一段代码就ok: printk(KERN_DEBUG"%s %s %d\n", __FILE__, __FUNCTION__, __LINE__...然后在驱动中,可以通过上面代码插入到每行需要调试的地方, 然后参考上面第9小节,设置console_loglevel值大于7(KERN_DEBUG)。

4.7K60
领券