เกริ่นนำ
วิธีต่อไปนี้เป็นเพียงแนวทางในการคอมไพล์เท่านั้น จะสำเร็จหรือไม่ขึ้นอยู่กับหลายปัจจัย เช่น Source vendor/device ของโทรศัพท์ที่มีความเขากันไดดีกับ ICS 4.0 รวมทั้งคอมพิวเตอร์ที่มีสเปคเพียงพอ จึงอยากให้ตรงนี้เป็นที่ปรึกษาหารือเมื่อมีปัญหาและทางแก้ก็เอาแบ่งปันกันครับ
เตรียมเครื่องมือ
ผมใช้ Ubuntu 11.05 UPE (http://www.playoss.com/community_project) (แนะนำ Ubuntu 10.04 64bit)
คอมพิวเตอร์ที่ใช้ : Core2duo 2.5GHz RAM1G ใช้เวลา 5 ชม. 30 นาที (บางครั้งก็หยุดดื้อ ๆ เพราะแรมน้อยเกินไป แนะนำ RAM 1.5 G ขึ้นไป)
สำหรับมือใหม่ Linux/Ubuntu อยากลองคอมไพล์
– Linux/Ubuntu คืออะไร http://playoss.com/node/20
– แนะนำ Ubuntu ที่พร้อมใช้งาน http://www.playoss.com/community_project
– วิธีเขียนแผ่น Ubuntu 10.10 (บนระบบปฏิบัติการ Windows และ Ubuntu) http://playoss.com/node/51
– วิธีติดตั้ง Ubuntu http://playoss.com/node/41
ถ้าพร้อมแล้วมาเริ่มกันเลย
ติดตั้ง Build Packages
1. ติดตั้ง Java 6 jdk (ถ้ามีแล้วก็ข้ามไป)
$ sudo apt-get install sun-java6-jdk
สำหรับ Ubuntu 11.10
$ sudo add-apt-repository ppa:ferramroberto/java
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk
2. ติดตั้ง Build package
สำหรับ 32 bit
$ sudo apt-get install git-core gnupg flex bison gperf build-essential
zip curl zlib1g-dev libc6-dev libncurses5-dev x11proto-core-dev
libx11-dev libreadline6-dev libgl1-mesa-dev tofrodos python-markdown
libxml2-utils
สำหรับ 64 bit
$ sudo apt-get install git-core gnupg flex bison gperf build-essential
zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs
x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev
libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown
libxml2-utils
หากใช้ Ubuntu 11.10 ให้พิมพ์คำสั่งนี้เพิ่ม
$ sudo ln -s /usr/lib/i386-linux-gnu/libX11.so.6 /usr/lib/i386-linux-gnu/libX11.so
3. ตั้งค่า USB Debug (ถ้าตั้งค่าไว้แล้วก็ข้ามไปข้อ 4)
3.1 โหลด Android SDK
$ wget http://dl.dropbox.com/u/3773430/android-sdk_r15-linux.tgz ~/
$ tar xvfz android-sdk_r15-linux.tgz
$ PATH=~/android-sdk-linux/tools:$PATH
3.2 ตั้งค่า USB Vendor ID
$ sudo gedit /etc/udev/rules.d/51-android.rules
คัดลอกบรรทัดข้างล่างไปวาง แล้วเพิ่ม USB Vendor ID โทรศัพท์ของท่านลงไปตรง xxxx
SUBSYSTEM==”usb”, SYSFS{idVendor}==”xxxx”, MODE=”0666″
USB Vendor IDs http://developer.android.com/guide/developing/device.html#VendorIds
เซฟ/ปิดไฟล์ แล้วพิมพ์
$ sudo chmod a+r /etc/udev/rules.d/51-android.rules
$ sudo restart udev
4. ติดตั้ง repo
$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
5. ดาวน์โหลดซอร์สโค๊ด
$ mkdir ~/android4.0
$ cd ~/android4.0
$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
ตอนนี้มันจะถามชื่อและอีเมล กรอกลงไปแล้วกดเอนเตอร์
ตามด้วยคำสั่ง
$ repo sync
** ไฟล์จะมีขนาดใหญ่ประมาณ 6 GB ควรมีพื้นที่ /Home ประมาณ 25 GB ขึ้นไป
6. เพิ่ม vendor/device (เพิ่มรุ่นโทรศัพท์ที่ต้องการคอมไพล์)
โทรศัพท์ที่สามารถเพิมลงไปจะต้องมีซอร์สโค๊ด vendor/device สามารถไปหาได้ที่ https://github.com/CyanogenMod/ (หรือค้นจาก Google) มองหาชื่อรุ่นที่มี เช่น ผมใช้ A88 ก็จะได้เป็น android_device_commtiva_z71 หรือใครใช้ Samsung S2 ก็มองหา android_device_samsung_galaxys2 เป็นต้น
เมื่อได้มาแล้วก็ git clone มาไว้ที่ ~/android4.0/device ด้วยคำสั่ง (ตัวอย่างเป็น commtiva/z71 ถ้าใช้รุ่นอื่นก็เปลี่ยนในคำสั่งจาก commtiva/z71 เป็น ยี่ห้อ/รุ่น ที่ท่านใช้)
$ cd ~/android4.0/device
$ git clone git://github.com/CyanogenMod/android_device_commtiva_z71.git commtiva/z71
7. เสียบสาย USB เข้ากับคอมพิวเตอร์พร้อมเปิดโหมด USB Debug ที่โทรศัพท์
(ตัวอย่างเป้น commtiva/z71 ถ้าใช้รุ่นอื่นก้เปลี่ยนในคำสั่ง)
$ cd ~/android4.0/device/commtiva/z71
$ ./extract-files.sh
เป็นการคัดลอก proprietary file จากโทรศัพท์มาไว้ที่ซอร์สโค๊ด
8. คอมไพล์
8.1 สำหรับ ARMv6 (เท่านั้น) ต้องเพิ่ม Board ARMv6 ลงไป เพราะใน Google Source ไม่มีให้
$ curl http://dl.dropbox.com/u/3773430/armv6-vfp.mk > ~/android4.0/build/core/combo/arch/arm/armv6-vfp.mk
$ curl http://dl.dropbox.com/u/3773430/armv6j.mk > ~/android4.0/build/core/combo/arch/arm/armv6j.mk
เป็นการพอร์ตซอร์สจาก CyanogenMod มาใช้ ก่อนทำตามข้อ 8.2
8.2 ลงมือคอมไพล์
$ . build/envsetup.sh
ตามด้วยคำสั่ง
$ lunch
จะมีรายการแสดงขึ้นมา ให้เลือกรุ่นที่ต้องการบิลด์
$ full_z71-eng
หรือพิมพ์หมายเลข
ตามด้วยคำสั่ง make
$ make -j`grep ‘processor’ /proc/cpuinfo | wc -l`
หลังจากนี้หากมีแจ้งข้อผิดพลาดอะไรค่อยเอามาโพสต์แบ่งปันเพื่อหาวิธีแก้ร่วมกัน
ขอขอบคุณ
Google : http://source.android.com/source/downloading.html
CyanogenMod : https://github.com/CyanogenMod/
ติดตรงไหนโพสต์ถามได้ครับ ผมเขียนจากความเข้าใจ
ขอถามนอกเรื่องครับ … เครื่อง A88 (comtiva Z71) ตอน Up ROM 2.3.4 AOSP reset สัญญาณโทรหายไป ( โหมดเครื่องบินล้อคค้าง) น่าจะมาจากสาเหตุไหนครับ มีวิธีแก้ไม๊ครับ … ถ้ายัด ICS 4.0 ตามแนวทางข้างบนจะ clear ปัญหานี้ได้หรือไม่ครับ ( มีเครื่องใหม่แล้ว ตอนนี้ใช้เป็นเครื่องทดลองครับ)
เรื่องอัพรอมแล้วสัญญาณหาย ผมไม่ทราบจริง ๆครับ ว่าเพราะสาเหตอะไร
ส่วน ICS 4.0 บน a88 ยังเป็นวุ้นอยู่ครับ บิลด์แล้วเจอเออเร่อเรื่อย ๆ แก้ได้บ้าง ไม่ได้บ้าง เลยมาหาพวกที่นี่แหละครับ
ปัญหาหลัก ๆ ที่เจอคือบาง Source จาก Cyanogen ใช้ C ส่วน Google ใช้ C++ กำลังแก้ไปเรื่อย ๆ
แก้เสร็จ CM9 ไนท์ลี่ย์ 1 ออกพอดี 55+
ขอบคุณครับ ไม่เป็นไรเด๋วลองไปเรื่อยๆครับ ฟ้ืนคืนชีพเมื่อไหร่ จะมาเป็นหนูทดลองเบอร์ แรกๆให้เลยครับ
ไว้เคลียร์ Harddisk แล้วจะลองทำดูนะครับ T.T
แรม 1 GB ไปไม่รอด เจอ killed บ่อยมาก ผมคงต้องไปหาแรมมาเพิ่ม
ตอนบิลด์ x86 ผ่านได้ไงหว่า..
บิลด์ 4.0 ต้องเป็นเครื่อง x64 รึเปล่าครับ เพราะตอน 2.3 ต้องเป็น x64 ถึงจะบิลด์ได้ ตอนนั้นเคยลองพยายามหลายที มีแต่เครื่อง x86 มันไม่ยอมให้บิลด์เลย
ทั้ง ICS4.0 และ GB2.3 CM7 ผมใช้ 32bit ไม่มีปัญหานะครับ
ถ้า ICS 4.0 อาจจะต้องดาวน์เกรด gcc มาเป็น 4.4 เพราะ 4.5, 4.6 มีปัญหาต้องแก้เยอะ..
ขอบคุณมากครับ เดี๋ยวต้องลองอีกทีซะแล้ว
เคย compile kernel สำเร็จ ว่างๆ จะลองทำบ้างครับ
A99 คือตัวนี้ครับ https://github.com/edowar/android_device_fb0
คนพัฒนาเขาปล่อยซอร์สไว้ เป็นซอร์สสำหรับรอม ics
นี่เป้นฟอรั่มที่เขาปล่อยให้ลอง http://forum.xda-developers.com/showthread.php?t=1434219
แจ่ม รอเคลียงานเสร็จต้องลองซักที