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

评论(43) 浏览(103122)

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

评论(11) 浏览(27721)

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

评论(31) 浏览(26407)

为什么会有“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

评论(16) 浏览(17292)

kobject在字符设备中的使用

作者:linuxer 发布于:2014-12-4 18:14

关于kobject的基本概念的描述请参考Linux设备模型(2)_Kobject中的描述。本文主要以字符设备为例,描述内核中使用kobject的一个场景,以便加深对kobject这个内核神器的理解。

阅读全文>>

标签: kobject cdev

评论(6) 浏览(13718)

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

评论(72) 浏览(62696)

Linux时间子系统之(十五):clocksource

作者:linuxer 发布于:2014-12-1 19:03 分类:时间子系统

和洋葱一样,软件也是有层次的,内核往往需要对形形色色的某类型的驱动进行抽象,屏蔽掉其具体的特质,获取该类驱动共同的逻辑,而又根据这些逻辑撰写该类 驱动的抽象层。嵌入式系统总是会提供timer的硬件block,软件需要对timer硬件提供的功能进行抽象:linux kernel将timer类型的硬件抽象成两个组件,一是free running的counter,另外一个是指定的counter值上产生中断的能力。本文主要描述第一个组件,在内核中被称作clock source。

阅读全文>>

标签: 时间子系统 clocksource

评论(15) 浏览(33422)

Linux common clock framework(3)_实现逻辑分析

作者:wowo 发布于:2014-11-24 22:31 分类:电源管理子系统

前面两篇clock framework的分析文章,分别从clock consumerclock provider的角度,介绍了Linux kernel怎么管理系统的clock资源,以及device driver怎么使用clock资源。本文将深入到clock framework的内部,分析相关的实现逻辑。

注:本文使用的kernel版本为linux-3.10.29。虽然最新版本的kernel增加了一些内容,但主要逻辑没有改变,就不紧跟kernel的步伐了。

 

阅读全文>>

标签: Linux framework clock 实现

评论(21) 浏览(30491)

一个技术男眼中的Smartisan T1手机

作者:travelhop 发布于:2014-11-24 11:03 分类:技术漫谈

作者从一个技术人的眼光来看一部颇有争议的Smartisan T1手机,也就是传说中的锤子手机。

锤子手机究竟如何?

好用吗?

锤子手机的情怀究竟为何物?

这篇文章给不了你所有的答案,这篇文站只会告诉你,很多事情,要体验,要感受,而且,要有端正的三观作为基础。

阅读全文>>

标签: 锤子手机 三观端正 罗永浩 体验 Smartisan T1

评论(4) 浏览(10851)

从“码农”说起

作者:travelhop 发布于:2014-11-18 10:53 分类:技术漫谈

一个正常的市场经济里,有创意,有技术的人,都是能够得到回报的。现在我们的社会还远远没有到软件供过于求的状态,反而是大量的需求得不到满足,大量的社会协调缺乏软件技术的协助。相信机会总是有的——即使是在中国。

阅读全文>>

标签: 码农 宿命 人力成本

评论(1) 浏览(8738)

Copyright @ 2013-2015 蜗窝科技 All rights reserved. Powered by emlog