製作可開機的Android X86硬碟 - idiotccj/AndroidX86 GitHub Wiki

  1. 安裝Android x86到virtual box
  2. 關機
  3. 開啟開發環境的Ubuntu
  4. Copy別人的AndroidX86 裡面的 1.System 2./grub 3.kernel
$ mkdir copyFiles
$ mkdir mountTemp

$ sudo mount /dev/sdb1 /mountTemp
$ cd mountTemp/
$ ls
android-4.2-test  grub  lost+found

$ cd android-4.2-test/
$ cp -pa initrd.img ~/copyFiles/
$ cp -pa kernel ~/copyFiles/
$ cp -pa ramdisk.img ~/copyFiles/
$ cd system
$ sudo tar cz * > ~/copyFiles/system.tar.gz
$ cd ..
$ cp -pa grub/ ~/copyFiles/

$ sudo umount /dev/sdb1
$ sudo fdisk /dev/sdb

命令 (m 以獲得說明):

先把原本的硬碟格式化

命令 (m 以獲得說明): d 已選分割區 1

開始規劃4個partitions

sdb1 50M sdb2 550M sdb3 200M sdb4 200M

所用裝置 開機 開始 結束 區塊 識別號 系統 /dev/sdb1 * 2048 104447 51200 83 Linux /dev/sdb2 104448 1230847 563200 83 Linux /dev/sdb3 1230848 1640447 204800 83 Linux /dev/sdb4 1640448 2050047 204800 83 Linux

最後記得要 w 離開

格式化

$ sudo mkfs.ext2 /dev/sdb1
$ sudo mkfs.ext4 /dev/sdb2
$ sudo mkfs.ext2 /dev/sdb3的
$ sudo mkfs.ext2 /dev/sdb4

Tune

$ sudo tune2fs -i 2048 /dev/sdb1
tune2fs 1.41.14 (22-Dec-2010)
Setting interval between checks to 176947200 seconds
$ sudo tune2fs -i 2048 /dev/sdb2
tune2fs 1.41.14 (22-Dec-2010)
Setting interval between checks to 176947200 seconds
$ sudo tune2fs -i 2048 /dev/sdb3
tune2fs 1.41.14 (22-Dec-2010)
Setting interval between checks to 176947200 seconds
$ sudo tune2fs -i 2048 /dev/sdb4
tune2fs 1.41.14 (22-Dec-2010)
Setting interval between checks to 176947200 seconds

file check

$ sudo e2fsck -DC0 /dev/sdb1
e2fsck 1.41.14 (22-Dec-2010)
/dev/sdb1: clean, 11/12824 files, 2436/51200 blocks
$ sudo e2fsck -DC0 /dev/sdb2
e2fsck 1.41.14 (22-Dec-2010)
/dev/sdb2: clean, 11/35200 files, 6420/140800 blocks
$ sudo e2fsck -DC0 /dev/sdb3
e2fsck 1.41.14 (22-Dec-2010)
/dev/sdb3: clean, 11/51200 files, 8013/204800 blocks
$ sudo e2fsck -DC0 /dev/sdb4
e2fsck 1.41.14 (22-Dec-2010)
/dev/sdb4: clean, 11/51200 files, 8013/204800 blocks

Deploy

把(1)initrd.img (2)kernel (3)ramdisk (4)grub

copy到第一個partition

把system.tar.gz 解壓縮到第二個partition

安裝grub

--root-directory=放被掛載的裝置目錄 最後一個參數放裝置名稱

$ sudo grub-install --root-directory=/home/androidporting/mountTemp /dev/sdb1

修改init.rc (from ramdisk.img)

$ gzip -d < ../ramdisk.img | cpio -id

下午

initrd.img 解析

要把 initrd.img 裡面的busybox 重新 build 到 ramdisk.img

$ make menuconfig

然後選單打開(1)init (2)ash(shell language)

要把kernel裡面的設定 init=/init 拿掉

接下來執行 會出現錯誤:找不到init process

原因是busybox 的 init process找不到shared library 所以要去看他需要哪些shared library --> 利用ldd 上課的解法:打開Build BusyBox as a static binary 然後重新make install 重新開機就可以了

建立 inittab 檔案 (下載老師github的inittab)

放在 ramdisk 根目錄 root/etc/inittab

進入busybox的menucofig Linux system Utilities --> Mount 子目錄的Support /etc/fstab and -a 要打勾

在64bit的開發環境要build出32bit的image(?)

--> busybox的menuconfig裡面 要打開Build Options的

menu.lst --> grub.cfg

$ grub-menulst2cfg menu.lst grub.cfg