Android ril移植-6410开发板SIM300模块

环境介绍:

    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地址。

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文件里的注释支持即可。