本文创建和持续完善及优化的初衷是为购买作者设计的SuzyQ-Adapter的朋友提供完善和直观的指导。同时,不设密码免费公开也是想同时方便广大Chromebook同好。然而,本站大量邮件及其他途径的咨询,给作者造成不小的困扰。在此声明:作者无法确定其他CCD线材或是转接板的兼容及稳定性,除使用经本站严格测试的SuzyQ-Adapter外,使用其他CCD器材带来的问题,由于作者精力所限,恕无法解答。Chromebook是个小圈子,本文将持续保持公开方便同好,并欢迎分享及参考引用。祝玩机快乐!
本教程仅适用于带CCD调试功能的 (2017之后的机器大多都支持) Chromebook,Chromebox等ChromeOS设备,同时有如下要求:
- 设备带CCD调试功能*;
- 非含有企业锁或教育锁的机型,这些机型的CCD往往都被锁定;
- SuzyQ-Adapter(首选),或SuzyQable;
- 写保护解锁:可以是前期CCD flags reset过或者断开电池排线;
- 另一台运行Linux的电脑,推荐Ubuntu(2304)
*具体可参考此处,查找自己机型,如果机型对应的WP Method
一栏写有CR50
字样,则该机器支持CCD功能。
流程:
*如果刷写原机备份的BIOS文件,则此步可跳过
准备工作
如果按照标准的教程开启CCD并解锁了写保护,可以不要拆机(实际上如果按照标准教程,变砖概率很低)。
但是如果很不幸,出于种种未知的原因或是按照非标准的教程操作,并未开启CCD,那么需要拆机,然后断开内部电池排线。断开电池排线千万要注意,有些电池排线端子金属裸露容易接触主板,造成主板烧坏。断开电池排线千万要小心,不要碰到主板其他元器件,同时断开后,将电池排线的端子用胶带包裹绝缘起来。这点千万不可偷懒马虎,不要心存侥幸!如果出于某些奇怪的原因,此时CCD仍未能打开。请按照这里的方法尝试。
注意:无论是救砖还是采用该教程方法强刷机器BIOS,必须保证待刷机器处于完全关机(不能是开机或者睡眠)的状态。
此时,打开另一台运行Linux的电脑(建议Ubuntu 2304,否则可能遇到flashrom问题,点击下载),Ubuntu系统可以是从U盘启动的,但必须物理安装,不能是虚拟机。连接网络,然后打开一个terminal(Ctrl+Alt+T), 注意不要以root身份打开。运行以下命令,切换到home
目录
cd;
安装flashrom
sudo apt update sudo apt install flashrom
连接SuzyQ-Adapter或是SuzyQable, 其C头连接被救砖的电脑的调试口(一般是左边的C口),另一头连接运行Linux的机器。输入以下命令检查线是否正常连接:
ls /dev/ttyUSB*
这条命令应该输出三个项目/dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2
,如果不是,线的C端上下翻转后重插,或者换一个机身的C口。出现左边的三个输出,则线功能正常且成功连上。
将CCD状态设置为open:
echo "ccd open" | sudo tee -a /dev/ttyUSB0 > /dev/null
拷贝待刷的.rom
或.bin
文件:
如果是备份的原机BIOS文件,则将其直接拷贝到home
根目录(Ubuntu中文系统中显示为家
目录);
如果要刷的是第三方的Full ROM文件,则也将其拷贝到home
根目录,或者直接通过下列命令下载
wget https://mrchromebox.tech/files/firmware/full_rom/<filename>
其中,上述代码中的<filename>
替换成从这里找到的文件名,如coreboot_edk2-redrix-mrchromebox_20230721.rom
。找适合自己机器的文件的方法是根据机器的主板代号,可以从MrChromebox.tech或chromium.org查找主板代号Board Name
。如果没有本机备份文件且不想刷第三方固件,或无法在上述位置找到合适的固件,可通过邮件咨询,个别机型固件提取很麻烦,有偿。
处理VPD
这里需要分情况讨论,如果你有本机原始固件的备份,那么可以跳过这一步,进入刷写流程。
如果待刷固件非本机备份,则需要处理VPD。提取VPD有两种方式,机器内安装有正确BIOS固件的可用方式1,否则方式2,但两种方法都需要先安装cbfstool
:
wget https://mrchromebox.tech/files/util/cbfstool.tar.gz && tar -zxf cbfstool.tar.gz
方式1:通过CCD从机器提取固件并抽取VPD
sudo flashrom -p raiden_debug_spi:target=AP -r badflash.rom ./cbfstool badflash.rom read -r RO_VPD -f vpd.bin
注:上列两行命中的第一行也可以作为备份现有固件使用,其将机器现有固件备份为badflash.rom
。
方式2:从备份的BIOS文件中提取VPD(先将备份的BIOS文件拷贝到home
目录)
./cbfstool <备份的固件> read -r RO_VPD -f vpd.bin
完成提取后将VPD注入待刷固件
./cbfstool <待刷固件> write -r RO_VPD -f vpd.bin
刷写固件
刷写固件如果是原机备份固件,则运行:
sudo flashrom -p raiden_debug_spi:target=AP -i SI_BIOS -w <待刷固件>
刷写固件如果是其他固件,则运行:
sudo flashrom -p raiden_debug_spi:target=AP -w <待刷固件>
以上命令中的<filename>
需要根据情况修改为home
目录中待刷固件的完整文件名。刷写固件一般后缀为.bin
或.rom
。同时还需要补充说明的是,如果备份固件采用第一个方式不成功,可以尝试第二种方式。之所以分不同的固件刷机方式是因为某些备份的固件是不完整的,尤其是原版脚本在本机备份的固件对于Intel的U来说,本机是没有权限读取自身的ME分区的,备份出来的文件缺少ME分区无法完整刷写,这种情况可以告诉编程器只刷写bios部分,刷写命令中也可添加--ifd
。当然如果在非本机操作备份,比如通过SuzyQ-Adapter或烧录夹备份的则完整。
搞定,祝好运。
一些奇奇怪怪的问题
1. EC相关
一些离谱的操作可能会导致机器的AP和EC*出问题,导致flashrom无法正常写入全部固件,在验证阶段出错。可尝试重启AP或者通过EC设置gpio。
在CR50终端(sudo minicom -D /dev/ttyUSB0
)输入reboot
,但是个别主板无效。
如果无效,尝试通过操作EC。进入EC终端(sudo minicom -D /dev/ttyUSB2
),输入:apshutdown
,等5秒,输入gpioset s5_en_rails 1
个别机型,比如redrix主板,上述s5_en_rails
已经改为en_s5_rails
。
然后退出minicom
,再次尝试刷机。
*EC文档
2. GBB FLAGS
对于某些特殊情况,无法进入Chromebook执行命令,或Chromebook不能完全重置到出厂等,可通过工具重置GBB FLAGS,获取gbb_utility
后运行以下代码:
sudo ./gbb_utility --set --flags=0x0 <待修改ROM文件>
如果是开启了开发者模式,但是似乎又没完全开启,比如不能从恢复盘启动等,可以尝试将GBB FLAGS设置到39:
sudo ./gbb_utility --set --flags=0x39 <待修改ROM文件>
如果遇到了提示EC Sync相关的问题,可以尝试将GBB FLAGS设置到200,如需保留开发者环境就设置到239,在下方代码对应位置修改:
sudo ./gbb_utility --set --flags=0x200 <待修改ROM文件>
3. flashrom问题
某些情况下flashrom
缺少相应的库或者编程器,可以自行编译flashrom
,然后运行自编译的版本:
sudo apt update sudo apt install -y git build-essential libpci-dev libudev-dev zlib1g-dev libusb-1.0-0-dev pkg-config git clone --single-branch --branch master https://github.com/flashrom/flashrom.git cd flashrom pkg-config --libs libusb-1.0 make CONFIG_NOTHING=yes CONFIG_DUMMY=yes CONFIG_RAIDEN_DEBUG_SPI=yes WARNERROR=no
然后在刷机时指向自编译的flashrom
即可,比如上文中在home目录运行刷机命令时将命令中的flashrom
替换成./flashrom/flashrom
。
4. HWID修改
对于一些特殊情况缺少原机备份且无正常HWID
,可能影响机器后期跑刷机脚本或者系统更新,可以完成刷机后,在机器上运行命令窗口参考此处更改HWID
。或是刷机前通过gbb_utility
直接操作待刷机的ROM文件。
5. VPD的直接注入
如果有提取的有效VPD比如提取为vpd.bin
,也可将其直接注入机器。
sudo flashrom -p internal -w -i RO_VPD:vpd.bin
6. Minicom开启CCD并常开
Linux安装minicom
,根据不同发行版,自行安装,比如Ubuntu即apt instal minicom
在连好SuzyQ-Adapter后运行:
sudo minicom -D /dev/ttyUSB0
进入minicom
后,在minicom
中运行*(逐行运行,不要一次性四行全部粘贴运行):
*注:个别机型可能会跳出文字要求确认(Press PP button
),每跳出一次此提示,都需要短按一次电源键,直到不再提示。有些机型则直接开启。
ccd open
ccd reset factory
ccd testlab enabled
wp disabled atboot
大佬,按照你的教程,使用ubuntu救砖遇到如下提示:用离谱案例试了一下,没有效果,请大佬指点一下
Error; Unknown programmer “raiden_debug_spi:target=Ap”, Valid chotces are:internal, dummy, nic3com, nicrealtek, gfxnvidia, drkaiser, satasit, atavta,it8212, ft2232_spi, serprog, buspirate spi, dediprog, developerbox, rayer_spt,pony_spi, nicintel, nicintel_spi, nicintel eeprom, ogp_spi, satamv, linux mtd,linux_spl, usbblaster_spl, pickit2_spi, ch341a spi, digilent_spt, stltnkv3_spt.please run .flashrom ..help” for usage info.
你很可能不是Ubuntu2304,教程建议使用2304的原因就是防止flashrom出现奇怪问题。可以改到2304,或者自行编译flashrom再尝试:
sudo apt update
sudo apt install -y git build-essential libpci-dev libudev-dev zlib1g-dev libusb-1.0-0-dev pkg-config
git clone --single-branch --branch master https://github.com/flashrom/flashrom.git
cd flashrom
pkg-config --libs libusb-1.0
make CONFIG_NOTHING=yes CONFIG_DUMMY=yes CONFIG_RAIDEN_DEBUG_SPI=yes WARNERROR=no
然后以编译的flashrom运行:
sudo ./flashrom -p raiden_debug_spi:target=AP ...
大佬,按照你的办法,我连了SuzyQable,开机,然后断开电池,提取VPD的时候报错,该怎么办阿。联想chromebook c630,之前进入了开发者模式,打开了ccd,断电池刷机失败。。。
sudo flashrom -p raiden_debug_spi:target=AP -r badflash.rom
flashrom unknown on Linux 6.2.0-32-generic (x86_64)
flashrom is free software, get the source code at https://flashrom.org
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).
Raiden target: 2
Raiden: Target SPI bridge is disabled (is WP enabled?)
Raiden: Error configuring protocol
protocol = 2
status = 0x00005
Error: Programmer initialization failed.
尝试在命令中添加
--wp-disable
。如果不起作用,按照文末尝试自行编译flashrom。感谢大佬,不过昨晚我装Ubuntu的机器炸鸡了。。。一缕青烟。。。我晚上把另一台机器装上linux双系统试试。
大神,自编译了flashrom,拔掉电池,还是不行,求指点
sudo ./flashrom/flashrom -p raiden_debug_spi:target=AP -r –wp-disable badflash.rom
flashrom 1.4.0-devel (git:v1.2-1353-gebda447a) on Linux 6.2.0-33-generic (x86_64)
flashrom is free software, get the source code at https://flashrom.org
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).
Error: Extra parameter found.
Please run “flashrom –help” for usage info.
首先你添加的
–wp-disable
就不对,你仔细看看我写的是啥,你添加的是啥。然后如果改对了仍然不起作用,那么我也不清楚了。每个人机器情况不同。厚着脸皮继续
sudo flashrom –wp-disable -p raiden_debug_spi:target=AP –wp-disable -r badflash.rom
flashrom unknown on Linux 6.2.0-33-generic (x86_64)
flashrom is free software, get the source code at https://flashrom.org
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).
Raiden target: 2
Found GigaDevice flash chip “GD25B128B/GD25Q128B” (16384 kB, SPI) on raiden_debug_spi.
Found GigaDevice flash chip “GD25Q127C/GD25Q128C” (16384 kB, SPI) on raiden_debug_spi.
Multiple flash chip definitions match the detected chip(s): “GD25B128B/GD25Q128B”, “GD25Q127C/GD25Q128C”
Please specify which chip definition to use with the -c option.
我说了你添加的不对,还要我怎么说。。。命令打给你的,你抄都没抄对。
wp前面是两个横线没错。。。
但你复制在这边的是一个长横线,根据报错应该是识别了两个flash芯片,需要你指定刷哪个。我没有遇到过这个情况,不知,可以自行尝试下。如
sudo flashrom --wp-disable -p raiden_debug_spi:target=AP -c "GD25B128B/GD25Q128B" -r badflash.rom
或指定另一个。感谢耐心解答,我看到有类似的问题MrChromebox作了如下解答,但是我执行 firmware-util.sh这个命令的时候提示并没有这个文件。。。
known issue with sandybridge/ivybridge platform devices and the updated flashrom build the script is currently using.
to workaround, run from home dir:
sudo rm /tmp/flashrom
curl -LO https://mrchromebox.tech/files/util/flashrom.tar.gz
tar zxf flashrom.tar.gz
mv flashrom /tmp
sudo bash firmware-util.sh
that should resolve the issue
他这个原本是跑脚本的,你这个肯定没有这个文件。你把他的链接中的文件下载,解压,把里面的flashrom文件拷贝到home文件夹下的flashrom文件夹里面覆盖原文件。
哎,把他github里所有脚本下回来,设置好权限,然后执行,还是报几个脚本缺失。然后手贱把这几个脚本手工执行了一下,现在好了,一直提示写保护开着了…
救砖的前提是对linux操作和执行的命令有基本的理解,并不是大力出奇迹。我这边也只是给出救砖的方法,没办法也没时间指导其他的问题,具体问题自行检索吧。
大佬说的对
大佬,我的主板Board Name是PANTHEON,我该选哪个rom?多谢
教程里说明了的,如果找不到的话,可能就要通过其他技术途径获取,可自行找资料编译,或有偿代劳。
我后来找到了,用nami,而且最终刷好了,感谢!!
大佬,我的联想duet一代系统损坏,进入恢复模式无法正常读取U盘(dev-boot-usb:0),旧版bios未开启,能否通过上述方式USB引导?
无法确定你的机器具体问题,只能建议你通过此方式救砖重刷BIOS,可能会好。你现在也基本就是救砖这条路
好的,谢谢大佬解答,我等ccd线拿回来之后刷coreboot试一下
Dell Latitude 5400 Chromebook Enterprise明明在支持列表里但找不到固件……应该用那个阿
我觉得您可能是没有理解支持列表和你所说的固件的意思。这个设备支持列表里有,但是只是支持RW_LEGACY,这只是原系统的一个分区的意思。你说的找固件应该是找Fullrom,而这不在支持范围,所以没有。也就是说你这个机器想要救砖,必须刷回原生BIOS。同时这个机器也是不支持刷win的。
是购买的本站的SuzyQable或者SuzyQ-Adapter吗?如果是,那么很可能是你机器坏了。如果不是本站的话,那么可能是你的线的问题,或者机器的问题。
谢谢回复,我找到原因了。是另一台Linux系统缺少usb-serial-simple驱动,所以不能识别谷歌cr50串口。用Ubuntu就没事,已经自带了驱动。