自己编译Chrome OS的开源版Chromium OS

Chrome OS和Chromium OS的关系就是Chrome和Chromium的关系。Chrome OS现在慢慢发展起来了,不过个人觉得短期内还是没必要入一台Chromebook,特别在天朝这个网络环境下,扯远了啊……国外的Hexxeh有每天自动编译更新的Chromium OS镜像下载,但是很遗憾,在我的笔记本(全AMD平台)上从来没有正常地运行过。一般都是和ATI显卡之间的问题,后来变成和Broadcom网卡驱动的问题……总之,我觉得还是自己来编译一个适合自己电脑的Chromium OS会舒服一点。

本文仅作为我的编译过程笔记,请配合官方文档(链接在最下面)查看。

要求

  • Google账号(没有这个你也可以编译,但是会缺少Google API,如地图定位、页面翻译、拼写检查等)
  • 64位的Linux系统(理论上所有最新的发行版都可以,不过官方列举的是Ubuntu,我用的是Fedora)
  • Linux用户要具有sudo权限(加入wheels组)
  • 4G或者更多的运行内存(8G内存可以不开swap,4G内存必须有4G的swap)
  • 至少20GB空闲磁盘空间(而且必须是支持POSIX标准的,也就是说DOS分区格式的是绝对不可以的。推荐就用EXT3/EXT4/XFS/ZFS/JFS之类的吧),每次编译,都会生成一个2.4G的镜像,而且如果要编译内核(肯定需要的)就需要更多的空间我是留了30G(75G)空间的。
  • 一颗强劲的多核CPU(单核编译就慢慢等吧)
  • 连接速度不赖的网络(太小的水管下载源码会等死的)

然后系统必须安装好git、subversion、curl、depot_tools,同时对sudoer做一些改动(不然cros_sdk会出错)。

准备工作

先在Google网上论坛订阅Chromium-dev,然后获取Google API,不然会没有Google API的支持。

在终端里运行一次umask 022,然后下载源代码,我下载的是最小源代码。完整代码有12GB,不想下那么多。如果遇到404错误可以忽略不管它

cd /DIR_TO_KEEP_SRC/
repo init -u https://git.chromium.org/git/chromiumos/manifest.git -g minilayout --repo-url https://git.chromium.org/git/external/repo.git
repo sync

chroot的准备工作。我发现我运行之后总是提示uid is not 0之类的sudo错误,Google了一圈,在这里找到正解了,mount指令看看磁盘挂载参数有没有nosuid,如果有的话要remount,因为nosuid参数会导致setuid的错误。如果遇到socket.herror错误可以忽略不管

./chromite/bin/cros_sdk

如果一切正常的话会进入chroot模式,大概终端会变成这样:

(cros-chroot) johnnyrotten@flyingkite ~/trunk/src/scripts $ 

开始编译

可以先进入src/overlays/overlay-amd64-generic目录,修改make.conf,毕竟generic和我们的硬件差别还是蛮大的。我修改后的结果如下,

CHROMEOS_KERNEL_SPLITCONFIG="chromiumos-x86_64"
CHROMEOS_KERNEL_ARCH="x86_64"
MARCH_TUNE="-march=amdfam10 -mtune=amdfam10"
CFLAGS="${CFLAGS} ${MARCH_TUNE}"
CXXFLAGS="${CXXFLAGS} ${MARCH_TUNE}"
USE="${USE} mmx sse sse2 sse3 sse4a"#不确定sse3、sse4a是否有效
VIDEO_CARDS="${VIDEO_CARDS} radeon"
source prebuilt.conf

关于添加chrome_media的USE参数,请看这里。请注意,以下的命令都是在chroot中输入的,不是在宿主的终端中输入。

./setup_board --board=amd64-generic --default
./set_shared_user_password.sh
export USE="chrome_media" #编译支持更多解码器
./build_packages --nowithdebug

注:如果你执行了第三条export USE=”chrome_media”的话,那你的硬盘就得有足够的空间(反正我35G是提示没空间了,重新划了75G来折腾)容纳Chromium的代码了,不然会出错的,而且耗费的时间也会大大增加,留一个晚上来编译吧……chrome_pdf会导致编译出错,请勿使用chrome_pdf这个USE参数

请一条一条执行,第二条指令会要求输入chronos的用户密码,最后那个–nowithdebug可以去掉Chromium OS登陆界面的DEBUG水印(当然也关闭DEBUG功能了)。系统将会开始编译,初次编译预计需要一个半小时(四核CPU,不加chrome_media和chrome_pdf的USE参数,下同),同时下载1.7GB的源码和1.3GB的预编译文件。

编译packages完成后,下一步是编译镜像(就是像Hexxeh发布的那些东西一样)。如果要修改内核,建议先改完内核再制作镜像。

./build_image --noenable_rootfs_verification dev

dev参数表示开发者模式,会安装开发者用的软件包。也可以把dev改成base,这样就是和标准Chrome OS类似的只包含基本的软件包。–noenable_rootfs_verification的作用是不对镜像进行检查,好处是能够快速开发,挂载镜像修改里面的文件之后可以直接拿去使用,否则就不能直接修改生成的镜像(更安全一点)。

把镜像灌到U盘

./image_to_usb.sh --from=../build/images/amd64-generic/latest/chromiumos_test_image.bin --to=/dev/sdc

/dev/sdc换成你的U盘(不要挂载),记住是/dev/sdc到设备,而不是/dev/sdc1到分区。这会把U盘原来的数据全部擦除,同时格式化为GPT分区表,同时把刚刚编译的镜像刷入(–from参数要指定到bin文件)。理论上不用–from参数会自动用最新的镜像去刷写,但是我这里不加–from指定的话会出错告诉我没找到镜像。

U盘大小必须在4G以上,不然放不下去。

灌好后,重启电脑从U盘启动,看看能否进入Chromium OS啦!这里还要吐槽一下syslinux的启动文件写得真心渣,居然指定root是/dev/sdb3,还得我在插上移动硬盘和U盘的情况下出现Kernal Panic,Unable to mount root….的错误(改成/dev/sdc3也不行……),还以为我内核搞出问题了。拔掉移动硬盘,只插上U盘才能正确进入Chromium OS!

如果你完整按照本文操作的话,我可以比较负责的告诉你,应该没有几台电脑可以完美进入并体验,特别是显卡需要Hack & Hack ……Nvidia显卡的在讨论区有结果了,但是ATI的还没有一份完整的教程(其实就通过重新编译内核勾上A卡驱动就可以的,我已经试验成功了,等会儿放个截图在下面,手贱又折腾了结果启动不了了……图已经放上来了),还有就是网卡驱动、无线网卡驱动等,不重新编译内核根本用不了。。。

Screenshot 2013-04-23 at 01.53.36

参考文章:Chromium OS官方文档

Comments

11 responses to “自己编译Chrome OS的开源版Chromium OS”

  1. wangpp avatar
    wangpp

    请问如何下载完整的chromium os代码,就是包含C/C++程序的代码,谢谢。

  2. Sammy Chen avatar
    Sammy Chen

    如果我想让服务器自动编译新版然后推送过来,像hexxeh一样,能做到吗?

    1. librehat avatar

      可以的,hexxeh博客上好像有提过,不过很麻烦就是了,源代码需要heavily modified.

      1. Sammy Chen avatar
        Sammy Chen

        似乎在他博客找不到了

        1. librehat avatar

          唔……我也不懂这个呢。>.<

          1. Sammy Chen avatar
            Sammy Chen

            还有它的内核能更新吗?

          2. librehat avatar

            内核当然可以更新,你把源码sync下来翻翻就知道了

          3. Sammy Chen avatar
            Sammy Chen

            具体怎么更新内核,在这一块不懂,望指教。

          4. Sammy Chen avatar
            Sammy Chen

            那怎样才能使用最新的内核呢,现在一直用3.4版的。

          5. librehat avatar

            Google Chrome OS的内核的正式版本更新速度比较慢的,开发版应该有新的了。我最近不玩CrOS了,有问题还是建议直接去Google讨论组