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