Android2.2移植總結(第一部分)
bootargs : set bootargs noinitrd root=/dev/nfs rw nfsroot=192.168.221.90:/shnfs ip=192.168.221.100 console=ttySAC0,115200 init=/linuxrc mem=128M
平臺要求:uname -r 查看RHEL6.1是否爲i686版本,如果有x86_64將無法正常編譯android
android版本 :android-2.2
android kernel:android-kernel-2.6.35
移植前準備:busybox arm-linux-gcc android-2.2 android-kernel-2.6.35 alsa tslib等
1.安裝Sun JDK
a>卸載linux 下OpenJDK 方法:redhat 系統中有卸載軟件,直接搜索JDK,卸載相關軟件大概有50個左右吧!
b>安裝Sun JDK :rpm -ivh jdk-1_5_0_22-linux-i586.rpm
2.修改環境變量
a>vim /etc/bashrc
添加: export JAVA_HOME=/usr/java/jdk1.5.0_22
export JRE_HOME=${JAVA_HOME}/jre
export CLASS_PATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASS_PATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=${JAVA_PATH}:$PATH
如果成功:java+TAB 會補全
3.在編譯前最好安裝gperf包:gperf-3.0.4,如果直接make Android會有錯誤,由於編譯時間太長最好最好這步驟
a> ./configure --build=i386 --host=arm-linux
b> make
c> make install
4.編譯Android2.2
a> make //這個將持續三個小時左右,你可以耐心的研究一下java了
5.編譯如果成功,直接cd out/target/product/generic/目錄下你會發現*.img
a>ramdisk.img --->root
b>system.img---->system
c>userdata.img--->data
//這三個目錄將是我們構建nfs的重要目錄/root --
/system
/data
再來看看我們的模擬器,cd out/host/linux-x86/bin ---->ls---->就會看到emulator模擬器
那爲了放便我們可以把emulator加在環境變量裏:echo export PATH=$PATH:<此目錄> >>/etc/bashrc
6.驚喜來了,運行模擬器emulator
a>爲了少加些環境變量,我們進入到 cd /out/target/product/generic/
b>執行一下ANDROID_PRODUCT_OUT=`pwd` emulator -shell 正確則會進入到emulator。
c>寫個小程序測試一番,感覺和手機一樣。
d>應用層就在這裏開發了。
e>如果覺得這樣比較麻煩,那就把該目錄叫如環境變量。echo export ANDROID_PRODUCT_OUT=<android>/root/outarget/product/generic
f>生效後emulator 或者emulator -shell
7.Android.mk有一個神奇的功效,在那文件夾裏有着個文件,我們都可回到android-2.2目錄:執行mmm 文件路徑
a>cd <android home>
b>. build/envsetup.h
c>mmm <編譯的目錄> //該目錄下必須有Android.mk ,如果沒有則去上級目錄
8.eclipse這裏不再介紹,因爲我們完全不依賴這個我們依然可以做到。
9.這裏我們就通過源碼創建android應用程序
a>先在命令:local-host#android 查看缺什麼東西在相應的目錄上添加mkdir + 目錄;這裏需要添加三個或者四個左右吧,有一個x86,其他的就忘記裏
b>如果命令可以用裏,這裏我們用android list查看一笑target的id。記住
c>android create project -t -k abc.bcd 1 -a example -p ./ 如果不懂就android --help
d>如果創建成功就和eclipse創建的一樣的目錄結構,仔細研究一番。我們發現只有res src AndroidManifest三個文件有用,其他都是爲eclipse使用的
res/layout/main.xml
10.這裏說明一下虛擬機是用image三個文件,而不是目錄,如果你對其修改後,一定要記得刪除system.image
a>重新生成makyaffs2 ststem/system.image
11.燒寫bootloader到開發板
12.構建Android nfs文件系統a>/mkdir /nfsroot b>vim /etc/exports /nfsroot *(rw,sync,no_root_squash)
13.構建tftp系統
14.配置內核:a>tar zcf android-kernel-2.6.35.tar.gz
b>cd android-kernel-2.6.35
c>修改一Makefile 交叉編譯器選擇Android自身的:在目錄android-2.2/prebult/linux_x86/toolchain/
或者make menuconfig 修改編譯器
d>make
e>cp arch/arm/boot/zImage /tftpboot/
15>cp前面講的文件到/nfsroot下
a>cp -rf <android home>/out/target/product/generci/root/* /nfsroot
b>cp -rf <android home>/out/target/product/generci/system/* /nfsroot/system/
c>cp -rf <android home>/out/target/product/generci/data/* /nfsroot/data/
16.設置開發版setenv bootargs console=ttySAC0 init=/init root=/dev/nfs nfsroot=192.168.221.90:/nfsroot ip=192.168.221.100:192.168.221.90:255.255.255.0
a>save /saveenv
b>tftp 50008000 zImage
c>bootm 50008000
17.這時是啓動不了需要該init.rc 默認權限有問題
同時註釋init.rc中的27註釋,變爲橫屏
啓動起來發現觸摸屏不好用,根本沒什麼反映,這時我們就需要矯正這個觸摸屏
18.矯正觸摸屏
a>對於linux來說我們矯正的時候直接刪掉一個配置文件pointcal,重啓就可以矯正了
b>而對於Android來說,似乎不像我們想的那麼容易,我們打開這個配置文件發現裏面就是一行數據,而我們要得到這行數據,需要的一個轉換公式
c>所以我們需要一個程序講這些轉換爲我麼所需要的數據
//tslib移植,這個就是Android觸摸屏需要的一個庫
19.移植tslib 下載tslib庫
a>./configure --host=arm-linux --build=i386
b>vim Android.mk //添加生成庫之前LOCAL_PERLINK_MODULE:=false
c>. build/envsetup.h
d>mmm <tslib 目錄>
e>cp ts.config /sytem/etc/
f>修改內核代碼kernel/drivers/input/touchscreen/s3c6410.c x=ts.xp;y=ts.yp
g>make zImage
f>cp zImage /tftpboot
h>啓動開發板tftp 50008000 zImage bootm 50008000 我們得到pointcal新數據,再填回內核代碼中。make zImage //重複g f h
20.這樣觸摸屏就能用了。寫一個應用程序測試led
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.