网上有不少在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准备
- 首先保证系统已经是最新(stable即可)
- 开启开发者模式,同时按住刷新键、ESC、电源键,系统会自动重启,此时按Ctrl + D并确认开启。然后系统会重启,再按Ctrl + D跳过警告,此时系统会开始切换到开发者模式,该过程可能需要十分钟左右,并且会清除所有用户数据(请提前做好备份)。
- 重新启动好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)
4 responses to “在华硕Chromebook C201上安装Debian Jessie”
真麻烦。我直接用编程器把Bios刷成CoreBoot了。然后随便装。
刷BIOS是要直接弃掉Chrome OS么?
对linux桌面系统还是爱不起来,毕竟软件太少
比Chrome OS多太多……而且命令行软件一点也不少