TransFlash存儲(chǔ)卡在嵌入式系統(tǒng)調(diào)試中的應(yīng)用
2.4 FAT32文件系統(tǒng)移植
在文中,F(xiàn)AT32文件系統(tǒng)移植主要包括系統(tǒng)初始化和文件管理程序修改(主要是文件讀取)。FAT32的初始化就是找到各個(gè)部分的起始扇區(qū)位置。首先查找MBR的分區(qū)表,獲取分區(qū)信息,然后找到每個(gè)分區(qū)的DBR,再根據(jù)DBR中的BPB得到分區(qū)的起始扇區(qū)、結(jié)束扇區(qū)、文件系統(tǒng)類型、FAT表個(gè)數(shù)、每簇占用扇區(qū)數(shù)等信息。最后根據(jù)下面的算法得到文件分配表FAT、文件目錄表FDT和數(shù)據(jù)區(qū)DATA的起始扇區(qū)。FAT32讀取文件流程如圖4所示。本文引用地址:http://butianyuan.cn/article/148043.htm
2.5 設(shè)計(jì)Blob命令下載系統(tǒng)鏡像
Blob啟動(dòng)之后,首先初始化一些基本的硬件設(shè)備如串口等,然后檢測(cè)系統(tǒng)內(nèi)存映射,設(shè)置CPU運(yùn)行頻率等一些參數(shù),接著就進(jìn)入了命令行模式。
在Blob中提供tfdownload命令,主函數(shù)的形參就是接收到的命令內(nèi)容和參數(shù)。若參數(shù)為“init”,則調(diào)用TF卡驅(qū)動(dòng)的初始化,否則將此參數(shù)作為文件名傳給FAT32文件系統(tǒng)打開(kāi)并讀取文件內(nèi)容。最終實(shí)現(xiàn)“tfdownloadinit”調(diào)用TF卡驅(qū)動(dòng)初始化TF卡。使用“tfdownload”+文
件名可以調(diào)用FAT32文件系統(tǒng)和TF卡的驅(qū)動(dòng)下載該文件名的鏡像到內(nèi)存中。
2.6 MakeFile文件修改與交叉編譯
(1)TF卡驅(qū)動(dòng)與FAT32文件系統(tǒng)編譯
按照Blob中驅(qū)動(dòng)程序的結(jié)構(gòu),TF卡驅(qū)動(dòng)與FAT32文件系統(tǒng)源文件保存在/src/blob/Platform/Common/Source目錄下,而FAT32文件系統(tǒng)頭文件在/src/blob/Platform/Common/include目錄下,要在編譯Blob的時(shí)候?qū)⑻砑拥尿?qū)動(dòng)一起編譯,需要更改相應(yīng)的Makefile。
在/src/blob/Platform/Source下有三個(gè)Makefile文件,分別是Makefile.a(chǎn)m,Makefile和Makefile.in,修改Makefile.a(chǎn)m即可,Makefile和Makefile.in會(huì)自動(dòng)修改。主要增加Makefile的頭文件尋找目錄和編譯文件。
(2)Blob命令編譯
src/commands下的命令編譯由同目錄的Makefile確定,同樣需要修改Makefile使添加的命令編譯到Blob中去。另外,要使該命令在Blob中生效,還需要修改Blob的configure.in文件,在configure.in中添加:blob_commands=“$blob_commands,tfdownload”;。
(3)編譯Blob
linux-2.6.25中集成了Blob,用linux-2.6.25的工具鏈編譯好之后,在…/pxalinux/MHN-LINUX-PLATFORM/rel/target/bin中,boot_nontrust.bin就是生成的Blob鏡像。
2.7 系統(tǒng)鏡像下載的實(shí)現(xiàn)
先用tfdownload init命令初始化TF卡驅(qū)動(dòng),然后使用tfdownload下載系統(tǒng)鏡像到內(nèi)存中,再使用Nandwrite命令寫入NandFlash中。
3 Android下掛載TF卡實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)
在Android系統(tǒng)中使用TF卡做儲(chǔ)存器,必須先將TF卡掛載到Android上。要啟用void,需要在Android啟動(dòng)配置文件init.rc中關(guān)閉mountd并開(kāi)啟void服務(wù)。通過(guò)對(duì)配置文件init.rc進(jìn)行下面的修改完成此項(xiàng)功能。
service void/system/bin/void //vold服務(wù)開(kāi)啟
socket void stream 0660 root mount
……
#service mountd/system/bin/mountd//mountd服務(wù)關(guān)閉(被注釋了)
#socket mountd stream 0660 root mount
void.conf文件是void程序掛載設(shè)備的配置文件,里面記載了掛載設(shè)備的設(shè)備路徑、設(shè)備類型以及掛載的目標(biāo)位置(掛載點(diǎn))。需要在該文件中加入TF卡的掛載信息,然后,將void.conf加入到system/etc目錄下,void程序就可以直接讀取該配置文件了。
FAT32屬于Windows分區(qū),因?yàn)閃indows分區(qū)里面的文件是沒(méi)有權(quán)限這個(gè)概念的,所以在Linux系統(tǒng)中使用此分區(qū)時(shí)要手動(dòng)指定默認(rèn)權(quán)限。掛載TF卡之后Android的/sdcard目錄不能直接通過(guò)chmod命令來(lái)修改對(duì)于system組的讀寫權(quán)限,在system下是無(wú)法直接訪問(wèn)TF卡的,需要在掛載的時(shí)候添加權(quán)限。在void中,真實(shí)掛載TF卡的操作如下:
rc=mount(deVpath,vol->mount_point,“vfat”,flags,“utf8,uid=1000,gid=1000,fmask=711,dmask=700,shortname=mix ed”);
其中uid代表屬主,uid=1 000代表system用戶,fmask和dmask分別對(duì)應(yīng)文件和目錄的權(quán)限8進(jìn)制碼的反碼。
評(píng)論