简易编译Chromium OS内核教程

Chromium是「铬」的意思,所以本文标签我用了CrOS(Cr是化学元素铬缩写)。

转入正题,这次来讲一下怎样给Chromium OS编译内核,当然编译Chromium OS的时候会自动把内核编译上,不过出于很多原因,我们会要修改内核编译的配置文件(.config)。如果说Linux的内核编译让人很头痛,那Chromium OS的内核编译可以说让人头痛欲裂了。

首先得chroot进入编译Chromium OS的状态(看我上一篇关于编译Chromium OS的文章)。然后获取当前版本的内核源代码,慢慢等吧,要下载接近1G的代码(如果当初你下载的是完整代码而不是minimum layout的话,时间可能会节省很多)。

Continue reading 简易编译Chromium OS内核教程

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

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

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

自己编译ownCloud for Android

之前介绍过ownCloud私有云服务了,下面讲一下怎么自己编译它的Android客户端。之所以要自己编译,原因有两点:

  • ownCloud在Play Store上要收费的,0.99刀
  • ownCloud在Play Store上限制了区域,即使愿意出钱也不能下载

搭建一个Android SDK环境不要我说了吧?不会的自己找块Google这样的豆腐撞了……下面以Fedora 18 64位系统为例,讲一下我的过程。

Continue reading 自己编译ownCloud for Android

Slax中关于KDE程序编译脚本的注意事项

Slax是个非常优秀的Linux发行版,之前说过了,也介绍过制作Slax Bundle的buildscript书写。

但是我今天在编译rekonq的时候遇到了点麻烦,一直提示出错,跑到IRC上#rekonq频道询问,人家告诉我是少了ksgmltools2,确实少了。我发邮件告诉Tomas M(Slax作者),这位仁兄告诉我Slax是特意去除这个组件的,并告诉我要在buildscript里对CMakeLists.txt打一下“补丁”,让程序编译过程去除掉Documentation(文档),这么一来我的rekonq终于编译成功了!

去除文档的办法,是删掉CMakeLists.txt中的ADD_SUBDIRECTORY( doc ),当然我知道可以用文本编辑器去删掉,问题是您要写的是一个脚本在服务器上运行的,所以要用到一些简单的shell脚本来操作,相关行我贴在这里。

cd ${SLAX_BUNDLE_NAME}-${SLAX_BUNDLE_VERSION}

find | grep CMakeLists.txt | while read LINE; do
cat "$LINE" | fgrep -v "add_subdirectory( doc )" 
| fgrep -v "add_subdirectory(doc)" 
| fgrep -v "add_subdirectory (doc)" 
| fgrep -v "add_subdirectory ( doc )" 
| fgrep -v "ADD_SUBDIRECTORY( doc )" >aaa
mv aaa "$LINE"
done

另外一个需要注意的事情,就是对于cmake编译安装的软件,需要在cmake参数里加上 -DLIB_SUFFIX=”${SLAX_64_FLAG}” ,不然在64位系统中也会把libraries安装到/usr/lib而不是/usr/lib64,程序无法找到lib的情况。所以这点千万切记要加上这个参数。

2013/02/06补充:(根据Michal发给我的邮件正文,下面详细贴出buildscript软件编译部分的正确示例)

1) 当使用./configure时,

CFLAGS="${SLAX_CFLAGS}" CXXFLAGS="${SLAX_CFLAGS}" ./configure ${SLAX_CONFIGURE_OPTIONS}

2) 当使用cmake时(假定先执行了mkdir build && cd build了),

cmake -DCMAKE_C_FLAGS:STRING="${SLAX_CFLAGS}" 
 -DCMAKE_CXX_FLAGS:STRING="${SLAX_CFLAGS}" 
 -DCMAKE_INSTALL_PREFIX=/usr 
 -DINCLUDE_INSTALL_DIR=/usr/include 
 -DCMAKE_BUILD_TYPE=Release 
 -DLIB_SUFFIX=${SLAX_64_FLAG} 
 -DLIB_INSTALL_DIR="${SLAX_LIBDIR}" 
 ..

3) 当制作商业闭源软件的Bundle时,必须准备好32位和64位两份预编译包。

if [ "${SLAX_64_FLAG}" = "64" ]; then
 #将64位预编译文件安装到 ${SLAX_BUNDLE_TARGET}
 else
 # 将32位预编译文件安装到 ${SLAX_BUNDLE_TARGET}
 fi

如此才能确保服务器根据buildscript编译出来的Slax Bundle正确。

NetBSD编译安装Go和Node.js

现在Go和Node.js都在pkgsrc-wip项目里面,wip意思是work in progress,可以理解为开发进程中的软件包,稳定后才会被采纳进入官方维护的pkgsrc,现在好歹有wip就知足吧。嗯,写这篇文章的目的是希望能有更多人来研究BSD系统,作为Unix的较为正统的分支,BSD在很多方面还是值得Linux学习的,当然这两个流派风格是迥异的。摸索摸索几个月,以后就在自己的EC2上部署NetBSD了!

废话少说,直接上命令内容了。我安装了curl用来下载,你也可以用你自己喜欢的工具下载pkgsrc安装好。

curl http://ftp7.jp.netbsd.org/pub/pkgsrc/stable/pkgsrc-2012Q3.tar.xz > /PATH/pkgsrc.tar.xz

记得到时候自行修改pkgsrc-2012Q3,不可能指望今年年底还用去年第三季度的东西对吧。。。后面PATH表示路径,记得改成你相应的下载路径。下载很快的,前面讲过了,用的是最快的镜像点了,下载完成后就解压到系统里面,执行命令:

tar xvzf /PATH/pkgsrc.tar.xz -C /usr

等一会吧,解压出来好几百兆的文件呢,解压完毕后再来解压一个wip的source,先去pkgsrc-wip快照列表下载一个最新的下来(注意看一下文件尺寸,2013-01-03的那个文件只有400+KB是错误的文件,一般都是10M左右,不然下载下来也解不开),然后执行命令解压到系统:

cd /usr/pkgsrc
 tar xvzf /path/to/pkgsrc-wip-DATEHERE-snapshot.tar.gz

解压完成之后就可以开始编译Go和Node.js了,当然其它在wip中的软件也是这样编译安装!

cd /usr/pkgsrc/wip/go
 make install

上面的命令最后都是su切换到root账户下执行,免得提示没有权限。

可惜的是,pkgsrc-wip并没有把软件源代码也塞进去,所以make install其实会执行一大段复杂的过程,包括获取源代码、解决依赖关系神马的,结果服务器是自动用主站服务器,所以速度是龟速(10KB/s)……耐心等待哦。

至于Node.js的话,cd /usr/pkgsrc/wip/node && make install,其它软件的话自己去找找在哪个文件夹下cd进去然后make install就okay了!

编译CM10 for W22PRO的相关过程记录

先说一下git的操作好了,这个git其实我也是今年刚开始用,之前都是用svn的(subversion其实也不太会……说来这些版本控制工具我都记不住指令啊……)。

因为蓝魔W22PRO用的是Amlogic MX(meson6)方案,而Christiantroy已经专心耕耘艾诺精灵2很久了,他在github上的很多项目,只要有jellybean-aml分支的基本就是需要fetch拿来用的。不过有一点问题的就是,最近这位大哥在搞CM10.1去了,repo都没有更新上游(CyanogenMod)的改动,所以其它的部分如果用CyanogenMod的上游代码就会造成一些问题。还好有强大的git帮我们合并这些更改。

首先进入一些需要为Amlogic修改的目录(因为我已经做了这项工作了,减轻了各位的压力,大家直接fetch我的那些github项目就好了),git checkout jellybean-aml 确保在jellybean-aml这个分支里面,然后git remote -v看一下有没有上游CyanogenMod的repo,没有的话得先git remote add NAME git://XXXXXX 添加一个NAME远程仓库(这些全部大写的字母都是可以自行变动的),然后git fetch NAME把源码下载到本地,只需简单的一个git pull NAME jellybean就能把NAME仓库的jellybean分支合并到当前分支(jellybean-aml)了!如果有冲突的话会提示的,一般不会有冲突会自动merge并做一个ref节点,如果你没有自己开项目就这样好了。如果有的话(比如我),就需要git push MINE提交这次变动到自己的远程仓库(MINE)。再说一下啦,我已经做过这项工作了,短期内大家直接取我的项目源码就可以了。

上面讲了那么多git的废话……下面讲一下编译。

如果你还没有W22PRO的源码,请上我的非官方项目clone下来到合适的位置(如果你这不知道就不要看这篇文章了,谢谢……)

cd /PATH_TO_CM/
 . build/envsetup.sh
 lunch
 make -j4

老掉牙的几个步骤……lunch菜单选择cm_w22pro-userdebug那个就好了(输入数字回车),make -j4表示用四个线程并行编译。

在我的笔电上每次从头完整的编译要2~3个小时。我的硬件配置?AMD 四核 2.0GHz,4G RAM(显然有点小,为了避免内存消耗完毕而出错终止,强烈建议创建一个swap分区或者swap文件,大小至少1G,建议4G以上)。

还没有开始编译的记住了,放CM/Android源代码的那个分区建议40G以上,而且必须是EXT2/3/4或者BtrFS、XFS之类的Linux分区!

编译蓝魔W30的CM10之源码准备

大体参考CM的Wiki: http://wiki.cyanogenmod.org/wiki/Galaxy_Nexus_%28GSM%29:_Compile_CyanogenMod_9_%28Linux%29

提示一下就是repo这个脚本需要翻墙才能下载成功。

下面简单写一下终端操作的笔记:

#获取CM10的代码
repo init -u git://github.com/CyanogenMod/android.git -b jellybean
repo sync
#获取三星Galaxy S III的源码(因为W30的CPU和Galaxy S III是一样的,这里偷懒直接用CM的脚本获得相关源码)
. build/envsetup.sh && breakfast i9300
#获取CM的预编译文件
vendor/cm/get-prebuilts

好了,现在要做的就是这么多了。接下来就是对Galaxy S III的设备源码部分进行修改,使之匹配W30, 当然,要新开一个目录,等我初步完成后会在github上托管的,到时候还会回来更新本篇文章。 W30开源项目 (fork & play!)

还需要获取三星的部分专利源码,找了半天,终于在GitHub找到了一个项目有的,

git clone git://github.com/TheMuppets/proprietary_vendor_samsung.git -b jellybean

同步这个项目后,把里面的文件夹都放在vendor/samsung/下面,然后修改vendor/samsung/smdk4412-common/proprietary/Android.mk这个文件,把ifneq ($(filter i9300 n7100 n8000 n8013,$(TARGET_DEVICE)),)改成ifneq ($(filter i9300 n7100 n8000 n8013 w30,$(TARGET_DEVICE)),) ,也就是在filter后面加上w30,不然的话不能正确调用一些共享依赖库会编译出错。