现在的位置: 首页 > 综合 > 正文

android内核字符驱动设备实战之———-内置C语言测试程序篇

2018年06月10日 ⁄ 综合 ⁄ 共 2262字 ⁄ 字号 评论关闭

一、测试之前,确保上篇的驱动程序已经安装成功,且在模拟器的/dev目录下,有此设备的设备文件,即有/dev/testdev设备文件

二、进入到Android源代码工程的external目录,创建test目录:

      ~/Android$ cd external

      ~/Android/external$ mkdir test

三. 在hello目录中新建test.c文件

#include <stdio.h>  
#include <stdlib.h>  
#include <fcntl.h>  
   
//定义要访问的设备文件名
#define DEVICE_NAME "/dev/testdev"  
    
int main(int argc, char** argv)  
{  
    int fd = -1;  
    int val = 0;   
    //打开设备文件
    fd = open(DEVICE_NAME, O_RDWR);  
    if(fd == -1)
    {  
         printf("Failed to open device %s.\n", DEVICE_NAME);  
         return -1;  
     }      
     //读取并显示设备原始的值     
     printf("Read original value:\n");  
     read(fd, &val, sizeof(val));  
     printf("%d.\n\n", val);      
     //写入   
     val = 8;  
     printf("Write value %d to %s.\n\n", val, DEVICE_NAME);  
     write(fd, &val, sizeof(val));      
     //读取写入后的值    
     printf("Read the value again:\n");  
     read(fd, &val, sizeof(val));  
     printf("%d.\n\n", val);       
     close(fd);  
     return 0;  
 } 

四. 在test目录中新建Android.mk文件:

 Android.mk文件是GNU Makefile的一小部分,它用来对Android程序进行编译,可编译的类型有:

  1)APK程序 :  一般的Android程序,编译打包生成apk文件

  2)JAVA库:  java类库,编译打包生成jar文件
  3)C\C++应用程序: 可执行的C\C++应用程序
  4)C\C++静态库 :编译生成C\C++静态库,并打包成.a文件
  5)C\C++共享库:编译生成共享库(动态链接库),并打包成.so文, 有且只有共享库才能被安装/复制到您的应用软件(APK)包中

    本利中Android.mk 文件如下:

      LOCAL_PATH := $(call my-dir)                        
      //
首先定义好LOCAL_PATH变量。它表示是当前文件的路径。宏函数‘my-dir’,  由编译系统提供, 用于返回当前路径

      include $(CLEAR_VARS)                                        //清除变量

      LOCAL_MODULE_TAGS := optional                    //optional:指该模块在所有版本下都编译

      LOCAL_MODULE := test                                          //模块名             

      LOCAL_SRC_FILES := $(call all-subdir-c-files)  //模块的源文件

      include $(BUILD_EXECUTABLE)                          //编译类型为可执行文件

五、android源代码单独编译,使用mmm命令进行编译:

    //执行shell命令,获取mmm编译工具

    ~/Android$.  ./build/envsetup.sh

    //使用mmm命令进行编译

      ~/Android$ mmm ./external/test

      编译成功后,就可以在out/target/product/gerneric/system/bin目录下,看到可执行文件test了

六. 重新打包Android系统文件system.img

      USER-NAME@MACHINE-NAME:~/Android$ make snod

      这样,重新打包后的system.img文件就包含刚才编译好的test可执行文件了。

  七. 运行模拟器,使用/system/bin/test可执行程序来访问Linux内核驱动程序:

    /Android$ emulator -kernel ./kernel/goldfish/arch/arm/boot/zImage &

      USER-NAME@MACHINE-NAME:~/Android$ adb shell

      root@android:/ # cd system/bin

      root@android:/system/bin # ./test

      Read the original value:

      0.

      Write value 8 to /dev/test.

      Read the value again:

      8

      至此完成C可执行程序访问我们编写的Linux内核驱动程序。

抱歉!评论已关闭.