環境介紹:
1. ubuntu 10.10,作為Android編譯環境同時作為NFS讓6410開發板掛載作為根文件系統。
2. Android使用的是友善給的源碼,使用./build-android命令編譯出來,使用./genrootfs.sh命令在主源碼主目錄下生成rootfs,刪除掉data/app下的安裝包(不刪除也可以)
3. 將rootfs里的文件系統拷貝到NFS掛載目錄下,我的NFS目錄是/work/nfs_root,安裝并開啟NFS,通過exportfs命令測試是否將NFS共享。
4. 修改uboot中的kernel啟動參數為:
setenv bootargs noinitrd init=/linuxrc root=/dev/nfs nfsroot=192.168.11.11:/work/nfs_root
ip=192.168.11.13:192.168.11.11:192.168.11.1:255.255.255.0:www.android.com:eth0:off console=ttySAC0,115200
開發板使用192.168.11.13地址,NFS主機使用192.168.11.11地址。注意:每次開發板重啟都要重新設置下IP,因為ubuntu會自動更新IP地址。
1. 在進行ril移植之前建議先了解下RIL的框架,推薦下面的文章:
//blog.sina.com.cn/s/blog_682793a50100jeo5.html
2. 主要修改的是hardware/ril/reference-ril/reference-ril.c文件其它文件基本上不用修改,因為gooooogle已經將框架封裝好了。
將mainLoop函數中的2043行進行修改:
if ( fd >= 0 && !memcmp( s_device_path, "/dev/ttyS", 9 ) ) {
/* disable echo on serial ports */
struct termios ios;
tcgetattr( fd, &ios );
ios.c_lflag = 0; /* disable ECHO, ICANON, etc... */
tcsetattr( fd, TCSANOW, &ios );
}
修改之后:
if ( fd >= 0 && !memcmp( s_device_path, "/dev/s3c2410_serial1", 20 ) ) {
/* disable echo on serial ports */
struct termios ios;
bzero(&ios, sizeof(ios));
tcgetattr( fd, &ios );
ios.c_iflag |=
ios.c_cflag |= CLOCAL | CREAD | CS8; // 用于本地連接和接收使能數據位長度
ios.c_iflag |= IGNPAR;
cfsetispeed(&ios, B115200); //設置波特率
cfsetospeed(&ios, B115200);
ios.c_lflag = 0; /* disable ECHO, ICANON, etc... */
tcflush(fd, TCIFLUSH);
tcsetattr( fd, TCSANOW, &ios );
}
3. 修改initializeCallback函數中AT命令(建議參照google提供的命令和SIM300模塊給的AT命令參考文檔)
修改完之后,重新編譯Android源碼,將新生成的libreference-ril.so拷貝到NFS根目錄下,重啟開發板即可打電話,接電話。
擴展:如果使用的FriendlyArm提供的源碼,那你看不到狀態欄的電話信號圖標和電池圖標,這是因為FriendlyArm已經將其注釋掉了,請將
frameworks/base/packages/systemui/src/com/android/systemui/statusbar/StatusBarPolicy.java文件里的注釋支持即可。