ubuntu 12.04 64位環境下編譯cm 10.1 for mako

轉載請聲明出處。

http://www.cnblogs.com/csonezp/archive/2013/03/21/2974071.html

無圖無排版,基本純文字。

首先提供我這次編譯過程的參考來源:

1,android官方指南:http://source.android.com/source/index.html

2,cm 官方wiki:http://wiki.cyanogenmod.org/w/Mako_Info

這兩個鏈接裏基本包含了所有編譯的內容了。英語好以及有一定基礎的可以去看看。

好了,開始正文。

 

一,初始化編譯環境。

1,配置java環境。

  android官方要求jdk6或者7,cm上要求是openjdk。

  jdk6,android官方指南上說在終端輸入以下命令:

  

$ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk

但我實驗後無效果。於是去sun上自己下載的jdk64位包。具體過程不細表。

  openjdk:

sudo apt-get install openjdk-6-jdk

 

裝完後 java 和javadoc命令都可以找到即表示jdk安裝成功。(javadoc這個是openjdk纔有,但是編譯的時候又好像需要這個命令,所以我openjdk,jdk6都裝了)

 

二,配置android sdk開發環境。

現在這個簡單了,直接去http://developer.android.com/下載一個sdk就行了。其實這一步應該是非必須的,你只要有一個adb就行了。

 

三,安裝依賴。

結合android官方指南和cmwiki,安裝依賴如下:

複製代碼
$ sudo apt-get install git gnupg flex bison gperf build-essential \
  zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
  libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
  libgl1-mesa-dev g++-multilib mingw32 tofrodos \
  python-markdown libxml2-utils xsltproc zlib1g-dev:i386
$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
$ sudo apt-get install git-core gnupg flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.8-dev squashfs-tools build-essential zip curl 
libncurses5-dev zlib1g-dev openjdk-6-jre openjdk-6-jdk pngcrush schedtool libxml2 xsltproc
$ sudo apt-get install g++-multilib lib32z1-dev lib32ncurses5-dev lib32readline-gplv2-dev gcc-multilib g++-4.5-multilib
複製代碼

四,配置usb使用權

這一步是爲了ubuntu能識別通過usb連接的手機。

sudo gedit /etc/udev/rules.d/51-android.rules

然後將下面內容複製到上一句打開的命令中,將所有username換成你自己的用戶名。這是google官方提供的nexus系列的方法,通用方法請自行百度“ubuntu連接手機”

複製代碼
# adb protocol on passion (Nexus One)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e12", MODE="0600", OWNER="<username>"
# fastboot protocol on passion (Nexus One)
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fff", MODE="0600", OWNER="<username>"
# adb protocol on crespo/crespo4g (Nexus S)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e22", MODE="0600", OWNER="<username>"
# fastboot protocol on crespo/crespo4g (Nexus S)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e20", MODE="0600", OWNER="<username>"
# adb protocol on stingray/wingray (Xoom)
SUBSYSTEM=="usb", ATTR{idVendor}=="22b8", ATTR{idProduct}=="70a9", MODE="0600", OWNER="<username>"
# fastboot protocol on stingray/wingray (Xoom)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="708c", MODE="0600", OWNER="<username>"
# adb protocol on maguro/toro (Galaxy Nexus)
SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0600", OWNER="<username>"
# fastboot protocol on maguro/toro (Galaxy Nexus)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e30", MODE="0600", OWNER="<username>"
# adb protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d101", MODE="0600", OWNER="<username>"
# fastboot protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d022", MODE="0600", OWNER="<username>"
# usbboot protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d00f", MODE="0600", OWNER="<username>"
# usbboot protocol on panda (PandaBoard ES)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d010", MODE="0600", OWNER="<username>"
# adb protocol on grouper/tilapia (Nexus 7)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e42", MODE="0600", OWNER="<username>"
# fastboot protocol on grouper/tilapia (Nexus 7)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e40", MODE="0600", OWNER="<username>"
# adb protocol on manta (Nexus 10)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee2", MODE="0600", OWNER="<username>"
# fastboot protocol on manta (Nexus 10)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee0", MODE="0600", OWNER="<username>"
複製代碼

五,開始同步源碼

首先要下載repo,這個是google提供的同步工具。

 

$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

這樣就把repo下載到本地了。接下來初始化repo,爲下載做準備。

mkdir WORK_SPACE   #WORKSPACE是自定的名稱,可以隨便取
cd WORK_SPACE        #移到WORK_SPACE

repo init -u git://github.com/CyanogenMod/android.git -b cm-10.1     #-b後面的 cm-10.1就是cm 4.2.2的分支,可以自己換
repo sync        #這個就是開始同步的命令。cm10.1全部同步有9G多

等待同步完畢。

六,編譯之前的準備(如無cd命令,則操作均在WORK_SPACE下進行)。

源碼同步完以後,是不能直接編譯出nexus4可用的刷機包的,因爲cm的源碼裏沒有關於具體設備的信息,具體說來就是device文件,kernel文件,vendor文件。其中device,kernel都可以在cm的github中找到,地址(我給的都是nexus4的):

device:http://www.github.com/cyanogenmod/android_device_lge_mako

kernel:http://www.github.com/cyanogenmod/lge-kernel-mako

device解壓到device/lge中,將解壓的文件夾重命名爲mako。kernel解壓到kernel/lge中,重命名爲mako。

還卻一個vendor,如果你手頭有機器,則可將手機連接電腦,然後進行如下操作:

用文本編輯器打開device/lge/mako/extract-files.sh,內容如下:

#!/bin/sh

VENDOR=lge
DEVICE=mako

BASE=http://www.cnblogs.com/../vendor/$VENDOR/$DEVICE/proprietary
rm -rf $BASE/*

for FILE in `cat proprietary-blobs.txt | grep -v ^# | grep -v ^$ | sed -e 's#^/system/##g'`; do
DIR=`dirname $FILE`
if [ ! -d $BASE/$DIR ]; then
mkdir -p $BASE/$DIR
fi
adb pull /system/$FILE $BASE/$FILE
done

./setup-makefiles.sh

 

注意紅色的adb,要換成你自己的android sdk中adb的位置。

然後執行這個文件

cd device/lge/mako

./extract-files.sh

cd WORK_SPACE

執行完畢後打開vendor,就會看到多了個lge文件夾,裏面有mako文件夾。

 

好了,準備工作完成,要開始編譯了。

七,開始編譯。

進入work_space,

source build/envsetup.sh
breakfast mako    #mako是設備代號,可以替換成其他的

等待編譯完成,將會在out/target/product/mako裏生成一個cm-10.1-20130321-UNOFFICIAL-mako.zip文件

結束

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章