由于ChromiumOS系统的编译需要使用非Root用户进行,故这里新增一个用户cos以用于ChromiumOS系统的开发工作:
adduser cos
这里需要注意的是用户名chronos
是预留给编译系统使用的,这里增加的用于编译的用户名不能为chronos
。
工具安装
在进行源码下载之前首先需要进行工具的安装:
aptitude install git-core gitk git-gui subversion curl lvm2 thin-provisioning-tools python-pkg-resources python-virtualenv
下载depot_tools并加入系统路径:
cd ~
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
export PATH=`pwd`/depot_tools:"$PATH"
权限准备
将增加的用户cos
加入到文件/etc/sudoers
中:
cos ALL=(ALL:ALL) ALL
再执行如下代码:
cd /tmp
cat > ./sudo_editor <<EOF
#!/bin/sh
echo Defaults \!tty_tickets > \$1 # Entering your password in one shell affects all shells
echo Defaults timestamp_timeout=180 >> \$1 # Time between re-requesting your password, in minutes
EOF
chmod +x ./sudo_editor
sudo EDITOR=./sudo_editor visudo -f /etc/sudoers.d/relax_requirements
代码下载
创建工作目录并进入:
mkdir ~/workspaces
cd ~/workspaces
下载代码:
mkdir chromiumos
cd chromiumos
repo init -u https://chromium.googlesource.com/chromiumos/manifest.git
repo sync
如果是要使用指定版本的代码,则最好创建一个新的工作目录,再进行代码同步:
mkdir release-R59-9460.B
cd release-R59-9460.B
repo init -u https://chromium.googlesource.com/chromiumos/manifest.git -b release-R59-9460.B --reference /home/cos/workspaces/chromiumos
repo sync
编译代码
Chroot环境创建
进入到源码目录执行如下命令进入到chroot环境:
cros_sdk
- 这里会在当前目录下创建一个名为
.cache
的目录来保存用于构建chroot环境的包,其中最大的一个包位于目录.cache/sdks
下,名称形式类似于cros-sdk-2017.04.12.210012.tar.xz
,大小接近2G,如果有多个环境开发的话,可以拷贝该文件到新的工作环境中以节省下载时间。
系统编译
此时所执行的代码都在Chroot环境下,首先选取主板类型并初始化主板设定:
export BOARD=quawks
./setup_board --board=${BOARD}
然后设定系统的超级用户密码:
./set_shared_user_password.sh
- 超级用户的密码是写入到文件
/etc/shared_user_passwd.txt
。
再接下来进行系统编译,这里实际上是使用gentoo中的ebuild来进行包的下载和编译:
./build_packages --board=${BOARD}
最后就是将编译好的系统进行打包:
./build_image --board=${BOARD} --noenable_rootfs_verification test
- 需要注意的是,当编译为
test
版本时,先前所设定的系统超级用户密码则变为无效,而被统一改为test0000
。
系统烧录
接下来就是将系统刷入到U盘中进行安装:
cros flash usb:// ${BOARD}/latest
系统安装
启动进入U盘系统,然后在Shell环境下执行如下命令进行系统安装:
/usr/sbin/chromeos-install
- 对于不同的系统有不同的进入U盘启动环境的方法,具体可以参考页面developer-information-for-chrome-os-devices。
- 对于这里使用的Asus C300来说,进入的方法为按住
Esc
+Refresh
+Power
三个键。重启后Ctrl+D
进入到硬盘启动,再输入sudo crossystem dev_boot_usb=1
以打开从U盘启动的选项。
更多选择
当进入Chroot环境进行编译时,会使用ebuild编译Chromium浏览器项目,这又是一个几十G的下载量,所以最好的方式自然是能够重用下载好的Chromium项目。这里有如下几个需要注意的点:
- 将Chromium浏览器项目放置在目录
~/cos/chromium
; - 修改ChromiumOS项目下的配置文件
src/third_party/chromiumos-overlay/chromeos-base/chromeos-chrome/chromeos-chrome-9999.ebuild
,去除其中的+runhooks
,因为在编译ChromiumOS时,如果执行到runhooks,又会去下载和编译工具链; - 在工作目录中执行
cros_sdk --chrome_root=/home/cos/chromium
,以进入Chroot环境; - 在选定好主板类型后,执行
cros_workon --board=${BOARD} start chromeos-chrome
,以确保使用自定义的ebuild文件,这通常就是编号为9999的ebuild文件,最终执行结果为将数据=chromeos-base/chromeos-chrome-9999
写入到文件.config/cros_workon/quawks
中; - 在Chroot环境中,还需要执行
export CHROME_ORIGIN=LOCAL_SOURCE
以使用本地项目进行编译;
最终对Chromium项目的修改,都会被编译进ChromiumOS系统,其他的步骤与原版无二致。