原文: http://blog.gqylpy.com/gqy/429
置顶:来自一名75后老程序员的武林秘籍——必读(博主推荐)
来,先呈上武林秘籍链接:http://blog.gqylpy.com/gqy/401/
你好,我是一名极客!一个 75 后的老工程师!
我将花两分钟,表述清楚我让你读这段文字的目的!
如果你看过武侠小说,你可以把这个经历理解为,你失足落入一个山洞遇到了一位垂暮的老者!而这位老者打算传你一套武功秘籍!
没错,我就是这个老者!
干研发 20 多年了!我也年轻过,奋斗过!我会画原理图,会画 PCB,会模拟,会数字!玩过 PLC,玩过单片机,会用汇编,会用 C!玩过 ARM,比如 PLC,STM32,和时下正在起飞的 NXP RT1052!搞过 DSP,比如 TMS320F28335!搞过 FPGA,不管 Xilinx 还是 Altera,也不管是 Verilog 还是 VHDL,或者直接画数字电路图!我懂嵌入式系统,比如 uCOS 和 Linux!我懂开源的硬件,比如 Arduino 和树莓派!我也搞软件,学了一堆上位机的语言C#,JAVA,Python,Kotlin,Swift!会写爬虫工具,又自学写APP,不管Android 还是 IOS!
可是这一切有什么用呢?土鸡瓦狗!不值一提!干技术的永远就是最苦逼的那个人!
我相信看到这里的你,应该是个 IT 圈的人!或许是个学生,在学习某个技能!或者是个初入职场的年轻人,在啃某个技术!或者是个工程师,被项目困住,想找个资料快速突破阻碍!反正不管怎么样,你们都不会是泛泛之辈,不可能轻易交出智商税!
所以我把这份资料放进我的收费资源里,以证明接下去我要跟你讲的这本武功秘籍是可以真真实实的帮你赚到钱的!
我不知道叫它什么好,我把它写的像武林秘籍!所以我姑且叫它《武林秘籍》或者叫《赚钱秘籍》!
《武林秘籍》里封装了一个本人近期创造的一个可以一劳永逸的赚钱方法!你可以理解为躺着赚钱,或者挂机赚钱!请你放心,不是让你去违法!
我是一个IT男,从来不忽悠别人,这是我做人的原则。若此举能帮助你付起房子首付与月供,减轻一些目前高房价的压力,何乐而不为呢!
我提取里边几个要点:
- 将你手里有的资源按照说明书一步一步完成所有动作就可以躺着赚钱。
- 你不可能不劳而获,但是用这个方法确实是可以一劳永逸!
- 我用业余时间操作这个项目三个月,现在每天稳定收入300+。
- 里边会告诉你哪些是资源,怎么源源不断的获取资源。
- 里边会告诉你怎么获取爆炸的流量。
- 里边会告诉你很多黑技能(不是干坏事)。
- 总之,里边字字如金,有些东西我不告诉你可能这辈子都不会知道!
交了这波智商税,你的能力会爆涨,我说的不是你的专业能力,而是在这个社会生存的基础能力!
以上所有的东西可以规为武功的招式,但如果你想短期就实现目标,我还在说明书的最后留下了一些现成资源的下载链接,包括一些稀缺的资源,保证物有所值。这部分内容可以规为内功,继不继承由你自已决定!
好了,最后跟所有的老者不一样的是:这个老人要问你收取一点点小费,才会把无比珍贵的秘籍交到你手中!
以下是付款链接,付款后你将获取《武林秘籍》的访问密码。随后你将解锁另外一个谋生技能,在工作挣着死工资的同时,该技能也能同时帮你赚另一份钱,终身受用!
http://www.gqylpy.com/get_wlmj_pwd
能在此遇见是我们的缘分,我愿意帮助你,祝你取得成功!
传说中的武林秘籍:http://blog.gqylpy.com/gqy/401/
Linux DTS中和中断相关属性的解释和用法
前言
Linux Device Tree中定义了很多和中断相关的属性,这些属性之间的关系错综复杂。为剖析这些关系,特地查阅文档后输出本文。本文基于ARM平台,主要说明如下几个属性:
- interrupt-controller
- interrupt-parent
- interrupt-cells
- interrupts
- interrupt domain和interrupt specifier
- interrupt-map
其中第5点属于中断相关文章中经常会提到的概念,并不是Device Tree中定义的属性。但理解它们也非常有必要,所以在这里一并解释下。
中断控制器的硬件结构(基于Exynos4412 ARMv7)
查看Exynos4412芯片手册中断相关章节可以确认Exynos4412有两个中断控制器,一个是常见的GIC(PL390),另外一个是Interrupt Combiner。具体连接关系如下所示:
可以看到这里的PL390后面又级联了一个名叫Interrupt Combiner的中断控制器。所以这颗SOC有两个interrupt controller,分别是GIC和Interrupt Combiner。下面分别看下这两个控制器的硬件细节。
GIC
先看下GIC的硬件细节,如下图所示:
可以看到GIC的外设中断(除去SGI)类型有两类:
- SPI,共享外设中断(由GIC内部的distributor来分发到相关CPU),中断号:32~1019
- PPI,私有外设中断(指定CPU接收),中断号:16~31
外设中断号的分配规则如下:
- 32~1019给SPI
- 16~31给PPI
所有外设中断都支持四种触发方式:
- 上升沿触发
- 下降沿触发
- 高电平触发
- 低电平触发
所以总结,exynos4412的GIC中断控制器(interrupt controller)通过中断类型、中断号、中断触发方式这三个要素可以描述一个唯一指定的中断。这种能够描述出系统中唯一中断的要素组合称为interrupt specifier
所以DTS中接在GIC的device node的interrupts属性也是用这三个要素来描述一个具体的中断。
格式如:interrupts = <interrupt type interrupt number trigger type>
Interrrupt Types | Interrrupt Number | Trigger Type |
---|---|---|
0 = SPI 1 = PPI |
32 … … 1019 |
1 = low to high 2 = high to low 4 = high level 8 = low level |
Interrupt Combiner
除了GIC这个controller外Exynos4412还有一个Combiner的interrupt controller。Combiner的硬件细节如下所示:
可以看到,连接到combiner控制器上的多个中断源会共享一个中断号,且这些中断都属于SPI类型。所以描述一个combiner的中断应该要包含两个要素。
interrupts = <group number interrupt number within group>
DTS对中断的描述
DTS中采用中断树来描述中断的连接信息以及级联情况等。但中断树和设备树的结构不一样,中断树是一个"倒树"。设备树都是从root到leaf的顺序来描述的,比如DTS都有一个root node,cpus、mem等都是它的子节点,而cpus或者mem节点下又分cpu@0、cpu@1等子节点。但中断树不一样,中断产生设备中会嵌入一个interrupt-parent属性,这个interrupt-parent会被赋值一个phandle变量,通过phandle指明这个设备中断物理上的连接关系。但并不是所有的中断产生设备节点都会显式定义interrupt-parent属性。如果一个中断产生设备没有定义interrupt-parent,那他的interrupt-parent就是设备树中的parent。所以根据前面的描述,中断树的连接关系是先找中断产生设备device node,然后找到这个node连接的interrupt-parent,所以和DTS的device node组织结构相比是倒过来的。
中断子树也可称之为中断域(interrupt domain)。同一个中断域下,设备的interrupt属性具有相同的格式和释义。中断树由多个中断域组成。
每个中断产生设备都采用一个interrupt属性来描述该设备的中断源信息,也称之为中断描述符。中断描述符的格式和含义是由interrupt domain决定。interrupt domian的根节点会有一个interrupt-cells属性来决定域内中断描述符占用<u32>的数目。比如像Open PIC中断控制器的中断描述符就需要中断号和中断触发类型两个<32>来描述
中断域是定义中断描述符的上下文(context)。一个中断域的根可以是interrupt-controller也可以是一个interrupt nexus。
1.interrupt-controller: 它是一个物理设备,需要驱动支持来处理连接到它的中断。
2.interrupt nexus(interrupt-map): 实现从一个interrupt domain转化到另一个interrupt domain。通过定义interrupt-map属性来实现。例如PCIE的中断需要映射到系统的IRQ。
3.interrupt-cells: 一个中断描述符所需<u32>的数目
4.interrupt-parent: 为了让中断树能反映实际上的物理连接层次关系,定义了interrupt-parent属性。比如一颗SoC,有外部中断通过GPIO子系统然后连接到GIC上;也有SoC集成的UART,I2C等控制器上的中断直连到GIC上。外部中断的interrupt-parent可以设为GPIO,而UART的interrupt-parent则可设置为interrupt-controller(GIC)
DTS中断实例解析
以exynos4412-tiny4412.dts为例解析DTS中关于中断相关属性的用法。
因为exynos4412-tiny4412.dts使用了include其它dts,所以总共涉及的dts文件如下:
- exynos4412-tiny4412.dts
- exynos4412.dtsi
- exynos4x12.dtsi
- exynos4.dtsi
- exynos4x12-pinctrl.dtsi
[1]:《Open Firmware. Recommended Practice: Interrupt Mapping. Version 0.9. Unapproved DRAFT.》
[2]: 《Devicetree Specification Release v0.2-21-g15cd53d》