卷一 内核源代码分析 第二章 异常 2.2.4 OMAP4的中断体系 图书试读版-请勿转载
作者 crosskernel@gmail.com
2.2.4 OMAP4的中断体系
尽管已经宣布推出手机市场,但是作为移动处理器领域曾经的领袖, Ti在相当长的时间里总是抢先发布性能最强的新一代ARM处理器。而且早期还会搭配其强劲的DSP以配合ARM CORE工作。尽管Ti在3G时代遭受专利困境,但是凭借其强大的ARM处理器设计能力在没有Modem的情况下支撑了两代:Omap3是第一款Cortex A8产品,且加入了C64+DSP,当时的性能在业界无出其右。接着随着Neon和硬件编解码的兴起,Omap4里弱化了DSP作用,但依然领导业界进入双核时代。
也许因为OMAP5的功耗实在不能满足手机需求,也许无法集成Modem弱化了Ti的竞争力,也许Ti早已决心转身模拟,以后的手机处理器将不会有Ti的身影。Ti将Omap5的积累转化成其嵌入式产品keystoneII,但是嵌入式处理器的演进由于其市场需求的原因,将不会像手机处理器那样精彩。
本节介绍Omap4中断体系。
初始化:
void __init gic_init_irq(void)
{
…
//首先map出中断控制器Distributor寄存器空间
gic_dist_base_addr = ioremap(OMAP44XX_GIC_DIST_BASE, SZ_4K);
BUG_ON(!gic_dist_base_addr);
//对Distributor的初始化
gic_dist_init(0, gic_dist_base_addr, 29);
/* Static mapping, never released */
//map出中断控制器cpu interface寄存器空间
gic_cpu_base_addr = ioremap(OMAP44XX_GIC_CPU_BASE, SZ_512);
BUG_ON(!gic_cpu_base_addr);
gic_cpu_init(0, gic_cpu_base_addr);
以上2次map,实际上在就是在页表中建立虚拟地址到物理地址的映射。这个动作只在主处理器初始化时进行,而在第二颗处理器初始化时并未进行map操作。其原因在于:
1 第二颗处理器初始化过程中上拷贝了主处理器的页表页目录
2 从每颗处理器往外看:
Distributor,系统中就一个,其物理地址位于:
#define OMAP44XX_GIC_DIST_BASE 0x48241000
cpu interface,虽然每个处理器都有自己的空间,但是显然在omap4的实现中将其做成了相同的物理地址,
#define OMAP44XX_GIC_CPU_BASE 0x48240100
}
void __cpuinit gic_cpu_init(unsigned int gic_nr, void __iomem *base)
{ …
gic_data[gic_nr].cpu_base = base;
//初始化CPU 中断控制信息,这里没有显示的区分对哪颗CPU操作,但是由于上述的虚拟地址的拷贝关系,哪个处理器执行到这里,就对哪颗处理器操作。
writel(0xf0, base + GIC_CPU_PRIMASK);
writel(1, base + GIC_CPU_CTRL);
}
void __init gic_dist_init(unsigned int gic_nr, void __iomem *base, unsigned int irq_start)
{
//这里最关键的是记下Distributor的虚拟地址
gic_data[gic_nr].dist_base = base;
}
第二颗CPU interface的初始化
void __cpuinit platform_secondary_init(unsigned int cpu)
{
trace_hardirqs_off();
//初始化该CPU 中断控制信息
gic_cpu_init(0, gic_cpu_base_addr);
…
spin_lock(&boot_lock);
spin_unlock(&boot_lock);
}
CPU间中断发射
static inline void smp_cross_call(const struct cpumask *mask)
{
gic_raise_softirq(mask, 1);
}
//mask记录了要向哪些处理器发射中断,irq记录要产生的中断号
#ifdef CONFIG_SMP
void gic_raise_softirq(const struct cpumask *mask, unsigned int irq)
{
unsigned long map = *cpus_addr(*mask);
/* this always happens on GIC0 */
/*Distributor 的Software Generated Interrupt Register (ICDSGIR)用法如下:
第16位 -– 第23位 :目标处理器
第0 位 -– 第4位 : 中断号
以下语句向mask标记的CPU发射irq号中断*/
writel(map << 16 | irq, gic_data[0].dist_base + GIC_DIST_SOFTINT);
}
#endif
卷一 内核源代码分析 第二章 异常 2.2.4 OMAP4的中断体系 图书试读版-请勿转载相关推荐
- 《LINUX3.0内核源代码分析》第二章:中断和异常 【转】
转自:http://blog.chinaunix.net/uid-25845340-id-2982887.html 摘要:第二章主要讲述linux如何处理ARM cortex A9多核处理器的中断.异 ...
- 《LINUX3.0内核源代码分析》第一章:内存寻址
https://blog.csdn.net/ekenlinbing/article/details/7613334 摘要:本章主要介绍了LINUX3.0内存寻址方面的内容,重点对follow_page ...
- Linux内核源代码分析-目录
第一部分 Linux 内核源代码 arch/i386/kernel/entry.S 2 arch/i386/kernel/init_task.c 8 arch/i386/kernel/irq.c 8 ...
- linux内核源代码分析----内核基础设施之klist
概述 klist是list的线程安全版本,他提供了整个链表的自旋锁,查找链表节点,对链表节点的插入和删除操作都要获得这个自旋锁.klist的节点数据结构是klist_node,klist_node引入 ...
- 读书笔记《Outlier Analysis》 第二章 异常检测的概率和统计模型
第二章 异常检测的概率和统计模型 1.为什么要讲概率和统计模型? 之所以一开始就讲概率和统计模型,是因为最早的异常检测方法时根植于概率和统计模型的. 这些方法是在计算机技术出现和普及之前就提出的,因此 ...
- Linux内核源代码分析——可执行文件header处理(二进制文件读写范例,写DUL工具入门指引)...
在把Linux内核源代码生成Image之前,需要把执行文件头结构信息剔除出来.这个过程对理解Linux内核具有很大的帮助.同时,由于是对可执行文件进行直接读写操作,想写DUL工具的童鞋可以在这里学习到 ...
- linux VFS概述以及内核源代码分析
linux VFS概述以及内核源代码分析 一. 概述 Linux能够支持各种不同的文件系统是通过VFS实现的,由于不同的物理文件系统具有不同的组织结构和不同的处理方式,为了能够处理各种不同的物理文 ...
- Linux内核源代码分析-第三章 内核体系结构概述-1
第3章 内核体系结构概述 本章从较高层次上对内核进行说明.从顺序上来说,本章首先介绍内核设计目标,接下来 介绍内核体系结构,最后介绍内核源程序目录结构. 3.1 内核设计目标 Linux 的内核展现出 ...
- Linux内核源代码分析——fork()原理多进程网络模型
今晚和一位500强的leader喝喝小酒吃吃烤鱼,生活乐无边.这位兄弟伙才毕业2年,已经做到管理层了,机遇和能力不可谓不好.喝酒之余,聊到Linux内核的两个问题--fork().exec()的原理. ...
最新文章
- 在Ubuntu 16.04.5 LTS上利用python中的PIL模块压缩一百多兆的单张图片实操
- [C++再学习系列] 前置++与后置++
- 字符串静态顺序结构C/C++实现(数据结构严蔚敏版)
- AI理论知识整理(7)-单高斯模型
- 管理集群中的 crs 管理员
- 6. Observable 和 数组的区别
- linux对文件属性及权限操作的一些基本命令
- 最小生成树:Kruskal算法
- Win11 WSA 安卓子系统 下载安装更新
- 电脑扩展屏 HDMI转VGA
- 计算机初级程序员哪里颁发的,初级程序员证书怎么考_初级程序员证书考什么_上学吧...
- 存储远程复制缺点_远程医疗有一个隐藏的缺点
- 移动端H5页面必用代码
- 山中无甲子,寒尽不知年
- 淘宝8850h小主机黑苹果教程
- 小程序代码审核一二事
- 安利超实用的游戏技能特效素材!
- 为什么有些人除了上课时间以外都没有学习,成绩却还是很好?
- B站愚人节彩蛋,UP主 “集体变绿”
- Halcon 字符串与HTuple互转,double与HTuple互转,Mat与HObject互转