作者 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的中断体系 图书试读版-请勿转载相关推荐

  1. 《LINUX3.0内核源代码分析》第二章:中断和异常 【转】

    转自:http://blog.chinaunix.net/uid-25845340-id-2982887.html 摘要:第二章主要讲述linux如何处理ARM cortex A9多核处理器的中断.异 ...

  2. 《LINUX3.0内核源代码分析》第一章:内存寻址

    https://blog.csdn.net/ekenlinbing/article/details/7613334 摘要:本章主要介绍了LINUX3.0内存寻址方面的内容,重点对follow_page ...

  3. Linux内核源代码分析-目录

    第一部分 Linux 内核源代码 arch/i386/kernel/entry.S 2 arch/i386/kernel/init_task.c 8 arch/i386/kernel/irq.c 8 ...

  4. linux内核源代码分析----内核基础设施之klist

    概述 klist是list的线程安全版本,他提供了整个链表的自旋锁,查找链表节点,对链表节点的插入和删除操作都要获得这个自旋锁.klist的节点数据结构是klist_node,klist_node引入 ...

  5. 读书笔记《Outlier Analysis》 第二章 异常检测的概率和统计模型

    第二章 异常检测的概率和统计模型 1.为什么要讲概率和统计模型? 之所以一开始就讲概率和统计模型,是因为最早的异常检测方法时根植于概率和统计模型的. 这些方法是在计算机技术出现和普及之前就提出的,因此 ...

  6. Linux内核源代码分析——可执行文件header处理(二进制文件读写范例,写DUL工具入门指引)...

    在把Linux内核源代码生成Image之前,需要把执行文件头结构信息剔除出来.这个过程对理解Linux内核具有很大的帮助.同时,由于是对可执行文件进行直接读写操作,想写DUL工具的童鞋可以在这里学习到 ...

  7. linux VFS概述以及内核源代码分析

    linux VFS概述以及内核源代码分析 一.   概述 Linux能够支持各种不同的文件系统是通过VFS实现的,由于不同的物理文件系统具有不同的组织结构和不同的处理方式,为了能够处理各种不同的物理文 ...

  8. Linux内核源代码分析-第三章 内核体系结构概述-1

    第3章 内核体系结构概述 本章从较高层次上对内核进行说明.从顺序上来说,本章首先介绍内核设计目标,接下来 介绍内核体系结构,最后介绍内核源程序目录结构. 3.1 内核设计目标 Linux 的内核展现出 ...

  9. Linux内核源代码分析——fork()原理多进程网络模型

    今晚和一位500强的leader喝喝小酒吃吃烤鱼,生活乐无边.这位兄弟伙才毕业2年,已经做到管理层了,机遇和能力不可谓不好.喝酒之余,聊到Linux内核的两个问题--fork().exec()的原理. ...

最新文章

  1. 在Ubuntu 16.04.5 LTS上利用python中的PIL模块压缩一百多兆的单张图片实操
  2. [C++再学习系列] 前置++与后置++
  3. 字符串静态顺序结构C/C++实现(数据结构严蔚敏版)
  4. AI理论知识整理(7)-单高斯模型
  5. 管理集群中的 crs 管理员
  6. 6. Observable 和 数组的区别
  7. linux对文件属性及权限操作的一些基本命令
  8. 最小生成树:Kruskal算法
  9. Win11 WSA 安卓子系统 下载安装更新
  10. 电脑扩展屏 HDMI转VGA
  11. 计算机初级程序员哪里颁发的,初级程序员证书怎么考_初级程序员证书考什么_上学吧...
  12. 存储远程复制缺点_远程医疗有一个隐藏的缺点
  13. 移动端H5页面必用代码
  14. 山中无甲子,寒尽不知年
  15. 淘宝8850h小主机黑苹果教程
  16. 小程序代码审核一二事
  17. 安利超实用的游戏技能特效素材!
  18. 为什么有些人除了上课时间以外都没有学习,成绩却还是很好?
  19. B站愚人节彩蛋,UP主 “集体变绿”
  20. Halcon 字符串与HTuple互转,double与HTuple互转,Mat与HObject互转

热门文章

  1. 关于app更新升级的方法
  2. 汽车生产MES系统能帮助企业解决哪些问题
  3. CSS入门篇10.浮动的简介与三个特点
  4. 阿里P8测开晒出2月工资条,看完真的狠狠扎心了…
  5. AcWing 708. 偶数
  6. 关于新闻的上一篇,下一篇
  7. pywinauto教程
  8. 手机拍照计数器软件哪个好?这些软件值得收藏
  9. zynq-7000系列基于zynq-zed的linux-uboot的编译
  10. 青少年趣味编程社区法则