一種從OTG設備啟動Android系統的方法
2023-12-01 00:45:51
一種從OTG設備啟動Android系統的方法
【專利摘要】本發明方法涉及一種從OTG啟動Android系統的方法,屬於通信【技術領域】。本發明方法通過修改Android設備啟動鏡像,改變傳統OTG設備掛載過程,具體是通過修改設備初始化進程init,使Android系統啟動之前檢測到OTG設備,並在內存文件系統中為其創建相應目錄,然後利用設備冷啟動過程為OTG設備創建設備節點,以從OTG設備上掛載系統分區和數據分區成為可能;同時,通過修改內核中配置文件,使其掛載OTG設備上的系統和數據分區,最終完成從OTG設備上啟動Android設備。本發明方法針對現有規範無法從OTG設備上啟動Android系統的問題,提出了一套切實可行的辦法。
【專利說明】—種從OTG設備啟動Android系統的方法
【技術領域】
[0001]本發明涉及一種啟動Android系統的方法,特別涉及一種從OTG啟動Android系統的方法,屬於通信【技術領域】,
【背景技術】
[0002]USB技術的發展,使得PC和周邊設備之間能夠進行數據傳輸。但是,由於標準的USB使用主從的架構,只有USB主機端(「主」,即電腦)和USB周邊裝置(「從」)之間能進行數據傳輸,USB周邊裝置之間不能通過USB 口進行數據傳輸。為此,0TG(0n The Go)作為USB2.0版本的補充,應用於不同的設備或行動裝置間的聯接,實現在沒有主機端的情況下,設備間的數據傳送。
[0003]Android是一種基於Linux的自由及開放原始碼的作業系統,主要使用於行動裝置,如智慧型手機和平板電腦,由Google公司和開放手機聯盟領導及開發。Android4.0或以上系統的智能設備晶片大多都支持USB-0TG,通過OTG可以方便的讀取外接SD卡中的數據,特別是對於不支持外接SD卡的手機。
[0004]但在Android系統中,OTG設備作為熱插拔設備,只有Android系統啟動後,OTG設備才會被系統記錄並實現掛載。Android系統中,當OTG設備插入時,內核發送uevent消息給Vold守護進程,Vold守護進程解析uevent消息,並完成OTG設備結點的創建及掛載,其OTG設備掛載流程圖如圖1所示。Vold守護進程作為Android的本地服務,在Android系統啟動之後運行。因而,這種傳統的OTG設備掛載方法不可能實現從OTG設備上啟動Android系統,因為OTG設備只有在Android系統啟動後才能被掛載。
[0005]綜上可知,要從OTG設備上啟動Android系統,傳統的OTG設備處理方式是行不通的。
【發明內容】
[0006]針對上述缺陷,本發明的內容是提出一種從OTG設備上啟動Android系統的方法。
[0007]根據Android系統啟動過程,在Linux內核(Android系統基於Linux內核)啟動之後,需掛載多個必須文件系統,以啟動Android運行環境,包括系統文件夾system(包含啟動Android運行環境所需的本地服務等),數據文件夾data (記錄Android運行環境的配置文件,以及用戶程序等),系統文件系統/sys等。當使內核啟動後掛載OTG設備上的系統(system)分區和數據(data)分區到設備的/system和/data掛載點時,Android設備將讀取OTG設備上的Android環境數據,實現從OTG設備上啟動Android系統。
[0008]又傳統的OTG設備掛載方法不能滿足從OTG設備上啟動Android系統的要求,本方法中修改設備啟動過程,在Android系統啟動之前,使OTG設備能被內核記錄,並為OTG設備創建設備節點,並使設備在啟動過程中掛載OTG設備上的系統(system)分區和數據(data)分區,從而從OTG設備上啟動Android系統。
[0009]在Android系統啟動之如,存在冷啟動過程。冷啟動中王要用於為系統預直設備(例如內存存儲卡)在/dev目錄下創建設備節點,其主要過程為掃描內存文件系統下/sys/class、/sys/block和/sys/devices目錄,並啟動相應目錄下的uevent,並最終在設備文件夾/dev目錄創建設備節點,使系統最終能使用相應設備。因此,在冷啟動之前,在/sys目錄下創建OTG設備相關目錄,則可在冷啟動過程中在Android設備/dev目錄創建OTG設備節點,從而使設備可以從OTG設備啟動Android系統。
[0010]而Android設備冷啟動這個過程是通過init進程執行的,init進程將運行本地服務uevent,本地服務uevent完成冷啟動的過程。在運行本地服務uevent之前,如果內核在內存文件系統/sys/block目錄下為OTG設備創建相關目錄,init進程等待內核創建OTG設備相關目錄(/sys/block/sda)完成後,才啟動冷啟動過程(uevent服務),如此,在冷啟動過程中,將會在Android設備的/dev目錄下創建OTG設備對應的設備節點,使Android系統啟動之前就可掛載使用OTG設備,本發明方法中OTG設備掛載流程如圖2所示。同時,對Android系統啟動分區中的配置文件進行修改,將OTG設備中對應的system系統分區和data數據分區掛載在設備根目錄的system和data掛載點上,如此,即可通過OTG設備啟動Android 系統。
[0011]本發明是通過以下技術方案實現的:
[0012]—種從OTG設備啟動Android系統的方法,包括以下步驟:
[0013]A.提取並修改Android設備啟動分區鏡像;
[0014]B.製作用於啟動Android系統的OTG設備;
[0015]C.將修改之後的Android啟動分區鏡像重新刷入Android設備啟動分區中;
[0016]D.將OTG設備與Android設備相連,啟動Android設備,從而實現從OTG設備啟動Android 系統。
[0017]在所述A中,提取出Android設備啟動分區鏡像,並修改啟動分區中包含的初始化進程init進程可執行程序,使設備能在Android系統啟動之前檢測到OTG設備,同時修改Android設備啟動時掛載的系統分區和數據分區為OTG設備中的系統分區和數據分區,修改之後重新製作成啟動分區鏡像。
[0018]在所述B中,在系統能檢測到OTG設備之後,需要加載OTG設備中的分區,因而需使OTG設備中包含啟動Android所需的系統(system)分區和數據(data)分區,並初始化系統分區和數據分區中數據,以便從OTG設備上啟動。
[0019]所述C中,將修改後的An droid設備啟動分區鏡像刷入An droid設備啟動分區中,設備啟動時將使用新的啟動分區鏡像啟動,並使用OTG設備啟動Android系統。
[0020]有益效果
[0021]本發明方法通過對Android設備啟動鏡像修改,改變Android設備啟動過程,同時製作啟動Android系統的OTG設備,使Android系統從OTG設備上啟動,並且從此OTG設備啟動的Android系統將與設備本身系統完全隔尚。
【專利附圖】
【附圖說明】
[0022]圖1為傳統的OTG設備掛載流程不意圖;
[0023]圖2為本發明方法OTG設備掛載流程示意圖;
[0024]圖3為使用parted工具分區後分區情況示意圖;
[0025]圖4為Nexus 5分區情況示意圖;
[0026]圖5為啟動分區鏡像解壓結果示意圖;
[0027]圖6為ramdisk根文件系統內容示意圖;
[0028]圖7為修改前fstab.hammerhead部分內容不意圖;
[0029]圖8為修改後fstab.hammerhead部分內容不意圖;
[0030]圖9為init.c中添加的兩個函數示意圖;
[0031]圖10為init.c的main函數中調用位置示意圖;
[0032]圖11為拷貝nexus5_system.img到SD卡中第二分區不意圖;
[0033]圖12為手機啟動Android系統情況示意圖;
[0034]圖13為OTG設備啟動Android系統情況示意圖;
[0035]圖14為OTG設備啟動掛載情況示意圖;
[0036]圖15為OTG設備啟動Android設備實例圖。
【具體實施方式】
[0037]為了使本發明的目的、技術方案及優點更加清楚明白,以下結合附圖及實施例,對本發明的一種從OTG啟動Android系統方法進行進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發明,並不用於限定本發明。
[0038]下面將按照上面所介紹的步驟,詳細介紹各個步驟的【具體實施方式】。
[0039]實施例
[0040]本實施例使用Nexus 5手機作為實施平臺,OTG設備為插入8G Micro SD Card的帶mini usb 口的讀卡器。當把SD卡插入帶mini usb 口的讀卡器,並把讀卡器插在手機的mini usb 口上時,手機會把此外接設備當做OTG設備使用。實施例具體步驟如下:
[0041]A.提取並修改手機啟動分區鏡像
[0042]1.提取Nexus 5的啟動分區鏡像
[0043]Nexus 5 手機的啟動分區(名為 boot 分區)為/dev/block/mmcblk0pl9 (使用 adb工具進入手機/dev/block/platform/msm_sdcc.1/by-name目錄查看Nexus 5分區情況,如圖4所示,圖中上面方框標示的內容表示Nexus 5的boot分區為mmcblk0pl9),提取啟動分區(boot分區)數據,保存為文件boot, img ο
[0044]2.解包啟動分區鏡像
[0045]啟動分區鏡像是按一定格式打包的,要修改啟動分區鏡像,首先需要解包啟動分區鏡像,Android解包工具split_bootimg.pi可用於解壓啟動分區鏡像。解壓啟動分區鏡像boot, img後會得到手機啟動內核和ramdisk文件系統根目錄,如圖5所示。
[0046]3.修改啟動分區鏡像內容
[0047]解壓啟動分區鏡像後,需修改啟動分區鏡像,使系統能在Android系統啟動之前檢測到OTG設備,並掛載OTG設備中的系統分區和數據分區。
[0048]主要修改在根文件系統ramdisk目錄下,解包Nexus 5手機的啟動分區鏡像後,得到的ramdisk目錄下文件如圖6所示,主要修改圖中方框中的文件。
[0049]方框中標識的fstab.hammerhead文件為Android系統配置文件,用於描述Android系統啟動時,手機內置存儲卡中分區與根文件系統中目錄的掛載關係。沒修改之前,fstab.hammerhead文件部分內容如圖7所示,圖中左橫線標識的為手機中的分區,右橫線標識的為分區掛載的目錄。修改後文件fstab.hammerhead中部分內容如圖8所示,由圖可知,掛載在/system目錄下的設備由原來手機中的/dev/block/platform/msm_sdcc.1/by-name/system 分區變為 /dev/block/sda2 (/dev/block/sda2 為 OTG 設備中的系統分區在Nexus5手機中的設備節點,經測試得到),同理掛載在/data目錄下的變為/dev/block/sda3(/dev/block/sda3為OTG設備中的系統分區在Nexus5手機中的設備節點)。當成功掛載OTG設備中分區時,手機將通過OTG設備啟動。
[0050]圖6中方框中init為系統內核啟動後,執行的第一個用戶進程,將由它完成最基本的系統初始化,啟動uevent服務執行冷啟動,修改init的目的是使設備在Android系統啟動之前能檢測到OTG設備。
[0051]修改init需要基於init源碼並進行修改,重新編譯生成新的init可執行程序,替換已有的init可執行程序。init可執行程序的源碼在Android源碼中system/core/init目錄下。打開其中的init.c文件,添加兩個函數,用以循環檢查Android內核是否在/sys/block目錄為OTG設備創建相應節點(/sys/block/sda),如圖9所示,並在main函數中調用wait_for_sda函數,如圖10所示。修改完成後,保存並重新編譯Android系統源碼,將生成修改後的init可執行程序,使用重新編譯生成的修改後的init可執行程序替換已有的init可執行程序。
[0052]4.重新打包啟動分區鏡像
[0053]對解包後的內容進行修改之後,需要重新打包成一個啟動分區鏡,使用Android工具mkbootfs和mkbootimg可以將解包後的內容重新打包為啟動分區鏡像,命名為boot-new.1mg。
[0054]B.製作用於啟動Anctoid系統的OTG設備
[0055]手機Nexus 5的啟動分區鏡像修改後,手機啟動後將目g通過OTG設備啟動Android系統。這時,需要製作用於啟動Anctoid系統的OTG設備,包括為OTG設備分出存放system數據的system分區,存放data數據的data分區,同時需要往這兩個分區中添加數據,以使手機日8從OTG設備啟動Android系統。
[0056]1.0TG設備分區
[0057]實例中將SD卡插入帶mini usb 口的讀卡器的作為手機外接的OTG設備,因而只需對SD卡進行分區,即相當於對OTG設備進行分區。實例中對SD分區在Linux系統下進行,使用Linux下分區工具parted對SD卡進行分區(實例中SD卡在Linux下對應的設備節點為/dev/sdb),SD卡分區情況如圖3所示,最終將SD卡分為三個分區,大小分別為1G、1.5G、5G,在 Linux 對應的設備節點分別為 /dev/sdbl、/dev/sdb2、/dev/sdb3,其中 1.5G 分區作為OTG設備中的system分區(存Android運行環境所需本地服務等),5G分區作為OTG設備中的data分區(存儲Android運行環境的配置文件,用戶數據,以及重要軟體等),分區完成之後把三個分區分別格式化為vfat、ext4、ext4格式。
[0058]2.初始化OTG設備中system分區
[0059]Nexus 5內置存儲卡中的system分區為mmcblk0p25 (如圖4中下面方框所標不),初始化OTG設備中system分區,需將Nexus 5內置存儲卡中的system分區中數據硬拷貝至OTG設備中system分區(SD卡中1.5G的分區)。
[0060]首先,通過adb工具連接手機,獲取手機Root權限後,使用以下命令將手機system分區數據拷貝到手機的/sdcard目錄下的文件nexus5_system.1mg中:
[0061]cat/dev/block/mmcblk0p25>/sdcard/nexus5-system.1mg
[0062]再將nexus5_system.1mg文件從手機中拷貝出來,並移至Linux系統下,同時將實例中所使用的SD卡連到Linux系統下,使用Linux下硬拷貝工具dd將nexus5_system.1mg文件拷貝至SD卡的第二個分區(1.5G) system分區中(實例中SD卡的第二分區,即OTG設備的system分區,在Linux下對應的設備節點為/dev/sdb2)。實例中使用的命令如圖11所示,圖中下劃線標識的為使用的命令。
[0063]C.將修改之後的啟動分區鏡像刷入啟動分區中
[0064]修改之後的啟動分區鏡像為boot-new.1mg,未修改之前的啟動分區鏡像為boot,img,通過adb連接手機,把boot-new.1mg放在手機中的/sdcard目錄下,使用如下命令將修改後的啟動分區鏡像boot-new.1mg刷入Nexus 5啟動分區/dev/block/mmcblk0pl9中:
[0065]cat/sdcard/boot-new.1mg>/dev/block/mmcblk0pl9
[0066]D.從OTG設備啟動Android系統
[0067]刷入完成後,重新啟動手機,將SD卡插入讀卡器,再將讀卡器插入手機mini USB口上,手機將把讀卡器識別為OTG設備,並通過其啟動Android系統,弟一次啟動時首先會往SD的data分區中寫入手機啟動的配置數據。
[0068]E.驗證從OTG設備啟動
[0069]實例中將兩個軟體(手機淘寶shoujitaobao_110.apk和Android手機終端模擬器-Android-Terminal-Emulator-L 0.62.apk)保存在 OTG 設備中。當從 OTG 設備啟動Android系統後,系統中可以看到這兩個應用;當從手機中啟動Android系統時,系統中找不到這兩個應用。
[0070]圖12是從手機中啟動系統時顯示的手機主界面,圖13是從OTG設備啟動手機時顯示的主界面,從手機中啟動時,可以看到百度地圖應用,而從OTG設備啟動時,可以看到淘寶和超級終端應用,兩者壁紙不一樣。圖14是使用超級終端查看的手機從OTG設備啟動時,設備的掛載情況,左邊下劃線標識的為設備,右邊下劃線標識的為相應設備的掛載目錄,可知,系統啟動時成功掛載OTG設備中的system分區(/dev/block/sda2)和OTG設備中的data分區(/deV/bl0Ck/sda3),可知手機從OTG設備啟動成功。圖15為OTG設備啟動Android設備實例圖。
[0071]本領域的技術人員從上面描述的內容可以了解,本發明方法各步驟間沒有嚴格的先後關係,只要一個步驟的實現不需要依賴另一個步驟的完成,就可根據實際情況調整順序,如步驟A和步驟B。
[0072]以上所述的具體描述,對發明的目的、技術方案和有益效果進行了進一步詳細說明,所應理解的是,以上所述僅為本發明的具體實施例而已,並不用於限定本發明的保護範圍,凡在本發明的精神和原則之內,所做的任何修改、等同替換、改進等,均應包含在本發明的保護範圍之內。
【權利要求】
1.一種從OTG設備啟動Android系統的方法,其特徵在於包括以下步驟: 步驟一,提取並修改Android設備啟動分區鏡像; 步驟二,製作用於啟動Android系統的OTG設備; 步驟三,將修改之後的Android啟動分區鏡像重新刷入Android設備啟動分區中;步驟四,啟動Android設備,將OTG設備與Android設備相連,從而實現從OTG設備啟動Android系統。
2.根據權利要求1所述的從OTG設備啟動Android系統的方法,其特徵在於:所述步驟一中對分區鏡像的修改包括以下兩部分內容: 一、修改Android設備初始化進程init,添加等待內核在內存文件系統中為OTG設備創建相應目錄的內容,使Android設備能在Android系統啟動之前檢測到OTG設備; 二、修改Android設備啟動時掛載的系統分區和數據分區為OTG設備中的系統分區和數據分區,使Android設備能夠從OTG設備上啟動Android系統。
3.根據權利要求1所述的從OTG設備啟動Android系統的方法,其特徵在於:所述步驟二包括以下兩部分內容: 一、對OTG設備分區及格式化,使其至少包含2個分區,分別對應Android系統啟動時的系統分區和數據分區; 二、初始化OTG設備的系統分區,使其包含Android系統運行環境所需的本地服務內容。
4.一種從OTG設備啟動Nexus 5手機Android系統的方法,其特徵在於包括以下步驟: 步驟一,提取並修改Android設備啟動分區鏡像,包括以下內容: . 1.提取Nexus5的啟動分區鏡像; . 2.解包啟動分區鏡像;. 3.修改啟動分區鏡像內容,包括如下兩項: (1)修改初始化進程init,添加等待內核在內存文件系統中為OTG設備創建相應目錄的內容; (2)修改Android設備啟動時掛載的系統分區和數據分區為OTG設備中的系統分區和數據分區; .4.重新打包啟動分區鏡像; 步驟二,製作用於啟動Android系統的OTG設備,包括以下內容: . 1.為OTG設備分區,使其至少包含一個系統分區和一個數據分區,然後對分區進行格式化; . 2.初始化OTG設備的系統分區,使其包含Android系統運行環境所需的本地服務內容; 步驟三,將修改之後的Android啟動分區鏡像重新刷入Android設備啟動分區中;步驟四,重新啟動Android設備,將OTG設備與Android設備相連,從而實現從OTG設備啟動Android系統。
【文檔編號】G06F9/445GK104407890SQ201410650732
【公開日】2015年3月11日 申請日期:2014年11月15日 優先權日:2014年11月15日
【發明者】曾禮, 馬忠梅, 趙旭強, 龍磊, 譚毓安, 李元章 申請人:北京理工大學