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

以文本方式查看主題

-  曙海教育集團論壇  (http://m.rfoamep.cn/bbs/index.asp)
--  VxWorks BSP開發  (http://m.rfoamep.cn/bbs/list.asp?boardid=37)
----  PowerPC VxWorks BSP分析6——image加載  (http://m.rfoamep.cn/bbs/dispbbs.asp?boardid=37&id=1927)

--  作者:wangxinxin
--  發布時間:2010-12-1 9:20:30
--  PowerPC VxWorks BSP分析6——image加載
1 VxWorks加載
1.1 從TFFS文件系統加載
Tornado的TrueFFS是和VxWorks兼容的一種M-Systems Flite實現方式,它為種類繁多的flash存儲設備提供了統一的塊設備接口,并且具有可重入、線程安全的特點,支持大多數流行的CPU構架。有了Tornado的TrueFFS,應用程序對 flash存儲設備的讀寫就好象它們對擁有MS-DOS文件系統的磁盤設備的操作一樣。
如圖18所示,TrueFFS由核心層(core layer)和三個功能層,翻譯層(translation layer)、MTD層(MTD layer)、socket層(socket layer)組成。
clip_image002
圖18 TrueFFS層結構布局
核心層(Core layer):核心層主要起相互連接其他幾層的功能。同時它也可以進行碎片回收、定時器和其他系統資源的維護。通常WindRiver公司將這部分內容以二進制文件提供。
翻譯層主要實現TrueFFS和dosFs之間的高級交互功能。它也包含了控制flash映射到塊、wear-leveling、碎片回收和數據完整性所需的智能化處理功能。目前有三種不同的翻譯層模塊可供選擇。選擇哪一種層要看你所用的flash介質是采用NOR-based,還是NAND-based,或者SSFDC-based技術而定。
Socket層則是提供TrueFFS和板卡硬件(如flash卡)的接口服務。其名字來源于用戶可以插入flash卡的物理插槽。用來向系統注冊socket設備,檢測設備拔插,硬件寫保護等。后面將詳細講解它的功能。
MTD層(Memory Technology Drivers)功能主要是實現對具體的flash進行讀、寫、擦、ID識別等驅動,并設置與 flash密切相關的一些參數。TrueFFS已經包含了支持Intel、AMD以及samsung部分flash芯片的MTD層驅動。新的芯片需要新的 MTD支持,你可以使用一個標準的接口來加入這些驅動。
以上四部分,我們通常要的工作就是后兩層。
MX29LV160BT芯片上建立TrueFFS文件系統
1.配置相關文件
在此,以Nor Flash MX29LV160BT為例,開發工具為Tornado2.2 for PPC。要在VxWorks映像中包含 TrueFFS文件系統,首先必須在config.h文件中定義INCLUDE_TFFS。這使得VxWorks的初始化代碼調用tffsDrv()來創建管理TrueFFS所需的結構和全局變量,并為所有掛接了的flash設備注冊socket組件驅動。在鏈接的時候,通過解析與tffsDrv()相關聯的符號(symbols)可以將TrueFFS所必需的軟件模塊鏈接到VxWorks映象中。
為了支持TrueFFS,每一個BSP目錄下都必須包含一個sysTffs.c文件。它將TrueFFS所有的層(翻譯層,socket層和MTD 層)鏈接到一起并和VxWorks綁定。因此,必須編輯這個文件并決定哪一種MTD和翻譯層模塊應該包含到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) */
其他無關的MTD driver包含頭都#undef掉,同時定義Flash在系統中的基地址和大小。另外,還必須編輯sysLib.c中的 sysPhysMemDesc[ ]數組,將Flash基地址和大小加入到MMU中,以供將來訪問Flash,否則訪問Flash會失敗。如果BSP目錄下沒有sysTffs.c文件,那么我們可以從其他BSP目錄下拷貝一個即可,然后做上述修改,其他的內容基本可以不用修改。
接下來需要修改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相關MTD驅動加入到makefile中。即:
MACH_EXTRA = mx29lvMtd.o
為了方便我們調試MTD驅動,應該在重新編譯VxWorks映象前將諸如格式化flash、創建TrueFFS塊設備、綁定此塊設備到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驅動
做了上述配置后,進入VxWorks操作系統后,我們在shell上利用tffsShow工具來顯示flash的信息。TffsShow函數最終會調用 MTD驅動中的mx29lvMtdIdentiy( )函數,在mx29lvMtdIdentiy ( )函數主要是通過讀取MX29LV160BT芯片的設備和廠商ID來識別它,然后對FLFlash結構成員進行初始化,最主要的幾個參數是:
type:Flash內存的JEDEC ID號;
erasableBlockSize:Flash內存的擦除塊大小(字節)。設置這個值時應考慮到interleaving。因此,通常通過如下方法來設置它的大小;
Vol.erasableBlockSize = MX29LV_MTD_SECTOR_SIZE * vol.interleaving;
對于MX29LV160BT,MX29LV_MTD_SECTOR_SIZE為64K字節;
chipSize:使用來構建TrueFFS文件系統的flash實際大小(字節);
noOfChips:使用來構建TrueFFS文件系統的flash實際片數;
interleaving:Flash內存交叉因子(interleaving factor)。即擴展數據總線的設備數。比如,一個32位數據總線上,我們可以使用4片8位或2片16位的設備;
map:指向flash內存映射(map)函數。該函數將flash映射到內存區;
read:指向flash內存的讀函數。在MTD驅動識別函數中,這個成員函數已經被初始化為缺省的讀函數。通常情況下,我們不需要再初始化它,否則還需要修改很多相關的函數;
write:指向flash內存的寫函數。這個成員必須初始化,這是我們要做的一個重要工作;
erase:指向flash內存的擦除函數。這個成員必須初始化,這也是我們要做的一個重要工作。
針對FLFlash結構成員,我們所關心的兩個函數就是寫和擦除函數。在mx29lvMtdIdentiy()函數中必須有如下定義:
vol.write = mx29lvWrite;
vol.erase = mx29lvErase;
在mx29lvWrite()函數中主要是實現將數據寫到flash中。首先需要對扇區進行解鎖,然后寫入寫命令,之后才能進行數據的寫入。最后需要判斷數據是否寫完。為了確保操作成功,我們應該在寫完每個數據后進行數據的比較,比較正確后方能進行下一個數據的操作。
在mx29lvErase()函數中主要是實現flash扇區的擦除。如今的flash一般都是按照扇區進行擦除操作的。在擦除操作之前也應該首先對扇區進行解鎖,然后寫擦除建立和扇區擦除命令。擦除成功后,flash中的內容應該是0xffff。所以為了確保成功,我們還是應該在擦除后進行比較,比較正確后方能進入下一個扇區的擦除操作,否則返回擦除錯誤標志。
所以,對于MTD驅動的調試,基本上就是調試寫和擦除兩個函數。在調試過程中,我們可以在這兩個函數相應位置加入打印語句來調試。為了能調試這兩個函數,我們通過在shell上輸入命令tffsDevFormat來格式化flash, tffsDevFormat最終會調用mx29lvErase和mx29lvWrite函數,如果成功就會返回0,否則返回-1。當然也可以調用 tffsDevCreate函數來驗證我們的寫和擦除函數的正確性。圖19說明了tffsDevCreate調用過程。
clip_image004
圖19 tffsDevCreate()調用過程
在shell上利用tffsShow來驗證mx29lvMtdIdentiy。
> tffsShow
0: socket=RFA: type=0x2249, unitSize=0x10000, mediaSize=0x1f0000
value = 49 = 0x31 = "1"
說明已正確識別到MX29LV160BT設備,設備號為0x2249。
建立TFFS設備
1.掛接設備名
MTD驅動調試成功后,我們就可以給flash設備掛接上dos設備名,如下操作:
格式化:
>    tffsDevFormat 
value = 1
>    usrTffsConfig 0,0,”/tffs0”
value = 0
然后通過devs來查看掛接的設備名:
>    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/說明掛接設備已經成功,接下來就可以利用dosFs文件系統相關命令來操作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()會調用tffsDevFormat()進行格式化操作,如:
tffsDevFormat(driveNumber, (int)params);
params為tffsDevFormatParams結構體指針,即格式化參數,如:
#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}
而函數usrTffsConfig( )則將tffsDevCreate( )和dosFsDevInit( )進行了合成,是一個快捷函數。
2.從Flash中啟動并下載VxWorks映像
要從flash中下載VxWorks映像,首先需要把VxWorks映像拷貝到flash中,在shell中的操作命令為copy “VxWorks”,“tffs0/VxWorks”,然后修改config.h文件中引導行,如下:
#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中。然后重新啟動,即可看到如下啟動畫面:
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.
到此,說明引導成功。flash整個TFFS文件系統就已經建立成功。
在一片FLASH同時裝載BootRom、VxWorks文件
我們將Flash地址映射成兩個地址段,一段用做BootRom,一段用做VxWorks使用,用做BootRom的地址段為0xFFF00000~0xFFF80000,另外一段用做VxWorks的地址段為0x04080000~0x04800000(假設此Flash大小為8M大小),在 0xFFF00000~0xFFF80000地址段寫入BootRom,在0x04080000~0x04800000地址段寫入VxWorks,加電后,PC指針會跳到0xFFF00100地址執行第一條指令,引導BootRom起來并最終VxWorks系統引導成功。實現過程:
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)

久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区
中文字幕一区二区三区四区| 欧洲日韩一区二区三区| 国产成人精品影视| 久久99最新地址| 激情五月婷婷综合| 国产在线精品一区二区夜色 | 国产一区日韩二区欧美三区| 激情都市一区二区| 国产福利一区二区三区视频在线 | 欧美日韩国产成人在线免费| 日韩一区二区视频| 26uuu亚洲| 国产精品久久久久久久久搜平片| 亚洲人xxxx| 日本大胆欧美人术艺术动态| 国产一区二区三区日韩 | 国产真实乱子伦精品视频| 国产一区二区在线影院| 欧美日精品一区视频| 一本色道久久加勒比精品| 欧美色大人视频| 精品久久久久久久一区二区蜜臀| 久久久国产精华| 亚洲黄色av一区| 免费av成人在线| eeuss鲁片一区二区三区| 国产精品免费一区二区| 亚洲精品成人三区| 日韩视频免费观看高清完整版在线观看 | 欧美日韩国产片| 日本一区二区视频在线观看| 夜夜嗨av一区二区三区网页 | 日本一区二区在线视频观看| 欧美日韩国产高清一区二区三区| 久久网这里都是精品| 亚洲一卡二卡三卡四卡| 国产麻豆视频一区| 精品国产综合久久| 欧美美女直播网站| 亚洲天堂a在线| 国产乱人伦偷精品视频免下载| 国产精品免费一区二区三区| 欧美性xxxxx极品少妇| 国产日韩欧美麻豆| 美女视频一区二区三区| 国产99午夜精品一区二区三区| 色婷婷av一区| 国产精品伦一区| 国产成人午夜片在线观看高清观看| 久久亚洲午夜电影| 精品国产自在久精品国产| 午夜婷婷国产麻豆精品| 97伦理在线四区| 欧美日韩精品电影| 一个色妞综合视频在线观看| 99久久久无码国产精品| 中国人体摄影一区二区三区| 国产日韩欧美亚洲| 国产一区二区三区精品视频| 欧美日产一区二区三区在线观看| 3d动漫精品啪啪1区2区免费 | 一区二区三区四区蜜桃| 97久久超碰国产精品电影| 在线观看亚洲a| 亚洲人成亚洲人成在线观看图片| 福利一区福利二区| 在线观看一区不卡| 亚洲国产成人tv| www日韩大片| 老司机精品视频导航| 日韩精品一区二区三区四区五区| 欧美国产一区在线| 成人动漫一区二区| 在线电影国产精品| 日韩二区在线观看| 日本不卡一二三区| 国产精品激情偷乱一区二区∴| 成人免费va视频| 91麻豆精品国产91久久久 | 日本不卡中文字幕| 日韩一二三区不卡在线视频| 国产欧美一区二区精品性| 国产成人精品影院| 欧美在线免费播放| 亚洲不卡在线观看| 日韩精品一区二区三区色偷偷| 亚洲视频一二区| 国产91一区二区三区| 国产日本一区二区| 91在线观看高清| 欧美精品一区二区三区在线 | 91影院在线观看| 亚洲精品一区二区三区精华液| 国产福利一区在线观看| 欧美精品色一区二区三区| 久久er精品视频| 欧美在线高清视频| 黑人巨大精品欧美一区| 欧美日韩小视频| 国产在线国偷精品免费看| 欧美美女黄视频| 国产高清精品在线| 日韩一区二区在线看| 成人综合激情网| 精品国产网站在线观看| 51精品国产人成在线观看 | 久久只精品国产| 超碰97人人在线| 亚洲视频免费在线观看| 欧美另类网站| 亚洲成人av一区二区| 在线欧美日韩精品| 国产精品白丝jk白祙喷水网站| 欧美一区二区三区在线观看视频| 成人免费av在线| 国产欧美日韩另类视频免费观看| 国产高清自拍一区| 亚洲老妇xxxxxx| 色哟哟精品一区| 国产成人啪午夜精品网站男同| 精品精品国产高清a毛片牛牛 | 日本一区二区三区四区| 久久综合九色综合97婷婷| 91日韩精品一区| 一色屋精品亚洲香蕉网站| 日韩高清av| 久久精品99国产精品日本| 欧美一区二区精美| 5566中文字幕一区二区| 亚洲欧美激情在线| 欧美性一级生活| 成人av网站免费观看| 国产精品久久久一本精品| 色综合影院在线观看| 国产一区二区三区在线观看免费| 久久久不卡网国产精品二区| 日本一区二区精品视频| 国产一区二区三区四区五区美女| 久久久国际精品| 亚洲乱码国产乱码精品天美传媒| 国产乱码精品一区二区三区五月婷| 久久久国际精品| 亚洲精品9999| 成人av免费观看| 一区二区三区国产精品| 欧美一区二区视频网站| 免费在线观看一区二区| 精品一二线国产| 国产精品视频九色porn| 欧美中文字幕一区二区三区| 91九色视频在线观看| 日韩成人免费看| 国产日韩欧美麻豆| 伊人久久大香线蕉av一区| 91香蕉视频在线| 日韩电影网1区2区| 国产亚洲欧美激情| 亚洲欧美日本国产有色| 99re这里都是精品| 视频一区二区中文字幕| 国产人久久人人人人爽| 欧美影院一区二区三区| 国精产品一区二区| 国产剧情一区二区三区| 亚洲欧美日韩中文播放| 日韩精品影音先锋| 91久久精品网| 国产精品一区二区你懂得| 精品系列免费在线观看| 亚洲精品久久久蜜桃| 精品少妇一区二区三区免费观看| 色综合夜色一区| 久久人人97超碰人人澡爱香蕉| 国产成人aaaa| 偷拍一区二区三区| 99久久精品久久久久久ai换脸| 久久国产精品99久久人人澡| 亚洲欧美另类久久久精品| 精品国产免费一区二区三区四区 | 欧美亚洲另类久久综合| 3d动漫精品啪啪一区二区三区免费 | 成人免费视频一区| 日韩av电影免费观看高清完整版 | 91麻豆福利精品推荐| 久久99蜜桃精品| 亚洲国产wwwccc36天堂| 国产日韩欧美制服另类| 日韩欧美一区二区不卡| 在线免费观看一区| 亚洲女人毛片| 日韩精彩视频| 国产欧美一区二区在线播放| 成人福利电影精品一区二区在线观看| 日韩精品电影在线| 亚洲国产成人va在线观看天堂| 亚洲欧美怡红院| 中文字幕电影一区| 久久众筹精品私拍模特| 日韩三区在线观看| 日韩三级在线免费观看|