Chromebook使用ext4 U盘运行Remix OS

之前在 Dell Chromebook 11 上体验 Remix OS PC 版的时候是直接使用的普通 USB 3.0 U 盘安装官方放出的 Windows 可执行安装版,在 Chromebook 使用 legacy 模式启动(刷了 RW_LEGACY 模式的修改版 BIOS)运行倒是还比较顺利,只是 Remix OS PC 版 U 盘默认 FAT32 分区格式限制了 Android 的用户空间(data 分区)也最多只有 4GB,这样用起来还是挺不爽的。

搜索之后发现 Remix 论坛里已经有直接的硬盘安装方法可以解决 4GB 用户空间限制的问题,但是我的 Chromebook 就只有 16GB 的空间,同时又安装了 crouton 系统,本来就捉襟见肘的空间再给 Remix OS 分一个区就不太现实了,最主要 Chromebook 原生的 Chrome OS 我是必须要保留的,而且 U 盘格式的 Android x86 也比较符合我的需求,因此想到用 Remix OS PC 版里自带的 Android x86 安装器将 Remix OS 安装到 ext4 格式的 U 盘里。

提示
本文中介绍的安装及启动、升级方法不只是适用于 Chromebook 电脑,也同样适用于普通 Windows PC 机;
另外这篇文章并不是面向初学者的安装教程之类的,需要你对 Linux 有一定的了解。

下面介绍一下安装方法以及后续升级的步骤:

准备步骤

  • 一个 8GB 以上的 U 盘,最好是 USB 3.0 的;
  • 下载好的 Remix OS PC 版最新安装映像
  • VMware / VirtualBox / QEMU 等支持 USB 模拟的虚拟机软件。

VMware 安装 Remix OS 步骤

这里以 VMware Workstation 虚拟机软件为例子介绍如何在 Windows 上将 Remix OS PC 版映像以 ext4 文件系统格式安装到普通 U 盘上,其它的虚拟机软件或者操作系统下步骤也是类似的(直接使用 Chromebook 安装 VirtualBox 也是可以完成的哦)。

  1. 解压缩下载到的 Remix OS PC 版安装映像(一般为 zip 文件),会得到一个比较大的 iso 文件;
  2. 创建新虚拟机,记得启用 USB 控制器支持(默认就会启用),然后添加虚拟光驱并使用解压缩出来的 iso 文件,另外不用添加任何虚拟硬盘;
  3. 启动虚拟机,正常的话会看到 Android x86 安装画面,这里选择默认的 Resident mode 并按 Tab 键会出现输入参数的界面,在原有的参数后面增加 INSTALL=1,如下图所示:

  4. 按回车键启动安装程序,稍等就会出现选择安装分区界面:

  5. 对于 VMware 虚拟机这时候需要将焦点切换到虚拟机中并插上 U 盘,一切正常的话稍等片刻就可以在虚拟机状态栏上看到新插上的 USB 设备:

    说明
    对于 VirtualBox 这样可以直接在虚拟机设置中添加 USB 设备的虚拟机软件会在虚拟机启动时自动尝试加载 USB 设备就不需要专门做这步了;
    QEMU 也可以直接通过命令行或者配置文件加载 USB 设备;
    VMware 也是可以通过 vmx 配置文件自动加载 USB 设备的,只是配置稍微复杂点这里不做介绍了。

  6. 找到 U 盘设备之后选择上面的 Detect devices 菜单项查找设备,顺利的话会看到要安装到的设备:

  7. 上图可以看到 U 盘上还没有任何分区,下面可以选择 Create/Modify partitions 菜单在 U 盘上创建并格式化分区,分区文件系统格式最好为 ext4 格式,另外最好也直接将整个 U 盘的空间都用上:

    提示
    如果 U 盘上已经存在分区但不是 ext4 格式的也可以在这里删除并重新创建分区。

  8. 分区创建并格式化完成之后退出返回就可以在之前的选择分区界面中看到新创建的分区:

  9. 选择新创建的分区开始安装,顺利的话稍等几分钟应该就可以安装完成,中间会提示是否需要将 system 分区设为可写的,为了调试以及后续 root 方便建议选择 Yes 将 system 分区设备可写模式。
  10. 这样安装之后的 U 盘就可以一般的电脑上启动成功了,而且用户空间(data 分区)和系统空间(system 分区)都是 ext4 格式的,不存在 4GB 的大小限制,同时后续如果换更大的 U 盘也比较好扩容。

安装好之后我们可以看看 Remix OS PC 版 U 盘的分区及文件系统结构:

[root@localhost ~]# parted /dev/sdb p
Model: SanDisk Cruzer Glide 3.0 (scsi)
Disk /dev/sdb: 16.0GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name  标志
 1      1049kB  16.0GB  16.0GB  ext4

[root@localhost ~]# mount -t ext4 /dev/sdb1 /mnt/disk
[root@localhost ~]# ls /mnt/disk/
android-2016-01-23  grub  lost+found
[root@localhost ~]# ls /mnt/disk/android-2016-01-23/
data  initrd.img  kernel  ramdisk.img  system
[root@localhost ~]# ls /mnt/disk/android-2016-01-23/system/
addon  app  bin  build.prop  etc  fonts  framework  lib  lib64  lost+found  media  priv-app  priv-setting  tts  usr  vendor  xbin
[root@localhost ~]# ls /mnt/disk/android-2016-01-23/data/
adb  app-asec  app-private  dalvik-cache  dontpanic  local       media     misc      resource-cache  serialno  user
app  app-lib   bugreports   data          drm        lost+found  mediadrm  property  security        system
[root@localhost ~]# df -h /mnt/disk
文件系统              容量  已用  可用 已用%% 挂载点
/dev/sdb1              15G  1.7G   13G  12% /mnt/disk

可以看到 U 盘根目录下就是 android-2016-01-23 这样的目录,里面放的就是 Android kernel、initrd 文件以及实际的 data 及 system 目录,安装完成之后 U 盘实际占用了近 2GB 的空间。

Chromebook U 盘启动问题

下面将安装好的 U 盘在 Dell Chromebook 11 上用 legacy 模式启动时会出现无法正常启动的问题。经过初步研究认为是 Android x86 默认使用的 Trusted Grub 安全引导方式对于刷了 RW_LATENCY 模式 BIOS 的 Chromebook 可能存在不兼容的问题。

刷了 RW_LATENCY 模式 BIOS 的 Chromebook 进入 legacy 模式的方法是在启动时按 Ctrl+L 键,并选择启动设备。

为解决这个问题,我在安装好的 U 盘上尝试安装了 Grub、Grub2 等不同的引导程序发现都不能在 Dell Chromebook 11 上正常启动,最后发现如果改为使用 EXTLINUX 这个 Syslinux 变种不但能支持 ext4 格式分区引导而且支持在 Chromebook 上以 legacy 方式正常启动 Remix OS U 盘。

EXTLINUX 安装也比较简单,这里直接使用 Chromebook 中的 crouton 系统直接安装到 U 盘,下面的操作都需要使用 root 权限才能完成。

  • 首先挂载 U 盘分区,并在分区下创建 extlinux 目录,然后运行命令安装 EXTLINUX 相关文件到对应目录:

    [root@localhost ~]# mkdir -p /mnt/disk/extlinux
    [root@localhost ~]# extlinux --install /mnt/disk/extlinux
    
  • 生成 EXTLINUX 配置文件保存到 extlinux/extlinux.conf 中:

    TIMEOUT 5
    DEFAULT Remix_OS_2016-01-23
    
    LABEL Remix_OS_2016-01-23
    	KERNEL /android-2016-01-23/kernel
    	APPEND quiet root=/dev/ram0 androidboot.hardware=remix_cn_x86_64 androidboot.selinux=permissive DATA= SRC=/android-2016-01-23 initrd=/android-2016-01-23/initrd.img
    
    LABEL Remix_OS_2016-01-23_Debug
    	KERNEL /android-2016-01-23/kernel
    	APPEND root=/dev/ram0 androidboot.hardware=remix_cn_x86_64 androidboot.selinux=permissive DATA= DEBUG=2 SRC=/android-2016-01-23 initrd=/android-2016-01-23/initrd.img
    

    其中实际标题及目录名称请根据需要自行替换;

  • 安装 EXTLINUX 引导程序到 U 盘:

    [root@localhost ~]# umount /mnt/disk
    [root@localhost ~]# cat /usr/lib/extlinux/mbr.bin > /dev/sdb
    

    注意
    进行此步骤还请特别注意不要搞错了 U 盘设备名,否则可能误安装到你的系统盘之类的哦。

一般这样修改之后的 U 盘就可以正常在 Chromebook 上以 legacy 模式启动了,这种方式最大的优点就是不影响 Chromebook 原生的 Chrome OS 系统。

Remix OS 系统升级

由于 Remix OS PC 版并没有提供直接的在线 OTA 升级方式,但按本文提供的方式安装的 U 盘明显又不能使用官方的 Windows 安装工具进行升级,这里就需要专门介绍一下如何升级新系统了。

其实步骤也算是比较简单的,只需要下载新的映像文件解压缩 iso 里的文件,并使用新的 kernel、ramdisk、initrd 替换到对应目录,然后替换整个 system 目录即可(保留 data 目录就可以保留所有用户数据)。

首先挂载 U 盘分区到指定目录,例如 /mnt/disk,上面已经有具体的命令这里不再说明了。

然后挂载 iso 中的 system 文件,这一步由于 Android x86 system 目录使用的是 squashfs 映像所以略微复杂点:

(trusty)zzm@localhost:~/Downloads$ sudo mount -t iso9660 -o ro,loop Remix_OS_for_PC_64_B2016020201_CN_Alpha_Legacy.iso /mnt/test
(trusty)zzm@localhost:~/Downloads$ ls /mnt/test/
efi/         initrd.img   install.img  isolinux/    kernel       ramdisk.img  system.sfs   TRANS.TBL
(trusty)zzm@localhost:~/Downloads$ sudo mount -t squashfs -o ro,loop /mnt/test/system.sfs /mnt/image
(trusty)zzm@localhost:~/Downloads$ ls /mnt/image/
system.img
(trusty)zzm@localhost:~/Downloads$ sudo mount -t ext4 -o ro,loop /mnt/image/system.img /mnt/share
(trusty)zzm@localhost:~/Downloads$ ls /mnt/share/
addon  app  bin  build.prop  etc  fonts  framework  lib  lib64  lost+found  media  priv-app  priv-setting  tts  usr  vendor  xbin

接着就是将新的 system 目录到 U 盘中(下面的命令开始多了一条删除 U 盘中原来所有 system 文件的操作):

(trusty)zzm@localhost:~/Downloads$ sudo rm -rf /mnt/disk/android-2016-01-23/system/*
(trusty)zzm@localhost:~/Downloads$ cp -ra /mnt/share/* /mnt/disk/android-2016-01-23/system/

下面是替换 Android kernel、initrd、ramdisk 等文件:

(trusty)zzm@localhost:~/Downloads$ sudo cp /mnt/test/initrd.img /mnt/test/kernel /mnt/test/ramdisk.img /mnt/disk/android-2016-01-23/

最后可以将原来的 Android 目录(例如上面的 android-2016-01-23)也重命名为最新的目录(例如:android-2016-02-02),不过重命名之后千万别忘了把 extlinux.conf 配置文件里的标题和目录名称也改掉哦。

依次卸载上面的一些挂载之后用新的 U 盘启动 Chromebook 就可以看到升级后的效果啦。