pmon使用手冊(cè)資料_第1頁
pmon使用手冊(cè)資料_第2頁
pmon使用手冊(cè)資料_第3頁
pmon使用手冊(cè)資料_第4頁
pmon使用手冊(cè)資料_第5頁
已閱讀5頁,還剩216頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Pmon

TableofContents

1.pmon簡(jiǎn)介2

2.Pmon命令4

3.pmon目錄結(jié)構(gòu)9

4.pmon的編譯11

4.1pmon的酉己置11

4.2pmon的編譯13

5.pmon啟動(dòng)流程14

6.PMON終端顯示76

7.PMON中的系統(tǒng)調(diào)用80

8.PMON中的proc管理88

9.pmon中的socket和tcpip94

10.pmon網(wǎng)卡驅(qū)動(dòng)109

10.1pmon中的查詢機(jī)制109

10.2驅(qū)動(dòng)加載機(jī)制112

10.3網(wǎng)絡(luò)包的接收和發(fā)送112

10.4Rtl8139網(wǎng)卡配置和相關(guān)文件121

10.5網(wǎng)卡驅(qū)動(dòng)結(jié)構(gòu)124

11.pmon顯卡模擬130

X86模擬器包括幾個(gè)部分:130

vga_bios_init的流程130

12.PMON中的硬盤驅(qū)動(dòng)142

1.pmon簡(jiǎn)介

PMON是最常用的mipscpu的BIOS,功能十分強(qiáng)大。僅需要一個(gè)用口,512KBROM,128KBRAM就能

實(shí)現(xiàn)PMON的全部特性。它不僅支持BIOS啟動(dòng)配置,內(nèi)核加載,還支持程序調(diào)試,內(nèi)存寄存器顯示

和設(shè)置,內(nèi)存反匯編等等。

l)pmon起源

TheoriginalversionofthePMONprogramwaswrittenbyPhilBunceforLSI

LogicInc,whohavekindlymadethesourcesfreelyreusablewithoutroyalty.

ThePMONprogramincludessoftwaredevelopedbytheUniversityofCalifornia,

Berkeleyanditscontributors.Specifically,theethernetUDP/IPprotocolstack

anditssupportsoftwarecomefromtheBSD4.3/netsoftwarerelease.

摘自:PMONUsersManual,Algorithmics,Revision:1.4

目前龍芯pmon代碼來自于開源項(xiàng)目pmon2000(http://www.opsycon,se/pmonmain)□

支持的處理器:MIPSARMPowerPC.

License:BSDLicensed

代碼:C語言

PMON>vers

PMON:PM0N20002.1(Bonito)#57:2007081519:55:53UTC

2)pmon功能

我們又在上面增加了很多功能。

目前pmon的功能:

文件系統(tǒng):

ext2,ext3,fat32,ram

加載方式:

網(wǎng)絡(luò)tftp,硬盤,串口

環(huán)境變量:

emos中或flash中

更新:

網(wǎng)絡(luò)tftp,硬盤,串口在線更新flash

調(diào)試:

pmon本身集成了debuger,也可以通過模擬器gxemul結(jié)合gdb來調(diào)試

3)PMON啟動(dòng)

在默認(rèn)方式下,自動(dòng)引導(dǎo)從硬盤或者網(wǎng)絡(luò)TFTP裝載引導(dǎo)內(nèi)核;當(dāng)按住功能鍵(如空

格)的時(shí)候,進(jìn)入類似UNIX命令行式的顯示界面。

PMON在引導(dǎo)程序中對(duì)設(shè)備進(jìn)行配置,包括串口、鍵盤、顯卡、PCI設(shè)備地址分配。在命

令行界面上可以配置網(wǎng)卡,設(shè)置網(wǎng)卡地址。設(shè)置信息被保存在flash中。PMON能實(shí)現(xiàn)linux

內(nèi)核從硬盤、軟盤和網(wǎng)絡(luò)加載來引導(dǎo)操作系統(tǒng)。

下面是pmon的啟動(dòng)界面

:[[[[[[[[[[[[[[!

出叫E

[1[1[[[[[[r[[[[[[[:[[[[[[:[匚[[[[[[[[[[[

□Efit[E:E里木E

出E:EEE陽E

Er

EC[[[[[[[.[[[[[[[[工[[[二[[[[[[[[[[[[[

i[[[:[[EEE三至

[[[[[EEE[Eff土EE三MEEEEE二E

LC[[[[[[[[[[:[:[[[[tn[L工[[[::[[[[[[[r[[[[[[

EE[[[[[

EE出EE出EE的EEEf[CCJ和E出出」

2005:[etc[[[[[[[[[[[[[[[:[[[[[r[[[[[[[[[[[[[[[[[[[[r[[[[[[[[[

ConfigurationiBonito,EL,NET,IDE]

Version:PM0N20002.1(Bonito)唔9:SatJul3014:23:31CST2005.

SupportedloadersLsrec,elf,bin]

Supportedfilesystems[net,fs,disk,socket,Tty]

Thissoftwai-emayberedistributedundertheBSDcopyright.

Copyright2000-2002,OpsyconAB,Sweden.

Copyright2005,ICTCAS.

CPUGODSON2@200.00MHz/Bus@40.00MHz

Memorysize256MB(256MBLowmemory,0MBHighmemory).

PrimaryInstructioncachesizeIkb(32line,4way)

PrimaryDatacachesizeIkb(32line,4way)

Tertiarycachesize2018kb

BEV1

BEVO

BEVinSRsettozero.

PM0N>

2.Pmon命令

PMON的常用命令

l)h顯示幫助信息

PMON>h

BootandLoad

bootboot

omhostport

loadloadfile

MyCmds

pcsselectpcidevfunction

dldumpaddressbyte

alfworld

d4dumpaddressworld

oubleword

mlmodifyaddressbyte

halfworld

m4modifyaddressworld

doubleword

setvgasetvga_available

ble

initkbdkbd_initialize

phyaddr[-x]

tlbtesttlbsetviraddrphyaddr

more...

2)devls顯示設(shè)備信息

PMON>hdevls

devls[-an]listdevices

-ashowalldevicetypes

-nshownetworkdevices

PMON>devls

DevicenameType

wdODISK

rtlOIFNET

PMON>devls-a

DevicenameType

mainbusODULL

localbusODULL

pcibrODULL

pciODULL

pciideODULL

wdODISK

rtlOIFNET

3)load

PMON>hload

load[-beastifr][-ooffs]loadfile

-sdon,tclearoldsymbols

-bdon,tclearbreakpoints

-edon,tclearexceptionhandlers

-adon,taddoffsettosymbols

-tloadattopofmemory

-iignorechecksumerrors

-fflash_addr-oload_addroffsetr

-ndon,tloadsymbols

-yonlyloadsymbols

-vverbosemessages

-wreverseendianness

-kprepareforkernelsymbols

-o<offs>loadoffset

-rloadrawfile

3.1)從硬盤引導(dǎo)

1oad/dev/fs/ext2@wd0/boot/vmlinux

groot=/dev/hdal

3.2)從網(wǎng)絡(luò)引導(dǎo)

ifaddrfxpO192.168.0.159

loadtftp://192.168.0.128/vmlinux

groot=/dev/hdalconsole=tty

3.3)更新flash

從網(wǎng)絡(luò)更新

Load-fOxbfcOOOOO-rtftp://10.0.0.3/gzrom.bin

從磁盤更新

Load-fOxbfcOOOOO-r/dev/fs/ext2@wd0/boot/gzrom.bin

4)g命令

PM0N>hg

g[-s][-bbpadr]E_eadr][--args]startexecution(go)

-sdon'tsetclientsp

-e<adr>startaddress

-b<bptadr>temporarybreakpoint

一一<args>argstobepassedtoclient

PMON>groot=/dev/hdalconsole=tty

5)利用宏來簡(jiǎn)化操作

setL二〃load/dev/fs/ext2@wd0/boot/vmlinuxz,

$L

6)設(shè)置自動(dòng)引導(dǎo)

setifconfigfxpO:192.168.0.159

setaltftp://192.168.0.128/a

setappenduroot=/dev/hdalconsole=tty

7)pciscan命令列出pci設(shè)備信息

PMON>pciscan

?BUS0?

DevFunDevicedescription

160vendor/product:0xl0ec/0x8139(network,ethernet,interface:0x00,

revision:0x10)

0x0000420l:0xffffff01i/o@0x00004200,256bytes

0x04020000:0xffffff00mem@0x04020000,256bytes

0x00000000:0x00000000mem@0x00000000,0bytes

0x00000000:0x00000000mem@0x00000000,0bytes

0x00000000:0x00000000mem@0x00000000,0bytes

0x00000000:0x00000000mem@0x00000000,0bytes

8)set命令

Pmon中常見的環(huán)境變量

//inpmonsrc,searchfor"getenv”,thenwecangetthesetusefulforpmon.

setifconfigfxpO:192.168.0.159

setaltftp://192.168.0.128/a

setdev/dev/hdal

PM0N>hset

set[[-t]name[value]]display/setvariable

PMON>setal

al=/dev/fs/ext2@wd0/boot/vmlinux.strip

9)新增命令

pcs,dl,d2,d4,ml,m2,m4,disks

pmon中有幾個(gè)命令用來讀內(nèi)存和配置空間

dladdrcount字節(jié)讀地址

d2addrcount2字節(jié)讀地址

d4addrcount4字節(jié)讀地址

mladdrcount字節(jié)寫地址

m2addrcount2字節(jié)寫

m4addrcount4字節(jié)寫

上面命令中的地址的含義由pcs命令決定:

pcs-1為uncache讀物理地址

pcs-2為cache讀物理地址

pcs-3為直接讀64位cpu地址

pcsbusdevfunc為讀pci參數(shù)為bus,dev,func的配置空間

pcs設(shè)置后,可以多次使用dl—4,ml-4命令

pcs-1

dlOxlfcOOOOO100讀rom100個(gè)數(shù)

dl0OxbfcOOOOO

pcs-3

dl0x90000000IfcOOOOO100

dl0x980000001fcOOOOO100

pcs0140選擇pci卡bus=0,dev=14,func=0

d4010讀配置空間0開始10個(gè)4字節(jié)

PMON>pcs-1

selectnormalmemoryaccess

PMON>dlOxlfcOOOOO20

IfcOOOOO:00608040006880404000083c00608840.'.h.@

IfcOOOlO:0081Id3c

PMON>d2OxlfcOOOOO10

IfcOOOOO:600040806800408000403c0860004088.h.?

IfcOOOlO:81003cld

PMON>pcs0170

pciselectbus=0,dev=17,func=0

PMON>d4010

00000000:06861106021000070601002200800000”

00000010:00000000000000000000000000000000

00000020:0000000000000000

3.pmon目錄結(jié)構(gòu)

pmon的目錄結(jié)構(gòu):

|--Targets

|--conf

|一doc

|--examples

|—fb

|--include

|—lib

|一pmon

|一sys

|--tools

|--x86emu

|―zloader

|一zloader.2clm->zloader

|—zloader.2eCPCI->zloader

|--zloader.2ecard->zloader

|--zloader.2edev->zloader

|一zloader.2emcpu->zloader

|一zloader.2enc->zloader

|一zloader.cpci->zloader

--zloader.linuxpc->zloader

Targets目錄是板級(jí)相關(guān)的代碼

Targets/Bonito2edev/是開發(fā)板的目錄

IsTargets/Bonito2edev

Bonito/compile/conf/dev/include/pci/

Bonito/start.S啟動(dòng)代碼

Bonito/tgt_machdep.c啟動(dòng)c代碼,入口init_mips

conf是配置文件目錄

conf/Bonito是配置文件

conf/Makefile.Bonito2edev是開發(fā)板Makefile模版

dev/pflash_tgt.h開發(fā)板flash的頭文件

conf是pmon總的配置文件目錄

conf/files是配置文件

fb:framebuffer相關(guān)程序的目錄

include頭文件目錄

lib庫(kù)文件目錄,如libc等。

Pmon和sys中包含pmon的大部分文件.

驅(qū)動(dòng)程序一般放在Sys/dev中。

Tools中不是pmon代碼,而是配置pmon的工具程序源碼等,如pmoncfg.

X86emu中是顯卡模擬程序。

Zloader是pmon解壓縮程序.

4.pmon的編譯

4.1pmon的配置

1)配置文件

總的配置文件在:/usr/src/pmon-all/conf/files

開發(fā)板的配置文件:/usr/src/pmon-all/Target/Bonito2edev/conf/Bonito

其他配置文件還有/usr/src/pmon-al1/sys/dev/pci/files,pci

/usr/src/pmon-all/sys/dev/ata/files.ata

2)配置設(shè)置

我們這里最重要的是/usr/src/pmon-al1/Target/Bonito2edev/conf/Bonito文件

文件格式,#表示注釋

include〃conf/GENERIC_ALLl〃

#包含/usr/src/ict/pmorrall/conf/GENERIC_ALLI文件,其內(nèi)容如下

#

#Moduleselection.Selectspmonfeatures

#

selectmod_flash_amd#AMDflashdeviceprogramming

selectmod_flash_intel#intelflashdeviceprogramming

selectmod_flash_sst#intelflashdeviceprogramming

#目前pmon支持amd,inter和sst公司的flash的燒寫,有兩個(gè)作用,一是儲(chǔ)存環(huán)境變量,

二是在線更新bios

#

#Commandselection.Selectspmoncommands

#

#selectcmd_about#DisplayinfoaboutPMON

selectcmd_boot#Bootwrapper

selectcmd_cache#Cacheenabling

selectcmd__call#Callafunctioncommand

selectcmd_mycfg

selectcmddate#Timeofdaycommand

selectcmd_env#Fullblownenvironmentcommandset

selectcmd_flash#Flashprogrammingcmds

selectcmdhist#Commandhistory

selectcmd_ifaddr#Interfaceaddresscommand

selectcmd__l#Disassemble

selectcmd_mem#Memorymanipulationcommands

selectcmd_more#Morepaginator

selectcmd^rnt#Simplememorytestcommand

selectcmd_misc#Reboot&Flushetc.

selectcmd_set#Ascmd_envbutnotreq.cmd_hist

selectcmd_stty#TTYsetingscommand

selectcmd_tr#Hostport-throughcommand

selectcmd_devls#Devicelist

#

selectcmd_shell#Shellcommands,vers,help,eval

selectcmd_vers

selectemdhelp

selectcmd_eval

selectcmd_mycmd

selectemdnewmt#test86內(nèi)層檢測(cè)程序

selectcmd_setup#條棒式配置程序

上面這些選項(xiàng)選擇編譯那些命令到pmon中

optionC0NFIG_CACHE_64K_4WAY

#龍芯2e的cache設(shè)置4路,64k.

再返回到原配置文件中

#Platformoptions

#

optionBONITOEL#平臺(tái)北橋的類型,計(jì)算所binito結(jié)構(gòu)北橋

optionMIPS

optionINET

selectmod_uart_ns16550#StandardUARTdriver

optionCONS_BAUD=B115200

#串口的波特率設(shè)置

selectext2

selectiso9660

#pmon支持ext2,iso9660文件系統(tǒng),可以從網(wǎng)絡(luò)硬盤軟驅(qū)光驅(qū)引導(dǎo)內(nèi)核

selectmod_x86emu_int10

#顯卡rom模擬程序

selectmod_vgacon

#顯示器和鍵盤虛擬終端

optionAUTOLOAD

#pmon起動(dòng)后,自動(dòng)引導(dǎo)內(nèi)核

#Functionaloptions.

#

optionHAVE_T0D#Time-0f-Dayclock

#實(shí)時(shí)鐘

optionHAVE_NVENV#Platformhasnon-volatileenvmem

#環(huán)境變量支持

optionNVRAM_IN_FLASH

#打開這個(gè)選項(xiàng)環(huán)境變量存儲(chǔ)矗flash中,關(guān)閉環(huán)境變量存在emos中

#下面是pmon的設(shè)備樹的設(shè)置

#

#NowtheMachinespecification

#

mainbusOatroot

localbusOatmainbusO

fdOatmainbusO

#軟驅(qū)驅(qū)動(dòng)

pcibrOatmainbusO

pci*atpcibr?

#fxpnormallyonlyusedfordebugging(enable/disableboth)

fxpOatpci?dev?function?#Intel82559Device

inphy*atmii?phy?#Intel82555PHYs

#82559網(wǎng)卡驅(qū)動(dòng)

##########82546

#82546usealotofmemorysosetupNKMEMCLUSTERSasbellow

##defineNKMEMCLUSTERS(16*1024*1024/CLBYTES)/*0.5Mb*/

em*atpci?dev?function?#Intel82559Device

#82546網(wǎng)卡驅(qū)動(dòng)

####IDEcontrollers

pciide*atpci?dev?function?flags0x0000

####IDEharddrives

wd*atpciide?channel?drive?flags0x0000

#硬盤驅(qū)動(dòng)

ide_cd*atpciide?channel?drive?flags0x0001

#光誡驅(qū)動(dòng)

4.2pmon的編譯

1)準(zhǔn)備工作

cd/usr/src/pmon-a11/tools/pmoncfg/

make

cppmoncfg/usr/bin

exportMKDEP=makedepend

將exportMKDEP=makedepend加入~/.bashrc中

準(zhǔn)備工作只需做一次

2)開始編譯

Cd/usr/src/pmon-all/zloader.2edev

makecfg#根據(jù)配置文件重新產(chǎn)生makefile

makecleanall清除以前的編譯生成文件

maketgt=rom#生成rombin文件gzrom.bin

maketgt=ram#生成網(wǎng)絡(luò)加載文件gzram,通過網(wǎng)絡(luò)tftp重新加載pmon在調(diào)pmon程序的時(shí)

候很有用

3)pmon的燒制

a)通過網(wǎng)絡(luò)tftp燒flash

load-f0xbfc00000-rtftp://10.0.0.3/gzrom.bin

b)用編程器燒

如使用superpro/580編程器來燒。

5.pmon啟動(dòng)流程

下面介紹的pmon流程,基于龍芯2c,計(jì)算所的北橋。

Targets/Bonito是計(jì)算所北橋相關(guān)的代碼位置,起動(dòng)代碼為

Targets/Bonito/Bonito/start.S.

看代碼的時(shí)候要注意pmon中的一些宏是定義在頭文件中的,另一些則定義在Makefile,

通過gcc參數(shù)-D來定義。

5.1mipscpu基本知識(shí)

Mapped(kseg2)

OxCOOO0000

Unmappeduncached(ksegl)

OxAOOO0000

Unmappedcached(ksegO)

0x80000000

32-bituserspace(kuseg)

2GB

0x00000000

ksegO:0x80000000-0x9FFFFFFF(512M):只需要把最高位清零,這些地址就被轉(zhuǎn)換

(translate)為物理地址,

然后把它們連續(xù)地映射到物理內(nèi)存中512M大小的低字段(0x00000000-OxlFFFFFFF)

內(nèi)。這種轉(zhuǎn)換是很簡(jiǎn)單的,因此常常把這些地址稱為“無需轉(zhuǎn)換的“。一般情況下,都是通

過快速緩存(cache),對(duì)這段區(qū)域內(nèi)的地址進(jìn)行訪問。

因此在cache被正確地初始化之前,不要使用這些地址。通常,在沒有MMU的系統(tǒng)中,這段

區(qū)域用于存放大多數(shù)程序和數(shù)據(jù)。至于有MMU的系統(tǒng),操作系統(tǒng)的內(nèi)核會(huì)存放在這個(gè)區(qū)域。

ksegl:OxAOOO0000-OxBFFFFFFF(512M):通過將最高3位清零的方法,把這些地址

映射為相應(yīng)的物理地址,然后象ksegO一樣,再映射到物理內(nèi)存中512M大小的低字段。但

要注意,ksegl是不通過cache存取的(uncached)。ksegl是唯一的在系統(tǒng)重啟時(shí)能正常工

作的地址空間,這也是為什么重新啟動(dòng)時(shí)的入口向量OxBFCO0000會(huì)在這個(gè)區(qū)域內(nèi)。入口向

量對(duì)應(yīng)的物理地址是OxlFCO0000這個(gè)應(yīng)該告訴你的硬件工程師。

因此,你可以使用這段地址空間來訪問你的初始化程序的ROM。還有大多數(shù)人把它用來訪

問I/O寄存器。如果你的硬件工程師要把這些東西映射到非低段512M物理空間,那你應(yīng)該

試圖說服他們修改。

kseg2:OxCOOOOOOO-OxFFFFFFFF(1GB):這段地址空間只能在核心態(tài)下使用并且要經(jīng)過

MMU的轉(zhuǎn)換。在MMU設(shè)置好之前,不要對(duì)其進(jìn)行訪問。通常,除非你在寫一個(gè)真正的操作系

統(tǒng),否則都不必使用這段地址空間。

maped指的是要經(jīng)過TLB進(jìn)行虛擬內(nèi)存的翻譯。cached指先從cache取,未命中才從內(nèi)存中

取。

3.2代碼分析

總的來說:

1)啟動(dòng)位置位于cpu的啟動(dòng)地址是OxbfcOOOOO,這個(gè)地址對(duì)應(yīng)的物理地址是OxlfcOOOOO,北

橋?qū)⑦@一地址影射到flash的0地址上.

因此準(zhǔn)確的說pmon是從flash的0地址開設(shè)運(yùn)行。編譯的時(shí)候start,o正好是第一個(gè)被鏈

接的obj文件,因此start.S的第一條指令是cpu運(yùn)行的第一個(gè)指令,位于_start。

2)c代碼的第一個(gè)入口是initmips,位于tgt_machdep.c中。最后程序到main函數(shù)中運(yùn)行命

令循環(huán)。

3)pmon開始應(yīng)該是freebsd移植過來的,系統(tǒng)調(diào)用,設(shè)備驅(qū)動(dòng)是unix風(fēng)格的。

4)pmon中cpu運(yùn)行于32位模式下,是關(guān)中斷運(yùn)行。pmon完全靠查詢來完成整個(gè)系統(tǒng),技巧

是idle函數(shù)中調(diào)用scandevs來掃描設(shè)備驅(qū)動(dòng)程序。驅(qū)動(dòng)程序中的中斷也是通過被系統(tǒng)查

詢的時(shí)候不斷調(diào)用來實(shí)現(xiàn)的。

5)在cpu的狀態(tài)寄存器中有…個(gè)bev,設(shè)置異常向量從rom中取,還是從ram中取.

bcopy(MipsException,(char*)TLB_MISS_EXC_VEC,MipsExceptionEnd-

MipsException);

bcopy(MipsException,(char*)GEN_EXC_VEC,MipsExceptionEnd-

MipsException);

下面具體介紹啟動(dòng)流程:

start.S中

_start:

start:

.globlstack

stack=start-0x4000/*PlacePMONstackbelowPMONstartinRAM*/

/*NOTE!!Notmorethat16instructionshere!!!Rightnowit'sFULL!*/

mtcOzero,COP_O_STATUS_REG

mtcOzero,COP_O_CAUSE_REG

litO,SR_BOOT_EXC_VEC/*ExceptiontoBoostrapLocation*/

mtcOt0,COP?O_STATUS_REG

lasp,stack

lagp,_gp

baluncached/*Switchtouncachedaddressspace*/

nop

ballocate/*Getcurrentexecuteaddress*/

nop

從pmon中反匯編得到

(gdb)disassemble0xffffffff80010000

Dumpofassemblercodeforfunctionstart:

0xffffffff80010000<start>:mtcO$zero,$12

0xffffffff80010004<start+4>:mtcO$zero,$13

0xffffffff80010008<start+8>:lui$t0,0x40

0xffffffff8001000c<start+12>:mtcO$t0,$12

0xffffffff80010010<start+16>:lui$sp,0x8001

0xffffffff80010014<start+20>:daddiu$sp,$sp,-16384#0xffffc000

0xffffffff80010018<start+24>:lui$gp,0x8009

0xffffffff8001001c<start+28>:daddiu$gp,$gp,30800

0xffffffff80010020<start+32>:bal0x80010030

0xffffffff80010024<start+36>:nop

0xffffffff80010028<start+40>:bal0x80010638

0xffffffff8001002c<start+44>:nop

可以看出sp的指向的位置,并不是指向flash,因此開始的堆棧用的就是sdram

baluncached

nop

ballocate

nop

uncached:

orra,UNCACHED_MEMORY_ADDR

jra

nop

#machine/cpu.h

ttdefineUNCACHED_MEMORY_ADDROxaOOOOOOO

此處是可以從cache空間轉(zhuǎn)換到uncache的空間,ra中保留的是bal_locate這條指令的地

址,然后或上UNCACHED?MEMORY_ADDR,該地址就變成uncache的地址了.

為什么pmon的啟動(dòng)地址為OxbfcOOOOO,而Id生成代碼的text段的起始地址為0x80010000

應(yīng)該有從flash到ram的搬移過程

las0,start

subusO,ra,sO

andsO,OxffffOOOO

這段代碼是為了訪問數(shù)據(jù),因?yàn)檫@段匯編在Rom執(zhí)行,而編譯出來的數(shù)據(jù)段在

0x8002xxxx,為了能夠訪問數(shù)據(jù)段的數(shù)據(jù),需要進(jìn)行一個(gè)

地址的修正,s0這是起到這種修正的目的。

balIf

nop

BONITO_BIC(BONITO_BONPONCFG,BONITO_BONPONCFG_CPUBIGEND)

展開后變成

.word0x00000018|0x00000002,((OxlfeOOOOO+((0x100+0x00)))|

OxaOOOOOOO);.word(~(0x00004000)),(0)

后面的程序解析這些數(shù)據(jù)完成對(duì)應(yīng)的初始化操作

EXIT_INIT(O)

展開后變成

.word0x00000000,(0);.word0,0

這樣初始化數(shù)據(jù)定義完成

下面的程序

1:movea0,ra

因?yàn)榍懊鎎alIf,因此此時(shí)ra的值恰好就是定義的初始化數(shù)據(jù)的地址,下面的

reginit開始的

一段程序解析前面的數(shù)據(jù)來對(duì)寄存器進(jìn)行配置

reginit:/*localname*/

lwt3,Init_0p(aO)

lwtO,Init_A0(aO)

andt4,t3,OP_MASK

*EXIT(STATUS)

*/

bnet4,OP_EXIT,8f

nop

movevO,tO

b,done

nop

剩下的初始化寄存器的過程省略

.done:

/*Initialiseotherlow-levelI/Odevices*/

balinitserial

nop

PRINTSTRC\r\nPM0N2000MIPSInitializing.Standby...\r\nO

PRINTSTRCERRORPC=Z/)

mfcOaO,COP_O_ERROR_PC

balhexserial

nop

PRINTSTRCCONFIG二〃)

mfcOaO,COP_O_CONFIG

balhexserial

nop

PRINTSTR(〃\r\n〃)

PRINTSTR(,zPRID二〃)

mfcOaO,COP_O_PRID

balhexserial

nop

PRINTSTR("\r'n")

簡(jiǎn)單的打印一些寄存器的值

一些sdram的配置

1:swsdCfg,BONITO_SDCFG(bonito)

2:b3f

nop

3:

配置pci內(nèi)存影射

litl,0ttaccumulatepcimembasecfgsettings

/*setbarOmaskandtranslationtopointtoSDRAM*/

subtO,msize,1

nottO

srltO,BONITO_PCIMEMBASECFG_ASHIFT-

BONITO_PCIMEMBASECFG_MEMBASEO_MASK_SHIFT

andtO,BONITO_PCIMEMBASECFG_MEMBASEO_MASK

ortl,tO

litO,0x00000000

srltO,BONITO_PCIMEMBASECFG_ASHIFT-

BONITO_PCIMEMBASECFG_MEMBASEO_TRANS_SHIFT

andtO,BONITO_PCIMEMBASECFG_MEMBASEO_TRANS

ortl,tO

ortl,BONITO_PCIMEMBASECFG_MEMBASEO_CACHED

/*setbarltominimumsizetoconservePCIspace*/

litO,~0

srltO,BONITO_PCIMEMBASECFG_ASHIFT-

BONITO_PCIMEMBASECFG_MEMBASE1__MASK_SHIFT

andtO,BONITO_PCIMEMBASECFG_MEMBASE1_MASK

ortl,tO

litO,OxOOOOOOOO

srltO,BONITO_PCIMEMBASECFG_ASHIFT-

BONITO_PCIMEMBASECFG_MEMBASE1_TRANS_SHIFT

andtO,BONITO_PCIMEMBASECFG_MEMBASE1_TRANS

ortl,tO

ortl,BONITO_PCIMEMBASECFG_MEMBASE1_CACHED

swtl,BONITO_PCIMEMBASECFG(bonito)

/*enableconfigurationcyclesnow*/

IwtO,BONITO_BONPONCFG(bonito)

andtO,“B0NIT0_B0NP0NCFG_C0NFIG_DIS

swtO,BONITO_BONPONCFG(bonito)

PRINTSTR("InitSDRAMDone!\r\n");

地址譯碼的結(jié)果和bonito64的相兼容,為了實(shí)現(xiàn)對(duì)大容量(2GB)

存儲(chǔ)器的支持,將原來的0x8000_000(T0x:L0000_0000之間的2GB空間分配給了SDRAM,

為了保持軟件的兼容性,把2GB空間的低256MB和起始的256MB存儲(chǔ)空間重疊,對(duì)應(yīng)同

一塊存儲(chǔ)區(qū)。

<img5.=北橋設(shè)計(jì)文檔.pdf:北橋內(nèi)部地址空間分配》

初始化cache,將cache寄存器中填入內(nèi)容,并cache有效?

下面完成程序和數(shù)據(jù)從flash到內(nèi)存的拷貝

laa0,start

lial,OxbfcOOOOO

laa2,_edata

oraO,OxaOOOOOOO

ora2,OxaOOOOOOO

subu11,a2,aO

srltl,tl,2

movetO,aO

movetl,al

movet2,a2

/*copytextsection*/

1:andt3,tO,OxOOOOffff

bnezt3,2f

nop

moveaO,tO

balhexserial

nop

liaO,'\r'

baltgt_putchar

nop

2:Iwt3,0(tl)

nop

swt3,0(t0)

addutO,4

addutl,4

bnet2,tO,lb

nop

PRINTSTR(/z\ncopytextsectiondone.\r\n,z)

/*ClearBSS*/

laaO,_edata

laa2,_end

2:swzero,0(aO)

bnea2,aO,2b

adduaO,4

TTYDBG(zzCopyPMONtoexecutelocationdone.\r\n/z)

#if1

mfcOaO,COP_O_CONFIG

andaO,aO,0xfffffff8

oraO,aO,0x2

mtcOaO,COP_O_CONFIG

#endif

liaO,4096*1024

swaO,CpuTertiaryCacheSize/*SetL3cachesize*/

moveaO,msize

srlaO,20

lavO,initmips

jalrvO

nop

其中initmips是c代碼的入口,初始化過程結(jié)束

initmips傳入了memorysize,其中memorysize是start.S中的msize,是根據(jù)sdram內(nèi)存

條的信息計(jì)算出來的。

/home/dsm/pmon2003/src/Targets/Bonito/Bonito/tgt_machdep.c:

140void

141initmips(unsignedintmemsz)

142(

143/*

144*Setupmemoryaddressdecoderstomapentirememory.

145*Butfirstmoveawaybootrommaptohighmemory.

146*/

147#if0

148GT_WRITE(BOOTCS_LOW_DECODE_ADDRESS,BOOT_BASE?20);

149GT_WRITE(BOOTCS_HIGH_DECODE_ADDRESS,(BOOT_BASE-1+

BOOT_SIZE)?20);

150ttendif

151memorysize=(memsz&OxOOOOffff)<<20;//recovertooriginal

size:256M

152memorysize_high=((memsz&OxffffOOOO)?16)?20;//0

153

154/*

155*Probeclockfrequencyssodelayswillworkproperly.

156*/

157tgt_cpufreq();

,,

158SBD_DISPLAYCDONE>0);

159/*

160*InitPMONanddebug

161*/

162cpuinfotab[0]=&DBGREG;

163dbginit(NULL);

164

165/*

166*Setupexceptionvectors.

167*/

168SBD_DISPLAYCBEVr,0);

169bcopy(MipsException,(char*)TLB_MISS_EXC_VEC,MipsExceptionEnd

-MipsException);

170bcopy(MipsException,(char*)GEN_EXC_VEC,MipsExceptionEnd-

MipsException);

171

172CPU_FlushCache();

173

174CPU_SetSR(O,SR_BOOT_EXC_VEC);

175SBD_DISPLAYCBEVOZ,,0);

176

177printf(/ZBEVinSRsettozero.\nz,);

178

179#if0

180/*memtest*/

181addrtstl();

182addr_tst2();

183movinvl(2,0,~0);

184movinvl(2,0xaa5555aa,~0xaa5555aa);

185printf(/zmemtestdone\n〃);

186ttendif

187

188/*

189*Launch!

190*/

191main();

192)

其中很重要的是dbginit

/home/dsm/pmon2003/src/pmon/common/main,c:

284void

285dbginit(char*adr)

286(

287intmemsize,freq;

288charfs[10],*fp;

289char*s;

290

291Asplhigh();*/

292

293memsize=memorysize;

(gdb)

294

295SBD_DISPLAYCHKPNT_ENVI);

296init();/*Doallconstructorinitialisation*/

297

298

299SBD_DISPLAY(〃ENVI〃,CHKPNT_ENVI);

300envinit();

301

302#ifdefined(SMP)

303/*Turnoncachesunlessoptedout*/

(gdb)

304if(!getenv(〃nocache〃))

305md_cacheon();

306ttendif

307

308SBD_DISPLAY(〃DEVI〃,CHKPNT_SBDD);

309tgt_devinit();

310

311#ifdefINET

312SBD_DISPLAY(〃NETI〃,CHKPNT_NETI);

313init_net(1);

(gdb)

314ttendif

315

316#ifNCMDJHST>0

317SBDDISPLAYCHKPNTJISTI);

318histinit();

319ttendif

320

321#ifNM0D_SYMB0LS>0

322SBDDISPLAYCHKPNT_SYMI);

323syminit();

(gdb)

324#endif

325

326SifdefDEMO

327SBDDISPLAY(〃DEM0〃,CHKPNTDEMO);

328demoinit();

329#endif

330

331SBD_DISPLAY(〃SBDE〃,CHKPNT_SBDE);

332initial_sr|=tgt_enable(tgt_getmachtype0);

333

(gdb)

334ftifdefSRFR

335Status=initial_sr&?SR_FR;/*don'tconfusenaiveclients*/

336#endif

337/*Setupinitialconsoleterminalstate*/

338ioctl(STDIN,TCGETA,feconsterm);

339

340ttifdefHAVE_LOGO

341tgt_logo();

342#else

343printf(〃\n*PM0N2000Professional*〃);

(gdb)

344Sendif

345printfC\nConfiguration[%s,%sz,,TARGETNAME,

346BYTE_ORDER==BIG_ENDIAN?〃EB〃:〃EL〃);

347#ifdefINET

348printf(〃,NET");

349#endif

350#ifNSD>0

351printf(〃,SCSI");

352#endif

353#ifNWD>0

(gdb)

354printf(〃,IDE〃);

355#endif

356printf(/z]\nVersion:%s.\n/z,vers);

357printf("Supportedloaders[%s]\n?,,getExecStringO);

358printf("Supportedfilesystems[%s]\n,z,getFSStringO);

359printf("Thissoftwaremay

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論