Professional Documents
Culture Documents
班級 : TI701
組別 : 第六組
參與同學 98971001 游昭憲
98971012 于榮輝
98971016 陳桂枝
98971025 曾淳蔚
98971029 章修齊
Android 最新數字資料
市場需求、開發環境
降低產品販售的成本
遵循標準模式,加速軟體開發
內建多媒體資料庫
背景研究
基於 Linux 的軟體平台和作業系統
Google 開發 -> 開放手機聯盟
完整且開放的軟體研發
Intel : Moblin <-> Google :
Android
功能描述
應用層 (Applications)
應用層框架 (Application
Framework)
統一的開發應用程式標準介面,應用程式需要透過這層才能向下溝通。
函式庫 (Libraries)
Android 平台的函式庫以 C/C++ 撰寫,負責處理需要高效率的作業,以及與硬體介
面的溝通。
Android Runtimes
參考 Java 虛擬機器設計的 Dalvik 虛擬機器,速度較 JVM 快
Android 原始 目標版的
linux diff Linux linux
kernel kernel kernel
.patch
Driver 移植
patch
目標版的 Android
linux linux
kernel kernel
kernel 移植的前置作業
http://android.googlecode.com/files/linux-2.6.25-an
從較新版 kernel 複製
include/asm/arch-s3c2410/ts.h
和 drivers/input/touchscreen/s3c2410_ts.c
修改 Makefile 和 Kconfig
網路卡 DM9000 Porting
gedit $HOME/.bashrc
加入
PATH=$PATH:/CodeSourcery/arm-
2008q3/bin
source $HOME/.bashrc
進入 kernel.git 目錄 修改 Makefile
ARCH ?= arm
CROSS_COMPILE ?=arm-none-linux-
gnueabi-
移植過程
設置 mini2440 的 config
$ make menuconfig
製作 kernel image 檔
$ make zImage
使用 mini2440 開啟 android
SuperViVi
轉移控制權
For mini2440 的
Android linux kernel
NFS 掛載
Android filesystem
Android Porting
在 NAND Flash 底下開機
按任意鍵進入 supervivi 選單 ( 如下圖 )
Android Porting
載入 kernel 的 zImage 檔
由於 file system 檔案過大,所以利用
NFS 掛載檔案
Android Porting
linux_cmd_line 更改為
console=ttySAC0 root=nfs
nfsroot=192.168.1.100:/nfs_root ip=192.168.1.70
init=/init
Android Porting
修改 Server 端 /etc/exports 檔案
加入 /nfs
*(rw,sync,no_root_squash)
設定 Server 端 IP 位址
IP : 192.168.1.100
Subnet mask : 255.255.255.0
Gateway : 255.255.255.255
在根目錄下建立 nfsroot 資料夾,並放入
filesystem
最後輸入 exports -r 將 nfs 發佈出去
Android Porting 結果
Android SDK
Windows
Linux
Mac OS X (intel)
Eclipse
Java JDK
Android ADT
Android SDK
模擬器類型
建立模擬器
adb shell
ls 、 cd 、 mkdir…
adb install “XXX.apk”
adb uninstall
/data/app
adb push “ 檔案” “路徑”
sdcard
Movie
H.264
H.263
Music
MP3
WAV
AAC
emulator - skin HVGA-L
遭遇問題
TouchScreen 定位上下顛倒
進入圖形化介面後,觸控功能不正確
解決方法:
修改 include/asm/arch-s3c2410/ts.h
和 drivers/input/touchscreen/s3c2410_ts.c
遭遇問題
遇到 Kernel panic - not syncing:
Attempted to kill init
解決方法:
使用 EABI 版的 cross-compiler
(EABI:embedded-application binary interface)
參考網站: http://darwin-dev.blogspot.com/2009_06_01_archive.html
遭遇問題
MachineID 不匹配
bootloader(supervivi) 傳入的 Machine Id 是 782
和 kernel 設定的 S3C2440(Machine ID = 362 )
不一樣
解決方法:
修改 kernel 的 arch/arm/tools/mach-types
應用程式無法播音樂
暫時解決方案
使用 linux 命令列將 wav 檔用 cat 指令直接輸出給聲
音裝置
專題題目
Android Portable Media Player
班級
TI701
組別
第六組
組員
游昭憲 于榮輝
陳桂枝 曾淳蔚
章修齊