设备: Samsung Chromebook Plus V1 (arm64, codename: gru/kevin, CPU Rockchip RK3399, XE513C24)。 网卡型号 Marvell 88W8997

安装Libreboot

1. 解除SPI Flash写保护螺丝

参考文章:

写保护螺丝是把SPI Flash的WE(Write Enable)线拉到GND上。需要拆除才能刷Libreboot

拆开机壳,把散热片拆下来,把HDMI连接器拆下来,把右下角的喇叭拆下(线先不拆)。把几个排线拆下(有一个黑色压条)
目标是把主板翻个面,电池在下方的阵形中,右上角的散热片紧固螺丝(在背后,键盘与主板之间),拆下。

屏线 Type-C Audio Jack 主板 次板 电池 喇叭 喇叭 Flash 🛟

散热片的螺柱与主板的螺孔之间,有一圈金属网圈🔘,一定要撕下来,否则仍然WE线仍然在GND上。

   / \
   \ /

撕掉金属网圈,露出上图螺孔的圈圈,实际上是四个小焊盘组成的一个圆形,如🛟。其中一组对角是GND。

记得要用螺丝刀把这四片焊盘之间划拉干净,不然还是接到GND上。SPI Flash没办法写。

2. 上编程器

Samsung Chromebook Plus v1, codename: Kevin
使用的Flash是GD25LQ64C,用的是1.8V电压.

买回来CH341A,还需要买1.8V的适配板。

用夹具夹上,烧写libreboot-20241206rev11_gru_kevin.tar.xz 中的.rom文件

Windows上有个比较好用的工具叫: thereadreg/asprogrammer-dregmod

如果直接把这个SPI Flash吹下来烧录,就可以省得折腾第1步里的写保护螺丝了。

2‘. 如果没有编程器: flashrom 内置烧写

就先进入Developer模式,或者各种方式能有flashrom工具(比如imagebuilder啊,各种虾系OS)
的情况下:

sudo flashrom -p internal -w uboot_gru_kevin_libgfxinit_corebootfb.rom

注意20241206版本的uboot有wifi, lspci:

00:00.0 PCI bridge: Rockchip Electronics Co., Ltd RK3399 PCI Express Root Port
01:00.0 Ethernet controller: Marvell Technology Group Ltd. 88W8997 2.4/5 GHz Dual-Band 2x2 Wi-Fi® 5 (802.11ac) + Bluetooth® 5.3 Solution (rev 11)

https://mirror.math.princeton.edu/pub/libreboot/

最新版 FAILED: libreboot-25.06_gru_kevin.tar.xz 没有wifi。lspci里是空的。已经上报Bug

装Debian

参考: https://libreboot.org/docs/uboot/uboot-debian-bookworm.html

注意,最后一步

  • YES: Force installation to removable media path
  • NO: Update NVRAM Variables

网卡驱动在:

sudo apt install firmware-libertas

i3wm

/etc/i3status.conf:

order += 'battery 0'
battery 0 {
    format = "%status %percentage %remaining"
	path = /sys/class/power_supply/sbs-9-000b/uevent
}

~/.config/i3/config:

exec xrandr --dpi 220
sudo apt install suckless-tools

中文Console

  • ucdos style: sudo apt install zhcon; zhcon --utf8
  • 很神奇的替代agetty的东西: sudo apt install kmscon 然后重启; 输入法可以配合github.com/scateu/ywvim,在Vim里打字得了

    如果不想在所有tty上都打开kmscon。可以sudo systemctl disable autovt@.servicesudo systemctl enable kmsconvt@tty1.service,这样就只在tty1上有kmscon,其它的都是原来的了(原来的速度快一些)。

Debian禁用/启用图形界面

sudo systemctl set-default multi-user.target #禁用
sudo systemctl set-default graphical.target #启用
#systemctl restart sddm #不对头
#systemctl start sddm   #不对头
systemctl start lightdm.service 
systemctl stop lightdm.service

See also

Uboot 直接引导vmlinuz

参考 https://docs.u-boot.org/en/latest/usage/cmd/booti.html

load mmc 0:2 $fdt_addr_r boot/rk3399-gru-kevin.dtb  #从/usr/lib/linux-image-6.1.0-35-arm64/rockchip/rk3399-gru-kevin.dtb拷过来的
load mmc 0:2 $kernel_addr_r  boot/vmlinuz
load mmc 0:2 $ramdisk_addr_r boot/initrd.img
#此行不用 用来参考 setenv bootargs root=/dev/mmcblk0p2 root=PARTUUID=$PARTUUID rootfstype=ext4 rw console=tty1 console=ttyS2,115200 earlycon rootwait LANG=en_US.UTF-8
setenv bootargs root=UUID=8f02889f-0c43-4163-9874-7e18d557cf17  # UUID是从/sbin/u-boot-update执行后产生的/boot/extlinux/extlinux.conf里看到的; 或者用blkid
setenv bootargs root=/dev/mmcblk1p2 ro #GRUB启动的是0p1,而用这种办法启动出来的是1p2,从1计数
booti $kernel_addr_r $ramdisk_addr_r:$filesize $fdt_addr_r

回车,就可以引导了。在思考是不是打印出barcode,用扫码枪输入。就跟摇把柴油机似的。

用extlinux.conf引导

猜测这个libreboot里的uboot不支持ext4。

当前的盘的分区是:

  1. FAT EFI, 挂载到/boot/efi/
  2. EXT4, 挂载到/

u-boot-update生成的/boot/extlinux/extlinux.conf是在EXT4分区里,因此识别不到。

于是把initrd dtb vmlinuz三个文件都拷到EFI目录里。

.
├── EFI
│   ├── BOOT
│   │   ├── BOOTAA64.EFI
│   │   ├── BOOTAA64.EFI.bak
│   │   ├── fbaa64.efi
│   │   ├── grubaa64.efi
│   │   └── mmaa64.efi
│   └── debian
│       ├── BOOTAA64.CSV
│       ├── fbaa64.efi
│       ├── grubaa64.efi
│       ├── grub.cfg
│       ├── mmaa64.efi
│       └── shimaa64.efi
└── extlinux
    ├── extlinux.conf
    ├── initrd.img-6.1.0-35-arm64
    ├── rk3399-gru-kevin.dtb
    └── vmlinuz-6.1.0-35-arm64

把extlinux.conf的路径也改好,在uboot里就可以识别到了。

default l0
menu title U-Boot menu
prompt 0
timeout 50

label l0
	menu label Debian GNU/Linux 12 (bookworm) 6.1.0-35-arm64
	linux /extlinux/vmlinuz-6.1.0-35-arm64
	initrd /extlinux/initrd.img-6.1.0-35-arm64
	fdtdir /extlinux/
	
	append root=UUID=8f02889f-0c43-4163-9874-7e18d557cf17 ro quiet

label l0r
	menu label Debian GNU/Linux 12 (bookworm) 6.1.0-35-arm64 (rescue target)
	linux /extlinux/vmlinuz-6.1.0-35-arm64
	initrd /extlinux/initrd.img-6.1.0-35-arm64
	fdtdir /extlinux/
	append root=UUID=8f02889f-0c43-4163-9874-7e18d557cf17 ro single
	

RESCUE GRUB Load

U-Boot:
load mmc 0:1 $loadaddr efi/boot/BOOTAA64.EFI
bootefi $loadaddr

GRUB>
set root=(hd0,gpt2)
linux /boot/vmlinuz root=/dev/mmcblk0p2
initrd /boot/initrd.img
boot