在华硕Chromebook C201上安装Debian Jessie

网上有不少在Chromebook上安装Linux的脚本了,不过我个人还是比较偏向于手动一步步执行,天知道脚本是不是已经太老了或者某些具体情况不匹配。希望本文一来能对各位想要安装Linux的Chromebook持有者有所裨益,二来就和博客里其他文章一样,当作个人的备忘。另外需要说明的是安装Debian算是比较繁琐的,如果想要安装Arch的话,戳底下参考文章的链接,安装Arch可以很快就搞定(而且是在Chromebook上就能全部搞定)。至于为什么不安装我钟爱的Fedora,因为我个人感觉Fedora的ARM做得不是很好,担心出岔子。好了,废话不多说了,下面开始正文。

设备需求

  • 至少8GB的microSD卡或者U盘(本例使用的是8GB的microSD卡)
  • 一台ARM Chromebook(以ASUS Chromebook C201为例)
  • 一台运行Linux的电脑(非Chromebook,本例是运行Fedora 22的笔记本电脑)

Chromebook准备

  1. 首先保证系统已经是最新(stable即可)
  2. 开启开发者模式,同时按住刷新键、ESC、电源键,系统会自动重启,此时按Ctrl + D并确认开启。然后系统会重启,再按Ctrl + D跳过警告,此时系统会开始切换到开发者模式,该过程可能需要十分钟左右,并且会清除所有用户数据(请提前做好备份)。
  3. 重新启动好Chromebook,按Ctrl + Alt + T进入Crosh标签,输入shell进入Bash,然后输入sudo su切换成root用户,再输入crossystem dev_boot_usb=1 dev_boot_signed_only=0使系统能从USB设备(包括microSD卡)引导,再输入chromeos-firmwareupdate --mode=todev使得固件能支持从USB设备启动。

microSD卡/U盘准备

桌面Linux需要安装cgpt和debootstrap,Fedora下sudo dnf install vboot-utils debootstrap即可。我通过读卡器访问的microSD卡(容量8GB),所以设备名是/dev/sdb,以下命令请根据你的实际情况进行调整。以下操作均需要root权限,建议先sudo su切换成root用户。

DEV=/dev/sdb
MNT=/mnt
parted --script ${DEV} mklabel gpt
cgpt create ${DEV}
#创建内核分区,同时设定更高的优先级(Debian Wiki坑爹地写错参数了,它写的-t data,那样创建出来的是无法启动的,必须-t kernel)
cgpt add -t kernel -l kernel -b 34 -s 32768 -S 1 -T 5 -P 10 ${DEV}
#查看GPT分区表情况
cgpt show ${DEV}
#创建数据分区(根分区),-s参数设置的是分区大小,该数值可以通过Sec GPT table的start减去32802计算得出
cgpt add -t data -l root -b 32802 -s 15523771 ${DEV}
blockdev --rereadpt ${DEV}
#格式化为EXT2分区
mkfs.ext2 ${DEV}2
mkdir -p ${MNT}
mount ${DEV}2 ${MNT}
#使用debootstrap脚本执行第一阶段
debootstrap --arch=armhf --foreign jessie ${MNT} http://http.debian.net/debian
umount ${MNT}
sync

通过以上操作,我们的microSD卡就有了两个分区,第一个16M的分区用于存放标准Chrome OS内核(接下来会要写入的),第二个分区就是Debian Jessie的root分区。

在Chromebook上完成最后的工作

现在把microSD卡(或U盘)插到Chromebook里,执行下面的操作(注意,这些操作是在Chromebook的shell里执行!)

DEV=/dev/mmcblk1
MNT=/mnt
umount ${DEV}p2
mount ${DEV}p2 ${MNT}
#第二阶段的debootstrap
chroot ${MNT} /debootstrap/debootstrap --second-stage
#设置根分区挂载参数
cat > ${MNT}/etc/fstab <<EOF
${DEV}p2 / ext2 errors=remount-ro 0 1
EOF
#设置基本的软件源
cat > ${MNT}/etc/apt/sources.list <<EOF
deb http://http.debian.net/debian jessie main non-free contrib
deb-src http://http.debian.net/debian jessie main non-free contrib
EOF
chroot ${MNT} apt-get update
#一些有用的软件包
chroot ${MNT} apt-get install -y cgpt vboot-utils vboot-kernel-utils
#无线管理
chroot ${MNT} apt-get install -y wicd-daemon wicd-cli wicd-curses console-setup
#更改主机名
echo asus-chromebook > ${MNT}/etc/hostname
#清除root密码
chroot ${MNT} passwd -d root
#制作microSD卡需要的内核
dd if=/dev/mmcblk0p2 of=${MNT}/boot/oldblob
cat > ${MNT}/boot/kernel.flags <<EOF
console=tty1 debug verbose printk.time=1 nosplash root=${DEV}p2 rootwait rw rootfstype=ext2 lsm.module_locking=0
EOF
vbutil_kernel --repack ${MNT}/boot/kernel.signed --keyblock /usr/share/vboot/devkeys/kernel.keyblock --version 1 --signprivate /usr/share/vboot/devkeys/kernel_data_key.vbprivk --config ${MNT}/boot/kernel.flags --oldblob ${MNT}/boot/oldblob
dd if=${MNT}/boot/kernel.signed of=${DEV}p1
#复制模块文件
mkdir -p ${MNT}/lib/modules
cp -r /lib/modules/* ${MNT}/lib/modules
mkdir -p ${MNT}/lib/firmware/
cp -r /lib/firmware/* ${MNT}/lib/firmware
umount ${MNT}
sync

好了,重启Chromebook,在开机屏幕的地方按下Ctrl + U从microSD卡(或U盘)启动,或者继续之前的Ctrl + D启动Chrome OS。如果microSD卡(U盘)制作不正确(分区表错误,或者内核本身有问题),此时按下Ctrl + U后会哔一声,Chromebook又闪回之前的界面,有时候出现这个情况再试一次就又好了(囧)。无论如何,这些操作都不影响Chrome OS,所以大不了按Ctrl + D启动回Chrome OS就好了。

不过很遗憾地是,我按照这样的操作无法让内核正确引导到Debian系统,之后我的解决办法是偷用Arch Linux ARM镜像里的内核……只是用他们预编译好的内核文件而已,系统还是Debian Jessie!

安装后的配置

为了避免玩崩好不容易制作好的基本系统,建议在桌面Linux上对整个microSD卡(或U盘)提前做个备份,如sudo dd if=/dev/sdb of=backup.img,这样之后任何地方玩坏了,都可以通过sudo dd if=backup.img of=/dev/sdb恢复回来。如果需要节约点硬盘空间的话,可以用xz对backup.img进行压缩。

电源管理

sudo apt-get install -y acpid laptop-mode-tools就基本OK了。

OpenGL ES

需要从Chrome OS那边把EGL库拷贝过来(不过好像EGL还是用不了)

cp -f /usr/lib/libmali* ${MNT}/usr/lib/
cp -f /usr/lib/libEGL* ${MNT}/usr/lib/
cp -f /usr/lib/libGLES* ${MNT}/usr/lib/

ALSA UCM

把Chrome OS的/usr/share/alsa/ucm文件夹和/usr/bin/alsaucm文件拷贝过来,之后还需要添加/usr/bin/alsaucm -c ROCKCHIP-I2S set _verb HiFi/etc/rc.local,这样就完成ALSA UCM的设置了。按照网上的说法,千万不要去玩ALSA mixer,否则可能会烧掉扬声器。

最后的话

既然买了Chromebook就老老实实用Chrome OS吧,目前的dual-boot实在是很丑陋,又不是买了台高配Pixel(如果买了Pixel我还是强烈推荐装Linux双系统,不然硬件配置放那里有点浪费)。microSD卡的I/O速度实在是太慢,加上显卡驱动并不完美,Linux在C201上的体验很糟糕,所以我又重新开启了启动验证把设备格回到非开发者模式的Chrome OS了。

这篇文章我七月份就写好了,之所以按着没发布是想着好好折腾一下弄完善Linux,只可惜事与愿违,太心累就没继续了。

参考文章: InstallingDebianOn/Asus C201    |    Asus Chromebook Flip C100P (ArchLinux ARM)

Published by

librehat

自由軟體萬歲!

4 thoughts on “在华硕Chromebook C201上安装Debian Jessie”

Comments are closed.