海思g_mass_storage.ko模擬U盤

1. 基于平臺:海思3556V100

2. 存儲設(shè)備:nand flash

3. 驅(qū)動加載 (參考《外圍設(shè)備驅(qū)動 操作指南.pdf》)如下:

insmod udc-hisi.ko

insmod configfs.ko

insmod libcomposite.ko

insmod usb_f_mass_storage.ko

insmod g_mass_storage.ko file=/dev/mtdblockX luns=1 stall=0 removable=1? ? 將mtd分區(qū)x(0 ~ n)作為模擬盤的存儲介質(zhì)

4. 在uboot的bootargs里加個分區(qū)():

#define CONFIG_BOOTARGS "mem=128M lpj=240000 console=ttyAMA0 clk_ignore_unused rw ubi.mtd=7 root=ubi0:ubifs rootfstype=ubifs mtdparts=hinand:1M(u-boot.bin),1M(u-boot.bin),4M(uImage),4M(media_app_zip.bin),1M(rawparam),1M(rawparam1),1M(paramdef),24M(rootfs.ubifs),6M(privatefs.ubifs),6M(paramfs.ubifs),84M(u_disk)"

5.在hitool燒錄的xml文件添加個燒錄區(qū)域(config_ubifs_nand.xml)

<Part Sel="1" PartitionName="u_disk" FlashType="nand" FileSystem="none" Start="49M" Length="84M" SelectFile=""/>

Start 49M = :1M +1M +4M +4M + 1M + 1M + 1M + 24M + 6M + 6M? u_disk 前面分區(qū)的總大小

SelectFile 空置

5.開機(jī)進(jìn)入linux 運行命令:cat? /proc/mtd? 查看有沒有 u_disk分區(qū),如下:

mtd10: 03100000 00000000 "u_disk"

然后加載驅(qū)動

insmod udc-hisi.ko

insmod configfs.ko

insmod libcomposite.ko

insmod usb_f_mass_storage.ko insmod g_mass_storage.ko file=/dev/mtdblock10(與mtd10對應(yīng)鲫凶,其實就是從0開始數(shù)BOOTARGS里面設(shè)置的分區(qū)) luns=1 stall=0 removable=1?

6.連接USB到PC會彈出一個盤符禀崖,右鍵格式化成FAT就好了。

linux端格式分區(qū)命令:mkfs.vfat -n 盤符名稱? /mtdblock10

7.linux端 讀寫 U盤內(nèi)容:

mount -t vfat -o sync /mtdblock10 /mnt

當(dāng)電腦寫入數(shù)據(jù)時螟炫,? umount /mnt? 然后重新mount 數(shù)據(jù)就同步了波附。。昼钻。掸屡。(感覺好low....)

當(dāng)linux寫入數(shù)據(jù)時,PC端插拔下USB線 或者rmmod g_mass_storage 然后重新g_mass_storage.ko來同步數(shù)據(jù)然评。仅财。。(haolow....)

8.上述方法直接在nand分區(qū)上格式化了一個FAT分區(qū)的弊端

nand? flash的每個塊擦寫次數(shù)大約十萬次碗淌,盏求,,意思就是你一直懟一個nand塊 那就很快沒用了亿眠。

然后FAT沒有對flash寫入進(jìn)行負(fù)載均衡碎罚,,纳像,意思是 很均勻的懟每一個nand塊荆烈。

https://www.iteye.com/blog/rubynroll-375771? 具體看這個blog

那怎么辦列, 用一個low的方法竟趾,在負(fù)載均衡的文件系統(tǒng)上(我用的是ubifs)虛擬一個塊設(shè)備(就是類似上面那個/dev/mtdblock10)然后把這個塊設(shè)備格式化為FAT32格式的憔购。

具體怎么做呢宫峦?

https://blog.csdn.net/yimiyangguang1314/article/details/42744123 我是參考這里的,后面講我遇到的坑倦始。。山卦。

9.制作個文件系統(tǒng)鏡像

dd if=/dev/zero of=/disk.img bs=1M count=20

然后加載驅(qū)動:insmod g_mass_storage.ko file=/disk.img luns=1 stall=0 removable=1

PC接上USB鞋邑,,竟然直接彈出盤符了账蓉,原來鏡像文件也可以枚碗。。 PC端格式化下盤符或者linux端mkfs.vfat -n 盤符名稱 /disk.img

這樣PC就可以讀寫U盤了铸本。剩下的工作就是linux端讀寫了肮雨。當(dāng)然如果不需要此功能,箱玷,怨规,就不用接下來的操作了。锡足。

10.linux端讀寫U盤分區(qū)(鏡像文件)

mount -t vfat -o sync /disk.img /mnt/? 如果成功的話那么恭喜你波丰。。舶得。

我是失敗的哈哈哈哈哈mount了半天提示 No space left on device 掰烟。。沐批。

然后我ls /dev/? 發(fā)現(xiàn)成千個/dev/loopn? ? 也就是 從 /dev/loop0? ? ~? /dev/loop9999? 創(chuàng)建那么多當(dāng)然沒空間了纫骑。。九孩。

mount 鏡像文件的時候其實可以理解為以下幾個命令

losetup /dev/loop0 /disk.img? ? //建立鏡像文件(disk.img) 與回環(huán)設(shè)備的連接先馆, 回環(huán)設(shè)備的作用(去百度吧,躺彬,懶得打字了磨隘。。)

我這里就報錯了:no device or no file

一般你ls /dev/loop*? 會出現(xiàn) loop0 ~ loop7?

如果沒有: 去linux源碼的根目錄下 make make ARCH=arm CROSS_COMPILE=arm-xxxxx-gcc- menuconfig

去開啟回環(huán)設(shè)備的支持顾患。? 大致在 device設(shè)備 --> block devices --> loopback device support


之后的話 /dev/loop0 設(shè)備 等價于/dev/mtdblock10

mount? /dev/loop0 /mnt

如:mkfs.vfat /disk.img? 等價于 lostepup /dev/loop0 /disk.img? ? mkfs.vfat /dev/loop0? 當(dāng)然如果loop0被占用了? 那就用loop1? 具體使用問那個男人番捂。。

11.還有個問題沒解決江解,设预,,我之前因為直接在分區(qū)上負(fù)載FAT文件系統(tǒng)? 有幸出現(xiàn)了一堆壞塊哈哈哈犁河。鳖枕。魄梯。然后PC寫入文件就卡在壞塊那里了,宾符,酿秸,不知道是卡在壞塊還是壞塊太多了(待驗證)。魏烫。辣苏。有遇到過這個問題的人嗎?

解決思路1:測試剛出廠的nand在ubifs 上 + fat 具體擦寫次數(shù)哄褒,稀蟋。 但是網(wǎng)上說。呐赡。剛出廠的nand是有可能出現(xiàn)壞塊的退客。。

解決思路2:看代碼链嘀。萌狂。』巢矗可勁兒看粥脚。。包个。


-------------------------------------------------------------------稚嫩的搬磚工-------------

歡迎來噴~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


12.續(xù)之前的問題: nand 上出現(xiàn)壞塊? ubifs + fat格式的鏡像文件? PC端讀寫文件會卡住的問題刷允。

我仔細(xì)讀了下第一篇的帖子。碧囊。树灶。

? ? “UBI原本是為了實現(xiàn)更好的負(fù)載均衡(全片負(fù)載均衡)和更好的擴(kuò)展性。UBI架構(gòu)在MTD之上糯而,它? ? ? 要完成的工作就是實現(xiàn)透明的負(fù)載均衡和壞塊管理天通,讓上層的文件系統(tǒng)從這兩部分繁重的工作中? ? ? ? 釋放出來。

? 看起來與FTL很接近了熄驼,只可惜它提供的不是我們需要的塊設(shè)備像寒。與MTD一樣,它提供的界面? ? ? ? ? ? 是"flash"設(shè)備瓜贾,供flash-aware-filesystem使用诺祸。例如可以在UBI之上使用JFFS2(據(jù)說可以獲得更好? ? 的負(fù)載均衡特性),或者專門設(shè)計的UBIFS祭芦】瓯浚”


行吧。。胃夏≈峄颍看來海思的ubifs不是專門設(shè)計的ubifs咯。仰禀。照雁。

然后我就把文件系統(tǒng)改成了yaffs2,答恶,就OK了

大致有兩個猜測饺蚊,

? 一、是海思 的我這個版本的sdk? linux關(guān)于MTD驅(qū)動沒有弄好亥宿,或者是我沒有把壞塊相關(guān)的檢測開起來卸勺? 因為看到這篇文章的介紹yaffs2

https://blog.csdn.net/iceiilin/article/details/22721029

yaffs/yaffs2自帶NAND芯片的驅(qū)動砂沛,并且為嵌入式系統(tǒng)提供了直接訪問文件系統(tǒng)的API烫扼,用戶可以不使用Linux中的MTD與VFS,直接對文件系統(tǒng)操作碍庵。當(dāng)然映企,yaffs也可與MTD驅(qū)動程序配合使用【苍。】

這個需要去整個MTD框架了

? 二堰氓、就是ubifs文件系統(tǒng)沒有壞塊處理?? 這個應(yīng)該不太可能把苹享、双絮、、(不太懂)


然后 mount yaffs2分區(qū)的時候又又不成功了得问,囤攀,,這時候長了個心眼宫纬、焚挠、

cat /proc/filesystems? 查看當(dāng)前支持的文件系統(tǒng)

nodev? sysfs

nodev? proc

.....

? ? ? ? vfat

nodev? ubifs? // 果然沒有yaffs2?

好吧。漓骚。蝌衔。老樣子去配置內(nèi)核

make ARCH=arm CROSS_COMPILE=arm-xxxxx-gcc- menuconfig

File systems --> Miscellaneous filesystems

然后mount 成功。蝌蹂。噩斟。


傳輸大概1M ~ 2M 把。 孤个。亩冬。還可以啊。。

-------------------------------------------------------------------稚嫩的搬磚工-------------

歡迎來噴~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末硅急,一起剝皮案震驚了整個濱河市覆享,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌营袜,老刑警劉巖撒顿,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異荚板,居然都是意外死亡凤壁,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門跪另,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拧抖,“玉大人,你說我怎么就攤上這事免绿∵笙” “怎么了?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵嘲驾,是天一觀的道長淌哟。 經(jīng)常有香客問我,道長辽故,這世上最難降的妖魔是什么徒仓? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮誊垢,結(jié)果婚禮上掉弛,老公的妹妹穿的比我還像新娘。我一直安慰自己喂走,他們只是感情好殃饿,可當(dāng)我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著缴啡,像睡著了一般壁晒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上业栅,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天秒咐,我揣著相機(jī)與錄音,去河邊找鬼碘裕。 笑死携取,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的帮孔。 我是一名探鬼主播雷滋,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼不撑,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了晤斩?” 一聲冷哼從身側(cè)響起焕檬,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎澳泵,沒想到半個月后实愚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡兔辅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年腊敲,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片维苔。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡碰辅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出介时,到底是詐尸還是另有隱情没宾,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布潮尝,位于F島的核電站榕吼,受9級特大地震影響饿序,放射性物質(zhì)發(fā)生泄漏勉失。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一原探、第九天 我趴在偏房一處隱蔽的房頂上張望乱凿。 院中可真熱鬧,春花似錦咽弦、人聲如沸徒蟆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽段审。三九已至,卻和暖如春闹蒜,著一層夾襖步出監(jiān)牢的瞬間寺枉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工绷落, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留姥闪,地道東北人。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓砌烁,卻偏偏與公主長得像筐喳,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容