写在开头

自从被某人拉下坑后,Chromeos就整了一个月。。然后一直咕咕咕到现在才有了这篇文章(

前排提示:本篇文章图片较少(大部分已经丢失),基本纯文字
理论上适用于各类pc安装(intel系)。
操作均在ThinkPad10上测试过

先放一张目前的图
tp10 chromeos


关于OS

何为chromeos,chromiumos自行百度,不做过多解释。
chromeos不开源,所以第三方的是基于Chromiumos的,但是可以通过第三方去转化为正版的Chromeos,相当于将Chromiumos为底包,把chromeos整上去,后面会细说

首先,如果没有科学的上网等办法的不建议选择Chromeos,可以直接考虑国内的基于Chromiumos的Fydeos。
Fydeos,写这篇文章的时候是9.2版本,基于4.14的内核,已经国内化了。而且貌似对amd有支持?具体不清楚,可以自行体验,但是在thinkpad10上测试,蓝牙无法使用,看b站视频是绿的。
并且在TP10上以双系统的方式安装无法启动,原因未知

其次是ATB,也就是老外编译的Chromiumos,在某些情况下会使用这个镜像做框架转换为Chromeos。

剩下的还有个Cloudready,我装那玩意直接把我emmc给扬了我就不多说了(

关于这几个第三方os安装,其相关网站有文档与介绍

TIP:无论何种方案,所有工作开始前,建议先安装reFind引导
因为这样就不用担心找grub等问题了,而且在tp10上,refind可以用触摸选择启动项


Chromeos镜像的种类及下载

临时插播这个,写在所有方案之前,所以可以考虑浏览完了再回来看这个(

chromeos的恢复镜像分为两种,non-unibuild和unibuild版

  • non-unibuild镜像:只有单个设备的配置,例如eve (Google Pixelbook)和nocturne (Google Pixel Slate)。安卓容器里的build也定义了product。

  • unibuild镜像: 多个设备的配置在镜像内,通过检测型号使用配置。

镜像下载地址

注意:部分旧机子镜像不支持Android容器/linux虚拟机,具体看列表,planned即为不支持

support list

官方chromeos设备信息配置


4.14内核的方案安装Chromeos

采用Chrome-OS-Multiboot项目,作者是MuntashirAkon

1.需要有一个Linux的PC,并且有大量的存储空间
2.安装的PC上要是UEFI启动方式,并且是GPT分区表
3.你需要知道安装的PC上的TPM的版本,自行百度查看tpm版本查看,TP10上是TPM2.0


一:选择Chromeos的恢复镜像

eve的镜像(也就是17年的Google Pixel book),但是实测TP10上eve的镜像无法启动
如果eve的镜像无法启动或者启动后存在问题,需要选择一个硬件相似的Chromeos的镜像来使用
Chromeos的内核版本可以无视,因为我们不使用它的内核
点击这查看详细参数
注:基本不存在完全的完美,所以挑一个没啥大问题的即可。

二:下载ATB的Chromiumos镜像做底
此处可以选择别的做底,但是实测fydeos空间不够,而且ATB镜像请使用special版,而且选用的版本号最好与选的Chromeos镜像一致或者相近。
建议选择non-unibuild镜像,原因在后面TP10的修复bug上会说。
而且最低不能低于R74
下载地址

三:通过Chromefy项目制作Chromeos的镜像

项目地址,作者是imperador。

把项目的东西下载下来,将下载的两个镜像,ATB的镜像重命名为chromium.img,chromeos的恢复文件重命名为recovery.bin,一起放到chromefy目录下,打开终端,cd进这项目的目录

这里分情况了,如果是TPM2的话,使用swtpm(项目的release中有下载)来修补镜像
然后执行

   sudo  bash  croissant.sh  chromium.img  recovery.bin  swtpm.tar

如果是TPM1.2的话,请再下载一个tpm1.2的恢复镜像,例如caroline的镜像
然后重命名为caroline.bin
执行

  sudo bash  croissant.sh  chromium.img  recovery.bin  caroline.bin

等它跑完进度,chromeos的镜像就做好了。

注意:如果为tpm2的机子,使用tpm1.2的镜像做恢复镜像,将会出现chrome://flag打开后是空白的,不可调整的,但是可以通过修改conf文件来修改flag。
我尝试移植tpm的文件过去未果。


四:安装
(一):以不可ota方式安装
此方法简便安装但是不可ota
需要先预留空间,并且不要将预留的空间格式化为分区,只是单纯的预留空间!
进入chromefy项目的lab文件夹内,把整好的chrome镜像重命名为chromeos.img放进去,然后执行

sudo bash dualboot.sh chromeos.img dualboot.bin

将镜像用rufus或者其他工具写入u盘,u盘插上走u盘启动,进向导的时候按ctrl+alt+f2,进入tty
提示登录,输入chronos
然后输入:

sudo bash /usr/sbin/dual-boot-install -d /dev/sda

后面的/dev/sda自行更换,例如我tp10是/dev/mmcblk0p2
接着它会开始安装,完成后重启即可食用chromeos

(此脚本方案来自fydeos早期双系统)


(二):使用multiboot项目安装

按照作者说的,可以ota,但是比较麻烦
而且ota方案我没有测试过

1.你需要另一个u盘,并且装上linux的livecd
将multiboot项目里的install_chromium.sh,cgpt拷贝到u盘里,还有你的chromeos的镜像
2.启动livecd,把cgpt复制到/usr/bin下给权限
3.然后先给硬盘分区,打开分区的工具,分四个区
第一个分区为EFI-SYSTEM,格式为fat16,分32 MB,假定id为sda4
第二个分区为ROOT-A,格式为EXT2,至少分4G 假定为sda5
第三个分ROOT-B,格式为EXT2,至少4G 假定为sda7 (这是拿来ota用的)
第四个分区为STATE,格式为EXT4 (这个是用户的分区,分多少取决于你自己,建议20G以上) 假定为sda6

tip:注意分的id序号和顺序

分完了后,终端cd进镜像和脚本的位置
输入:

sudo bash install_chromium.sh chromiumos.img sda4 sda5 sda6

注意:
在执行脚本之前, sda4替换为你efi-system分区的id, sda5替换为root-a的id,sda6替换为state的id。

跑完进度后就可以重启了体验了


五:OTA

同样,你需要一个u盘装linux的livecd
然后把multiboot项目里的update_chromium.sh,以及新的恢复镜像和swtpm放到livecd拷贝到u盘里。
如果提示
然后在livecd下执行:

sudo bash update_chromium.sh recovery.bin sda5 swtpm.tar

其中,recovery.bin为你要ota的chromeos恢复镜像,sda5为你root-a分区的id号。


4.19内核的方案安装Chromeos

这里我们要提到另一个项目了,brunch,目前我也是使用的这个

项目地址,作者sebanc。

(一):介绍与需求
这个项目采用的方式就是基于4.19内核做了一个框架,再将chromeos放进去,框架相当于muliboot方案的chromium镜像的作用。

硬件需求:

  • x86_64电脑有uefi支持,
  • Intel(CPU和GPU)(从第一代开始)
  • AMD A4/5/6 (CPU和GPU), 且只能使用"grunt" chromeos恢复镜像(更老的AMD CPU和Ryzen型号不支持)
  • N卡不支持

镜像选择:brunch两种镜像都可以使用,但是选择unibuild版会对硬件支持更好。
Intel第四代U或者更新建议选择rammus镜像
Intel第三代或者更旧建议选择samus镜像

(二):安装
需要linux的pc,win的wsl也行
安装pv, tar和cgpt。
cgpt如果源内没有可以使用multiboot项目里的

注意:以下命令中实际输入均无“<”符号

1.下载恢复镜像,和brunch的release
解压brunch的release

2.打开终端,cd解压的文件夹
输入

sudo bash chromeos-install.sh -src < 你chromeos恢复镜像的路径 > -dst < 你u盘的地址,例如 /dev/sdX >

2.5,要安装的pc中先保证在NTFS或者ext4的分区中有14G以上(具体看你要装多大,就留多大)的空间存放双系统用的chromeos的镜像。

3.写完u盘里后,u盘启动,过向导,按ctrl+alt+t打开终端
输入shell进入shell
先挂载你要安装的分区。

mkdir -p ~/tmpmount
sudo mount <你要放镜像的分区,格式为ext4或者ntfs的路径 > ~/tmpmount

然后开始创建镜像

sudo bash chromeos-install.sh -src < chromeos恢复镜像的位置 > -dst ~/tmpmount/chromeos.img -s < 你想装的镜像大小,单位为GB,系统将占用10G左右,剩下空间为用户分区的大小 >

创建完了终端会给出efi的配置,复制,自行修改efi添加其启动项

其中,efi的文件,将brunch压缩包的efi_secure或者legacy(具体看你自己情况)挂载,提取grub.cfg和grubx64.efi,然后把刚刚复制的efi配置替换到cfg里,创建个文件夹,名字随便,cfg和efi扔进去,把文件夹扔到你EFI分区下,refind会自己扫描给出启动项

重启,进入,等他自动跑进度条,即可食用
自动整合框架和恢复镜像

注:以上方案为作者的方案,个人安装时用livecd代替了u盘跑chromeos安装

反正原理就是系统装在镜像中,有一个制作好的镜像即可,无论在哪制作,然后修改efi,至于手动efi如何修改,可以查看安装脚本的最后,将部分替换为自己的即可

根据某人的说法,部分机子grub下的export无法生效,需要手动把变量一个个换进去。例如酷比某板子,具体看机型

(三):ota
ota分为两种情况,一是单独ota框架(也就是这个项目),例如作者有时候会补一些驱动,更新一些东西。二则是同时更新

1.下载需要ota的chromeos恢复镜像,解压得到bin文件,下载新版本的框架,且对应版本,无需解压(如果只ota框架则不需要下恢复镜像)

2.打开Chromeos的终端

3.只ota框架:

sudo chromeos-update -f < 框架压缩文件的路径 >

同时ota:

sudo chromeos-update -r < chromeos恢复镜像的路径 > -f < 框架压缩文件的路径 >

4.重启,二次启动时会在initramfs自动进行处理

(四):部分可选参数
查看项目的readme的Framework options。根据需求可加入grub的启动参数中


ThinkPad10的处理

在TP10上属实不是很容易装,因为首先无论哪个版本,都用不了wifi,向导都过不去,折腾老半天了

存在以下问题:
BCM4334的wifi和蓝牙
rt5645/rt5672声卡问题
Intel Imaging Signal Processor 2400相机问题
NFC
Synaptics VFS6101 指纹问题

首先,很明显,相机,nfc,指纹不用考虑了。因为貌似在linux下都不正常。
着重解决wifi蓝牙和声音,且分项目解决

(一):wifi
问题所在,根据dmesg可以清楚看到缺失brcmfmac43241b5-sdio.txt,解决方案,手动补充文件

如果你使用的是基于chromiumos镜像得到的chromeos,
即内核为4.14的,按如下操作

开机后,ctrl+alt+f2进tty,login输入chronos。
(如果是键盘带fn的话可能是fn+ctrl+alt+f2,且注意按的顺序)

先挂载为读写

sudo mount -o rw,remount /

然后挂载efi vars到sysfs

sudo mount -t efivarfs none /sys/firmware/efi/efivars

把文件复制过去

sudo cat /sys/firmware/efi/efivars/nvram-74b00bd9-805a-4d61-b51f-43268123d113 > /lib/firmware/brcm/brcmfmac43241b4-sdio.txt

注意:如果出现权限问题请切换至root用户
此方法不适用于brunch项目,因为挂载不了efi vars

brunch的方案:
百度上找一份有人提供的txt文件,在制作chromeos前挂载其root-c.img,自行添加文件。
或者开机后从别处复制过去,同理

(二):蓝牙
在基于chromiumos上的无法解决,内核无驱动

在brunch上,根据dmesg,缺少BCM.hcd,我们需要补充进去。
关于蓝牙这个我提了issue,因此得到了解决方案,感谢帮助回复过的人。

1.TP10回到win下(前提是win下蓝牙正常),进入C盘,位置在C:\Windows\System32\drivers
找到一个BCM4324B5开头的hcd文件,复制出来,重命名为BCM.hcd

2.重启进chromeos,把这个文件按照和上面wifi处理方式一样,复制到/lib/firmware/brcm里

注:chromeos的蓝牙在搜索里是搜索不到手机的,但是耳机之类的可以。smartlock通过手机的蓝牙可以正常使用,但是效率感人

(三):声音
问题所在:alsa的ucm里缺失配置文件,此问题仅限于基于4.14的chromium的镜像,brunch不缺此文件
解决方案,下载文件复制过去

从这下载,只需要下chtrt5645,cht-bsw-rt5672,sof-chtrt5645,sof-cht-bsw-rt5672文件夹和其里面的内容即可。
然后将这四个文件夹复制到chromeos的/usr/share/alsa/ucm里。

到此,TP10的bug基本解决完毕


剩下可能存在的问题及处理思路

折腾一个月不是白折腾的,毕竟我把所有恢复镜像都用了个遍(,使用4.14的chromium镜像还会碰到一些问题,这里仅给出思路解决,并非完全方案

Q:开机后无linux容器和android支持
A:旧机型旧平台机子谷歌没对其做支持,16年以后机型基本有。

Q:哪些机型是TPM1.2哪些是2.0,tpm能否正常工作
A:印象中KabyLake之后的都是2.0,bios中禁止tpm的话对chromeos也没用,chromefy提供的swtpm貌似是没有正常工作的(即使工作了tpm还是炸的,无论什么情况都是炸的,dmesg中就能看到炸了),然后brunch的swtpm貌似正常工作,dmesg中看不到有问题,但是在log中还是能看到,它要打开/dev/tpm0,但是不存在。所以无论如何,都是炸的(

Q:TPM2.0上用1.2的镜像存在什么问题
A:brunch下不知道能否完全正常,但是基于chromium的存在以下几个问题
1:chrome://flag打开是空白一片的,这个可以通过修改/etc/chrome_dev.conf进行添加flag
2.安全模块无法给出号,这个玩意在开机向导里,影响暂无强迫症除外
3.待发现,暂时无影响

Q:Linux虚拟机安装失败,啥情况
A:网络。你去log看看百分之95都是网络问题。要科学的上网,多试几次。什么?你说剩下的百分之5是啥情况?剩下百分之5多半脸黑

Q:Android的设置在哪
A:google play登陆上后在设置,googleplay设置里

Q:使用4.14的chromium os做的chromeos的谷歌服务无法使用,而且android程序运行一段时间崩溃
A:这个问题在brunch上基本不会存在,因为作者做了处理。如果你研究他框架里那一堆脚本的话你会明白为什么。

首先,分析问题原因:通过adb查看的logcat,可以看到闪退是因为android容器炸了。所有服务died了,最后zygote也没了。往上看,能看到问题在gms上。

这个,没有很好的办法解决,我查看了大量issues最后得到的结论是:
1.删除gms。你需要通过别的方式(例如打开activity啥的)打开设置以外别的没啥影响。不过chromeos把play都删了还有灵魂么(
2.使用non-unibuild镜像,制作chromeos的img后,把img挂载上(如何挂载自己看那些install的脚本),进入镜像的/opt/google/containers,把里面的system.raw.img复制出来,用unsquashfsquashfs解包,修改里面的build.prop,把ro.product.board的值修改为你自己的型号,例如我的TP10是20C1S00V00。
查看board

那么,自己的board怎么看,

cat /sys/devices/virtual/dmi/id/board_name

如果没有的话就ls看下id那个文件夹里面哪个有board的。
修改完成后用mksquashfs打包,放回镜像即可。
不过我这边测试的不知道为何play服务还是error,但是android应用不闪退了。

不过为什么会造成这样,根据issue再度分析问题。
输入:

arc-setup --mode=onetime-setup --log_tag=manual-arc

你会发现出错,原因是:
Did not find a value for metrics-tag while expanding ro.product.board={metrics-tag}
当然,这个出错提示是在uni_build上的,如果是non上会出现类似的但是不等于{metrics-tag},而是单独机型的board。
Chromeos的uni_build是针对多个机型的,所以对应的config文件在/usr/share/chromeos-config里。但是我尝试修改里面的json替换为tp10的无效。所以干脆使用non-uni_build的镜像而直接修改build。

PS:此问题的解决思路来自这个issue的hacker1024。

而brunch里这个问题不存在,因为作者在脚本里直接修改了chromeos-config,并且内核里加了东西设置board。貌似·,没具体分析,估计八九不离十?

并且,gms引发的问题貌似只在androidp的容器里会出现,而androidn的正常。

如果你把gms的apk提出来扔进fyde的容器中,你会发现它一样也崩溃了(

亏我当初还以为系统问题开始折腾移植

Q:平板模式如何开启
A:在不能自动启用的情况下,按ctrl+alt+shift+t即可启用(brunch下测试过,基于chromium的没测过)

Q:我想不出了
A:想到了再补充


关于两种方案的选择

我个人是在4.14基于chromiumos上折腾了很久很久的。。。直到后来一位酷友告诉我有个brunch项目。。。我才发现我折腾了半天原来一堆东西都有现成的。我愣在原地.jpg(
无论是从通用性还是驱动完整度,建议采用brunch,而且内核也相对新一些。
当然,如果你在原版chromiumos上就运行良好,也不妨采用基于chromiumos的。我上面所述的也是可能出现的问题,并不是都会出现。起码我TP10上是都出现了
以上所有操作方案都可以等同替换,不是绝对的。
说不定基于brunch的chromeos镜像可以用fyde的dualboot安装呢。我没试过自行测试

最后,chromeos还是挺香的,在z3795上看视频比win舒服。当然,桌面掉帧严重,忍忍就过去了(


本文部分来源于github的issue和readme,其他均为原创

转载请注明作者和原文链接