RIL(Radio Interface Interface)是Android裡用來控制電話的一套系統, 其架構如下:
透過這套架構, 如果沒有太特別的需求, 只要針對不同的modem去修改Vendor RIL應該就可以了
網路上RIL相關的文章不少, 其中maxleng與opendroid對RIL一系列的文章, 真的讓我獲益不少。
[Maxleng]
Android電話系統之概述篇 http://blog.csdn.net/maxleng/article/details/5576509
Android電話系統之RILD http://blog.csdn.net/maxleng/article/details/5576637
Android電話系統之RIL-Java http://blog.csdn.net/maxleng/article/details/5593759
Android電話系統之GSMCallTracker http://blog.csdn.net/maxleng/article/details/5593780
[Opendroid]
Android GSM 驅動模塊(rild)詳細分析(一)基本架構及初始化 http://blog.csdn.net/opendroid/article/details/4071149
Android GSM 驅動模塊(rild)詳細分析(二)request流程 http://blog.csdn.net/opendroid/article/details/4071153
Android GSM 驅動模塊(rild)詳細分析(三)response流程 http://blog.csdn.net/opendroid/article/details/4071154
2011年7月21日 星期四
2010年12月26日 星期日
Get Android Source Code and Setup the Build Environment
2010/12/17的一則消息:"Android 2.3 Gingerbread's source code now available", 從2.2開始, 其實預設就是用64bit OS來build, 之前為了不想重灌Linux, 在網路上找了許多如何在32bit OS上build code的方法, 花了不少時間才把froyo放上s3c6410, 但是仔細想想這樣好像也沒有比較厲害 , 這次還是乖乖照google建議的, 在64bit OS上build android. 為了怕日後換電腦, 又要全部重來一次, 把過程作個紀錄
1. Prepare
先裝些基本的工具與設定
1.1 apt-get
若需要設定proxy, 在/etc/apt/apt.conf.d/01xxxxx裡面加上proxy資訊
1.2 git
安裝git
p.s. 若無法直接連線, 需要透過proxy去避開firewall的話
先用apt-get裝"connect-proxy" (一般的狀況下, 不需要用到這個)
my-git-proxy
其中裝JDK1.6時, 可能需要新增apt-get的source list
/etc/apt/sources.list
[註] Java版本相關指令
查版本:java -version
列出已安裝版本:sudo update-java-alternatives -l
切換Java版本:sudo update-java-alternatives -s java-x-sun
3. Download Android Source Code
Download source code 只要照AOSP上面教的即可
4. Build Android
build code可以直接下make
參考資料:
[1] Android Open Source Project
[2] Build Android Platform
[3] Android获取源代码、编译、命令
1. Prepare
先裝些基本的工具與設定
1.1 apt-get
若需要設定proxy, 在/etc/apt/apt.conf.d/01xxxxx裡面加上proxy資訊
APT { ...... } Acquire::Http::Proxy "http://your_http_proxy:port"; #Acquire::Ftp::Proxy "ftp://your_ftp_proxy:port";更新apt-get資料庫
sudo apt-get update接著作個方便的alias
alias apt-install 'sudo apt-get -y install'
1.2 git
安裝git
apt-install git-core
p.s. 若無法直接連線, 需要透過proxy去避開firewall的話
先用apt-get裝"connect-proxy" (一般的狀況下, 不需要用到這個)
apt-install connect-proxy接著寫個給git用的proxy script
my-git-proxy
#!/bin/sh # You can get proxy from http://spys.ru/free-proxy-list/TW/ PROXY=IP:Port connect-proxy -H http://$PROXY $@設定git透過proxy連線
git config --global core.gitproxy ~/my-git-proxy
2. Required Packages
AOSP上面提到的一些必要安裝sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl valgrind sun-java6-jdk zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev各個套件的功用, 可參考"ubuntu 9.04安裝Android注意事項"與"Build Android Platform"
其中裝JDK1.6時, 可能需要新增apt-get的source list
/etc/apt/sources.list
deb http://us.archive.ubuntu.com/ubuntu/ jaunty multiverse deb http://us.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse接著再更新一下apt-get
sudo apt-get update apt-install sun-java6-jdkJDK安裝完後, 將相關的資訊export到環境變數裡
export JAVA_HOME=/usr/lib/jvm/java-6-sun export PATH=/usr/lib/jvm/java-6-sun/bin:$PATH export ANDROID_JAVA_HOME=$JAVA_HOME
[註] Java版本相關指令
查版本:java -version
列出已安裝版本:sudo update-java-alternatives -l
切換Java版本:sudo update-java-alternatives -s java-x-sun
3. Download Android Source Code
Download source code 只要照AOSP上面教的即可
curl http://android.git.kernel.org/repo >~/repo chmod a+x ~/bin/repo mkdir mydroid cd mydroid ~/repo init -u git://android.git.kernel.org/platform/manifest.git ~/repo sync
4. Build Android
build code可以直接下make
make -j4若是之後可能開發自己的product的話, 可以準備一個script
#!/bin/bash function show_result() { echo "" echo "#######################################################" echo " $1" echo "#######################################################" echo "" } CWD=$PWD ANDROID_PATH=$CWD/my_android export TARGET_PRODUCT=generic export TARGET_BUILD_TYPE=release export TARGET_BUILD_VARIANT=eng export TARGET_SIMULATOR=false cd ${ANDROID_PATH} if ( make -j4 ); then show_result "Build Android Successfully!!" exit 0 else show_result "Build Android Failure!!" exit 1 fi換成Ubuntu64順利很多, 只碰到一個error
make: *** [out/target/product/generic/obj/ SHARED_LIBRARIES/libwebcore_intermediates/LINKED/libwebcore.so] Error 1拜了一下Google大神, 多數的說法都是開給VMware的記憶體不夠所造成, 照著網路上的作法先試著將swap加大後,
dd if=/dev/zero of=/swapfile bs=1024 count=1048576 mkswap /swapfile swapon /swapfile再加上相當長的build code時間, 總算成功得到android image了
參考資料:
[1] Android Open Source Project
[2] Build Android Platform
[3] Android获取源代码、编译、命令
2010年12月23日 星期四
Android Init Language
在Linux下的rcS用的一般都是shell script的語法撰寫, 但Android裡的init.rc似乎有他自己的一套
Android init language內的描述可分成兩種類型: Action, Service
Actions
例如
在官網中定義了幾個trigger的種類,
其他預設的trigger (ex. init, fs), 可以在system/core/init/init.c裡面找到
Services
例如
"/system/bin/app_process" 表示程式的路徑
"-Xzygote /system/bin --zygote" 表示要傳入程式的參數
"socket zygote 666" 是service的option, 表示開一個名為zygote的unix socket給這個service
合在一起看的例子
整個init.rc被執行的過程, 可參考"Android init 啟動過程分析"
參考資料:
[1] Android Init Language
[2] 如何去寫Android init.rc
[3] android init(system/core/init/init.c)分析
[4] Android init 啟動過程分析
[5] init.c
Android init language內的描述可分成兩種類型: Action, Service
Actions
on <trigger> <command> <command> <command> ......其意義表示當trigger發生或成立時, 要執行哪些command
例如
on boot export PATH /sbin:/system/sbin:/system/bin export LD_LIBRARY_PATH /system/lib mkdir /dev mkdir /proc mkdir /sys表示當boot發生了, 要去export一些環境變數以及建一些目錄.
在官網中定義了幾個trigger的種類,
其他預設的trigger (ex. init, fs), 可以在system/core/init/init.c裡面找到
Services
service <name> <pathname> [ <argument> ]* <option> <option> ......service定義的program, 除了option設為disable外, 會被init執行 (精確的說, 是action內的class_start default, 啟動了default的service)
例如
service zygote /system/bin/app_process -Xzygote /system/bin --zygote socket zygote 666"zygote" 表示這個service的名稱
"/system/bin/app_process" 表示程式的路徑
"-Xzygote /system/bin --zygote" 表示要傳入程式的參數
"socket zygote 666" 是service的option, 表示開一個名為zygote的unix socket給這個service
合在一起看的例子
on device-added-/dev/compass start akmd on device-removed-/dev/compass stop akmd service akmd /sbin/akmd disabled user akmd group akmd表示說akmd這個service並不會在init起來時被執行, 而是當/dev/compass產生時會被執行, 當/dev/compass移除時, 該service會被停掉
整個init.rc被執行的過程, 可參考"Android init 啟動過程分析"
參考資料:
[1] Android Init Language
[2] 如何去寫Android init.rc
[3] android init(system/core/init/init.c)分析
[4] Android init 啟動過程分析
[5] init.c
訂閱:
文章 (Atom)