新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > TransFlash存儲卡在嵌入式系統(tǒng)調(diào)試中的應(yīng)用

        TransFlash存儲卡在嵌入式系統(tǒng)調(diào)試中的應(yīng)用

        作者: 時間:2013-04-24 來源:網(wǎng)絡(luò) 收藏

        2.4 FAT32文件系統(tǒng)移植
        在文中,F(xiàn)AT32文件系統(tǒng)移植主要包括系統(tǒng)初始化和文件管理程序修改(主要是文件讀取)。FAT32的初始化就是找到各個部分的起始扇區(qū)位置。首先查找MBR的分區(qū)表,獲取分區(qū)信息,然后找到每個分區(qū)的DBR,再根據(jù)DBR中的BPB得到分區(qū)的起始扇區(qū)、結(jié)束扇區(qū)、文件系統(tǒng)類型、FAT表個數(shù)、每簇占用扇區(qū)數(shù)等信息。最后根據(jù)下面的算法得到文件分配表FAT、文件目錄表FDT和數(shù)據(jù)區(qū)DATA的起始扇區(qū)。FAT32讀取文件流程如圖4所示。

        本文引用地址:http://www.104case.com/article/148043.htm

        e.JPG


        2.5 設(shè)計Blob命令下載系統(tǒng)鏡像
        Blob啟動之后,首先初始化一些基本的硬件設(shè)備如串口等,然后檢測系統(tǒng)內(nèi)存映射,設(shè)置CPU運(yùn)行頻率等一些參數(shù),接著就進(jìn)入了命令行模式。
        在Blob中提供tfdownload命令,主函數(shù)的形參就是接收到的命令內(nèi)容和參數(shù)。若參數(shù)為“init”,則調(diào)用驅(qū)動的初始化,否則將此參數(shù)作為文件名傳給FAT32文件系統(tǒng)打開并讀取文件內(nèi)容。最終實現(xiàn)“tfdownloadinit”調(diào)用驅(qū)動初始化。使用“tfdownload”+文
        件名可以調(diào)用FAT32文件系統(tǒng)和TF卡的驅(qū)動下載該文件名的鏡像到內(nèi)存中。
        2.6 MakeFile文件修改與交叉編譯
        (1)TF卡驅(qū)動與FAT32文件系統(tǒng)編譯
        按照Blob中驅(qū)動程序的結(jié)構(gòu),TF卡驅(qū)動與FAT32文件系統(tǒng)源文件保存在/src/blob/Platform/Common/Source目錄下,而FAT32文件系統(tǒng)頭文件在/src/blob/Platform/Common/include目錄下,要在編譯Blob的時候?qū)⑻砑拥尿?qū)動一起編譯,需要更改相應(yīng)的Makefile。
        在/src/blob/Platform/Source下有三個Makefile文件,分別是Makefile.a(chǎn)m,Makefile和Makefile.in,修改Makefile.a(chǎn)m即可,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卡驅(qū)動,然后使用tfdownload下載系統(tǒng)鏡像到內(nèi)存中,再使用Nandwrite命令寫入NandFlash中。

        3 下掛載TF卡實現(xiàn)數(shù)據(jù)存儲
        系統(tǒng)中使用TF卡做儲存器,必須先將TF卡掛載到上。要啟用void,需要在Android啟動配置文件init.rc中關(guān)閉mountd并開啟void服務(wù)。通過對配置文件init.rc進(jìn)行下面的修改完成此項功能。
        service void/system/bin/void //vold服務(wù)開啟
        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ū),因為Windows分區(qū)里面的文件是沒有權(quán)限這個概念的,所以在Linux系統(tǒng)中使用此分區(qū)時要手動指定默認(rèn)權(quán)限。掛載TF卡之后Android的/sdcard目錄不能直接通過chmod命令來修改對于system組的讀寫權(quán)限,在system下是無法直接訪問TF卡的,需要在掛載的時候添加權(quán)限。在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分別對應(yīng)文件和目錄的權(quán)限8進(jìn)制碼的反碼。



        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 全南县| 元江| 台前县| 株洲县| 通渭县| 永春县| 汤阴县| 光泽县| 佛冈县| 嘉黎县| 永年县| 永城市| 龙州县| 甘洛县| 桃园县| 漳州市| 利津县| 宁波市| 霍山县| 平罗县| 施甸县| 景德镇市| 那坡县| 柳河县| 疏勒县| 乐陵市| 江城| 恩平市| 乌拉特中旗| 孟村| 安义县| 鲁甸县| 故城县| 江西省| 临洮县| 都匀市| 阿拉尔市| 郓城县| 威信县| 图们市| 台湾省|