一、测试之前,确保上篇的驱动程序已经安装成功,且在模拟器的/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. Android中资源文件夹res/raw和assets的使用
  2. [Android Studio / NDK] 如何使用javah生成.h文件
  3. Android 打开本地文件兼容7.0
  4. AppCompat v21 — Android 5.0之前版本设备的Material Design实
  5. Android Studio 运行java程序
  6. Android根据包名取得指定程序包的信息(名称、图标……)
  7. [Google Android] 理解NDK(1)-- 编译Android .so文件
  8. Android开发8——利用pull解析器读写XML文件
  9. USB集腋成裘:从Linux PC角度看sys.usb.config为none时的Android设

随机推荐

  1. Android: 渠道号获取
  2. Android刷新加载框架详解
  3. android模拟器使用sdcard
  4. Android(安卓)-- 程序启动画面 Splash
  5. @IntDef的使用(替代枚举)
  6. android activity与view的联系--window
  7. 安装Android(安卓)Studio及自动下载SDK的
  8. Activity的基本理解
  9. Android-开源工具库-第5弹-Android(安卓)
  10. Android(安卓)StudioRecyclerView,fragmen