zoukankan      html  css  js  c++  java
  • Android中字符设备驱动和应用实例(二) 应用部分

    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 }
    View Code

    (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)
    View Code

    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中字符设备驱动和应用实例(一) 驱动部分

  • 相关阅读:
    20145334赵文豪 《信息安全系统设计基础》第2周学习总结
    20145334赵文豪《信息安全系统设计基础》第1周学习总结
    关于第五周大家学习问题的总结
    20145334 第五次 java 实验报告
    20145334 《Java程序设计》第10周学习总结
    实验四 Android开发基础
    # 20145334 《Java程序设计》第9周学习总结
    20145334实验三《敏捷开发与XP实践》
    实验二:面向对象设计
    程序的机器级表示内容补充及扩展
  • 原文地址:https://www.cnblogs.com/skywang12345/p/driver_char02.html
Copyright © 2011-2022 走看看