《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > Android手機系統中基帶NV數據保存方案
Android手機系統中基帶NV數據保存方案
來源:電子技術應用2013年第10期
黃一峰,黃俊偉,吳 戀
重慶郵電大學 新一代寬帶移動通信終端研究所,重慶400065
摘要: 設計了一種Android手機系統框架下的基帶NV數據保存方案。主要包括方案的總體框架、AP側數據接收和保存流程、CP側NV數據發送流程、擴展的IIC通信機制的設計,以及方案驗證與結果分析等。在由Cortex A9核心的四核AP芯片和ARM9核心的單核CP芯片組成的手機硬件系統上實現和測試了該方案。驗證結果表明,該基帶NV數據導出方案具有良好的可靠性和可行性,可以應用于實際的商業產品中。
中圖分類號: TP36.2
文獻標識碼: A
文章編號: 0258-7998(2013)10-0018-04
A solulion of saving baseband NV data in Android system
Huang Yifeng,Huang Junwei,Wu Lian
Chongqing Next Generation Mobile Communication Terminal Laboratory,Chongqing University of Posts and Telecommunications, Chongqing 400065,China
Abstract: A method solution of saving the baseband NV data in Android cellphone is designed and realized. It includes the general framework of the design,data receiving and saving workflow of the AP part,NV data sending process in CP part,and the design of the enhanced IIC communication mechanism. Then the method is implemented on the hardware system with Cortex A9 Quad-core AP chip and ARM9 CP chip.The results of implementation show that this method has a high efficiency and good reliability to export baseband NV data. It is adequate for commercial products.
Key words : Android operating system;baseband NV data;IIC communication;IPC;data packet

    當前的Android手機設計中通常將應用子系統(AP)和通信子系統(CP)分離。比較典型的情況是應用子系統運行Android操作系統,通信子系統運行Nucleus操作系統,兩者相對獨立,通過一定的接口進行通信[1]。

    在手機運行過程中,通信子系統(即基帶子系統(CP))會產生一些需要動態更新的數據,譬如手機系統數據、TD參數、GSM參數、音頻校準數據等[2-3]。每臺手機的這些數據都不盡相同。一般這些數據通過非失憶性介質(即NV(NonVolatile)模塊)來進行保存和管理。因此,需要設計一種機制將CP側的NV數據保存下來,以供基帶子系統啟動或運行時使用。
    本文設計了一種雙硬件處理器環境下將基帶NV數據保存到手機文件系統(Flash)中的方案。其中,基帶系統運行在ARM9核心的單核CP芯片上,應用系統運行在Cortex A9核心的四核AP芯片上。兩者通過IIC機制進行通信和數據共享。本文的設計主要包括AP側軟件模塊設計、CP側NV數據發送流程設計以及IIC通信機制設計。
    在實際的手機產品中應用本文的設計,進行大數據量、長時間基帶NV數據保存測試,并進行可靠性分析,得到了良好的實驗結果,證明了本設計的可靠性和可行性。
1 系統方案設計
1.1 系統總體框架設計

    基帶NV數據保存方案包括AP側軟件模塊、CP側數據發送流程以及IIC通信機制三個方面,如圖1所示。

    其中,CP側主要由NV數據產生模塊(NVM Process)和CP側IIC驅動組成;AP側主要由數據接收模塊(NVM Driver)、NV數據守護進程(NVM Daemon)和AP側IIC驅動組成。
    在CP側,Nucleus操作系統的NV數據進程(NVM Process)負責產生基帶的NV數據,經過設備抽象層(DAI)轉發后,基帶NV數據被CP側IIC驅動寫入IIC緩存Buffer中。
    在AP側,對應的IIC驅動將從IIC緩存Buffer中讀取到的NV數據上報給AP側數據接收進程(NVM Driver)。最后,AP側NVM守護進程收到數據接收進程上報的數據,進行數據包的解析,并將其保存在Flash設備中。
    IIC通信機制包括物理上的IIC連接(IIC TX、RX、CTS、RTS)和公共的函數接口(API),AP側和CP側IIC驅動通過調用這些API即可完成相互通信和數據傳輸,從而達到兩個系統命令和數據交互的目的。
1.2 AP側軟件模塊設計
1.2.1 AP側數據接收流程

    NV數據采用包的形式,數據包的解析由守護進程NVM Daemon來完成。因此底層的驅動程序NVM Driver和IIC Driver不關心數據的具體格式,只關注數據的接收和傳送過程[4]。如圖2所示,AP側數據接收流程如下:

    (1)NVM Daemon程序啟動成功之后,首先打開NVM驅動設備,若打開成功,則返回設備號,否則打印錯誤信息并退出。
    (2)NVM Daemon通過read系統調用從NVM Driver獲取更新后的NV數據。NVM Driver從IIC通道讀取基帶更新數據時,會首先判斷通道中是否有可讀數據,如果沒有,則進程進入睡眠,等待喚醒條件到來,喚醒條件為通道中有可讀數據;如通道中有可讀數據,則直接讀取,并將數據送往NVM Daemon。CP側不定時更新數據,并將數據送往IIC通道。
    (3)從內核空間得到的基帶數據是以包的形式封裝的,所以接下來NVM Daemon要做的工作就是解析包頭,從包中取出有效數據,并且進行NV數據的保存工作,這一步很重要,將在下節詳細介紹。
    (4)NVM Daemon將NV數據完整地保存到文件系統后,發送應答ACK包通知CP側數據保存完成。如果在收包過程中出現異常,則發送ACK包通知CP側重傳。
1.2.2 AP側數據保存機制
    NV數據以包的形式發送,不同NV數據的數據包可能交錯發送,NVM Daemon應能夠正確組包,正確地將NV數據保存到文件系統中。NV數據包格式結構體的定義為:
    typedef struct _pkginfo{
        u8 head;        //包頭首部
        u8 type;   
//當前包的NV數據類型
        u8 cur_id;   
//當前傳輸的數據包id
        u8 total_id;  //總數據包個數id
        u32 data_len;//當前包傳輸的有效數據字節長度
    }pkginfo;
    同時,為了響應AP和CP間的數據收發動作,需要發送ACK包,ACK包格式結構體定義為:
    typedef struct _ackinfo{
        u8 head;  //包頭首部字段
        u8 type; //數據類型
        u8 result;//當前包傳輸結果
        u8 tail; //包尾字段
    }ackinfo;
    ackinfo結構體成員result表示當前包傳輸結果,返回0表示接收正確,返回1表示接收錯誤,要求CP側重傳。
    NVM Daemon對NV數據的保存過程如圖3所示,以動態NV數據(nv_dynamic)為例,簡述如下:
    (1)Daemon程序啟動后首先初始化全局變量n,用來統計本次接收過程中總共接收了多少個nv_dynamic類型的NV數據包。

    (2)進入read系統調用,收到數據后,首先解析包頭數據,獲取數據類型、總包數、當前包數、有效數據長度等,并將這些信息保存到包格式pkginfo結構體中。
    (3)打開nv_dynamic.bin文件,將變量n的值加1;判斷是否n>pkginfo->total_id,若大于,則表明接收到的包數已經超過了本次傳輸的總包數,為異常情況,打印相關的異常信息并且退出,重新調用read讀取數據包,否則繼續。
    (4)判斷是否n=pkginfo->cur_id,如果不等,則說明此時得到的NV數據不是按正常順序發送到AP端的,此時發送ACK包給CP,要求重傳。
    (5)若n=pkginfo->cur_id,接著判斷是否n=pkginfo->total_id,如果不等,則直接將NV數據保存到nv_dynamic.bin中,然后進行下一個數據包的接收。
    (6)如果n=pkginfo->total_id,則說明此次接收的是整個傳輸的最后一個包,將NV數據保存到nv_dynamic.bin文件。然后發送ACK包通知CP整個數據接收完成。將n清0,關閉nv_dynamic.bin文件后退出。
    通過上述流程,可以有效解決NV數據發送過程中的包序錯亂、發包重復等問題,保證NV數據的有效保存。
1.3 CP側NV數據發送流程
    CP側負責NV數據的產生和發送工作。CP側NV數據發送具體流程如下:
      (1)內部定時器每20 ms判斷基帶NV數據是否有更新。
      (2)若NV數據有更新,且長度滿足發送條件,則進行包頭封裝,完成組包工作,不滿足則退出。
      (3)NV數據組包完成后,平臺無關化接口函數DAI_NV_SEND()調用CP側IIC驅動發送長度為L的NV數據。
      (4)DAI_NV_SEND()函數調用完成后返回數據發送結果retVal。
      (5)判斷retVal是否等于應發送長度L,若是則更新緩存Buffer數據索引后結束,不是則直接結束。
2 擴展的IIC通信機制設計
      IIC通信機制建立在普通IIC通信機制之上,除了一般的IIC數據收發功能外,還擴展了通道注冊、通道對象管理、通道中斷處理等功能。
      IIC通信機制為AP與CP間的NV數據驅動提供通信和數據傳送功能,起到了一個橋梁的作用。其結構設計如圖4所示。

    硬件連接與通用IIC通信協議相同,在AP和CP側有對等的IIC驅動模塊。二者有相同的數據結構和循環數據緩沖區管理接口。
    對于外部接口、內部接口,通道對象管理和中斷ISR服務等,AP和CP側需要分別實現。AP和CP外部API接口相同,但具體實現不同。
    IIC通信機制提供給AP和CP的外部API包括:創建數據通道(iic_create_ch)、讀通道數據(iic_read_ch)、寫通道數據(iic_write_ch)、注冊通道中斷(iic_register_inthandle)、通道使能(iic_enable_inthandle)等。
3 系統功能測試與結果分析
    系統功能的測試主要包括兩個測試點:(1)數據通路是否暢通;(2)NVM Daemon保存的NV數據是否完整有效。
    針對測試點(1)可以在各個數據通路之間采取假數據發送的方式進行測試,例如,在AP側IIC Driver中用假數代替從基帶獲取的NV數據送往NVM Driver中,測試兩者間通路是否暢通。
    針對測試點(2)將假數據以包的形式發送,分多種類型,分開不按順序發送,測試NVM Daemon的組包能力。
    在進行數據通路測試的同時,使用一定壓力的基帶業務,以測試系統的抗壓能力[5]。具體測試場景設計如表1所示。

    重復以上測試場景多次后,將AP側保存的NV數據導出到PC上觀察可知,保存的NV數據正確,也沒有出現數據包丟失和錯亂的情況,符合系統設計的目標,如圖5所示。

 

 

    本文提出的基帶NV數據保存功能模塊已經在基于Linux 2.6.32內核的Android 4.1定制版本上實現。
    在AP和CP側通信機制設計中采用了擴展功能的IIC機制,使AP與CP兩個獨立系統的通信和數據交換十分方便。同時,在AP側的NV驅動中使用了中斷喚醒的技術,在沒有數據傳送時,整個數據通道處于睡眠狀態,有效地節省了系統資源開銷。最后,AP側的NVM Daemon在組包過程中考慮到了數據包錯亂、重復等異常情況,并設計了相應的容錯機制。既可保證數據的完整有效性,也能滿足實際項目的需求。
    本方案已經被應用于國家重大專項“TD-SCDMA增強型多媒體手機終端的研發和產業化”中。
參考文獻
[1] 王海霞.TD/GSM雙模手機軟件架構的研究與實現[D]. 南京:南京郵電大學,2010.
[2] 朱亞洲.GSM手機軟件開發[D].武漢:武漢科技大學,2007.
[3] 周非,亓英杰,劉永康,等.TD-SCDMA終端探測設的DSP設計與實現[J].電子技術應用,2012,38(4):16-19.
[4] 孟小華,黃宗軒.Android系統非標準設備驅動程序設計[J].微型機與應用,2011,30(14):7-9.
[5] 李志丹.嵌入式軟件調試方法研究[J].計算機與數字工程,2012(7):157-159.

此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 亚洲精品无码专区在线播放| 国产精品一区二区久久乐下载| 九九九精品视频免费| 精品一区二区三区在线观看视频| 国产欧美精品区一区二区三区| japanese色国产在线看免费| 日本精品一区二区三区在线视频 | 被男按摩师添的好爽在线直播| 国产香蕉一区二区在线网站| 东北少妇不戴套对白第一次| 日韩电影在线看| 亚洲日韩精品无码一区二区三区 | 男人的天堂黄色| 国产乱人伦无无码视频试看 | 18禁止午夜福利体验区| 少妇高潮喷水久久久久久久久久| 久久国产精品免费网站| 欧美人与动性行为另类| 人妻av无码一区二区三区| 老湿影院在线观看| 国产成人精品午夜二三区波多野| 97人人模人人爽人人少妇| 少妇人妻在线视频| 久久久一本精品99久久精品88| 欧美αv日韩αv另类综合| 亚洲精品成人网站在线观看| 精品国产免费一区二区三区| 国产亚洲人成在线影院| 欧美18性精品| 国产精品自在线观看剧情| freehd麻豆| 性按摩xxxx| 久久99热精品免费观看牛牛| 黑人3p波多野结衣在线观看| 夜夜爽免费888视频| 中文字幕无码不卡一区二区三区 | 久久精品国产亚洲av无码麻豆 | 国产无遮挡又黄又爽在线观看 | 最近中文字幕高清免费大全8| 亚洲欧美日韩中另类在线| 男女一边摸一边做爽爽|