NetBSD上电启动到内核运行之前流程的简单介绍

2009-05-13 02:37:47来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

  
NetBSD上电启动到内核运行之前流程的简单介绍
作者:gvim@chinaunix.net/bsd
BSD License版权发布
作为内核分析的前期工作,本文介绍了NetBSD arm port中的smdk2410板从芯片加电到内核被调用之前的前期准备活动。大家不用担心,这些概念很大程度上是和i386是类似的,因此对体系结构有所了解的朋友会发现下面的章节不难理解。选择arm芯片的理由在于我们可以清楚地认识到一个操作系统所需要的底层支持。比如cache[1,2,3],虚拟地址影射的安装[1,2],存储管理器控制[1,2]等有关硬件体系的问题[3]。NetBSD执行流程进入kernel之后,可以很大程度上脱离对硬件平台的考虑。因此,对于内核分析过程来说,将平台有关操作首先在这里以功能介绍的形式予以说明是一个不错的开端。
一 介绍
本文着重的是对功能/流程的描述而不打算深入到实际的具体代码,因此这里简单的说明下smdk2410开发板的情况。具体说明书可以在Samsung网站上找到。
由于我们不关心指令细节,对该介绍不感兴趣的可以简单略过。仅仅知其然就足够明白下面章节的文字。
处理器使用的是arm9系列的芯片。有7种不同的处理器模式,分别是FIQ(快速中断响应),IRQ(中断响应),SVC(管理模式),ABT(异常模式),UND(未定义模式),SYS(系统模式)和大家熟悉的USR(用户模式)。USR具有普通权限,其他模式具有特殊权限。每种模式有16个寄存器,其中R0-R7供所有模式公用,R15固定坐位程序计数器(PC)使用,其他寄存器依据处理器当前所在模式的不同而定。当然,必然还有状态寄存器。开发板的物理地址从0x00000000开始,到0x2FFFFFFF用作ROM空间,0x30000000以上是用作RAM,并且各种处理器的控制寄存器也被影射到不同的物理地址上(一般可以是硬件直接搭线)。该处理器有一个协处理器(称作CPx  即coprocessor)CP15来控制有关控制MMU,控制cache,取得处理器信息等的情况。下面在叙述的时候会适当的提及。
NetBSD就不多介绍了。这里只说一些有关port的问题。NetBSD的平台相关代码放在arch/xxx目录之下。其中有boot代码(一般在arch/xxx/stand/),有启动代码(xxx_start.S),有内核环境初始化代码locore.S,有内存分页相关代码(pmap.c),体系相关代码(xxx_machdep.c)。可以从这里开始对一个port进行移植。
以我们的平台为例,port文件在arch/arm/evbarm下面(对于i386是arch/i386)。在这里我们可以看到我们关心的平台smdk2xx0,进去以后可以找到一个名为smdk2410_start.S的文件。我们就从这里开始。
内核配置文件是/arch/evbarm/conf/SMDK2410 ,ld链接文件是arch/evbarm/conf/ldscript.evbarm
生成方法:
get sys.tgz syssrc.tgz等相关代码
cd /usr/src ./build -m evbarm tools // 这里,交叉编译arm的编译器,-m指定平台。(或许需要你手工建立一个/usr/obj目录)
./build -m evbarm kernel=SMDK2410 // 见上面几行的说明
现在你就有了一个可以实际在某arm板上运行的BSD内核了。存放在/usr/obj/sys/.../.../SMDK2410下面。
二 bootloader (boot stage1)
对于嵌入式芯片来说,我们需要比x86更多的知识和系统支撑。在这个过程中,我们需要设置系统启动之前所需要进行的所有活动:比如设置时钟频率,设置MMU的页面影射等。
1 首先我们关闭中断。在系统引导的时候,我们不希望外部中断的发生,因为这个时候我们还没有安装中断的处理句柄,如果发生中断而跳转到中断地址的话,会发生什么呢?这个动作是通过往芯片的控制寄存器写入掩码完成的(类比i386上的EFLAGS寄存器)。
2 接着设置处理器时钟,分频器等有关处理器实际运行的参数。由于涉及其他硬件设计方面的问题,我们忽略它而不会影响下面的分析。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:FreeBSD初印象

下一篇:[原创]FreeBSD6.0中调度机制[长]