Android中字符设备驱动和应用实例(二)——应用部分
下面介绍创建Android设备字符设备驱动对应的应用程序
1 应用程序
在此示例中,我们将应用程序的代码放置在android目录的packages/app/mem_test目录下面。其中,mem_test是新建的目录。
(1)应用程序的路径如下:
packages/app/mem_test/mem_test.c
(2)应用程序的内容如下:
1 #include <stdio.h> 2 #include <fcntl.h> 3 #include <sys/types.h> 4 #include <sys/stat.h> 5 #include <string.h> 6 #include <cutils/log.h> 7 8 9 #define BUFFERSIZE 40 10 #define DEV_PATH "/dev/my_char_dev" 11 #define STR_TRANS "Hello, Android mem test!" 12 #define STR_NULL "Hello, Null!" 13 14 int main( void ) 15 { 16 FILE *fp = NULL; 17 char buf[BUFFERSIZE]; 18 19 /*初始化buf*/ 20 strcpy(buf, STR_TRANS); 21 22 /*打开设备文件*/ 23 fp = fopen(DEV_PATH,"r+"); 24 if (fp == NULL) 25 { 26 printf("Open Memdev0 Error!\n"); 27 return -1; 28 } 29 30 /*写入设备*/ 31 fwrite(buf, sizeof(buf), 1, fp); 32 printf(" write %s to %s\n",buf, DEV_PATH); 33 34 /*重新定位文件位置*/ 35 fseek(fp,0,SEEK_SET); 36 37 /*清除buf*/ 38 strcpy(buf,STR_NULL); 39 printf(" before read %s, buf=%s\n", DEV_PATH, buf); 40 41 /*读出设备*/ 42 fread(buf, sizeof(buf), 1, fp); 43 printf(" after read %s, buf=%s\n", DEV_PATH, buf); 44 45 return 0; 46 47 }
(3)应用程序对应的Android.mk的路径如下:
packages/app/mem_test/Android.mk
(4)应用程序对应的Android.mk的内容如下:
1 LOCAL_PATH:= $(call my-dir) 2 3 include $(CLEAR_VARS) 4 LOCAL_MODULE_TAGS := eng 5 LOCAL_MODULE_PATH := $(TARGET_OUT)/bin 6 LOCAL_SRC_FILES:=mem_test.c 7 LOCAL_SHARED_LIBRARIES := libcutils libc 8 LOCAL_MODULE :=mem_test 9 include $(BUILD_EXECUTABLE)
2 编译
(1)导入工程对应的android环境变量,目的是使用mmm命令。下面,我以“三星V210芯片对应的Android2.3”系统为例,说明导入环境变量的方法。
执行以下命令:
#source build/envsetup.sh #choosecombo
(2)模块编译应用程序,执行以下命令:
#mmm packages/app/skywang/mem_test
执行mmm命令成功后,会生成mem_test可执行文件,路径如下:
out/target/product/smdkv210/system/bin/mem_test
3 手机运行应用程序
(1)将可执行文件拷贝到手机中,通过以下命令:
#adb push mem_test /system/bin/mem_test
(2)添加可执行权限,通过以下命令:
#chmod 777 /system/bin/mem_test
(3)确认权限,通过以下命令查看权限:
#ls -l /system/bin/mem_test
若显示“-rwxrwxrwx”,则表示第(2)步中添加可执行权限成功。
(4)运行应用程序,通过以下命令:
#cd /system/bin/
#./mem_test
注意:执行“./mem_test”之前,必须确保“class_reg_unreg.ko”已成功装载。关于“class_reg_unreg.ko”请参考“Android中字符设备驱动和应用实例(一) 驱动部分”
运行程序后,会打印信息如下:
write Hello, Android mem test! to /dev/my_char_dev
before read /dev/my_char_dev, buf=Hello, Null!
after read /dev/my_char_dev, buf=Hello, Android mem test!
关于该测试程序对应的驱动,请参考“Android中字符设备驱动和应用实例(一) 驱动部分”