綁定帳號登入

Android 台灣中文網

打印 上一主題 下一主題

[教程] Android裝置雙系統開機的實現

[複製連結] 查看: 3035|回覆: 7|好評: 1
跳轉到指定樓層
樓主
monitorstudio | 收聽TA | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
發表於 2014-2-24 23:58

馬上加入Android 台灣中文網,立即免費下載應用遊戲。

您需要 登錄 才可以下載或查看,沒有帳號?註冊

x
本帖最後由 monitorstudio 於 2014-4-14 23:18 編輯

還記得小弟很久以前的一篇文章雙系統開機-掛載自製檔案系統映像檔嗎?(誰記得= =......)
當時還只是一個討論串,並沒有真正的釋出教學告訴大家到底要要怎麼做到雙(多)系統開機
最近剛好又想到了這件事,所以就順便分享給網路上的所有版友們
當然,我們不能什麼都不懂就開始動手,對吧!(早就懂的請慢用)弄不好可是會......的。。。所以先來一點基本常識吧!小弟會把個人的思路和做法一併奉上的~~~

1.bootloader(hboot):
bootloader的中文名字是"開機載入程式",任何Unix-like(例如Android)設備都是由它來引導開機的,在我們的Android,它選擇要使用哪個內核來開機,要使用recovery內核呢?還是一般的內核呢?抑或是從電腦載入新的內核來開機(fastboot boot boot.img)

2.內核(kernel):
等到bootloader指定了一個內核之後,這個內核會被載入(解壓到根目錄上)
內核是幹嘛的???內核其實就是一個小小的迷你作業系統,沒有使用者介面(你看到的是開機第一屏或黑色的螢幕或開機動畫),它負責把整個Android系統建構起來,以下是精簡的內核的運行流程:
被bootloader解壓到根目錄 -> 執行/init -> /init解讀/init.rc

3.init:
init 照字面上的意思來看就是"最一開始的,最初的",它的確是整個Android系統裡,第一個被系統執行的程式,它是整個內核的中心,把Android系統建構起來的重責大任就落在它的肩上。因為程式修改不易,我們不可能每次都要重新撰寫&&編譯init,這樣是非常麻煩的,所以我們把指令都寫在一個檔案中,然後請init來讀它,並按照指令來跑,這樣每當我們想要修改開機程序的時候,就只要修改這個存放指令的檔案就可以了,這個檔案是/init.rc,它是我們這次討論的重點

所以我們就是要藉由修改/init.rc來更改開機的動作,達到載入不同系統的目的

做法:
init.rc在內核裡面,剛剛說過,由於在啟動時,內核是被"解壓"到根目錄的,所以直接修改根目錄裡被解壓出來的檔案是沒有用的,應該要去修改內核本身才對
取得自己裝置的內核,你可以使用小弟製作的應用程式boot kitchen它可以幫你從手機裡提取出來,也可以解壓,壓縮
假設大家都已經解壓好自己的內核了,現在要開始修改內核

以下是計劃:
把我的系統映像檔放在sd卡上,開機的時候掛載

首先要準備好你自己第二個系統的映像檔(不會的以後再詳述),把它放到sd卡上

然後修改init.rc



  1. mount yaffs2 mtd@system /system
複製代碼

刪除,這樣原本的系統就不會被掛載了
加上

  1. /sbin/busybox losetup /dev/block/loop0 系統映像檔路徑
  2. mount 檔案系統格式 /dev/block/loop0 /system
複製代碼

重新壓縮完內核之後,發現問題了,SD卡是在開完機之後才掛載的,所以init.rc在被執行的時候SD卡是不能用的

所以,我們要自己掛載它


  1. symlink /mnt/sdcard /sdcard
複製代碼

刪除,換成

  1. mkdir /sdcard
複製代碼

然後

  1. mount vfat /dev/block/mmcblk1p1 /sdcard
複製代碼

重新編譯完後,又出現問題了......
losetup失敗,以致於自己的系統映像檔無法掛載
看了一下init的原始碼init.c,裡面有定義,掛載映像檔可以用

  1. mount 檔案系統格式 loop@系統映像檔路徑 掛載點
複製代碼

例如

  1. mount ext4 loop@/sdcard/ubuntu/ubuntu.img /ubuntu
複製代碼

重新編譯內核,刷入之後重新開機,就發現你已經在自己的系統裡面囉!!!


「用Android 就來APK.TW」,快來加入粉絲吧!
Android 台灣中文網(APK.TW)

評分

參與人數 8碎鑽 +9 經驗 +2 幫助 +16 技術 +3 收起 理由
sunandrew321 + 3 + 2 + 5 + 2 很給力!
water0blue01 + 1 + 1 非常讚
firefoxking5777 + 1 + 1 太高超了,不過小弟的心臟不夠強啊!.
dyhsiaoTW + 1 + 1 技術文章。
faba + 1
love2012evol + 1
302070 + 1 + 1 非常讚
leo4343 + 2 + 5 + 1 我記得!

查看全部評分

收藏收藏9 分享分享 分享專題
用Android 就來Android 台灣中文網(https://apk.tw)
回覆

使用道具 舉報

沙發
WaterI | 收聽TA | 只看該作者
發表於 2014-2-27 07:32
大大這麼詳細解說,真是獲益匪淺!!
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

板凳
n821129x | 收聽TA | 只看該作者
發表於 2014-2-27 09:46
任何手機都可以使用?
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

地板
 樓主| monitorstudio | 收聽TA | 只看該作者
發表於 2014-2-28 06:33
n821129x 發表於 2014-2-27 09:46
任何手機都可以使用?

只要是Android......
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

5
yuqun0223 | 收聽TA | 只看該作者
發表於 2014-3-10 20:20
有妹有圖解,這樣會更好。
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

6
ppm123456 | 收聽TA | 只看該作者
發表於 2014-4-11 18:16
由 手機網頁 發佈
求更加详细内容,上面看的有点迷糊。
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

7
Cat_Cat | 收聽TA | 只看該作者
發表於 2014-5-5 14:10
用用看好不好用
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

8
gh138290 | 收聽TA | 只看該作者
發表於 2014-5-17 00:27
如果系統映像檔在SD裡的話,開機速度會比較快嗎??還是神麼,這部分小弟搞不太懂耶~

然後我也不懂這是神魔意思:首先要準備好你自己第二個系統的映像檔(不會的以後再詳述),把它放到sd卡上

然後修改init.rc

全文網址: Android裝置雙系統開機的實現 - Android 綜合刷機 - Android 台灣中文網 - APK.TW http://apk.tw/thread-503607-1-1.html#ixzz31tefq7Dn
Power By APK.TW
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則