PMON的pci设备初始化Word下载.docx
- 文档编号:14601660
- 上传时间:2022-10-23
- 格式:DOCX
- 页数:24
- 大小:142.57KB
PMON的pci设备初始化Word下载.docx
《PMON的pci设备初始化Word下载.docx》由会员分享,可在线阅读,更多相关《PMON的pci设备初始化Word下载.docx(24页珍藏版)》请在冰豆网上搜索。
//recovertooriginalsize:
256Mmemorysize_high=((memsz&
0xffff0000)>
>
16)<
//0
*Probeclockfrequencyssodelayswillworkproperly.
tgt_cpufreq();
SBD_DISPLAY("
DONE"
0);
*InitPMONanddebug
cpuinfotab[0]=&
DBGREG;
dbginit(NULL);
*Setupexceptionvectors.
BEV1"
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);
BEV0"
/*Launch!
*/
main();
}
首先是获取CPU的时钟频率,这是tgt_cpufreq()完成的。
它定义在tgt_machdep.c中。
主要的方法就是先读取COP0中的count寄存器,然后延时一段时间,再读取count寄存器。
两次的差值乘以2就是这段时间内cpu的时钟周期数。
另外,CMOS中有个实时钟,在延时前后读取当前时间该相减,就可以知道延时的准确时间。
从而计算出cpu的时钟频率。
全局变量md_cpufreq记录了cpu频率值,md_pipefreq是流水线的频率,它们的值分别是500mhz和iooomhz;
接着调用的是dbginit(),这是最要的一个函数,几乎所有的初始化代码都由他直接或间接调用。
构造函数(constructor)的执行。
Dbginit()调用的第一个函数是_init()。
这个函数的过程很简单,它就是将所有的constructor的函数执行一遍,建立一些基本的数据结构。
在pmon中有三类
constructor函数,它们都是静态函数。
1)命令处理初始化函数,位于pmon/cmds目录下,其名称都叫init_cmd()。
2)文件系统初始化函数。
pmon/fs目录下。
函数名称叫init_fs()或者init_xxxfs()。
3)可执行文件类型初始化。
在pmon/loader目录下。
函数名称叫init_exec()
Pmon中定义了大量的命令,的含义如下。
每个命令都对应一个Cmd类型的结构。
该结构
//命令的名称
//参数
//命令参数的option
//命令描述
typedefstructCmd{
constchar*name;
constchar*opts;
constOptdesc*optdesc;
constchar*desc;
int(*func)__P((int,char*[]));
//处理函数
intminac;
//最小参数个数
intflag;
#defineCMD_REPEAT1
#defineCMD_HIDE2
#defineCMD_ALIAS4
intmaxac;
//最大参数个数
/*Commandisrepeatable*/
/*Commandishidden*/
/*Aliasforanothercommandname*/
}Cmd;
CmdTable是一个指针数组。
对每一个命令,CmdTable中都有一个指针指向它对应的Cmd结构。
1nit_cmd()所作的就是将各个Cmd结构的地址填入CmdTable中。
Pmon中所支持的每一个文件系统都有一个相应的数据结构来表示。
对于磁盘文件系统,这个结构是DiskFileSystem;
对于其他文件系统,这个结构叫做
FileSystem。
这两个结构的成员主要是一些函数指针,分别指向文件系统的open,read,write,ioctl,lseek及close函数。
文件系统初始化就是代表各个文件系统的数据结构插入到相应链表。
对于磁盘文件系统,链表的头指针式DiskFileSystemso对于其他的文件系统,头指针是FileSystems。
这样当需要对某个文件操作(包括虚拟文件,如与用户交互的终端termio)。
通过这两个链表可以找到相应的结构,在通过里面的函数指针就可以对
文件进行具体操作了。
Pmon可以载入执行几种格式的文件。
其中包括elf可执行文件,二进制文件(称为Rawbinaryfile)。
对每一个支持的文件类型,有一个ExecType类型的的结构。
这个结构定义如下:
typedefstructExecType{
char*execname;
/*文件类型,如bin,elf等*/
long(*loader)__P((int,char*,int*,int));
/*载入文件类型,并设置执行条
件*/
#defineEXECFLAGS_NONE0x0000
#defineEXECFLAGS_NOAUTO0x0001/*Don'
tautoload*/
intflags;
SLIST_ENTRY(ExecType)i_next;
}ExecType;
由于每种执行文件的格式不一样,因此对它们的载入执行也不一样,函数指针loader就是文件的转载寒暑。
对于二进制文件(bin),这个函数是load_bin。
二进制文件是最简单的,load_bin所作的只不过就是将执行文件读入到指定地址。
Elf文件比较复杂,它的载入函数是load_elf()。
这个函数比较复杂,但过程还是很
简单的,就是依据elf文件头的内容载入各个程序段的内容,并返回可执行文件开始执行的地址。
环境初始化
envint()设置所有的环境变量。
最多可以设置64个环境变量。
每个环境变量对应一个envpair结构。
Envvar是一个envpair类型的数组。
envinit()就是根据标准环境变量的值(数组stdenvtab)来初始化envvar数组。
更改环境变量的值可以改变pmon中命令的行为以及一些系统参数。
设备初始化
设备初始化主要就是PCI设备的初始化。
这是由tgt_devinit()完成的。
tgt_devinit又调用了_pci_businit()。
PCI设备初始化分为两步,第一步是北桥初始化。
第二步是设备初始化。
在
Pmon中,每个PCI设备都对应一个pci_device结构(包括pci-pci桥);
每个pci总线都对应一个pci_bus结构;
structpci_device{
structpci_attach_argspa;
//设备的一些信息,如id,class,中断线
//
unsignedcharmin_gnt;
unsignedcharmax_lat;
unsignedcharint_line;
pcireg_tstat;
u_int8_tintr_routing[4];
structpci_bridgebridge;
structpci_bus*pcibus;
structpci_device*next;
structpci_device*parent;
};
Min_gnt,Max_lat是PCI设备和时间相关的参数。
Min_gnt说明在33Mhz时钟频率下,一个burstperiod所要的时间。
而Max_lat说明了设备访问PCI总线的频率。
从它们的定义可以看出这两个参数和设备的带宽密切相关。
Stat则说明了设备所处的状态(是否可用,是否可以作为主设备等)。
由于所有的设备都连接在总线上,而总线又总是通过pci桥联在系统中,因此结构中还有一个pci_bridge结构bridge。
如果该设备本身是一个pci桥,则bridge代表了它自身。
Pcibus指向设备所在的总线。
所有的pci设备通过next指针形成一个链表。
最后,parent指向该设备的父设备。
structpci_bus{structpci_bus*next;
u_int8_tmin_gnt;
u_int8_tmax_lat;
u_int8_tdevsel;
u_int8_tfast_b2b;
u_int8_tprefetch;
u_int8_tfreq66;
u_int8_twidth64;
u_int8_tbus;
u_int8_tndev;
u_int8_tdef_ltim;
u_int8_tmax_ltim;
int32_tpaddr_tpaddr_tpaddr_tpaddr_tpaddr_tpaddr_t
/*nextbuspointer*/
/*largestmingrant*/
/*smallestmaxlatency*//*slowestdevsel*/
/*supportfastb2b*/
/*supportprefetch*/
/*support66MHz*/
/*64bitbus*/
/*#devicesonbus*/
/*defaultltimcounter*/
/*maximumltimcounter*/
bandwidth;
/*#of.25usticks/sec@33MHz*/minpcimemaddr;
/*PCIallocationminmemforbus*/nextpcimemaddr;
/*PCIallocationmaxmemforbus*/minpciioaddr;
/*PCIallocationmini/oforbus*/nextpciioaddr;
/*PCIallocationmaxi/oforbus*/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PMON pci 设备 初始化