📄 pmoninit.htm
字号:
<title>PMON Initialization</title> <h1 align=center>PMON Initialization</h1><!--INDEX "PMON Initialization" -->Here is a brief description of what happens when PMONboots (jal is a subroutine call).<p>Execution starts at 0xbfc00000 (0xa0c00000 on the LR64360). At this address there is a jump to _start (usually at 0xbfc00274).<p><!--INDEX cpuInit mips.s cpdata clrbss getHostType --><h2>_start: (<a href="../pmon/mips.s">pmon/mips.s</a>)</h2><dl><dd> <dl><dt><b> jal <a href="../lib/cpuinit.s">cpuInit</a></b><dd> This calls getHostType and then sets up the RAM and returns a pointer to the correct cache flush routine, and the CPU type.<dt><b> jalr s0</b><dd> Calls the correct flush routine to flush the Dcache. It calls indirect via register s0, which was set by cpuInit. <dt><b> jal <a href="../lib/cpdata.s">cpdata</a></b><dd> Copies the .data section from the PROM to the RAM.<dt><b> jal <a href="../lib/clrbss.s">clrbss</a></b><dd> Clears the .bss section in RAM.<dt><b> jal <a href="../pmon/mips.s">copyHandler</a></b><dd> Copies the exception handler to the exception vector in RAM.<dt><b> jal <a href="../pmon/mips.s">copyHandler</a></b><dd> Copies the exception handler to the exception vector in RAM.<dt><b> jalr s0</b><dd> Calls the correct flush routine to flush the Dcache. It calls indirect via register s0, which was set by cpuInit. <dt><b> jalr s0</b><dd> Calls the correct flush routine to flush the Icache. It calls indirect via register s0, which was set by cpuInit. <dt><b> jal <a href="../pmon/main.c">pmoninit</a></b><dd> Calls pmoninit, this is the first piece of C. At this point PMON switches to kseg0 addresses (assuming that PMON was linked at a kseg0 address). </dl><!--INDEX pmoninit hostInit main.c --></dl><h2>pmoninit() (<a href="../pmon/main.c">pmon/main.c</a>)</h2><dl><dd> <dl><dt><b> jal <a href="../lib/cp0supp.s">mfc0</a></b><dd> Uses mfc0() to read the Status register (C0_SR). This is the first time that RAM is assumed to be working. If RAM is not working, control will not return from this call.<dt><b> jal <a href="../lib/hostinit.c">hostInit(8)</a></b><dd> Initialize the DUART. This calls <a href="../lib/termio.c">addDevice</a>, which calls the OP_INIT section of the driver.<dt><b> jal <a href="../mon/cli.c">moninit</a></b><dd> Initializes the core Monitor.<dt><b> jal <a href="../mon/cli.c">addCmdRec</a></b><dd> Called several times. Adds PMON-specific commands to the Monitor. <dt><b> jal <a href="../mon/set.c">addEnvRec</a></b><dd> Called several times. Adds PMON-specific environment variables to the Monitor. <dt><b> jal sprintf -- do_cmd</b><dd> This pair of functions is called three times. They set two environment variables and define the symbol Pmon. <dt><b> jal <a href="../mon/regs.c">addGpRegs</a> </b><dd> Add the Gp registers to the list of registers. <dt><b> jal <a href="../lib/hostinit.c">hostInit</a> </b><dd> Perform additional initialization. </dl> jal printf </b><dd> Print the first part of the banner. </dl></dl><p><hr><b>Navigation:</b> <a href="index.htm">Document Home</a> | <a href="doctoc.htm">Document Contents</a> | <a href="docindex.htm">Document Index</a> <p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -