Android2.2的移植的詳細步驟
一、 安卓系統的組成
a. 應用層
b. 應用程序框架
c. 庫和運行環境
d. 內核
e. 硬件
二、 移植的主要步驟
1)安裝sunJDK
開發環境:ubuntu 10.04 32位
a. 卸載系統中的open JDK
爲了標準我們先把系統中的openJDK卸載掉,把從網上下載的jdk-1_5_0_22-linux-i586.bin(47M)安裝下就可以了.
b. 安裝好後,接下來就是要對這個配置文件進行配置。配置的路徑是/etc/profile.d/java.sh (這裏要說明的一點是java.sh要臨時創建),裏面配置的信息是:
export JAVA_HOME=<jdkome>/jdk-1_5_0_22-i586.bin
exportCLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
exportPATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
c. 如何檢測是否安裝好jdk.
在命令行輸入:java –version
java version "1.5.0_22"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_22-b03)
Java HotSpot(TM) Server VM (build 1.5.0_22-b03, mixed mode)
若看到這個則說明成功。
查看環境變量修改成功與否
在命令行中輸入:
echo $JAVA_HMOE
echo $CLASSPATH
2) 編譯android 2.2 froyo
先在網上下載一個安卓的類文件系統(android 2.2 Froyo),然後對其進行解壓:
tar –xvf xxx.tar.gz //這是把這個解壓到當前目錄
cd xxx //cd 進入到這個目錄中去
make -j4 //對這個進行編譯,這可能要花費好長一段時間,我在編譯的過程中沒遇到多大的問題,在這就不在細說了,主要一點是要把上步的那個JDK裝好後遇到的問題就比較的少,我在編譯個過程中遇到的問題也就是一些命令提醒說沒有安裝而已,我用apt-get
install xxx安裝下就可以了。
編譯完後再會告訴你編譯的東西出來東西在哪,而且也不會報錯,也不會報警告。
3)編譯完成後,模擬器的實現與運行
a.模擬器的實現
把類文件系統目錄下out/target/product/generic/system
out/target/product/generic/system 複製到out/target/product/generic/root下面去。
在 /etc/profile.d/java.sh中加入那麼一句
export PATH=$PATH:<androidhome>/out/host/linux-x86/bin
b.模擬器的運行
命令行中輸入:emulator –shell
4)實現編譯器的靜態鏈接
先下載一個軟件:arm-none-linux-gcc的軟件,先對它進行解壓後進入/bin目錄下就有這條命令(arm-none-linux-gnueabi-gcc),arm-none-linux-gnueabi-gcc –static test.c –o test,
Cp test out/target/product/generic/system/bin
Mkyaffs2image system system.img
Emulator –shell
#test 這就會出現剛纔你新建的命令中寫的東西
5)實現android自帶的編譯器
cd <android home>
. build/envsetup.sh //點後面記得要有空格
mmm <你想編譯的目錄>
在做上幾步之前要先做這步:
首先要先創建Android.mk文件,裏面填寫內容如下:
LOCAL_PATH := $(call my-dir)
include $(BUILD_JAVA_SHARED_LIBRARY)
LOCAL_SRC_FILE := test.c
LOCAL_MODULE := test
LOCAL_SHARED_LIBRAYR := libc
include $(BUILD_EXECTALE)
10)、u-boot的編譯
tar –xvf xxx.tar.gz2
cd xxx
在Makefile中找到你的是哪種板,我自己的是up6410_sd_config.
在命令行中輸入make up6410_sd_config
然後就輸入make –j4編譯就可以了。
在最後編譯成功會出現u-boot在哪裏。
11)、內核的編譯
Tar –xvf xxx.tar.gz2
Cd xxx
在makefile中改下編譯工具的路徑,然後就可以開始編譯了。在命令行輸入make –j4
編譯完就可以了。編譯完後把編譯出來的zImage複製到/tftproot下就行了。現在還差個android系統,之前在前面我們已將把它編譯完成了。
12)、android系統的構建
<androidhome>/out/target/product/generic/下的root、data、
System組成一個nfsroot文件夾,操作演示如下:
cp –rf <android >/out/target/product/generic/root/*/nfsroot/
cp –rf <android>/out/target/product/generic/system /nfsroot/
cp –rf < android>/out/target/product/generic/data/ /nfsroot/
/nfsroot/這個就是類似linux中的文件系統,這個就是安卓系統。
在電腦與開發板之間連線和設置開發板的環境,開發板的主要環境還是先裝下minicom這個軟件和tftp、nfs服務等,裝好這些之後就可以開始下載了。
13)、android系統的下載
先在命令行中輸入minicom –s,設置端口參數,這裏就不在多說了。在這之前要把arm板與pc電腦相連接好,進入了u-boot界面後,就要開始設置一些環境參數了。開發板的IP,電腦的IP,gatewayip,bootargs等,如下所示:
setenv bootargs console=ttySAC0root=/dev/nfs nfsroot=2.2.2.254:/nfsroot ip=2.2.2.20
setenv serviceip=2.2.2.254
setenv ip=2.2.2.20
下載過程:
tftp50008000 zImage bootm 50008000
在u-boot界面下輸入這兩條命令後就行了,系統就能啓動起來了,要記得在這個期間,串口線和網線不能段,應爲我們只是把內核和文件系統放到arm板的內存中去運行的還沒保存到硬盤(nandflash)中,所以在運行中數據在通信是不能斷開的,而且斷電後又要重新燒寫。
14)、android觸摸屏的校正
啓動起來後點擊下屏卻沒有反應,我這個開發板用的是tft電阻屏,雖然在內核中有觸摸屏驅動,但是沒校正屏幕的驅動,依然無法使用,linux中有一款開源的軟件軟件,名字是tslib,能夠爲觸摸屏驅動獲得的採樣提供諸如濾波、去抖、校準等功能,通常作爲觸摸屏驅動的適配層,爲上層的應用提供了一個統一的接口。
步驟爲:
首先先要從網上下載一個tslib的軟件,對其進行解壓。
tar –xvf xxx.tar.gz2(這是解壓到當前文件夾)。
解壓完之後進入到目錄中:cd xxx/,
用編輯器vim打開裏面的一個叫Android.mk文件,在他的第幾行處加入這麼一行,保存退出。
執行 ./configure,在回到<android home>目錄中,把剛纔解壓出來的目錄編譯進android內核中去,執行命令:
. bulid/envsetup.sh
mmm <你所執行文件的目錄>
先把/nfsroot中的system刪除,在從文件系統中的system複製到刪的位置。
先把<kernel home>/driver/input/touchscreen/s3c2410.c中的第幾行註解掉
接着就把開發板和pc機連接起來,把android啓動起來,啓動後再android shell中輸入ts_calibrate,你會發現會報說沒有ts.conf這個文件,接下來我們就來講下怎樣得到這個文件。
執行完後再接着做這個步驟:
cp tslib/etc/ts.conf /nfsroot/system/etc -rf
這個文件複製完後在執行ts_calibrate這條命令時就不會保錯了,在開發板上會出現要你校屏的界面。你就用手或其他對屏進行校正,校正完後參數保存在 system/etc/pointercal
下,在把這個參數複製到
<kernel home>/driver/input/touchscreen/s3c2410.c下,把
剛纔註解掉的參數中這邊新複製過來的替換掉。(這裏要重新編譯內核,這要記得不然是沒效的)。
15)、androidframebuffer的分析
16)、android ALSA聲卡驅動的移植
到現在這步這個項目已經進行到一半多了,現在我們就來聊聊關於聲卡驅動的移植,聲卡不想顯卡一樣,把文件系統移植上去就能顯示,如若不做這步的話聲卡是用不了的。移植聲卡驅動的話要另外下載三個包,網站地址:www.developer.android.com.下載這三個解壓包:alsa-lib、alsa-util、alsa_sound.下載完後把這三個解壓包解壓到指定的文件夾如下:
tar jxf alsa-lib alsa-utils -C <android home>/external/
tar jxf alsa_sound <androidhome>/hardware/
解壓完這三個文件之後,接下來
編輯 <android home>build/board/generic/BoardConfig.mk
加入二行:
BOARD_USES_ALSA_AUDIO:= true
BUILD_WITH_ALSA_UTILS:= true
接下來重新編譯文件系統。
將android系統燒錄nandflash中
1. 編譯靜態鏈接的busybox
從網上下載busybox這個文件,解壓到當前文件夾中。進入解壓後的目錄中,輸入make menuconfig
Busybox settings à
BuildOptionsà
Build busybox as a static binary (選上)
Cross compiler prefix(輸入你的編譯器的地址)
Installationoptionsà
Busybox installation prefix(寫上安裝的地址)
設置完後保存
接下來就要編譯busybox,命令是make –j4,我這邊編譯出來的地址是默認的,在./install中,把install/bin/busybox複製到/nfsroot(文件系統)中,啓動開發板進入到系統中後輸入以下命令:
/busybox mount –t yaff2/dev/block/mtdblock3 /mnt
/busybox cp –rf /nfsroot_android(文件系統的複製份)/*/mnt