国产精品久久久久久久久久久新郎_91久久精品国产_国内精品久久久久久_欧美激情第一页在线观看_国产欧美日韩丝袜精品一区_日韩精品成人一区二区在线观看_国产精品v片在线观看不卡_91精品国产综合久久香蕉最新版 _国产精品亚洲激情_色综合男人天堂

始創(chuàng)于2000年 股票代碼:831685
咨詢熱線:0371-60135900 注冊有禮 登錄
  • 掛牌上市企業(yè)
  • 60秒人工響應
  • 99.99%連通率
  • 7*24h人工
  • 故障100倍補償
全部產(chǎn)品
您的位置: 網(wǎng)站首頁 > 幫助中心>文章內(nèi)容

高手進階 Linux系統(tǒng)下MTD/CFI驅(qū)動介紹

發(fā)布時間:  2012/8/26 17:17:27
某些Intel的FLASH芯片(如StrataFlash系列)支持多分區(qū),也就是各個分區(qū)可以同時進行操作。應該說這是不錯的特性,但是也會帶來些問題。記得當初移植Linux-2.4.21,掛JFFS2文件系統(tǒng)的時候,經(jīng)常會報一些"Magic bitmask not found"之類的錯誤,跟進去發(fā)現(xiàn)FLASH讀出來的都是些0x80之類的數(shù)據(jù),查看資料發(fā)現(xiàn)該款FLASH有分區(qū)的特性,而Linux的FLASH驅(qū)動只用一個狀態(tài)變量表示整個FLASH的狀態(tài),這就會造成某個分區(qū)的實際狀態(tài)和系統(tǒng)記錄的不符,從而導致讀FLASH的時候該點實際上不處在讀狀態(tài)。當時的解決辦法是,每次讀的時候,不管記錄的狀態(tài)是什么,先進入讀狀態(tài)再說,當然這會帶來性能的下降,具體損失多少個時鐘周期就不算了。

  話說進入Linux-2.6.x的時代(具體是2.6.13),除了Lock/Unlock(Linux在擦/寫的時候不先Unlock,解決辦法就是初始化的時候先全部Unlock)這個老問題外,竟然多分區(qū)的錯誤沒有出現(xiàn),驚訝之下決定好好研究下Linux的MTD/FLASH驅(qū)動。

  說驅(qū)動之前,先明確幾個編程要點:

  1:讀寫,要按照總線位寬讀寫,注意不是FLASH芯片位寬(例如背靠背)。

  2:尋址,程序要訪問的地址和FLASH芯片地址引腳得到的值是不一樣的,例如16位的FLASH芯片,對于CPU,0x00和0x01表示2個不同的字節(jié),但是到了FLASH引腳得到的都是0,也就是都指向FLASH的第一個WORD。可以認為地址總線的bit0懸空,或者認為轉(zhuǎn)換總線, bit0上實際輸出的是bit1。這個解釋了要點1。

  3:芯片手冊提到偏移量都是基于WORD的,而WORD的位寬取決于芯片的位寬,因此在下命令的時候,實際偏移=手冊偏移*buswidth/8。

  4:芯片手冊提到的變量長度(典型如CFI信息)例如2,指的是,變量是個16bit數(shù),但是讀的時候,要讀2個WORD,然后把每個WORD的低8位拼成1個16bit數(shù)。讀WORD再拼湊確實挺麻煩,尤其是讀取大結(jié)構(gòu)的時候,不過參照cfi_util.c的cfi_read_pri函數(shù)的做法就簡單了。

  5:背靠背,也就是比方說2塊16位的芯片一起接在32位的總線上。帶來的就是尋址的問題,很顯然,首先要按32位讀寫;其次就是下命令的地址,實際偏移=手冊偏移*interleave*device_type/8,device_type=buswidth/interleave,而buswidth這個時候是32(總線位寬)。另外就是背靠背的時候,命令和返回的狀態(tài)碼是“雙份的”,例如2塊16位背靠背,讀命令是0x00ff00ff。

  如果不是想寫像Linux那么靈活的代碼(考慮各種接法/位寬/CFI獲取信息等),那事情就簡單很多,只要考慮要點1以及擦除塊的大小就好了,當然如果是背靠背接法,擦除塊的實際大小要乘個interleave。

  進入Linux代碼

  關(guān)于CHIP/MAP/MTD之間繞來繞去的關(guān)系現(xiàn)在還糊涂著呢,因此下面只是簡單的跟一下脈絡和各個編程要點。

  1:構(gòu)造map_info結(jié)構(gòu),指定基址/位寬/大小等信息以及"cfi_probe"限定,然后調(diào)用do_map_probe()。

  2:do_map_probe()根據(jù)名字"cfi_probe"找到芯片驅(qū)動"cfi_probe.c"直接調(diào)用cfi_probe()。

  3:cfi_probe()直接調(diào)用mtd_do_chip_probe(),傳入cfi_probe_chip()函數(shù)指針。

  4:mtd_do_chip_probe()分2步,先調(diào)用genprobe_ident_chips()探測芯片信息,后調(diào)用check_cmd_set()獲取和初始化芯片命令集(多分區(qū)初始化就在里面)。

  5:genprobe_ident_chips()函數(shù)如果不考慮多芯片串連的情況,那只需看前面的genprobe_new_chip()調(diào)用,完成后cfi.chipshift=cfi.cfiq->DevSize,2^chipshift=FLASH大小。
6:genprobe_new_chip()枚舉各種不同的芯片位寬和背靠背數(shù)量,結(jié)合配置設定依次調(diào)用步驟3的cfi_probe_chip(),注意cfi->device_type=bankwidth/nr_chips,bankwidth是總線位寬,device_type是芯片位寬。這里我們只需要注意有限復雜情況即可,所謂有限復雜指的是編譯時確定的復雜連接。這樣,cfi_probe_chip()只有第1次調(diào)用才成功,如果考慮32位寬的FLASH插在16bit總線上的情況,那第2次調(diào)用成功。

 

  7:cfi_probe_chip(),由于步驟6的原因,函數(shù)就在cfi_chip_setup()直接返回,后面的代碼就不用考慮了。

  8:cfi_chip_setup()讀取CFI信息,可以留意下Linux是怎么實現(xiàn)要點4的。

  9:回到步驟4的check_cmd_set()階段,進入cfi_cmdset_0001()函數(shù),先調(diào)用read_pri_intelext()讀取Intel的擴展信息,然后調(diào)用cfi_intelext_setup()初始化自身結(jié)構(gòu)。

  10:read_pri_intelext()函數(shù),可以留意下怎么讀取變長結(jié)構(gòu)的技巧,也就是"need_more"的用法。這里說明下一些變量的含義,例如對于StrataFlash 128Mb Bottom類型的的FLASH芯片,塊結(jié)構(gòu)是4*32KB+127*128KB=16MB,一共16個分區(qū),每個分區(qū)1MB。nb_parts=2。

  第1部分

  NumIdentPartitions=1 // 有1個重復的分區(qū)

  NumBlockTypes=2      // 分區(qū)內(nèi)有2種不同的Block類型

  第1類型

  NumIdentBlocks=3   // 有4個Block(3+1)

  BlockSize=0x80     // 32KB(0x80*256)

  第2類型

  NumIdentBlocks=6   // 有7個Block(6+1)

  BlockSize=0x200    // 128KB(0x200*256)

  第2部分

  NumIdentPartitions=15// 有15個重復的分區(qū)
  NumBlockTypes=1      // 分區(qū)內(nèi)有1種Block類型

  第1類型

  NumIdentBlocks=7   // 有8個Block(7+1)

  BlockSize=0x200    // 128KB(0x200*256)

  11:cfi_intelext_setup()函數(shù)首先根據(jù)CFI建立mtd_erase_region_info信息,然后調(diào)用cfi_intelext_partition_fixup()來支持分區(qū)。

  12:cfi_intelext_partition_fixup()用來建立虛擬Chip,每個分區(qū)對應1個Chip,不過并沒有完全根據(jù)CFI擴展信息來建立,而是假定每個分區(qū)的大小都一致。cfi->chipshift調(diào)整為partshift,各個虛擬chip->start調(diào)整為各分區(qū)的基址。將來訪問FLASH的入口函數(shù)cfi_varsize_frob()就根據(jù)ofs得到chipnum(chipnum=ofs>>cfi->chipshift),這也是為什么要假定分區(qū)一致的原因。


本文出自:億恩科技【www.czbl888.cn】

服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]

  • 您可能在找
  • 億恩北京公司:
  • 經(jīng)營性ICP/ISP證:京B2-20150015
  • 億恩鄭州公司:
  • 經(jīng)營性ICP/ISP/IDC證:豫B1.B2-20060070
  • 億恩南昌公司:
  • 經(jīng)營性ICP/ISP證:贛B2-20080012
  • 服務器/云主機 24小時售后服務電話:0371-60135900
  • 虛擬主機/智能建站 24小時售后服務電話:0371-60135900
  • 專注服務器托管17年
    掃掃關(guān)注-微信公眾號
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權(quán)所有  地址:鄭州市高新區(qū)翠竹街1號總部企業(yè)基地億恩大廈  法律顧問:河南亞太人律師事務所郝建鋒、杜慧月律師   京公網(wǎng)安備41019702002023號
      0
     
     
     
     

    0371-60135900
    7*24小時客服服務熱線

     
     
    国产精品久久久久久久久久久新郎_91久久精品国产_国内精品久久久久久_欧美激情第一页在线观看_国产欧美日韩丝袜精品一区_日韩精品成人一区二区在线观看_国产精品v片在线观看不卡_91精品国产综合久久香蕉最新版 _国产精品亚洲激情_色综合男人天堂
    男人日女人视频网站| 国产综合中文字幕| 国产成人在线免费看| 黄色www在线观看| 久久出品必属精品| 久久久精品视频国产| 91插插插影院| www.久久com| 一级网站在线观看| 国产毛片久久久久久| 一级片免费在线观看视频| 污污的视频免费观看| 亚洲成人福利在线| 国产精欧美一区二区三区白种人| 亚洲欧美偷拍另类| 青娱乐精品在线| av一区二区三区免费观看| 蜜臀精品一区二区| 亚洲熟妇国产熟妇肥婆| 免费日韩中文字幕| 99视频在线视频| 香蕉视频xxx| 成人一区二区av| 国产 欧美 日韩 一区| 欧美在线观看www| 免费看污污网站| 99精品视频国产| 91成人综合网| 国产一区二区视频免费在线观看| 三年中国国语在线播放免费| 手机在线成人免费视频| 一级淫片在线观看| 日韩精品久久一区二区| 青青视频在线播放| 久久黄色片网站| 女女百合国产免费网站| 99视频在线免费播放| 尤蜜粉嫩av国产一区二区三区| 污污的视频免费| 97中文字幕在线| 99视频免费播放| 亚洲国产精品女人| 国产免费黄视频| av噜噜在线观看| 日日摸日日碰夜夜爽无码| 亚洲黄色网址在线观看| 国产69精品久久久久999小说| 18岁视频在线观看| 四虎免费在线观看视频| 青青草成人免费在线视频| 国产精品免费成人| 麻豆一区二区三区在线观看| 国内外成人激情视频| 91视频福利网| 亚洲色成人一区二区三区小说| 在线视频观看91| 日韩在线一级片| 中国 免费 av| 久久久精品三级| 欧妇女乱妇女乱视频| 亚洲人视频在线| 少妇人妻在线视频| 午夜免费福利网站| 久久美女福利视频| 亚洲精品国产suv一区88| 亚洲免费一级视频| 欧美精品自拍视频| 在线成人免费av| 国产综合免费视频| 欧妇女乱妇女乱视频| 美女网站色免费| 久久久久久久久久久视频| 国产999免费视频| 欧美一级黄色影院| 少妇高潮毛片色欲ava片| 亚洲欧美日韩不卡| 亚洲美女爱爱视频| 成人午夜视频免费在线观看| 精品无码av无码免费专区| 三上悠亚在线一区| 国产熟人av一二三区| 奇米影视亚洲色图| 偷拍盗摄高潮叫床对白清晰| 激情 小说 亚洲 图片: 伦| 日日橹狠狠爱欧美超碰| 大荫蒂性生交片| www.成年人| 日韩一级理论片| 午夜精品久久久内射近拍高清| 欧美日韩中文字幕在线播放| 手机在线免费毛片| 亚洲最大天堂网| 亚洲 激情 在线| 玩弄japan白嫩少妇hd| 美女日批免费视频| 男人天堂av片| www.好吊操| 妞干网视频在线观看| 国产日韩欧美大片| 中文字幕在线乱| 中文字幕在线乱| 中国一级黄色录像| 免费成人进口网站| 99精品一级欧美片免费播放| 国产精品久久久久久久av福利| 日韩av卡一卡二| 999精品视频在线| 999精品视频在线| 日韩精品你懂的| 另类小说第一页| 久久久精品三级| 手机在线成人免费视频| 欧美一级特黄a| 粉色视频免费看| 国内av一区二区| 午夜激情影院在线观看| 日韩欧美中文视频| 国产女人18毛片| 屁屁影院ccyy国产第一页| 欧美中日韩在线| www在线观看免费| 北条麻妃在线视频观看| 久热免费在线观看| 中文字幕一区二区三区四区在线视频| 搡女人真爽免费午夜网站| 国产视频手机在线播放| 日韩欧美国产片| 亚洲综合在线一区二区| 国产香蕉一区二区三区| 美女扒开大腿让男人桶| 国产午夜大地久久| 999精品网站| 亚洲一区二区在线视频观看| www.午夜色| 国产又粗又大又爽的视频| 男女裸体影院高潮| 欧美视频在线播放一区| 亚洲熟妇无码一区二区三区导航| 99精品人妻少妇一区二区| 熟妇人妻va精品中文字幕| 一路向西2在线观看| 精品91一区二区三区| av在线播放天堂| 一本色道无码道dvd在线观看| jizz18女人| 青青视频免费在线观看| 国内精品在线观看视频| 欧美牲交a欧美牲交aⅴ免费下载| 亚洲精品高清无码视频| 四虎1515hh.com| 一二三四视频社区在线| 少妇黄色一级片| 日本a级片在线观看| 91黄色小网站| av在线网站免费观看| 日本www在线视频| 亚洲国产高清av| 大陆极品少妇内射aaaaaa| 国产成人精品无码播放| 欧美另类videos| 国产情侣av自拍| 中文字幕色呦呦| 日本成人黄色网| 天堂网成人在线| 国产在线青青草| 日韩成人av免费| 久久黄色片视频| 欧美国产在线一区| 成熟老妇女视频| 99热这里只有精品7| 成人免费观看毛片| 国产盗摄视频在线观看| 精品久久久久久久无码| 妞干网在线播放| 激情文学亚洲色图| 无码人妻h动漫| mm131午夜| 日本高清久久久| 91传媒久久久| 999一区二区三区| 亚洲精品中文字幕乱码无线| 成年人观看网站| 日本黄色片一级片| 婷婷中文字幕在线观看| 欧美精品第三页| cao在线观看| 欧美h视频在线观看| 国产喷水theporn| 黄色a级片免费| 欧美视频免费看欧美视频| av磁力番号网| 亚洲妇熟xx妇色黄蜜桃| www.欧美日本| 国产亚洲天堂网| 国产精品12345| 欧美视频在线第一页| 四虎影院一区二区| 国产欧美精品一二三| 波多结衣在线观看| 日韩一级在线免费观看|