移植並定製本身的Android

主要分享在Devkit8500板子上移植並定製本身的Androidhtml

首先,入手這個板子的時候,能夠看看Devkit8500的配件包,它自帶了一些額外的數據線或者小設備,其中最最要的是找到裏面的DVD光盤,裏面有好多東西對移植是很是重要的,包括各類須要使用到的編譯工具和Linux kernel、Android源碼!!linux

全部方法和教程其實都是參考其自帶的Devkit8500用戶手冊android

步驟:一、拷貝DVD中的編譯工具和源碼:shell

<!-- lang: shell -->
linux-2.6.32-devkit8500.tar.bz2            // Linux-2.6.32的內核
rowboat-android-froyo-devkit8500.tar.bz2    //Android2.2的源碼
/linux/demo/Android/image 下的全部文件        //已經提供好的,編譯好的Android2.2的相關文件
/media/cdrom/linux/tools            //  全部用到的工具
以及裏面的用戶手冊,你直接拷貝中文的,用戶手冊分爲2分,一份是簡單的,另外一分是詳細的,你把兩份都拷下來。

在尚未開始編譯本身的Android系統以前,咱們能夠現將上面拷貝的/linux/demo/Android/image 下的全部文件複製到TF卡上,並根據您所使用的顯示設備 LCD(4.3",7"),重命名 uImage_xx 爲 uImage。(裏面會有兩個uImage文件,分別是4.3和7寸的顯示屏的,根據本身的設備修改uImage的名稱),而後將TF卡插到板子上,上電,等到因此文件都拷貝到板子的ROM上後,重啓就能夠看到Android系統了,具體參考用戶手冊!!ubuntu

二、安裝編譯環境。bash

在ubuntu的$HOME目錄下新建目錄:tools,並將/media/cdrom/linux/tools中的工具解壓,並拷貝到該目錄,而後配置環境變量。若是用終端命令操做,示例以下:svn

<!-- lang: shell -->
cd /media/cdrom/linux/tools
tar xvf arm-eabi-4.4.0.tar.bz2 -C $HOME
tar xvf arm-2007q3.tar.bz2 -C $HOME

mkdir $HOME/tools

cp /media/cdrom/linux/tools/mkimage $HOME/tools
cp /media/cdrom/linux/tools/signGP $HOME/tools
cp /media/cdrom/linux/tools/mkfs.ubifs $HOME/tools
cp /media/cdrom/linux/tools/ubinize $HOME/tools
cp /media/cdrom/linux/tools/ubinize.cfg $HOME/tools

export PATH=$HOME/arm-eabi-4.4.0/bin:$HOME/tools:$PATH

你也能夠將環境變量寫進~/.bashrc文件,這樣也比較方便,不知每回開機就要從新設置環境變量。工具

三、開始進行編譯,並定製本身的Android系統網站

針對不一樣的目的要求能夠定製不一樣的Android系統,個人主要目的是:要在本身定製的Android操做系統中移植安裝Systemtap工具。對於移植安裝Systemtap工具,我會在後面的博客分享給你們ui

分爲2步:一、編譯linux內核,二、在linux內核的基礎上編譯Android源碼

首先,個人Android源碼和Linux內核源碼都放在Home目錄下 在此輸入圖片描述

一、編譯linux內核:linux-2.6.32-devkit8500 爲了可以安裝上systemtap,要對內核進行一些修改:進入到arch/arm/include/asm/ptrace.h,修改以下,在下面幾行後面

<!-- lang: shell -->
#define isa_mode(regs) \
	((((regs)->ARM_cpsr & PSR_J_BIT) >> 23) | \
	 (((regs)->ARM_cpsr & PSR_T_BIT) >> 5))

#define processor_mode(regs) \
	((regs)->ARM_cpsr & MODE_MASK)

#define interrupts_enabled(regs) \
	(!((regs)->ARM_cpsr & PSR_I_BIT))

#define fast_interrupts_enabled(regs) \
	(!((regs)->ARM_cpsr & PSR_F_BIT))

添加:

<!-- lang: shell -->
#define condition_codes(regs) \
((regs)->ARM_cpsr &(PSR_V_BIT|PSR_C_BIT|PSR_Z_BIT|PSR_N_BIT))

最後變成:

<!-- lang: shell -->
#define isa_mode(regs) \
	((((regs)->ARM_cpsr & PSR_J_BIT) >> 23) | \
	 (((regs)->ARM_cpsr & PSR_T_BIT) >> 5))

#define processor_mode(regs) \
	((regs)->ARM_cpsr & MODE_MASK)

#define interrupts_enabled(regs) \
	(!((regs)->ARM_cpsr & PSR_I_BIT))

#define fast_interrupts_enabled(regs) \
	(!((regs)->ARM_cpsr & PSR_F_BIT))


#define condition_codes(regs) \
	((regs)->ARM_cpsr &(PSR_V_BIT|PSR_C_BIT|PSR_Z_BIT|PSR_N_BIT))


/* Are the current registers suitable for user mode?
 * (used to maintain security in signal handlers)
 */

而後開始編譯:

<!-- lang: shell -->
cd linux-2.6.32-devkit8500
make distclean
make omap3_devkit8500_android_defconfig
make menuconfig

在圖形界面中開啓以下選項,這些是systematp必須須要的開關:

<!-- lang: shell -->
CONFIG_KPROBES: General Setup -> Kprobes

CONFIG_RELAY: General Setup -> user spacerelay support

CONFIG_PROFILING: General Setup -> Profilingsupport (EXPERIMENTAL) + General Setup -> Oprofile system profiling(EXPERIMENTAL)

另外還有一個開關要打開,這主要是爲了符合你板子屏幕大小,打開屏幕大小選項: 在此輸入圖片描述 在此輸入圖片描述

個人屏幕是4.3的,因此選擇4.3

最後執行:

<!-- lang: shell -->
make uImage

執行完以上操做後,arch/arm/boot 目錄下會生成咱們須要的 uImage 文件。

二、編譯Android源碼,生成ubi.img UBI是一種文件系統,主要用於智能手機中。廠商提供的源碼仍是有點問題,有些地方須要改動,就是這麼點問題搞了很久,google也沒結果!

以下圖,進入到/OMAP35x_Android_Graphics_SDK_3_01_00_03目錄下 在此輸入圖片描述

首先修改Rules.make文件兩處,一是HOME變量路徑,二是KERNEL_INSTALL_DIR,我將原來的註釋了,而後加上了修改後的路徑:

<!-- lang: shell -->
#set home area HOME (relative location for all SDK operations)
#HOME=/home/android/rowboat-android-froyo-devkit8500
HOME=/home/ubuntu/rowboat-android-froyo-devkit8500

#set the kernel installation path
#KERNEL_INSTALL_DIR=/home/luofc/work/svn/AM37x_EVM/kernel/linux-2.6.32-android
KERNEL_INSTALL_DIR=/home/ubuntu/linux-2.6.32-devkit8500

這裏之因此這麼修改,主要是由於本身的Android源碼和Linux內核源碼在文件夾中位置不一樣,因此各位按着本身的修改便可。

因爲咱們要在以前的編譯好的kernel的基礎上編譯Android源碼,因此呢咱們還要將下面

<!-- lang: shell -->
ubuntu@ubuntu:~$ cd linux-2.6.32-devkit8500/arch/arm/boot/
ubuntu@ubuntu:~/linux-2.6.32-devkit8500/arch/arm/boot$ ls
bootp  compressed  Image  install.sh  Makefile  uImage  zImage

將其中zImage拷貝到如下目錄,並重命名爲kernel

<!-- lang: shell -->
ubuntu@ubuntu:~/rowboat-android-froyo-devkit8500/device/ti/omap3evm$ ls
AndroidBoard.mk     asound.conf     init.rc  omap3evm.mk         TWL4030_Keypad.kl
AndroidProducts.mk  BoardConfig.mk  kernel   TWL4030_Keypad.kcm  vold.fstab

另外還有一處須要改動的地方,就是在當前目錄下,有三個文件夾

<!-- lang: shell -->
gfx_rel_es2.x_android
gfx_rel_es3.x_android
gfx_rel_es5.x_android

咱們分別進入這三個文件夾,而後找到 : install.sh文件,作以下修改,將文件最開頭的一行:

<!-- lang: shell -->
#!/bin/sh

改成:

<!-- lang: shell -->
#!/bin/bash

最後執行make進行編譯

<!-- lang: shell -->
cd rowboat-android-froyo-devkit8500
make

這個過程要相對比較久,並且出錯的可能性比較大,出錯的狀況也比較多,可是大部分錯誤的解決方法均可以在這個網站找到:http://www.cnblogs.com/ouling/archive/2011/09/08/2171337.html

當編譯完成後,咱們還須要作的一步就是製做ubi.img文件系統。這邊咱們還須要修改一個文件:rowboat-android-froyo-devkit8500目錄下的build_ubi.sh,這個文件是製做ubi文件系統的腳本。

將下面代碼

<!-- lang: shell -->
#!/bin/sh               //注意這sh也須要修改
、、、、、、、、、、

MKFSUBI=/home/embest/tools/mkfs.ubifs
MKFSUBI_ARG="-r ${ROOT_DIR} -m 2048 -e 129024 -c 4063 -o temp/ubifs.img"
UBINIZE=/home/embest/tools/ubinize
UBINIZECFG=/home/embest/tools/ubinize.cfg
UBINIZE_ARG="-o ubi.img -m 2048 -p 128KiB -s 512 ${UBINIZECFG}"

修改成:

<!-- lang: shell -->
#!/bin/bash
、、、、、、、、、、

MKFSUBI=/home/ubuntu/tools/mkfs.ubifs
MKFSUBI_ARG="-r ${ROOT_DIR} -m 2048 -e 129024 -c 4063 -o temp/ubifs.img"
UBINIZE=/home/ubuntu/tools/ubinize
UBINIZECFG=/home/ubuntu/tools/ubinize.cfg
UBINIZE_ARG="-o ubi.img -m 2048 -p 128KiB -s 512 ${UBINIZECFG}"

還有一處須要修改的地方,進入目錄:

<!-- lang: shell -->
ubuntu@ubuntu:~/rowboat-android-froyo-devkit8500/out/target/product/devkit8500/root$ ls
bin  data  default.prop  dev  init  init.goldfish.rc  initlogo.rle.bak  init.omap3.rc  init.rc  proc  sbin  sys  system

而後修改init.rc文件

將下面:

<!-- lang: shell -->
mount rootfs rootfs / ro remount
mount yaffs2 mtd@system /system ro remount

修改成:

<!-- lang: shell -->
mount rootfs rootfs / rw remount
mount yaffs2 mtd@system /system rw remount

最後製做ubi.img,執行命令:

<!-- lang: shell -->
ubuntu@ubuntu:~/rowboat-android-froyo-devkit8500$ sudo ./build_ubi.sh

若是沒有出錯,最後會提示安裝成功,在tmp文件下生存ubi.img:

<!-- lang: shell -->
binary hal_server_test -> /system/bin/hal_server_test
binary framebuffer_test -> /system/bin/framebuffer_test
binary texture_benchmark -> /system/bin/texture_benchmark
binary xmultiegltest -> /system/bin/xmultiegltest

Installation complete!

###~### file temp/ubi.img generated ###
-rw-r--r-- 1 root root 79036416 2013-09-10 15:43 temp/ubi.img

四、安裝Android操做系統到板子上

在Android源碼和Linux內核編譯完成後,咱們就能夠安裝Android系統了。

一、格式化TF卡

二、將光盤/linux/demo/Android/image下的全部文件拷貝到TF卡上,而後將ubi.img、uImage_4.三、uImage_7刪除

三、將下面兩個目錄中

<!-- lang: shell -->
ubuntu@ubuntu:~/linux-2.6.32-devkit8500/arch/arm/boot$ ls
bootp  compressed  Image  install.sh  Makefile  uImage  zImage

ubuntu@ubuntu:~/rowboat-android-froyo-devkit8500/temp$ ls
ubifs.img  ubi.img

的uImage和ubi.img拷貝到TF卡上

四、將TF卡插到板子上,並上電,等拷貝到板子Rom完成(當板子上的sys LED等一閃一閃的時候,說明拷貝完成),拔出TF卡,從新上電啓動就能夠了。通常你能夠在你的ubuntu主機上安裝minicom這個超級終端來控制板子!

具體能夠查看網上一些資料。安裝完成之後啓動minicom是要作些修改,用以下命令啓動:

<!-- lang: shell -->
sudo minicom -s

而後配置Serial port setup選項,

<!-- lang: shell -->
Serial Device      : /dev/tty8      修改成:  Serial Device      : /dev/ttyS0
Hardware Flow Control : Yes         修改成:Hardware Flow Control : NO
相關文章
相關標籤/搜索