Device Tree(三):代码分析
作者:linuxer 发布于:2014-6-6 16:03 分类:统一设备模型
Device Tree总共有三篇,分别是:
1、为何要引入Device Tree,这个机制是用来解决什么问题的?(请参考引入Device Tree的原因)
2、Device Tree的基础概念(请参考DT基础概念)
3、ARM linux中和Device Tree相关的代码分析(这是本文的主题)
本文主要内容是:以Device Tree相关的数据流分析为索引,对ARM linux kernel的代码进行解析。主要的数据流包括:
1、初始化流程。也就是扫描dtb并将其转换成Device Tree Structure。
2、传递运行时参数传递以及platform的识别流程分析
3、如何将Device Tree Structure并入linux kernel的设备驱动模型。
注:本文中的linux kernel使用的是3.14版本。
标签: 设备树
Device Tree(二):基本概念
作者:linuxer 发布于:2014-5-30 16:47 分类:统一设备模型
一些背景知识(例如:为何要引入Device Tree,这个机制是用来解决什么问题的)请参考引入Device Tree的原因,本文主要是介绍Device Tree的基础概念。
简 单的说,如果要使用Device Tree,首先用户要了解自己的硬件配置和系统运行参数,并把这些信息组织成Device Tree source file。通过DTC(Device Tree Compiler),可以将这些适合人类阅读的Device Tree source file变成适合机器处理的Device Tree binary file(有一个更好听的名字,DTB,device tree blob)。在系统启动的时候,boot program(例如:firmware、bootloader)可以将保存在flash中的DTB copy到内存(当然也可以通过其他方式,例如可以通过bootloader的交互式命令加载DTB,或者firmware可以探测到device的信 息,组织成DTB保存在内存中),并把DTB的起始地址传递给client program(例如OS kernel,bootloader或者其他特殊功能的程序)。对于计算机系统(computer system),一般是firmware->bootloader->OS,对于嵌入式系统,一般是bootloader->OS。
本文主要描述下面两个主题:
1、Device Tree source file语法介绍
2、Device Tree binaryfile格式介绍
Device Tree(一):背景介绍
作者:linuxer 发布于:2014-5-22 16:46 分类:统一设备模型
作为一个多年耕耘在linux 2.6.23内核的开发者,各个不同项目中各种不同周边外设驱动的开发以及各种琐碎的、扯皮的俗务占据了大部分的时间。当有机会下载3.14的内核并准备 学习的时候,突然发现linux kernel对于我似乎变得非常的陌生了,各种新的机制,各种framework、各种新的概念让我感到阅读内核代码变得举步维艰。 还好,剖析内核的热情还在,剩下的就交给时间的。首先进入视线的是Device Tree机制,这是和porting内核非常相关的机制,如果想让将我们的硬件平台迁移到高版本的内核上,Device Tree是一个必须要扫清的障碍。
我想从下面三个方面来了解Device Tree:
1、为何要引入Device Tree,这个机制是用来解决什么问题的?(这是本文的主题)
2、Device Tree的基础概念(请参考DT基础概念)
3、ARM linux中和Device Tree相关的代码分析(请参考DT代码分析)
阅 读linux内核代码就像欣赏冰山,有看得到的美景(各种内核机制及其代码),也有埋在水面之下看不到的基础(机制背后的源由和目的)。沉醉于各种内核机 制的代码固然有无限乐趣,但更重要的是注入更多的思考,思考其背后的机理,真正理解软件抽象。这样才能举一反三,并应用在具体的工作和生活中。
本文主要从下面几个方面阐述为何ARM linux会引入Device Tree:
1、没有Device Tree的ARM linux是如何运转的?
2、混乱的ARM architecture代码和存在的问题
3、新内核的解决之道
基本电路概念之(一):什么是电压?
作者:linuxer 发布于:2014-5-16 10:40 分类:基础学科
我有一个奇葩儿子(4岁),经常问一些奇葩的问题。比如:为什么电子带负电?什么是电压?电路板是怎么生产的?发动机的内部结构是什么?……总之, 各种问题层出不穷。有一天回家,他正和他妈妈一起看几张医学的CT片子(他妈妈是医生),他妈妈正详细向他解释该病人颅部血管病变问题,各种专业术语丝毫 也没有浇灭儿子的热情,那认真的劲头,我当时就震惊了。
为了应付我这个奇葩儿子,为了始终维持爸爸的高大形象,我不得不对这个世界有更深层次的思考……这次的主题是:什么是电压?电池为什么能提供电压?
标签: 电压
SDRAM Internals
作者:linuxer 发布于:2014-5-14 16:25 分类:基础技术
SDRAM(synchronous dynamic random-access memory)是嵌入式系统中经常用到的器件。对于一个嵌入式软件工程师而言,了解SDRAM的机理是有益的。我们可以从下面三个方面理解SDRAM:
1、RAM很好理解,就是可以随机存取的memory。
2、 dynamic 是和static对应的,SRAM就是static random-access memory。SRAM和DRAM(dynamic random-access memory)都是由若干能够保存0和1两种状态的cell组成。对于SRAM,只要保持芯片的供电,其cell就可以保存0或者1的信息。但是对于 DRAM而言,其bit信息是用电容来保存的(charged or not charged)。由于有漏电流,因此DRAM中的bit信息只能保持若干个毫秒。这个时间听起来很短,但是对于以ns计时的CPU而言已经是足够的长 了,因此,只要及时刷新(refresh,术语总是显得高大上,通俗讲就是读出来再写进去)DRAM,信息就可以长久的保存了。
3、 synchronous 是和asynchronous 对应的。synchronous是一个有多种含义的词汇,对于硬件芯片这个场景,主要是说芯片的行为动作是在一个固定的clock信号的驱动下工作。对于 电路设计而言,synchronous 简单但是速度慢,功耗大。asynchronous 则相反,在设计过程中需要复杂的race condition的问题,其速度快,理论上只是受限于逻辑门(logic gate)的propagation delay。
1968 年,Dennard获得了DRAM的专利。随后,各大厂商和研究机构对DRAM进行了改进。例如增加了clock信号,让DRAM的电路设计变成 synchronous 类型的。2000之后,由于其卓越的性能,SDRAM完全取代了DRAM的位置。随后的发展(DDR、DDR2和DDR3)并没有改变原理,只是速度上升 了。因此,本文以SDR(Single Data Rate)SDRAM为例,讲述其内部机理。
标签: SDRAM
Process Creation(二)
作者:linuxer 发布于:2014-4-28 15:40 分类:进程管理
本文是Process Creation(一)的延续,主要内容包括:
1、进程描述符中Realtime Mutex相关数据结构的初始化
2、子进程如何复制父进程的credentials
3、per-task delay accounting的处理
4、子进程如何复制父进程的flag
标签: process management do_fork
Process Creation(一)
作者:linuxer 发布于:2014-4-23 8:39 分类:进程管理
为什么要写一个关于进程如何创建的文档?其实用do_fork作为关键字进行索引,你会发现网上的相关文档数以万计。作为一个内核工程师,对进程以及进程相关的内容当然是非常感兴趣,但是网上的资料并不能令我非常满意(也许是我没有检索到好的文章),一个简单的例子如下:
static void copy_flags(unsigned long clone_flags, struct task_struct *p)
{
unsigned long new_flags = p->flags;new_flags &= ~(PF_SUPERPRIV | PF_WQ_WORKER);
new_flags |= PF_FORKNOEXEC;
p->flags = new_flags;
}
上 面的代码是进程创建过程的一个片段,网上的解释一般都是对代码逻辑的描述:清除PF_SUPERPRIV 和PF_WQ_WORKER这两个flag的标记,设定PF_FORKNOEXEC标记。坦率的讲,这样的代码解析没有任何意义,其实c代码都已经是非常 清楚了。当然,也有的文章进行了进一步的分析,例如对PF_SUPERPRIV 被清除进行了这样的解释:表明进程是否拥有超级用户权限的PF_SUPERPRIV标志被清0。很遗憾,这样的解释不能令人信服,因为如果父进程是超级用 户权限,其创建的子进程是要继承超级用户权限的。
正因为如此,我想对linux kernel中进程创建涉及的方方面面的系统知识进行梳理,在我的能力范围内对进程创建的source code进行逐行解析。一言以蔽之,do_fork的source code只是索引,重要的是与其相关的各个知识点。
由于进程创建是一个大工程,因此分成若干的部分。本文是第一部分,主要内容包括:
1、从用户空间看进程创建
2、系统调用层面看进程创建
3、trace的处理
4、参数检查
5、复制thread_info和task_struct
注:本文引用的内核代码来自3.14版本的linux kernel。
标签: do_fork
Unix的历史
作者:linuxer 发布于:2014-4-21 20:32 分类:技术漫谈
作为一个Linuxer,对unix感兴趣是顺理成章的事情,对unix的了解反过来也可以促进对GNU/Linux的理解。不过在接触unix的过程中,大家一般都会有下面的疑问:
1、unix这个商标是属于哪一个公司或者机构?
2、为何unix有那么多的变种?为何各个公司都有自己的unix,例如IBM的AIX(Advanced Interactive eXecutive)操作系统、SUN公司的Solaris操作系统、HP公司的HP-UX操作系统。
3、Linux和unix的关系为何?
……
本文和技术无关,主要想整理一些Unix的历史和Linux的演化
标签: unix历史
process credentials相关的用户空间文件
作者:linuxer 发布于:2014-4-2 12:54 分类:Linux应用技巧
作为对linux_fans提出建议的回应,本文主要描述在用户空间,和process credentials相关的内容,具体包括:
1、/etc/passwd文件
2、/etc/shadow文件
3、/etc/group文件
4、从系统登录过程看如何使用这些文件标签: process management
process identification
作者:linuxer 发布于:2014-3-26 12:28 分类:进程管理
一、概述
本文主要描述在linux kernel中如何标识一个或者一组和进程(线程)相关的实体,包括:
1、进程ID(线程组ID)
2、线程ID
3、进程组ID
4、Session ID
需要强调的是本文focus在identification,很多展开的内容会有一系列文档描述。
标签: process management
功能
最新评论
- 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)