ARM WFI和WFE指令
作者:wowo 发布于:2014-12-10 22:43 分类:ARMv8A Arch
蜗蜗很早以前就知道有WFI和WFE这两个指令存在,但一直似懂非懂。最近准备研究CPU idle framework,由于WFI是让CPU进入idle状态的一种方法,就下决心把它们弄清楚。
WFI(Wait for interrupt)和WFE(Wait for event)是两个让ARM核进入low-power standby模式的指令,由ARM architecture定义,由ARM core实现。听着挺简单,但怎么会有两个指令?它们的区别是什么?使用场景是什么?深究起来,还挺有意思,例如:能想象WFE和spinlock的关系吗?
标签: Architecture aarch64 ARM wfe wfi
ARM概念梳理:Architecture, Core, CPU,SOC
作者:wowo 发布于:2014-12-9 22:54 分类:ARMv8A Arch
本文简单梳理一下ARM有关的概念,包括ARM architecture、ARM core、ARM CPU(或MCU)以及ARM Soc。我们这些以ARM平台为主的嵌入式工程师,几乎每天都会和这些概念打交道,也似乎非常理解它们。但仔细想想,却有些说不清道不明的感觉,因而有必要整理一下思路,也就顺手记录下来了。标签: Architecture ARM core soc
Linux时间子系统之(十六):clockevent
作者:linuxer 发布于:2014-12-9 19:56 分类:时间子系统
clockevent模块的代码位于linux/kernel/time/clockevents.c,是用来管理系统中的能够触发中断的timer硬件资源的一个模块,该模块的功能分成四个部分:
1)向上层的其它driver(我们称之clock event user)提供操作clock event的通用API。
2) 实现clock event控制的通用逻辑,这部分和硬件无关,我们也称之clock event core(其实内核有各种core、input core,USB core,I2C core等等,概念是类似)。 有了它,clock event user(例如high resolution timer)再也不用担心底层的硬件细节了,特别是底层的timer硬件是arch相关的时候(不要怀疑,linux kernel有过这样的时代)。
3)将和硬件相关的clock event控制逻辑封装成操作函数集,并向底层clockevent chip driver提供注册接口。这样,clock event控制的通用逻辑就可以直接调用底层操作函数,进行具体的硬件操作。
4)实现sysfs用户空间接口。
本文将分成4个章节,分别描述这四个部分的代码逻辑。
标签: clockevent
为什么会有“ARMv8A Architecture”这个分类
作者:wowo 发布于:2014-12-6 15:40 分类:ARMv8A Arch
2013年9月11日(是的,911),在ARM公司发布UEFI 64-bit之后,ARM社区release了ARMv8A版本的ARM Architecture Reference Manual(我已经下载,感兴趣的同学可以找我要)。在release note中,作者给出了这样一个设问句:“Why develop ARMv8-A?”。本文也效仿一下,以自问自答的形式,说明为什么会在博客中增加这样一个分类,以及期望达成的目的。
标签: Architecture arm64 aarch64 armv8-a
kobject在字符设备中的使用
作者:linuxer 发布于:2014-12-4 18:14
关于kobject的基本概念的描述请参考Linux设备模型(2)_Kobject中的描述。本文主要以字符设备为例,描述内核中使用kobject的一个场景,以便加深对kobject这个内核神器的理解。Linux时间子系统之(十七):ARM generic timer驱动代码分析
作者:linuxer 发布于:2014-12-2 10:47 分类:时间子系统
关注ARM平台上timer driver(clocksource chip driver和clockevent chip driver)的驱动工程师应该会注意到timer硬件的演化过程。在单核时代,各个SOC vendor厂商购买ARM core的IP,然后自己设计SOC上的peripherals,这里面就包括了timer的硬件。由于没有统一的标准,各个厂商的设计各不相同,这给驱 动工程师带来了工作量。然而,如果仅仅是工作量的话就还好,实际上,不仅仅如此。linux的时间子系统要求硬件timer提供下面两种能力:一是 free running的counter,此外需要能够在指定的counter值上产生中断的能力。有些硬件厂商会考虑到软件的需求(例如:PXA270的 timer硬件),但是有些硬件厂商做的就不够,例如:S3C2451的timer硬件。我们在写PXA270的timer硬件驱动的时候是毫无压力的, 而在写S3C2451的timer的驱动的时候,最大的愿望就是把三星的HW timer的设计人员拉出来打一顿。
进入多核时代后,ARM 公司提供了timer的硬件设计,集成在了自己的多核结构中。例如:在Cortex A15 MPcore的硬件体系结构中有一个HW block叫做Generic Timer(该硬件取代了A9中的global timer、private timer的功能),为系统提供了计时以及触发timer event的功能。
本文主要描述了Generic Timer的相关硬件知识以及在linux kernel中如何驱动该硬件。Generic Timer的代码位于linux-3.14/drivers/clocksource/目录下,该目录保存了所有clock source相关的driver,arm_arch_timer.c就是驱动Cortex A15 MPcore的Generic Timer的。
标签: armv7-timer arm_arch_timer
Linux时间子系统之(十五):clocksource
作者:linuxer 发布于:2014-12-1 19:03 分类:时间子系统
和洋葱一样,软件也是有层次的,内核往往需要对形形色色的某类型的驱动进行抽象,屏蔽掉其具体的特质,获取该类驱动共同的逻辑,而又根据这些逻辑撰写该类 驱动的抽象层。嵌入式系统总是会提供timer的硬件block,软件需要对timer硬件提供的功能进行抽象:linux kernel将timer类型的硬件抽象成两个组件,一是free running的counter,另外一个是指定的counter值上产生中断的能力。本文主要描述第一个组件,在内核中被称作clock source。标签: 时间子系统 clocksource
功能
最新评论
- wangjing
写得太好了 - wangjing
写得太好了! - DRAM
圖面都沒辦法顯示出來好像掛點了。 - Simbr
bus至少是不是还有个subsystem? - troy
@testtest:只要ldrex-modify-strex... - gh
Linux 内核在 sparse 内存模型基础上实现了vme...
文章分类
随机文章
文章存档
- 2025年4月(5)
- 2024年2月(1)
- 2023年5月(1)
- 2022年10月(1)
- 2022年8月(1)
- 2022年6月(1)
- 2022年5月(1)
- 2022年4月(2)
- 2022年2月(2)
- 2021年12月(1)
- 2021年11月(5)
- 2021年7月(1)
- 2021年6月(1)
- 2021年5月(3)
- 2020年3月(3)
- 2020年2月(2)
- 2020年1月(3)
- 2019年12月(3)
- 2019年5月(4)
- 2019年3月(1)
- 2019年1月(3)
- 2018年12月(2)
- 2018年11月(1)
- 2018年10月(2)
- 2018年8月(1)
- 2018年6月(1)
- 2018年5月(1)
- 2018年4月(7)
- 2018年2月(4)
- 2018年1月(5)
- 2017年12月(2)
- 2017年11月(2)
- 2017年10月(1)
- 2017年9月(5)
- 2017年8月(4)
- 2017年7月(4)
- 2017年6月(3)
- 2017年5月(3)
- 2017年4月(1)
- 2017年3月(8)
- 2017年2月(6)
- 2017年1月(5)
- 2016年12月(6)
- 2016年11月(11)
- 2016年10月(9)
- 2016年9月(6)
- 2016年8月(9)
- 2016年7月(5)
- 2016年6月(8)
- 2016年5月(8)
- 2016年4月(7)
- 2016年3月(5)
- 2016年2月(5)
- 2016年1月(6)
- 2015年12月(6)
- 2015年11月(9)
- 2015年10月(9)
- 2015年9月(4)
- 2015年8月(3)
- 2015年7月(7)
- 2015年6月(3)
- 2015年5月(6)
- 2015年4月(9)
- 2015年3月(9)
- 2015年2月(6)
- 2015年1月(6)
- 2014年12月(17)
- 2014年11月(8)
- 2014年10月(9)
- 2014年9月(7)
- 2014年8月(12)
- 2014年7月(6)
- 2014年6月(6)
- 2014年5月(9)
- 2014年4月(9)
- 2014年3月(7)
- 2014年2月(3)
- 2014年1月(4)