网站大量收购闲置独家精品文档,联系QQ:2885784924

PMON的pci设备初始化.DOC

  1. 1、本文档共31页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PMON的pci设备初始化

第二章 PCI设备初始化 系统刚上电时,CPU从0xbfc0.0000开始执行。这个地址在Rom空间中,在完成TLB,Cache,UART等初始化后,CPU就将代码拷到0x8010.0000开始的RAM空间(这个地址是编译Pmon时分配符号_start的),然后跳转到initmips(),开始在内存空间的执行。 执行initmips之前,CPU做的初始化只是初步的,其作用只是为CPU在内存中运行做一些必要的准备。主要的初始化工作:PCI设备的扫描、空间映射、资源分配都是initmips()函数所完成的。 下面我们跟踪initmips的执行来观察系统初始化的过程。 void initmips(unsigned int memsz) { /* * Set up memory address decoders to map entire memory. * But first move away bootrom map to high memory. */ memorysize=(memsz0x0000ffff) 20;//recover to original size:256M memorysize_high=((memsz0xffff0000)16) 20;//0 /* * Probe clock frequencys so delays will work properly. */ tgt_cpufreq(); SBD_DISPLAY(DONE,0); /* * Init PMON and debug */ cpuinfotab[0] = DBGREG; dbginit(NULL); /* * Set up exception vectors. */ SBD_DISPLAY(BEV1,0); bcopy(MipsException, (char *)TLB_MISS_EXC_VEC, MipsExceptionEnd - MipsException); bcopy(MipsException, (char *)GEN_EXC_VEC, MipsExceptionEnd - MipsException); CPU_FlushCache(); CPU_SetSR(0, SR_BOOT_EXC_VEC); SBD_DISPLAY(BEV0,0); /* Launch! */ main(); } 首先是获取CPU的时钟频率,这是tgt_cpufreq()完成的。它定义在tgt_machdep.c中。主要的方法就是先读取COP0中的count寄存器,然后延时一段时间,再读取count寄存器。两次的差值乘以2就是这段时间内cpu的时钟周期数。另外,CMOS中有个实时钟,在延时前后读取当前时间该相减,就可以知道延时的准确时间。从而计算出cpu的时钟频率。全局变量md_cpufreq记录了cpu频率值,md_pipefreq是流水线的频率,它们的值分别是500MHZ和1000MHZ; 接着调用的是dbginit(),这是最要的一个函数,几乎所有的初始化代码都由他直接或间接调用。 构造函数(constructor)的执行。 Dbginit()调用的第一个函数是__init()。这个函数的过程很简单,它就是将所有的constructor的函数执行一遍,建立一些基本的数据结构。在pmon中有三类constructor函数,它们都是静态函数。 命令处理初始化函数,位于pmon/cmds目录下,其名称都叫init_cmd()。 文件系统初始化函数。pmon/fs目录下。函数名称叫init_fs()或者init_xxxfs()。 可执行文件类型初始化。在pmon/loader目录下。函数名称叫init_exec() Pmon中定义了大量的命令,每个命令都对应一个Cmd类型的结构。该结构的含义如下。 typedef struct Cmd { const char *name; //命令的名称 const char *opts; //参数 const Optdesc *optdesc; //命令参数的option const char *desc; //命令描述 int (*func) __P((int, char *[])); //处理函数 int minac; //最小参数个数 int maxac; //最大参数个数 int fla

文档评论(0)

2105194781 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档