www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀] 在U-Boot中實(shí)現(xiàn)對(duì)Yaffs鏡像的支持

0 引 言
    U-Boot是目前廣泛使用的嵌入式操作系統(tǒng)通用引導(dǎo)程序,具有功能豐富強(qiáng)大,支持多種操作系統(tǒng)和 CPU體系,易于功能擴(kuò)展和移植,源碼開放等多種優(yōu)點(diǎn)。U-Boot能夠同時(shí)支持啟動(dòng)加載模式和下載模式。在下載模式下,可以通過U-Boot自帶的 nand read/write等命令,配合.Jffs 2等參數(shù),實(shí)現(xiàn)cramfs,Jffs 2等文件系統(tǒng)鏡像的讀寫,方便開發(fā)過程的調(diào)試。Yaffs文件系統(tǒng)是專門針對(duì)NAND FLASH設(shè)計(jì)的可讀寫型文件系統(tǒng),在NAND FLASH上性能穩(wěn)定優(yōu)異。U-Boot自身沒有實(shí)現(xiàn)對(duì)Yaffs文件系統(tǒng)鏡像讀寫的直接支持。由于Yaffs文件系統(tǒng)的特殊結(jié)構(gòu),需要對(duì)nand命令做一定的修改,從而實(shí)現(xiàn)其在NANDFLASH上對(duì)Yaffs鏡像的讀寫。

1 相關(guān)工作簡介
1.1 Yaffs文件系統(tǒng)結(jié)構(gòu)簡述
    目前,嵌入式系統(tǒng)中常用的FLASH文件系統(tǒng)有Cramfs,Jffs 2,Yaffs,exfat等。Cramfs是一種壓縮型只讀型文件系統(tǒng),其在系統(tǒng)啟動(dòng)時(shí)解壓至內(nèi)存中運(yùn)行。Jffs 2,Yaffs,Exfat等是可讀寫型文件系統(tǒng),Jffs 2一般應(yīng)用于NOR型FLASH;Exfat不是開源的文件系統(tǒng)實(shí)現(xiàn),一般應(yīng)用于Windows CE操作系統(tǒng)中。Yaffs是一種專門針對(duì)NAND FLASH設(shè)計(jì)的可讀寫型文件系統(tǒng),它能針對(duì)嵌入式存儲(chǔ)器的功能要求提供損耗平衡、掉電保護(hù)等。Yaffs文件系統(tǒng)的源代碼開放,在多種嵌入式操作系統(tǒng)中移植十分方便。
    通常一個(gè)NAND FLASH存儲(chǔ)設(shè)備由若干塊組成;1個(gè)塊由若干頁組成。一般128 MB以下容量的NAND FLASH芯片,一頁大小為528 B,依次分為2個(gè)256 B的主數(shù)據(jù)區(qū)和16 B的額外空間;128 MB以上容量的NAND FLASH芯片,一頁大小通常為2 KB。由于NAND FLASH出現(xiàn)位反轉(zhuǎn)的概率較大,一般在讀寫時(shí)需要使用ECC進(jìn)行錯(cuò)誤檢驗(yàn)和恢復(fù)。
    Yaffs文件系統(tǒng)的設(shè)計(jì)充分考慮到NAND FLASH以頁為存取單位等的特點(diǎn),將文件組織成固定大小的段(Chunk)。以528 B的頁為例,Yaffs文件系統(tǒng)使用前512 B存儲(chǔ)數(shù)據(jù)、16 B的額外空間,用以存放數(shù)據(jù)的ECC和文件系統(tǒng)的組織信息等(稱為OOB數(shù)據(jù))。通過OOB數(shù)據(jù),不但能實(shí)現(xiàn)錯(cuò)誤檢測和壞塊處理;同時(shí)可以避免加載時(shí)對(duì)整個(gè)存儲(chǔ)介質(zhì)的掃描,加快了文件系統(tǒng)的加載速度。一個(gè)頁面的具體結(jié)構(gòu)如表1所示。

    由此可知,與其他文件系統(tǒng)相比,在生成Yaffs鏡像時(shí)就包含了OOB數(shù)據(jù),所以在燒寫Yaffs鏡像時(shí),不需要計(jì)算ECC,僅依次寫入512 B的數(shù)據(jù)和16 B的OOB數(shù)據(jù)即可。同時(shí),Yaffs鏡像要使用分區(qū)上的第一個(gè)塊來存儲(chǔ)一個(gè)名為Yaffs_ObjectHeader的結(jié)構(gòu)體。該結(jié)構(gòu)體記錄了該分區(qū)中的文件、路徑以及相關(guān)的鏈接,所以在燒寫時(shí)還需要跳過第一個(gè)可用的塊。Yaffs文件系統(tǒng)目前常用的版本為Yaffs 2,性能在許多方面都有了很大的提高。
1.2 U-Boot對(duì)常見文件系統(tǒng)的支持
    在實(shí)際開發(fā)過程中,一般使用引導(dǎo)程序,比如U-Boot,完成文件向FLASH中的燒寫和啟動(dòng)引導(dǎo)等工作。U-Boot能夠支持Cramfs,Jffs 2文件系統(tǒng)的燒寫。這些文件系統(tǒng)是針對(duì)NOR型FLASH設(shè)計(jì)的,所有文件數(shù)據(jù)就是簡單的線性表組織形式。對(duì)于目前大量使用的NAND型FLASH,由于帶有用于數(shù)據(jù)校驗(yàn)等功能的OOB區(qū),所以Yaffs文件系統(tǒng)的數(shù)據(jù)組織形式不再是線性表的形式。
    U-Boot沒有提供對(duì)Yaffs文件系統(tǒng)的讀寫支持。但由于該文件系統(tǒng)的讀寫過程與其他文件系統(tǒng)的讀寫類似,因此可以通過修改U-Boot的FLASH讀寫命令,增加處理00B區(qū)域數(shù)據(jù)的功能,即可以實(shí)現(xiàn)對(duì)Yaffs文件系統(tǒng)的讀寫支持。[!--empirenews.page--]

2 具體實(shí)現(xiàn)
    在此,采用U-Boot 1.1.6版,NAND FLASH使用三星公司的K9F1208UOM。該NAND FLASH每頁為512 B,外加16 B額外空間,整個(gè)芯片容量為64 MB。在此之前,已經(jīng)正確配置了相關(guān)的宏定義,并移植了相關(guān)NAND FLASH的驅(qū)動(dòng)程序,使U-Boot能夠正確操作該芯片。
2.1 為U-Boot添加新的命令
    實(shí)際上,U-Boot中已經(jīng)實(shí)現(xiàn)了所需的nand命令,只要編寫好正確的NAND FLASH驅(qū)動(dòng)程序,并定義相應(yīng)的宏,就可實(shí)現(xiàn)對(duì)NAND FLASH的基本讀寫操作。欲添加對(duì)Yaffs鏡像的支持,只要實(shí)現(xiàn)一個(gè)新的參數(shù)即可。為了給下述工作一個(gè)清晰的步驟,在此先簡述如何向U-Boot中添加一個(gè)新命令。以下所述的路徑均在U-Boot源碼目錄下。
    (1)在include/cmd_confdefs.h文件中定義相應(yīng)命令的宏,不能與已有的宏值重復(fù)。
    (2)在common/cmd_name.c中實(shí)現(xiàn)命令操作的具體代碼,文件名中的name即為相應(yīng)命令的名稱。在這個(gè)文件中,首先要編寫命令的實(shí)現(xiàn)函數(shù);此外還要使用一個(gè)U_BOOT_CMD()的宏函數(shù)來填寫該命令的cmd_tbl_t結(jié)構(gòu)體。該結(jié)構(gòu)體的原型是在include\command.h 中定義的,包含相應(yīng)命令的名稱、參數(shù)個(gè)數(shù)、實(shí)現(xiàn)函數(shù)、用法說明、幫助等信息。最后還要修改common/Makefile文件,將該文件添加為編譯的目標(biāo)。
    (3)在相應(yīng)的開發(fā)板頭文件(位于include/con-figs/下)中的CONFIG_COMMANDS宏中添加(1)所定義的宏即可使用該命令。
    在實(shí)現(xiàn)以上步驟時(shí),參照已有命令的相應(yīng)代碼作適當(dāng)修改即可。
2.2 為nand命令添加新參數(shù)
    根據(jù)以上分析,下面給nand命令添加write.yaffs參數(shù),從而實(shí)現(xiàn)對(duì)Yaffs鏡像的支持。按照第2.1節(jié)中的步驟,由于nand命令已經(jīng)實(shí)現(xiàn),僅需要修改com-mon/cmd_nand.c文件即可。
    (1)在common/cmd_nand.c文件的U_BOOT_CMD()宏函數(shù)中仿照其他參數(shù),添加該參數(shù)的使用說明

   

       定義讀寫操作的結(jié)構(gòu)體原型中一部分參數(shù)沒有使用,這些參數(shù)與選擇ECC的方式有關(guān),由于Yaffs文件系統(tǒng)已包含了OOB數(shù)據(jù),故不使用這些參數(shù)。另外, opts.skipfirstblk是向nand_write_options_t結(jié)構(gòu)體中新添加的變量,因此需要修改該結(jié)構(gòu)體。在 include/nand.h中,向struct nand_write_options結(jié)構(gòu)體添加如下變量定義:
    int skipfirstblk;
    此外,需要再修改nand_write_opts函數(shù),以增加對(duì)此變量的支持。
2.3 修改nand_write_opts函數(shù)
    在drivers/nand/nand_util.c中,根據(jù)其代碼,在while(blockstart!=(mtdoffset&(~erasesize_blockalign+1)))循環(huán)體之后添加如下代碼:

   [!--empirenews.page--]
    通過以上步驟,U-Boot已經(jīng)可以支持Yaffs文件系統(tǒng)鏡像的讀寫。一般地,在進(jìn)行NAND FLASH寫操作時(shí),可以先通過串口或網(wǎng)絡(luò)等接口將數(shù)據(jù)下載到內(nèi)存中,進(jìn)而按照命令格式將其燒寫到NAND FLASH中。例如:

  
    在U-Boot中使用以上三條命令,將名為test.yaffs的Yaffs文件系統(tǒng)鏡像下載到內(nèi)存中,然后擦除一塊FLASH空間,最后用Nand Write.yaffs命令將其寫入NAND FLASH。燒寫完畢后會(huì)提示:
    Writing data at 0xd67200-100%complete.
    3663264 bytes written:OK
    另外,由于沒有使用ECC,燒寫過程中會(huì)有大量如下提示:
    Writing data without ECC to NAND_FLASH is not recom-mended
    事實(shí)上,ECC數(shù)據(jù)在生成Yaffs鏡像時(shí)已經(jīng)包含在鏡像里,因此這里的提示并沒有關(guān)系。在drivers/nand/nand_basec.c文件中,將nand_write_page函數(shù)中case NAND_ECC_NONE:語句分支中的printk函數(shù)注釋掉即可消除此提示。

3 Yaffs文件系統(tǒng)的性能
    在實(shí)際使用中,一般CPU的運(yùn)行速度遠(yuǎn)大于FLASH的讀寫速度,所以yaffs文件系統(tǒng)的讀寫速度主要由具體FLASH芯片的讀寫時(shí)間延遲來決定。
    對(duì)于常使用的Yaffs 2,寫操作的速度為1.5~4.5 MB/S,讀操作的速度為7.6~16.7 MB/S,刪除操作為7.8~62.5 MB/s,垃圾回收為2.1~7.7 MB/s。由于一般嵌入式系統(tǒng)數(shù)據(jù)交換量不大,所以該文件系統(tǒng)完全能夠滿足一般實(shí)時(shí)性操作的要求。
    此外,作為日志型文件系統(tǒng),Yaffs文件系統(tǒng)能夠有效地保護(hù)數(shù)據(jù)完整性,避免系統(tǒng)掉電等情況對(duì)數(shù)據(jù)產(chǎn)生的破壞。同時(shí),與其他FLASH文件系統(tǒng)相比, Yaffs文件系統(tǒng)的實(shí)現(xiàn)給NAND型FLASH帶來了很多優(yōu)化,在速度、內(nèi)存占用以及能耗等方面都有更好的表現(xiàn)。


4 結(jié) 語
    這里在分析Yaffs文件系統(tǒng)基本結(jié)構(gòu)的基礎(chǔ)上,通過為U-Boot已有命令添加新的參數(shù),實(shí)現(xiàn)了U- Boot讀寫Yaffs文件系統(tǒng)鏡像的支持。最后通過一個(gè)簡單試驗(yàn)進(jìn)行了驗(yàn)證。結(jié)果表明,燒寫入FLASH中的文件系統(tǒng)鏡像可以被嵌入式Linux等操作系統(tǒng)的內(nèi)核掛載使用。方便了嵌入式系統(tǒng)的Yaffs根文件系統(tǒng)鏡像的創(chuàng)建和調(diào)試。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

成都2022年10月19日 /美通社/ -- 近期,平安養(yǎng)老險(xiǎn)積極籌備個(gè)人養(yǎng)老金的產(chǎn)品設(shè)計(jì)和系統(tǒng)開發(fā)工作,發(fā)展多樣化的養(yǎng)老金融產(chǎn)品,推動(dòng)商業(yè)養(yǎng)老保險(xiǎn)、個(gè)人養(yǎng)老金、專屬商業(yè)養(yǎng)老保險(xiǎn)等產(chǎn)品供給。 搭養(yǎng)老政策東風(fēng) ...

關(guān)鍵字: 溫度 BSP 東風(fēng) 大眾

廣東佛山2022年10月19日 /美通社/ -- 空間是人居生活的基礎(chǔ)單元,承載著生存與活動(dòng)的最基本功能。而對(duì)于理想空間的解構(gòu)意義卻在物理性容器之外,體現(xiàn)出人們對(duì)于空間和生活深層關(guān)系的思考,同時(shí)也塑造著人與空間的新型連接...

關(guān)鍵字: 溫度 BSP 智能化 進(jìn)程

上海2022年10月19日 /美通社/ -- 10月17日晚間,安集科技披露業(yè)績預(yù)告。今年前三季度,公司預(yù)計(jì)實(shí)現(xiàn)營業(yè)收入7.54億元至8.33億元,同比增長60.24%至77.03%;歸母凈利潤預(yù)計(jì)為1.73億...

關(guān)鍵字: 電子 安集科技 BSP EPS

北京2022年10月19日 /美通社/ -- 10月18日,北京市經(jīng)濟(jì)和信息化局發(fā)布2022年度第一批北京市市級(jí)企業(yè)技術(shù)中心創(chuàng)建名單的通知,諾誠健華正式獲得"北京市企業(yè)技術(shù)中心"認(rèn)定。 北京市企業(yè)技...

關(guān)鍵字: BSP ARMA COM 代碼

北京2022年10月18日 /美通社/ -- 10月14日,國際數(shù)據(jù)公司(IDC)發(fā)布《2022Q2中國軟件定義存儲(chǔ)及超融合市場研究報(bào)告》,報(bào)告顯示:2022年上半年浪潮超融合銷售額同比增長59.4%,近5倍于...

關(guān)鍵字: IDC BSP 數(shù)字化 數(shù)據(jù)中心

上海2022年10月18日 /美通社/ -- 2022年9月5日,是首都銀行集團(tuán)成立60周年的紀(jì)念日。趁著首都銀行集團(tuán)成立60周年與首都銀行(中國)在華深耕經(jīng)營12年的“大日子”,圍繞作為外資金融機(jī)構(gòu)對(duì)在華戰(zhàn)略的構(gòu)想和業(yè)...

關(guān)鍵字: 數(shù)字化 BSP 供應(yīng)鏈 控制

東京2022年10月18日  /美通社/ -- NIPPON EXPRESS HOLDINGS株式會(huì)社(NIPPON EXPRESS HOLDINGS, INC.)旗下集團(tuán)公司上海通運(yùn)國際物流有限公司(Nipp...

關(guān)鍵字: 溫控 精密儀器 半導(dǎo)體制造 BSP

廣州2022年10月18日 /美通社/ -- 10月15日,第 132 屆中國進(jìn)出口商品交易會(huì)("廣交會(huì)")于"云端"開幕。本屆廣交會(huì)上高新技術(shù)企業(yè)云集,展出的智能產(chǎn)品超過140,...

關(guān)鍵字: 中國智造 BSP 手機(jī) CAN

要問機(jī)器人公司哪家強(qiáng),波士頓動(dòng)力絕對(duì)是其中的佼佼者。近來年該公司在機(jī)器人研發(fā)方面獲得的一些成果令人印象深刻,比如其開發(fā)的機(jī)器人會(huì)后空翻,自主爬樓梯等。這不,波士頓動(dòng)力又發(fā)布了其機(jī)器人組團(tuán)跳男團(tuán)舞的新視頻,表演的機(jī)器人包括...

關(guān)鍵字: 機(jī)器人 BSP 工業(yè)機(jī)器人 現(xiàn)代汽車

南京2022年10月17日 /美通社/ -- 日前《2022第三屆中國高端家電品牌G50峰會(huì)》于浙江寧波落幕,來自兩百余名行業(yè)大咖、專家學(xué)者共同探討了在形勢依然嚴(yán)峻的當(dāng)下,如何以科技創(chuàng)新、高端化轉(zhuǎn)型等手段,幫助...

關(guān)鍵字: LINK AI BSP 智能家電

嵌入式軟件

15715 篇文章

關(guān)注

發(fā)布文章

編輯精選

技術(shù)子站

關(guān)閉