ChromiumOS安装

Author Avatar
ciaoly 2019年09月20日
  • 在其它设备中阅读本文章

记一次FydeOS安装尝试和浅尝Linux操作系统安装

贴一个FydeOS链接, 该系统就是个贴牌Chromium OS. 官网安装方式在这里不做考虑.


偶然看到原来官方还给了这么个wiki


本次尝试安装目标:

  1. 硬盘安装
  2. 不刻盘
  3. 磁盘单分区

系统镜像分析

官网下载的FydeOS是一个img镜像. 分析官网提供的安装方式可以猜测, 该镜像可能是一个磁盘的RAW镜像. file命令可以基本确定其为磁盘的RAW镜像, 因此可以使用loopback方式尝试将其挂载.

file命令输出

fydeos.img: DOS/MBR boot sector; partition 1 : ID=0xee, start-CHS (0x0,0,2), end-CHS (0x3ff,255,63), startsector 1, 10092700 sectors
  1. 首先将其设置为loop设备
losetup [options] -f | <loopdev> <file>
  1. 使用fdisk查看其分区布局(可能是我的操作方式有误, 使用parted时打印的分区布局是错误的)
Device          Start      End Sectors  Size Type
/dev/loop0p1  5898240 10092652 4194413    2G Microsoft bas
/dev/loop0p2    20480    53247   32768   16M ChromeOS kern
/dev/loop0p3   319488  5898239 5578752  2.7G ChromeOS root
/dev/loop0p4    53248    86015   32768   16M ChromeOS kern
/dev/loop0p5   315392   319487    4096    2M ChromeOS root
/dev/loop0p6    16448    16448       1  512B ChromeOS kern
/dev/loop0p7    16449    16449       1  512B ChromeOS root
/dev/loop0p8    86016   118783   32768   16M Microsoft bas
/dev/loop0p9    16450    16450       1  512B ChromeOS rese
/dev/loop0p10   16451    16451       1  512B ChromeOS rese
/dev/loop0p11      64    16447   16384    8M unknown
/dev/loop0p12  249856   315391   65536   32M EFI System

有了这个分区布局, 就可以尝试挂载了. 当然也可以使用dd把各分区单独分出来.

我是使用了losetup配合偏移量将各分区分别设置为loopback设备, 再使用mount将其一一挂载的; 有其他挂载方式请随意.

其实通过虚拟机运行FydeOS可以发现, 能用到的分区其实只有root/ stateful/ efi三个分区. (FydeOS可以切换到tty的), 因此上述多个分区其实是没有必要的. 猜测可能是Google对旗下ChromeBook设置的保留分区.

在这里补一个Google里搜索到的ChromiumOS安装教程

启动引导分析

挂载EFI分区, 查看grub.cfg内容, 关键启动记录如下示

menuentry "Boot FydeOS image A with Intel graphics chip" {
  linux /syslinux/vmlinuz.A init=/sbin/init boot=local rootwait ro noresume noswap loglevel=7 noinitrd console=  i915.modeset=1 nouveau.modeset=0 radeon.modeset=0 amdgpu.modeset=0 cros_efi cros_debug       root=PARTUUID=1687817B-70DD-E64B-AA45-82566DA0EB8D
}

到此基本上可以尝试安装了. 将上述提及到的三个分区在硬盘里安置好, 然后从grub.cfg中指定根文件分区的分区ID即可开机了.

*查看分区ID:

lsblk [选项] [<设备> ...]

LVM支持

是的, 使用LVM真的是没事找事.

主要是想实现单硬盘分区, 不想为了一个ChromiumOS而把硬盘分区表弄得乱糟糟的.

由于在开机时内核(vmlinuz)不能识别LVM分区, 因此需要设法将LVM分区在内核启动过程中挂载. (据说现在新版内核已经可以直接挂载LVM分区了, 不过FydeOS这个貌似是不行的)

有两种方案:

  1. initramfs
  2. 使用内核的device-mapper驱动

在我尝试弄了好几种方式生成initramfs都启动失败后, 还是妥协使用了device-mapper驱动.

相关文档: ChromiumOS Initrd | ChromiumOS KernelParameters | ChromiumOS DeviceMapper

方案如下:

  1. 新建LVM分区

修改init启动文件

然而还不行

挂载了root/ stateful , 但是还是运行不正常

等有空再折腾折腾吧

说一说折腾initramfs的事(内核调试)

说是内核调试, 其实也没有那么牛批的啦

当内核崩溃的时候, 或者当内核加载后使用图形化启动界面的情况时, 如果开机失败了, 看不到日志就让人摸不着头脑了.

当然添加quiet启动参数可以打开日志, 但是我试了, 好像是不行(而且遇到内核崩溃重启还会导致屏幕内容消失).

所以, 打开虚拟机吧.

qemu调试内核