久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区

Rss & SiteMap

曙海教育集團(tuán)論壇 http://www.bjzhda.cn

曙海教育集團(tuán)論壇
共2 條記錄, 每頁顯示 10 條, 頁簽: [1]
[瀏覽完整版]

標(biāo)題:PowerPC VxWorks BSP分析6——image加載

1樓
wangxinxin 發(fā)表于:2010-12-1 9:20:30
1 VxWorks加載
1.1 從TFFS文件系統(tǒng)加載
Tornado的TrueFFS是和VxWorks兼容的一種M-Systems Flite實(shí)現(xiàn)方式,它為種類繁多的flash存儲(chǔ)設(shè)備提供了統(tǒng)一的塊設(shè)備接口,并且具有可重入、線程安全的特點(diǎn),支持大多數(shù)流行的CPU構(gòu)架。有了Tornado的TrueFFS,應(yīng)用程序?qū)?flash存儲(chǔ)設(shè)備的讀寫就好象它們對(duì)擁有MS-DOS文件系統(tǒng)的磁盤設(shè)備的操作一樣。
如圖18所示,TrueFFS由核心層(core layer)和三個(gè)功能層,翻譯層(translation layer)、MTD層(MTD layer)、socket層(socket layer)組成。
clip_image002
圖18 TrueFFS層結(jié)構(gòu)布局
核心層(Core layer):核心層主要起相互連接其他幾層的功能。同時(shí)它也可以進(jìn)行碎片回收、定時(shí)器和其他系統(tǒng)資源的維護(hù)。通常WindRiver公司將這部分內(nèi)容以二進(jìn)制文件提供。
翻譯層主要實(shí)現(xiàn)TrueFFS和dosFs之間的高級(jí)交互功能。它也包含了控制flash映射到塊、wear-leveling、碎片回收和數(shù)據(jù)完整性所需的智能化處理功能。目前有三種不同的翻譯層模塊可供選擇。選擇哪一種層要看你所用的flash介質(zhì)是采用NOR-based,還是NAND-based,或者SSFDC-based技術(shù)而定。
Socket層則是提供TrueFFS和板卡硬件(如flash卡)的接口服務(wù)。其名字來源于用戶可以插入flash卡的物理插槽。用來向系統(tǒng)注冊(cè)socket設(shè)備,檢測設(shè)備拔插,硬件寫保護(hù)等。后面將詳細(xì)講解它的功能。
MTD層(Memory Technology Drivers)功能主要是實(shí)現(xiàn)對(duì)具體的flash進(jìn)行讀、寫、擦、ID識(shí)別等驅(qū)動(dòng),并設(shè)置與 flash密切相關(guān)的一些參數(shù)。TrueFFS已經(jīng)包含了支持Intel、AMD以及samsung部分flash芯片的MTD層驅(qū)動(dòng)。新的芯片需要新的 MTD支持,你可以使用一個(gè)標(biāo)準(zhǔn)的接口來加入這些驅(qū)動(dòng)。
以上四部分,我們通常要的工作就是后兩層。
MX29LV160BT芯片上建立TrueFFS文件系統(tǒng)
1.配置相關(guān)文件
在此,以Nor Flash MX29LV160BT為例,開發(fā)工具為Tornado2.2 for PPC。要在VxWorks映像中包含 TrueFFS文件系統(tǒng),首先必須在config.h文件中定義INCLUDE_TFFS。這使得VxWorks的初始化代碼調(diào)用tffsDrv()來創(chuàng)建管理TrueFFS所需的結(jié)構(gòu)和全局變量,并為所有掛接了的flash設(shè)備注冊(cè)socket組件驅(qū)動(dòng)。在鏈接的時(shí)候,通過解析與tffsDrv()相關(guān)聯(lián)的符號(hào)(symbols)可以將TrueFFS所必需的軟件模塊鏈接到VxWorks映象中。
為了支持TrueFFS,每一個(gè)BSP目錄下都必須包含一個(gè)sysTffs.c文件。它將TrueFFS所有的層(翻譯層,socket層和MTD 層)鏈接到一起并和VxWorks綁定。因此,必須編輯這個(gè)文件并決定哪一種MTD和翻譯層模塊應(yīng)該包含到TrueFFS中。即:
#define INCLUDE_MTD_MX29LV /* MX29LV160BT MTD driver */
#define INCLUDE_TL_FTL /* FTL translation layer */
#define FLASH_BASE_ADRS 0x2a10000 /* Flash memory base address */
#undef FLASH_SIZE
#define FLASH_SIZE 0x001f0000 /*Flash memory size, 2M (parameter block) */
其他無關(guān)的MTD driver包含頭都#undef掉,同時(shí)定義Flash在系統(tǒng)中的基地址和大小。另外,還必須編輯sysLib.c中的 sysPhysMemDesc[ ]數(shù)組,將Flash基地址和大小加入到MMU中,以供將來訪問Flash,否則訪問Flash會(huì)失敗。如果BSP目錄下沒有sysTffs.c文件,那么我們可以從其他BSP目錄下拷貝一個(gè)即可,然后做上述修改,其他的內(nèi)容基本可以不用修改。
接下來需要修改tffsConfig.c文件,為了方便管理,通常我們將src/drv/tffs/目錄下該文件拷貝到我們BSP目錄下,然后再做出修改。在MTDidentifyRoutine mtdTable[]表中加入如下語句:
#ifdef INCLUDE_MTD_MX29LV
mx29lvMTDIdentify,
#endif /* INCLUDE_MTD_MX29LV */
并在該文件開頭聲明。
#ifdef INCLUDE_MTD_MX29LV
FLStatus mx29lvMTDIdentify (FLFlash vol);
#endif /* INCLUDE_MTD_MX29LV */
最后就是將我們的flash相關(guān)MTD驅(qū)動(dòng)加入到makefile中。即:
MACH_EXTRA = mx29lvMtd.o
為了方便我們調(diào)試MTD驅(qū)動(dòng),應(yīng)該在重新編譯VxWorks映象前將諸如格式化flash、創(chuàng)建TrueFFS塊設(shè)備、綁定此塊設(shè)備到dosFs所必要的功能包含到VxWorks映像中。比如如下定義:
#define INCLUDE_TFFS
#ifdef INCLUDE_TFFS
#define INCLUDE_TFFS_DOSFS
#define INCLUDE_TFFS_SHOW
#define INCLUDE_DOSFS /* dosFs file system */
#define INCLUDE_SHOW_ROUTINES /* show routines for system facilities*/
#define INCLUDE_TL_FTL
#define INCLUDE_IO_SYSTEM
#define INCLUDE_DISK_UTIL
#endif /* INCLUDE_DOSFS */
2.MTD驅(qū)動(dòng)
做了上述配置后,進(jìn)入VxWorks操作系統(tǒng)后,我們?cè)趕hell上利用tffsShow工具來顯示flash的信息。TffsShow函數(shù)最終會(huì)調(diào)用 MTD驅(qū)動(dòng)中的mx29lvMtdIdentiy( )函數(shù),在mx29lvMtdIdentiy ( )函數(shù)主要是通過讀取MX29LV160BT芯片的設(shè)備和廠商ID來識(shí)別它,然后對(duì)FLFlash結(jié)構(gòu)成員進(jìn)行初始化,最主要的幾個(gè)參數(shù)是:
type:Flash內(nèi)存的JEDEC ID號(hào);
erasableBlockSize:Flash內(nèi)存的擦除塊大小(字節(jié))。設(shè)置這個(gè)值時(shí)應(yīng)考慮到interleaving。因此,通常通過如下方法來設(shè)置它的大小;
Vol.erasableBlockSize = MX29LV_MTD_SECTOR_SIZE * vol.interleaving;
對(duì)于MX29LV160BT,MX29LV_MTD_SECTOR_SIZE為64K字節(jié);
chipSize:使用來構(gòu)建TrueFFS文件系統(tǒng)的flash實(shí)際大小(字節(jié));
noOfChips:使用來構(gòu)建TrueFFS文件系統(tǒng)的flash實(shí)際片數(shù);
interleaving:Flash內(nèi)存交叉因子(interleaving factor)。即擴(kuò)展數(shù)據(jù)總線的設(shè)備數(shù)。比如,一個(gè)32位數(shù)據(jù)總線上,我們可以使用4片8位或2片16位的設(shè)備;
map:指向flash內(nèi)存映射(map)函數(shù)。該函數(shù)將flash映射到內(nèi)存區(qū);
read:指向flash內(nèi)存的讀函數(shù)。在MTD驅(qū)動(dòng)識(shí)別函數(shù)中,這個(gè)成員函數(shù)已經(jīng)被初始化為缺省的讀函數(shù)。通常情況下,我們不需要再初始化它,否則還需要修改很多相關(guān)的函數(shù);
write:指向flash內(nèi)存的寫函數(shù)。這個(gè)成員必須初始化,這是我們要做的一個(gè)重要工作;
erase:指向flash內(nèi)存的擦除函數(shù)。這個(gè)成員必須初始化,這也是我們要做的一個(gè)重要工作。
針對(duì)FLFlash結(jié)構(gòu)成員,我們所關(guān)心的兩個(gè)函數(shù)就是寫和擦除函數(shù)。在mx29lvMtdIdentiy()函數(shù)中必須有如下定義:
vol.write = mx29lvWrite;
vol.erase = mx29lvErase;
在mx29lvWrite()函數(shù)中主要是實(shí)現(xiàn)將數(shù)據(jù)寫到flash中。首先需要對(duì)扇區(qū)進(jìn)行解鎖,然后寫入寫命令,之后才能進(jìn)行數(shù)據(jù)的寫入。最后需要判斷數(shù)據(jù)是否寫完。為了確保操作成功,我們應(yīng)該在寫完每個(gè)數(shù)據(jù)后進(jìn)行數(shù)據(jù)的比較,比較正確后方能進(jìn)行下一個(gè)數(shù)據(jù)的操作。
在mx29lvErase()函數(shù)中主要是實(shí)現(xiàn)flash扇區(qū)的擦除。如今的flash一般都是按照扇區(qū)進(jìn)行擦除操作的。在擦除操作之前也應(yīng)該首先對(duì)扇區(qū)進(jìn)行解鎖,然后寫擦除建立和扇區(qū)擦除命令。擦除成功后,flash中的內(nèi)容應(yīng)該是0xffff。所以為了確保成功,我們還是應(yīng)該在擦除后進(jìn)行比較,比較正確后方能進(jìn)入下一個(gè)扇區(qū)的擦除操作,否則返回擦除錯(cuò)誤標(biāo)志。
所以,對(duì)于MTD驅(qū)動(dòng)的調(diào)試,基本上就是調(diào)試寫和擦除兩個(gè)函數(shù)。在調(diào)試過程中,我們可以在這兩個(gè)函數(shù)相應(yīng)位置加入打印語句來調(diào)試。為了能調(diào)試這兩個(gè)函數(shù),我們通過在shell上輸入命令tffsDevFormat來格式化flash, tffsDevFormat最終會(huì)調(diào)用mx29lvErase和mx29lvWrite函數(shù),如果成功就會(huì)返回0,否則返回-1。當(dāng)然也可以調(diào)用 tffsDevCreate函數(shù)來驗(yàn)證我們的寫和擦除函數(shù)的正確性。圖19說明了tffsDevCreate調(diào)用過程。
clip_image004
圖19 tffsDevCreate()調(diào)用過程
在shell上利用tffsShow來驗(yàn)證mx29lvMtdIdentiy。
> tffsShow
0: socket=RFA: type=0x2249, unitSize=0x10000, mediaSize=0x1f0000
value = 49 = 0x31 = "1"
說明已正確識(shí)別到MX29LV160BT設(shè)備,設(shè)備號(hào)為0x2249。
建立TFFS設(shè)備
1.掛接設(shè)備名
MTD驅(qū)動(dòng)調(diào)試成功后,我們就可以給flash設(shè)備掛接上dos設(shè)備名,如下操作:
格式化:
>    tffsDevFormat 
value = 1
>    usrTffsConfig 0,0,”/tffs0”
value = 0
然后通過devs來查看掛接的設(shè)備名:
>    devs
drv name                
  0 /null               
  1 /tyCo/0             
  1 /tyCo/1             
  5 host:               
  6 /pty/rlogin.S       
  7 /pty/rlogin.M       
  3 /tffs0/             
  8 /vio                
value = 25 = 0x19
看到/tffs0/說明掛接設(shè)備已經(jīng)成功,接下來就可以利用dosFs文件系統(tǒng)相關(guān)命令來操作flash了。如,ls、copy等。
用代碼來完成上述過程:
STATUS flashInit(void)
{
STATUS rc = OK;
if (tffsDrv() != OK)
{
printf("Could not initialize.\n");
return (ERROR);
}
#if 0
printf("Attaching to flash file system... ");
#endif
dosFsInit(NUM_DOSFS_FILES); /* initialize DOS-FS */
if (usrTffsConfig(driveNumber1, 0, SYS_BASE_FS) == ERROR)
{
printf("\ncore file system not exist.\n");
rc = sysTffsFormat(0, 0, 0, SYS_BASE_FS, 0, 0, 0);
}
return rc;
}
上述代碼中的sysTffsFormat()會(huì)調(diào)用tffsDevFormat()進(jìn)行格式化操作,如:
tffsDevFormat(driveNumber, (int)params);
params為tffsDevFormatParams結(jié)構(gòu)體指針,即格式化參數(shù),如:
#define TFFS_FORMAT_PARAM_WITH_ROOM_FOR_CONFIG_WORD \
{{1, 99, 1, 0x10000l, NULL, {0,0,0,0}, NULL, 2, 0, NULL}, FTL_FORMAT_IF_NEEDED}
而函數(shù)usrTffsConfig( )則將tffsDevCreate( )和dosFsDevInit( )進(jìn)行了合成,是一個(gè)快捷函數(shù)。
2.從Flash中啟動(dòng)并下載VxWorks映像
要從flash中下載VxWorks映像,首先需要把VxWorks映像拷貝到flash中,在shell中的操作命令為copy “VxWorks”,“tffs0/VxWorks”,然后修改config.h文件中引導(dǎo)行,如下:
#define DEFAULT_BOOT_LINE \
"tffs=0,0(0,0)host:/tffs0/VxWorks h=192.168.0.153 e=192.168.0.154 u=target pw=target o=cpm"
修改完后,重新編譯生成bootrom_uncmp.bin,并把它燒寫到flash中。然后重新啟動(dòng),即可看到如下啟動(dòng)畫面:
boot device          : tffs=0,0
unit number          : 0 
processor number     : 0 
host name            : host
file name            : /tffs0/VxWorks
inet on ethernet (e) : 192.168.0.154
host inet (h)        : 192.168.0.153
user (u)             : target
ftp password (pw)    : target
flags (f)            : 0x0 
other (o)            : cpm
Attaching to TFFS... done.
Loading /tffs0/VxWorks...894304
Starting at 0x10000...
Development System
        VxWorks version 5.5.1
        KERNEL: WIND version 2.6
        Copyright Wind River Systems, Inc., 1984-2003
    CPU: Motorola ADS - PowerPC 860.  Processor #0.
    Memory Size: 0x1000000.  BSP version 1.2/5.
    WDB Comm Type: WDB_COMM_END
                 WDB: Ready.
到此,說明引導(dǎo)成功。flash整個(gè)TFFS文件系統(tǒng)就已經(jīng)建立成功。
在一片F(xiàn)LASH同時(shí)裝載BootRom、VxWorks文件
我們將Flash地址映射成兩個(gè)地址段,一段用做BootRom,一段用做VxWorks使用,用做BootRom的地址段為0xFFF00000~0xFFF80000,另外一段用做VxWorks的地址段為0x04080000~0x04800000(假設(shè)此Flash大小為8M大小),在 0xFFF00000~0xFFF80000地址段寫入BootRom,在0x04080000~0x04800000地址段寫入VxWorks,加電后,PC指針會(huì)跳到0xFFF00100地址執(zhí)行第一條指令,引導(dǎo)BootRom起來并最終VxWorks系統(tǒng)引導(dǎo)成功。實(shí)現(xiàn)過程:
1.片選(?)
在romInit.s文件中要做如下的片選操作,片選0為BOOT Flash的地址片選,片選1為Flash的地址片選,其中ROM_BASE_ADRS為0xFFF00000
/* -------------------------------------------------------- */
/* Initialize Chip Select 0 for Bootrom */
/* ------------------------------------------------------------- */
lis r5, HIADJ( ROM_BASE_ADRS | BR_PS_8 | BR_WP | BR_V)
addi r5, r5, LO( ROM_BASE_ADRS | BR_PS_8 | BR_WP | BR_V)
stw r5, BR0(0)(r4)
lis r5, HIADJ( 0xFFF80000 | 0x00000100 | 0x00000080)
addi r5, r5, LO( 0xFFF80000 | 0x00000100 | 0x00000080)
stw r5, OR0(0)(r4)
/* -------------------------------------------------- */
/* Initialize Chip Select 1 for FLASH */
/* -------------------------------------------------- */
lis r5, HIADJ( 0x04000000 | BR_PS_16 | 0x00000001)
addi r5, r5, LO( 0x04000000 | BR_PS_16 | 0x00000001)
共2 條記錄, 每頁顯示 10 條, 頁簽: [1]

Copyright © 2000 - 2009 曙海教育集團(tuán)
Powered By 曙海教育集團(tuán) Version 2.2
Processed in .01563 s, 2 queries.
久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区
日韩欧美手机在线| 国产精品区一区二区三在线播放| 亚洲三级电影网站| 亚洲视频一区二区在线观看| 亚洲综合丝袜美腿| 日韩电影免费在线看| 精品一区二区三区影院在线午夜 | 日韩你懂的在线播放| 久久色中文字幕| 最新欧美精品一区二区三区| 亚洲国产欧美日韩另类综合| 韩国精品主播一区二区在线观看 | 91久久精品一区二区| 欧美一区二区视频在线观看2022| 久久久www成人免费无遮挡大片| 成人免费在线视频观看| 三级影片在线观看欧美日韩一区二区 | 精品乱码一区| 自拍偷拍99| 日韩一区二区精品在线观看| 中文字幕在线一区二区三区| 免费观看日韩电影| 麻豆精品在线播放| 国产成人一区二区三区免费看| 国产一区二区三区高清视频| 亚洲不卡1区| 欧美午夜片在线看| 久久久精品免费网站| 一区二区三区在线看| 激情国产一区二区| 99re资源| 欧美日韩黄视频| 国产精品成人午夜| 精品一区二区三区香蕉蜜桃| 成人h视频在线观看| 色综合天天性综合| 久久久久久久久蜜桃| 日韩中文字幕麻豆| 高清视频在线观看一区| 欧洲中文字幕精品| 国产精品久久久久一区| 韩国毛片一区二区三区| 蜜桃视频日韩| 精品国产在天天线2019| 亚洲国产一区视频| 91沈先生播放一区二区| 欧美性高清videossexo| 亚洲欧洲日韩综合一区二区| 国产成人精品免费视频网站| 日韩av一区二区三区在线观看| 精品久久久久久最新网址| 亚洲国产精品久久久久秋霞影院 | 久久精品国产免费| 欧美成人第一区| 久久亚洲精精品中文字幕早川悠里 | 欧美韩国一区二区| 国产传媒日韩欧美成人| 色呦呦日韩精品| 亚洲人成小说网站色在线| 99久久婷婷国产综合精品| 欧美日韩亚洲丝袜制服| 亚洲国产综合人成综合网站| 精品国产区在线| 国产日韩欧美精品一区| 国产成人av资源| 欧美视频一区在线| 日韩国产欧美在线视频| 日韩欧美视频一区二区| 亚洲丝袜精品丝袜在线| 成人综合av网| 国产午夜精品一区二区三区嫩草| 国产精品1区2区| 欧美日韩一区二区三区免费看| 天天综合网天天综合色| 欧美日韩精品综合| 亚洲品质自拍视频| 国模精品一区二区三区| 国产拍欧美日韩视频二区| 99国产精品久久久久久久久久 | 亚洲啪啪综合av一区二区三区| 97av影视网在线观看| 久久综合五月天婷婷伊人| 成人免费观看av| 日韩一区二区免费高清| 国产久卡久卡久卡久卡视频精品| 欧美午夜精品一区二区蜜桃| 久久精品理论片| 欧美在线|欧美| 毛片一区二区三区| 在线日韩国产精品| 捆绑变态av一区二区三区| 欧美怡红院视频| 国产曰批免费观看久久久| 911精品国产一区二区在线| 国产一区二区三区高清播放| 欧美顶级少妇做爰| 成人亚洲一区二区一| 日韩欧美的一区| 97中文在线| 国产精品久久久爽爽爽麻豆色哟哟 | 4438x亚洲最大成人网| 国产精品888| 精品91自产拍在线观看一区| 91麻豆国产福利在线观看| 国产日产欧美一区| 精品一区二区国产| 亚洲一二三四在线观看| 91黄色激情网站| 成人午夜视频网站| 国产农村妇女毛片精品久久麻豆 | 99精品视频在线观看免费| 久久久久久久久久久99999| 国产一区喷水| 亚洲精品视频一区| 一区二区免费电影| 国产福利一区在线观看| 国产视频一区二区在线观看| 九九九九九九精品| 日韩av电影免费观看高清完整版| 欧美精品在线一区二区| 91社区在线播放| 亚洲精品乱码久久久久久日本蜜臀| 中文字幕日韩一区二区三区不卡| 国产成人无遮挡在线视频| 国产精品青草久久| 亚洲人成网站在线播放2019| 狠狠色狠狠色综合日日91app| 久久久久9999亚洲精品| 日韩福利二区| 国产精品一区二区久久精品爱涩 | 久久99热狠狠色一区二区| 精品久久久久久亚洲综合网| 蜜桃久久影院| 国产成人无遮挡在线视频| 日韩一区中文字幕| 欧美日韩久久久一区| 国产一区二区不卡视频| 精品一二三四区| 中文字幕一区在线观看| 欧美日韩国产综合视频在线观看| 99精品一区二区三区| 亚洲高清免费在线| 日韩欧美一区在线观看| 欧美激情第六页| 国产成人免费视| 一区二区三区电影在线播| 日韩视频中午一区| 丝袜足脚交91精品| www.日韩在线| 日韩精品五月天| 欧美高清一级片在线观看| 色狠狠色狠狠综合| 鬼打鬼之黄金道士1992林正英| 男女男精品视频| 中文字幕在线一区| 91精品国产综合久久福利软件 | 欧美激情一区不卡| 在线观看视频欧美| 精品国产中文字幕| 粉嫩aⅴ一区二区三区四区 | 午夜精品久久久久久不卡8050| 日韩视频免费观看高清完整版在线观看| 蜜桃91精品入口| 99这里只有久久精品视频| 日韩成人一区二区| 最新国产成人在线观看| 日韩精品一区二区三区四区视频| 亚洲国产精品一区在线观看不卡| 91麻豆国产在线观看| 国产剧情一区在线| 日韩高清欧美激情| 一区二区三区在线视频免费观看| 久久亚洲免费视频| 欧美撒尿777hd撒尿| 欧美激情视频一区二区三区| 处破女av一区二区| 久久99精品久久久久婷婷| 亚洲图片一区二区| 国产亚洲精品福利| 欧美人xxxx| 欧美专区日韩专区| 伊人久久大香线蕉成人综合网| 久久国产精品亚洲va麻豆| 51蜜桃传媒精品一区二区| 国产精品亚洲第一| 黑人巨大精品欧美一区| 日韩电影在线观看一区| 亚洲天堂免费看| 欧美国产日韩亚洲一区| 精品人伦一区二区色婷婷| 91精品国产综合久久香蕉麻豆| 91极品视觉盛宴| 在线中文字幕一区二区| 中文字幕中文字幕在线中心一区| 日本一区二区久久精品| 日本免费一区二区三区| 欧美不卡福利| 日韩欧美亚洲v片| 亚洲免费视频一区| 在线观看免费91|