闲着无聊决定编译个Chromium OS玩玩。下面的编译过程基本上是照着官方的编译文档操作的。该地址已被伟大的墙隔离了,需要查看的同学请自备梯子。
我用的编译环境是Ubuntu 10.04 LTS 64bit。官方推荐Ubuntu的最低版本是8.04。即使是编译32位目标平台的版本,也要用64bit的linux进行交叉编译。
其它的要求包括一个root权限的用户、最好有20G的磁盘剩余空间,足够快的网络。如果需要在真机上引导,还需要一个U盘。
本文中列出的命令有些是凭记忆写的,一条条照着操作一遍不一定就能成功。如果提示权限不足请根据情况sudo或chmod 744 文件名。注意,请勿使用sudo -i,或者用root执行chroot下script中的脚本。
准备工作,首先升级软件包:
clowwindy@clowwindy-ubuntu:~$ sudo apt-get update
clowwindy@clowwindy-ubuntu:~$ sudo apt-get upgrade
安装以下软件包:
sudo apt-get install bison fakeroot flex g++ g++-multilib gperf \
libapache2-mod-php5 libasound2-dev libbz2-dev libcairo2-dev \
libdbus-glib-1-dev libgconf2-dev libgl1-mesa-dev libglu1-mesa-dev \
libglib2.0-dev libgtk2.0-dev libjpeg62-dev libnspr4-dev libnss3-dev \
libpam0g-dev libsqlite3-dev libxslt1-dev libxss-dev \
mesa-common-dev msttcorefonts patch perl pkg-config python \
python2.5-dev rpm subversion libcupsys2-dev libgnome-keyring-dev \
apache2 wdiff lighttpd php5-cgi sun-java6-fonts \
msttcorefonts ttf-dejavu-core ttf-kochi-gothic ttf-kochi-mincho \
ttf-indic-fonts
然后安装git和svn:
sudo apt-get install git-core subversion
然后下载depot_tools:
wget http://src.chromium.org/svn/trunk/tools/depot_tools.tar.gz
tar zxf depot_tools.tar.gz
mv depot_tools /opt/
然后为depot_tools设置PATH环境变量:
cd /opt
export PATH=`pwd`/depot_tools:"$PATH"
接下来获取Chromium OS的代码:
cd ~
mkdir chromiumos
cd chromiumos
gclient config http://src.chromium.org/git/chromiumos.git
gclient sync
这个过程比较慢长,可以去做别的事了。我这篇文章就是这个时候开始动笔的。
下载途中出错了一次,portage.git在90%左右的时候提示error: RPC failed; result=56, HTTP code = 200。我google了一下,没看到有人解决了这个问题,不知是bug,还是网络RP。于是重新运行gclient sync,结果从当前正在同步的git开始重新同步,又是漫长的等待……
这次没有遇到这个错误,终于下载完毕,总共下了3G左右流量,占地5.9G。
不要切断网络,因为后面的过程依然需要下载。
接下来构建chroot环境并进入它:
cd ~/chromiumos/chromiumos.git/src/scripts
./make_chroot
./enter_chroot.sh
我们现在已经在chroot环境下(这个环境的/实际上在chromiumos.git/chroot/),如果要退出chroot请按Ctrl+D。
接下来设置编译的目标平台。我选择的是x86-generic。如果是ARM平台这里是arm-generic。
cd ~/trunk/src/scripts
./setup_board --board=x86-generic
为了开发方便,添加一个本地用户:
sudo ./enable_localaccount.sh USERNAME
设置密码:
sudo ./set_shared_user_password.sh
开始编译:
./build_packages --board=x86-generic
接下来又是漫长的等待。77分钟后编译结束。
然后生成镜像:
./build_image --board=x86-generic
这里因为先前的权限没有处理好,导致了一个无法创建生成目录的error。sudo创建../build/目录然后设置为777权限后这个问题就解决了。
经过22分钟生成结束。
然后将镜像写入到u盘。注意,这里一定要先退出chroot环境再进行。
--from=是刚才生成的镜像所在目录,/dev/sdc是U盘设备。
./image_to_usb.sh --from=/home/clowwindy/chromiumos/chromiumos.git/src/build/images/x86-generic/0.7.47.2010_06_18_0549-a1/ --to=/dev/sdc
试着插到一台上网本上,成功引导,出现了登陆界面。我的无线网络没有开放SSID,这里无法设置,所以我插上网线选择以太网。用刚才的local帐号登录提示密码错误,于是用chronos和空密码登录,然后出现了浏览器。嗯,没有flash插件。应用标签页没有出现,取而代之的是传说中的web store。去google code查了下,有人反馈过这个bug,不过google貌似是故意的。当我点击web store的时候伟大的墙又一次立功了。暂时懒得弄ssh -D,这次先这样吧,以后再继续研究。
补充:
将镜像转换成vmware磁盘镜像的方法:
在chroot环境外,先安装依赖:
sudo apt-get install qemu
然后生成磁盘镜像:
./image_to_vmware.sh --from=../build/images/x86-generic/0.7.47.2010_06_18_0549-a1 --to=~/chromiumos.vmdk
镜像应该就能生成好了……理论上。可惜的是现在执行这个操作会发生mount: special device /dev/sda12 does not exist的错误。在google讨论组上有人讨论过这个问题。目前看来可能是google留下的一个bug。这个帖子中有人提出可以修改image_to_vmware.sh,在sudo "$TEMP_MNT"/postinst /dev/sda3这一行后面加个 --postcommit来忽略错误。修改之后重新生成,这次终于成功了。
最后上几张图:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?