记一次FydeOS安装尝试和浅尝Linux操作系统安装
贴一个FydeOS链接, 该系统就是个贴牌Chromium OS. 官网安装方式在这里不做考虑.
偶然看到原来官方还给了这么个wiki
本次尝试安装目标:
- 硬盘安装
- 不刻盘
- 磁盘单分区
系统镜像分析
官网下载的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
- 首先将其设置为loop设备
losetup [options] -f | <loopdev> <file>
- 使用
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这个貌似是不行的)
有两种方案:
- initramfs
- 使用内核的device-mapper驱动
在我尝试弄了好几种方式生成initramfs都启动失败后, 还是妥协使用了device-mapper驱动.
相关文档: ChromiumOS Initrd | ChromiumOS KernelParameters | ChromiumOS DeviceMapper
方案如下:
- 新建LVM分区
修改init启动文件
然而还不行
挂载了root/ stateful , 但是还是运行不正常
等有空再折腾折腾吧
说一说折腾initramfs的事(内核调试)
说是内核调试, 其实也没有那么牛批的啦
当内核崩溃的时候, 或者当内核加载后使用图形化启动界面的情况时, 如果开机失败了, 看不到日志就让人摸不着头脑了.
当然添加quiet启动参数可以打开日志, 但是我试了, 好像是不行(而且遇到内核崩溃重启还会导致屏幕内容消失).
所以, 打开虚拟机吧.