摘 要: 隨著移動(dòng)技術(shù)的發(fā)展與智能操作系統(tǒng)的推廣,智能設(shè)備在為用戶(hù)提供便利的同時(shí),也存在一些數(shù)據(jù)安全隱患。針對(duì)Android Wear智能手表,提出了一種通過(guò)在Linux內(nèi)核層對(duì)麥克風(fēng)、藍(lán)牙和ADB等數(shù)據(jù)端口進(jìn)行開(kāi)關(guān)控制,以實(shí)現(xiàn)對(duì)手表中的數(shù)據(jù)進(jìn)行保護(hù)的技術(shù)。該技術(shù)使用了兩種不同的途徑實(shí)現(xiàn)對(duì)三個(gè)數(shù)據(jù)端口的控制。同時(shí),還實(shí)現(xiàn)了一種內(nèi)核程序的用戶(hù)交互方法,在文件系統(tǒng)驅(qū)動(dòng)程序中截獲用戶(hù)層程序?qū)μ囟ㄎ募淖x寫(xiě)操作,可以顯示數(shù)據(jù)端口的當(dāng)前開(kāi)關(guān)狀態(tài),并對(duì)開(kāi)關(guān)狀態(tài)進(jìn)行控制,而不需要增加或修改應(yīng)用層程序,最后通過(guò)實(shí)驗(yàn)驗(yàn)證了該技術(shù)的可行性。
關(guān)鍵詞: Android Wear; 智能手表; 數(shù)據(jù)保護(hù); 數(shù)據(jù)端口開(kāi)關(guān)控制
中圖分類(lèi)號(hào): TN92?34; TM417 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2016)19?0020?05
Abstract: With the development of mobile technology and promotion of intelligent operating system, some hidden dangers in data security also occurred in the intelligent devices while they were providing the convenience for their users. For the Android Wear smart watch, a data protection technology is presented, which can protect the data in the watch by means of switch control in Linux kernel level to control the data ports of microphone, Bluetooth and ADB. This technology uses two different approaches to control the three data ports. A user interaction method of kernel program was implemented, which can intercept the specific files′ read?write operation of the user layer program in file system drive program, display the current switch status of the data ports, and control the switch status without increasing or modifying the application layer program. The feasibility of this technology was verified with experiment.
Keywords: Android Wear; smart watch; data protection; data port switch control
0 引 言
Android Wear智能手表作為一種新式的可穿戴設(shè)備給人們的生活帶來(lái)了極大的便利[1]。智能手表作為隨身穿戴的設(shè)備,很可能被非法分子作為竊聽(tīng)他人隱私的媒介,智能手表中的重要數(shù)據(jù)可能通過(guò)藍(lán)牙泄露出去,當(dāng)手表遺失或被竊后,他人可以使用ADB命令或手機(jī)助手軟件將手表中的數(shù)據(jù)拷貝出去,從而給用戶(hù)帶來(lái)嚴(yán)重的損失。通過(guò)研究Android Wear智能手表的數(shù)據(jù)保護(hù)技術(shù),讓用戶(hù)可以在開(kāi)會(huì)或其他涉及重要隱私信息的場(chǎng)合,選擇將手表中可能導(dǎo)致數(shù)據(jù)泄露的端口關(guān)閉,從而起到數(shù)據(jù)保護(hù)的作用[2]。
1 數(shù)據(jù)保護(hù)技術(shù)的原理與控制
由于無(wú)法獲得Android Wear系統(tǒng)源碼,所以本文通過(guò)修改Linux內(nèi)核層的代碼,增加對(duì)麥克風(fēng)、藍(lán)牙和ADB驅(qū)動(dòng)的控制,一方面可以防止惡意軟件的錄音竊取用戶(hù)重要信息;另一方面還可以防止重要數(shù)據(jù)通過(guò)藍(lán)牙和ADB泄露出去。本節(jié)主要從麥克風(fēng)、藍(lán)牙和ADB三個(gè)方面分別介紹它們的實(shí)現(xiàn)原理,以及如何從內(nèi)核層實(shí)現(xiàn)對(duì)它們的開(kāi)關(guān)控制。
1.1 麥克風(fēng)的工作原理與控制
麥克風(fēng)是Android音頻系統(tǒng)中的輸入設(shè)備,通過(guò)分析音頻系統(tǒng)的架構(gòu),了解麥克風(fēng)的工作原理與實(shí)現(xiàn)方式,進(jìn)而在Linux內(nèi)核層找到控制麥克風(fēng)的關(guān)鍵代碼。Android音頻系統(tǒng)自上而下分為應(yīng)用層、Java框架層、本地框架層、本地庫(kù)、硬件抽象層和驅(qū)動(dòng)層[3]。通過(guò)Makefile和config變量定位麥克風(fēng)驅(qū)動(dòng)對(duì)應(yīng)的文件。查看/sound目錄下的Makefile文件,內(nèi)核編譯時(shí)將根據(jù)這些變量是否為[y]來(lái)選擇相應(yīng)的文件進(jìn)行編譯。
通過(guò)不斷在子目錄及相應(yīng)的Makefile中跟蹤內(nèi)核配置變量,確定最終被編譯進(jìn)內(nèi)核中和聲音有關(guān)的文件有/sound/sound_core.c和/sound/soc/msm/dory?mi2s.c。在兩個(gè)文件中的各個(gè)函數(shù)中都加入自定義的printk函數(shù)來(lái)輸出日志信息,然后通過(guò)ADB命令查看日志輸出,發(fā)現(xiàn)當(dāng)向手表輸入語(yǔ)音指令時(shí),其中dory_mi2s_startup為啟動(dòng)函數(shù)[4]。
1.2 藍(lán)牙的工作原理與控制
Android藍(lán)牙架構(gòu)包括四層,分別為應(yīng)用層、框架層、C框架層、內(nèi)核層。根據(jù)內(nèi)核編譯系統(tǒng)的工作原理,通過(guò)追蹤內(nèi)核配置變量,找到和藍(lán)牙有關(guān)的驅(qū)動(dòng)程序有/drivers/bluetooth/bluesleep.c和 /drivers/bluetooth/bluetooth?power.c,然后通過(guò)在各函數(shù)中插入日志信息,查看函數(shù)調(diào)用流程,進(jìn)而在關(guān)鍵函數(shù)中添加控制邏輯。然而通過(guò)實(shí)驗(yàn)發(fā)現(xiàn)該方法并不完全有效,雖然可以切斷當(dāng)前的藍(lán)牙連接,但是手表和手機(jī)之間仍然可以再次建立連接,這無(wú)法滿(mǎn)足本文的需求。于是提出了另外一種更為通用的方法,為了關(guān)閉某個(gè)功能模塊,首先找到該模塊所使用的可執(zhí)行文件或重要的庫(kù)文件,然后在文件系統(tǒng)打開(kāi)文件函數(shù)中添加對(duì)該文件的攔截,使得文件打開(kāi)失敗,從而使得該功能模塊無(wú)法執(zhí)行。
藍(lán)牙模塊使用了兩個(gè)庫(kù)文件/system/lib/hw/bluetooth.default.so和/system/lib/ libbluetooth_jni.so。接下來(lái)在/fs/namei.c文件的do_filp_open函數(shù)中添加對(duì)上述兩個(gè)庫(kù)文件的攔截。上面的方法可以阻止藍(lán)牙的再次打開(kāi),如果手表已經(jīng)和手機(jī)建立了連接,上述的方法并不能斷開(kāi)當(dāng)前的連接,因此還需要將藍(lán)牙模塊的進(jìn)程kill掉[5]。在內(nèi)核中kill掉進(jìn)程需要遍歷所有的進(jìn)程,然后比較當(dāng)前進(jìn)程的名字是否為目標(biāo)進(jìn)程,如果是,則向該進(jìn)程發(fā)送SIGKILL信號(hào)。
1.3 ADB的工作原理與控制
當(dāng)用戶(hù)啟動(dòng)ADBclient時(shí),Client首先檢查是否有ADBserver正在運(yùn)行。如果沒(méi)有,則啟動(dòng)一個(gè)ADBserver進(jìn)程。當(dāng)Server進(jìn)程啟動(dòng)時(shí),它綁定本地TCP5037端口,通過(guò)該端口接收ADBclient發(fā)送的命令。所有的ADBclient都使用5037端口與ADBserver通信[6]。
ADBserver與連接到PC上的Android設(shè)備或模擬器建立連接。Server通過(guò)掃描5555~5585范圍內(nèi)的奇數(shù)端口來(lái)發(fā)現(xiàn)Android設(shè)備或模擬器。當(dāng)Server發(fā)現(xiàn)一個(gè)ADBdaemon時(shí),便會(huì)和那個(gè)端口建立連接。每個(gè)Android設(shè)備或模擬器需要兩個(gè)端口,偶數(shù)端口用于控制臺(tái)連接,奇數(shù)端口用于用戶(hù)ADB連接。一旦ADBserver建立與設(shè)備或模擬器的連接,便可以通過(guò)ADB命令來(lái)控制和訪問(wèn)這些設(shè)備或模擬器。因?yàn)锳DBserver管理與設(shè)備或模擬器之間的連接,所以可以通過(guò)ADBclient控制任何的設(shè)備或模擬器[7]。
通過(guò)對(duì)ADB工作原理的分析,得知手表中通過(guò)adbd守護(hù)進(jìn)程與電腦建立連接,因此只要禁止該程序的執(zhí)行,便可以達(dá)到關(guān)閉ADB的目的。
2 用戶(hù)交互界面
根據(jù)Android系統(tǒng)的分層架構(gòu)可以知道,用戶(hù)使用智能手表,實(shí)際上是使用手表中的應(yīng)用軟件,和用戶(hù)直接打交道的是位于最上層的App[8]。然而提出的數(shù)據(jù)保護(hù)方案的核心功能實(shí)現(xiàn)位于內(nèi)核態(tài),因此需要解決的是如何讓用戶(hù)通過(guò)使用上層的應(yīng)用軟件來(lái)觸發(fā)內(nèi)核中相應(yīng)的動(dòng)作(主要是對(duì)麥克風(fēng)、藍(lán)牙和ADB的開(kāi)關(guān)切換)。在不修改和添加智能手表中應(yīng)用軟件的前提下,實(shí)現(xiàn)用戶(hù)交互界面的設(shè)計(jì),主要采用的方法是尋找手表中自帶應(yīng)用與系統(tǒng)文件的讀寫(xiě)交互,在內(nèi)核文件系統(tǒng)讀寫(xiě)函數(shù)中添加判斷邏輯,當(dāng)寫(xiě)特定文件時(shí),根據(jù)寫(xiě)入文件的數(shù)據(jù)來(lái)觸發(fā)對(duì)數(shù)據(jù)端口開(kāi)關(guān)的控制;當(dāng)讀取特定文件時(shí),通過(guò)修改返回的數(shù)據(jù)來(lái)顯示內(nèi)核的狀態(tài)。
2.1 輸入界面的設(shè)計(jì)與實(shí)現(xiàn)
Android Wear系統(tǒng)中自帶一個(gè)鬧鐘應(yīng)用,當(dāng)設(shè)定鬧鐘時(shí)會(huì)有寫(xiě)文件的操作,寫(xiě)文件時(shí)會(huì)調(diào)用內(nèi)核文件系統(tǒng)中vfs_write函數(shù),這樣內(nèi)核便可以將設(shè)定鬧鐘的時(shí)間作為用戶(hù)的輸入,根據(jù)時(shí)間的不同,對(duì)麥克風(fēng)、藍(lán)牙和ADB進(jìn)行相應(yīng)的開(kāi)關(guān)控制。
2.1.1 查找鬧鐘對(duì)應(yīng)的應(yīng)用程序
Android Wear 系統(tǒng)啟動(dòng)后,安裝包管理器會(huì)解析系統(tǒng)中所安裝的應(yīng)用,并為其建立對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu),同時(shí)會(huì)將所有應(yīng)用的基本信息保存在文件中。這樣的文件共有兩個(gè),它們位于/data/system目錄,分別是packages.list和packages.xml??梢詮膒ackages.list中查看系統(tǒng)中所有應(yīng)用的安裝包信息,可以從packages.xml中獲得該安裝包所在路徑。
從命令的輸出中看到和時(shí)鐘有關(guān)的應(yīng)用有三個(gè),從安裝包的名字可以看出,其中com.google.android.deskclock是谷歌公司開(kāi)發(fā)的,com.lge.wearable.worldclock是LG公司開(kāi)發(fā)的,/data/data/com.google.android.clockwork. packageinstaller是程序安裝器。LG公司沒(méi)有必要為手表開(kāi)發(fā)一個(gè)鬧鐘程序,因此com.google.android.deskclock應(yīng)該就是要找的鬧鐘程序的包名。
2.1.2 查找鬧鐘程序所寫(xiě)的文件
2.2 在內(nèi)核中讀取設(shè)置的鬧鐘時(shí)間
當(dāng)用戶(hù)設(shè)置鬧鐘時(shí),程序會(huì)向/data/data/com.google.android.deskclock/shared_prefs/alarms.xml文件寫(xiě)入設(shè)置的鬧鐘時(shí)間。根據(jù)Linux虛擬文件系統(tǒng)的相關(guān)知識(shí),寫(xiě)文件時(shí)會(huì)調(diào)用內(nèi)核中的vfs_write函數(shù),該函數(shù)位于內(nèi)核源碼/fs/read_write.c文件中。在vfs_write函數(shù)中,對(duì)所寫(xiě)文件名進(jìn)行判斷,如果是鬧鐘文件,則在寫(xiě)文件后,從鬧鐘文件中讀取設(shè)置的時(shí)間值,根據(jù)具體的時(shí)間值對(duì)數(shù)據(jù)端口進(jìn)行相應(yīng)的開(kāi)關(guān)設(shè)置。從vfs_write函數(shù)傳入的參數(shù)可以獲得所寫(xiě)文件的structfile指針,使用dentry_path_raw函數(shù)可以得到該file對(duì)象對(duì)應(yīng)的絕對(duì)路徑,然后使用strcmp函數(shù)比較該路徑是否為鬧鐘文件的路徑。用設(shè)置鬧鐘的hour值當(dāng)做用戶(hù)的輸入,讀取hour值的主要流程如圖2所示。
2.3 輸出界面的設(shè)計(jì)與實(shí)現(xiàn)
輸出界面用來(lái)顯示麥克風(fēng)、藍(lán)牙和ADB的當(dāng)前開(kāi)關(guān)狀態(tài),需要在手表自帶應(yīng)用中找到一個(gè)合適的位置來(lái)顯示內(nèi)核狀態(tài)信息,為了不影響手表軟件原有功能,最好找一個(gè)顯示一些固定靜態(tài)信息的頁(yè)面。通過(guò)分析現(xiàn)有應(yīng)用,找到Settings下面的About界面,該頁(yè)面顯示手表系統(tǒng)的一些固定信息,比如Model、設(shè)備名、軟件版本等,其中有一項(xiàng)是Regulatory Information(監(jiān)管信息),點(diǎn)擊該項(xiàng)后,顯示如圖3所示頁(yè)面,從外觀看,該頁(yè)面顯示的應(yīng)該是一個(gè)固定的圖片。當(dāng)上層應(yīng)用讀取該圖片內(nèi)容時(shí),會(huì)調(diào)用底層內(nèi)核文件系統(tǒng)中的vfs_read函數(shù),通過(guò)修改返回的內(nèi)容,使得該頁(yè)面顯示想要顯示的信息。
2.3.2 使用BMP圖片替換PNG圖片
壓縮格式的PNG不利于使用代碼對(duì)其修改,為了方便修改圖片的顯示內(nèi)容,使用格式最簡(jiǎn)單的BMP位圖文件。需要修改vfs_read函數(shù),當(dāng)讀取的文件為/system/etc/regulatory_info.png時(shí),將bmpdata數(shù)組中的數(shù)據(jù)拷貝到用戶(hù)端,這樣當(dāng)用戶(hù)查看手表監(jiān)管信息時(shí),將會(huì)顯示所需位圖。
2.3.3 修改位圖內(nèi)存數(shù)據(jù)
為了在位圖中顯示信息,需要修改 bmpdata[]數(shù)組中的數(shù)據(jù),修改BMP文件的圖形數(shù)據(jù)區(qū)域。對(duì)于256色位圖,每個(gè)像素點(diǎn)使用8位二進(jìn)制數(shù)表示,這8位二進(jìn)制表示的是顏色表中的一個(gè)顏色索引。顏色表用來(lái)描述位圖中的顏色,它有若干個(gè)表項(xiàng),每個(gè)表項(xiàng)代表一種顏色,使用RGBQUAD結(jié)構(gòu)表示。
在內(nèi)核源碼/drivers/video/console/目錄下有很多字庫(kù)文件,使用其中的font_sun12x22.c文件。它使用寬為12像素,高為22像素的矩陣表示一個(gè)字符。位圖數(shù)據(jù)區(qū)記錄了位圖中每個(gè)像素的顏色,其掃描順序?yàn)閺淖蟮接?,從下到上。要想在位圖中顯示字符,還需要知道每個(gè)字符對(duì)應(yīng)的像素矩陣。
3 實(shí)驗(yàn)與測(cè)試
3.1 實(shí)驗(yàn)?zāi)繕?biāo)
通過(guò)設(shè)置鬧鐘為特定時(shí)間,對(duì)內(nèi)核數(shù)據(jù)端口進(jìn)行開(kāi)關(guān)控制,并可以從Regulatory Information查看內(nèi)核數(shù)據(jù)端口的狀態(tài)。
鬧鐘時(shí)間與數(shù)據(jù)端口開(kāi)關(guān)的對(duì)應(yīng)關(guān)系,如表1所示。
表1 鬧鐘時(shí)間與端口開(kāi)關(guān)對(duì)應(yīng)關(guān)系表
[鬧鐘時(shí)間\數(shù)據(jù)端口開(kāi)關(guān)\1 點(diǎn)\打開(kāi)麥克風(fēng)\2 點(diǎn)\打開(kāi)藍(lán)牙\3 點(diǎn)\打開(kāi) ADB\11 點(diǎn)\關(guān)閉麥克風(fēng)\12 點(diǎn)\關(guān)閉藍(lán)牙\13 點(diǎn)\關(guān)閉 ADB\]
設(shè)計(jì)的輸出界面只能顯示數(shù)字和英文字符,在顯示時(shí)同時(shí)顯示三個(gè)數(shù)據(jù)端口的狀態(tài),用MIC表示麥克風(fēng),用BT表示藍(lán)牙,ADB表示ADB。用0表示關(guān)閉狀態(tài),用1表示打開(kāi)狀態(tài)?!癕IC:0BT:1ADB:1”表示麥克風(fēng)處于關(guān)閉狀態(tài),藍(lán)牙處于打開(kāi)狀態(tài),ADB處于打開(kāi)狀態(tài)。
3.2 測(cè) 試
3.2.1 麥克風(fēng)的測(cè)試
正常情況下,用手指點(diǎn)擊手表屏幕,手表進(jìn)入喚醒狀態(tài),此時(shí)只要說(shuō)“OK Google”, 手表就會(huì)做出反應(yīng)。
關(guān)閉麥克風(fēng):通過(guò)設(shè)置鬧鐘為11點(diǎn)將麥克風(fēng)關(guān)閉,然后再對(duì)手表說(shuō)“OK,Google”,手表沒(méi)有反應(yīng),由此可以證明麥克風(fēng)功能已經(jīng)成功關(guān)閉。同時(shí),可以在Regulatory Information中看到麥克風(fēng)端口狀態(tài)為0。
打開(kāi)麥克風(fēng):通過(guò)設(shè)置鬧鐘為1點(diǎn)重新打開(kāi)麥克風(fēng),可以在RegulatoryInformation界面看到麥克風(fēng)的狀態(tài)為1,此時(shí)對(duì)手表說(shuō)“OK,Google”,手表重新恢復(fù)響應(yīng)。
3.2.2 藍(lán)牙的測(cè)試
正常情況下,手機(jī)可以和手表建立藍(lán)牙連接,當(dāng)連接時(shí),手機(jī)上會(huì)提示連接密碼確認(rèn)。
關(guān)閉藍(lán)牙:通過(guò)設(shè)置鬧鐘為12點(diǎn)將藍(lán)牙關(guān)閉,手表與藍(lán)牙的連接斷開(kāi),且再次連接手表時(shí),顯示無(wú)法和手表通信,因此可以證明藍(lán)牙功能已成功關(guān)閉。
打開(kāi)藍(lán)牙:通過(guò)設(shè)置鬧鐘為2點(diǎn)將藍(lán)牙重新打開(kāi),此時(shí)手表并不會(huì)自動(dòng)和手機(jī)建立藍(lán)牙連接,需要在手表上點(diǎn)擊手表設(shè)置中的Bluetoothdevices,它會(huì)提示重新啟動(dòng)藍(lán)牙,點(diǎn)擊確認(rèn)按鈕之后手表與手機(jī)會(huì)自動(dòng)建立連接。
3.2.3 ADB的測(cè)試
關(guān)閉ADB:如圖4所示,在正常情況下,電腦可以通過(guò)ADB命令和手表通信,通過(guò)設(shè)置鬧鐘為13點(diǎn)將ADB關(guān)閉,當(dāng)前的ADB連接會(huì)立刻斷開(kāi),且當(dāng)再次輸入adbshell命令時(shí),會(huì)顯示Devicenotfound,因此可以證明ADB功能已成功關(guān)閉。
打開(kāi)ADB:通過(guò)設(shè)置鬧鐘為3點(diǎn)將ADB再次打開(kāi)后,此時(shí)輸入adbshell,無(wú)法連接手表,需要拔下數(shù)據(jù)線(xiàn)再重新插上,再使用adbshell,可再次連接到手表。
4 結(jié) 論
Android Wear系統(tǒng)是谷歌專(zhuān)為智能手表等可穿戴設(shè)備設(shè)計(jì)的系統(tǒng),出于碎片化的擔(dān)心,谷歌并沒(méi)有開(kāi)放Android Wear的系統(tǒng)源碼,因此本文提出一種從內(nèi)核層對(duì)可能造成數(shù)據(jù)安全問(wèn)題的三個(gè)端口進(jìn)行開(kāi)關(guān)控制,從而起到數(shù)據(jù)保護(hù)的作用。通過(guò)對(duì)麥克風(fēng)、藍(lán)牙和ADB工作原理的分析,在內(nèi)核層實(shí)現(xiàn)了對(duì)這三個(gè)數(shù)據(jù)端口的開(kāi)關(guān)控制。同時(shí),設(shè)計(jì)了用戶(hù)交互界面,使得用戶(hù)可以方便地輸入指令,控制內(nèi)核對(duì)三個(gè)數(shù)據(jù)端口進(jìn)行開(kāi)關(guān)切換,同時(shí)內(nèi)核還可以將數(shù)據(jù)端口的開(kāi)關(guān)狀態(tài)顯示給用戶(hù)。
最后通過(guò)測(cè)試證明了本技術(shù)方案可以對(duì)各數(shù)據(jù)端口進(jìn)行有效控制,實(shí)現(xiàn)了對(duì)數(shù)據(jù)的保護(hù)。課題使用LGGWatch智能手表作為對(duì)象進(jìn)行實(shí)驗(yàn),由于不同的硬件平臺(tái)對(duì)應(yīng)的驅(qū)動(dòng)程序可能不同,預(yù)裝的應(yīng)用程序也可能存在差異,所以在移植性上還存在不足,這是今后努力的一個(gè)方向。另外,目前指令的輸入還缺少用戶(hù)身份識(shí)別模塊,如何對(duì)用戶(hù)進(jìn)行有效的身份識(shí)別是另一個(gè)需要研究的方向。
參考文獻(xiàn)
[1] 徐尤華,熊傳玉.Android應(yīng)用的反編譯[J].電腦與信息技術(shù),2012(1):50?51.
[2] 蔡潔.基于高通平臺(tái)的Android系統(tǒng)分區(qū)管理[J].硅谷,2014(19):44?46.
[3] 張歡慶,高麗,宋承祥.基于ARM的嵌入式Linux交叉編譯環(huán)境的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)與數(shù)字工程,2012(2):151?153.
[4] 夏盛新.基于Android的移動(dòng)開(kāi)放平臺(tái)SDK的設(shè)計(jì)與實(shí)現(xiàn)[D].西安:西安電子科技大學(xué),2014.
[5] SCHMIDT A D, BYE R, SCHMIDT H G, et al. Static analysis of executables for collaborative malware detection on Android [C]// Proceedings of 2009 IEEE International Conference on Communications. Dresden: IEEE, 2009: 1?5.
[6] 金智義,張戟.嵌入式Android系統(tǒng)的啟動(dòng)研究[J].佳木斯大學(xué)學(xué)報(bào)(自然科學(xué)版),2011(4):521?523.
[7] 王景存,高峰.基于ARM9的Bootloader的分析及設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2010,33(2):44?46.
[8] 蔡潔.基于高通平臺(tái)的Android系統(tǒng)分區(qū)管理[J].硅谷,2014(19):44?46.