TransFlash存儲卡在嵌入式系統調試中的應用
2.4 FAT32文件系統移植
在文中,FAT32文件系統移植主要包括系統初始化和文件管理程序修改(主要是文件讀取)。FAT32的初始化就是找到各個(gè)部分的起始扇區位置。首先查找MBR的分區表,獲取分區信息,然后找到每個(gè)分區的DBR,再根據DBR中的BPB得到分區的起始扇區、結束扇區、文件系統類(lèi)型、FAT表個(gè)數、每簇占用扇區數等信息。最后根據下面的算法得到文件分配表FAT、文件目錄表FDT和數據區DATA的起始扇區。FAT32讀取文件流程如圖4所示。本文引用地址:http://dyxdggzs.com/article/148043.htm
2.5 設計Blob命令下載系統鏡像
Blob啟動(dòng)之后,首先初始化一些基本的硬件設備如串口等,然后檢測系統內存映射,設置CPU運行頻率等一些參數,接著(zhù)就進(jìn)入了命令行模式。
在Blob中提供tfdownload命令,主函數的形參就是接收到的命令內容和參數。若參數為“init”,則調用TF卡驅動(dòng)的初始化,否則將此參數作為文件名傳給FAT32文件系統打開(kāi)并讀取文件內容。最終實(shí)現“tfdownloadinit”調用TF卡驅動(dòng)初始化TF卡。使用“tfdownload”+文
件名可以調用FAT32文件系統和TF卡的驅動(dòng)下載該文件名的鏡像到內存中。
2.6 MakeFile文件修改與交叉編譯
(1)TF卡驅動(dòng)與FAT32文件系統編譯
按照Blob中驅動(dòng)程序的結構,TF卡驅動(dòng)與FAT32文件系統源文件保存在/src/blob/Platform/Common/Source目錄下,而FAT32文件系統頭文件在/src/blob/Platform/Common/include目錄下,要在編譯Blob的時(shí)候將添加的驅動(dò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 系統鏡像下載的實(shí)現
先用tfdownload init命令初始化TF卡驅動(dòng),然后使用tfdownload下載系統鏡像到內存中,再使用Nandwrite命令寫(xiě)入NandFlash中。
3 Android下掛載TF卡實(shí)現數據存儲
在Android系統中使用TF卡做儲存器,必須先將TF卡掛載到Android上。要啟用void,需要在A(yíng)ndroid啟動(dòng)配置文件init.rc中關(guān)閉mountd并開(kāi)啟void服務(wù)。通過(guò)對配置文件init.rc進(jìn)行下面的修改完成此項功能。
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程序掛載設備的配置文件,里面記載了掛載設備的設備路徑、設備類(lèi)型以及掛載的目標位置(掛載點(diǎn))。需要在該文件中加入TF卡的掛載信息,然后,將void.conf加入到system/etc目錄下,void程序就可以直接讀取該配置文件了。
FAT32屬于Windows分區,因為Windows分區里面的文件是沒(méi)有權限這個(gè)概念的,所以在Linux系統中使用此分區時(shí)要手動(dòng)指定默認權限。掛載TF卡之后Android的/sdcard目錄不能直接通過(guò)chmod命令來(lái)修改對于system組的讀寫(xiě)權限,在system下是無(wú)法直接訪(fǎng)問(wèn)TF卡的,需要在掛載的時(shí)候添加權限。在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用戶(hù),fmask和dmask分別對應文件和目錄的權限8進(jìn)制碼的反碼。
評論