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

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

      ~/Android$ cd external

      ~/Android/external$ mkdir test

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

#include  
#include  
#include  
   
//定义要访问的设备文件名
#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内核驱动程序。


更多相关文章

  1. NPM 和webpack 的基础使用
  2. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  3. Android中资源文件夹res/raw和assets的使用
  4. android开发学习笔记001a
  5. android
  6. Android读写XML(下)
  7. [Android(安卓)Studio / NDK] 如何使用javah生成.h文件
  8. android MultiDex multiDex原理(一)
  9. Android(安卓)Project Structure

随机推荐

  1. Centos7配置Docker CE 镜像
  2. Ubuntu21.10配置Grafana镜像
  3. 一维数组排序,保留key值
  4. 云服务器为什么要设置防火墙?怎么设置防火
  5. 静态延迟绑定及静态单例模式加载以及单例
  6. 原生分页,文件上传后端要做哪些拦截,.事
  7. 基于VUE的后台管理系统
  8. MyCms 自媒体 CMS v3.0,资源推送优化,新增
  9. 如何绘制动漫人物头发?简单手绘动漫女生发
  10. 登陆验证码实例、接口初识