编写并编译测试驱动的应用程序 - muyu01248/log GitHub Wiki

测试驱动的应用程序[http://blog.csdn.net/Luoshengyang/article/details/6571210] 进入到Android源代码工程的external目录,创建hello目录:

  USER-NAME@MACHINE-NAME:~/Android$ cd external

  USER-NAME@MACHINE-NAME:~/Android/external$ mkdir hello

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

[cpp] view plain copy

#include <stdio.h>  
#include <stdlib.h>  
#include <fcntl.h>  
#define DEVICE_NAME "/dev/hello"  
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 = 5;  
    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;  
}  

  这个程序的作用中,打开/dev/hello文件,然后先读出/dev/hello文件中的值,接着写入值5到/dev/hello中去,最后再次读出/dev/hello文件中的值,看看是否是我们刚才写入的值5。从/dev/hello文件读写的值实际上就是我们虚拟的硬件的寄存器val的值。

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

  LOCAL_PATH := $(call my-dir)

  include $(CLEAR_VARS)

  LOCAL_MODULE_TAGS := optional

  LOCAL_MODULE := hello

  LOCAL_SRC_FILES := $(call all-subdir-c-files)

  include $(BUILD_EXECUTABLE)

  注意,BUILD_EXECUTABLE表示我们要编译的是可执行程序。 

  五. 参照如何单独编译Android源代码中的模块一文,使用mmm命令进行编译:

  USER-NAME@MACHINE-NAME:~/Android$ mmm ./external/hello

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

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

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

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

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

  USER-NAME@MACHINE-NAME:~/Android$ emulator -kernel ./kernel/common/arch/arm/boot/zImage &

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

  root@android:/ # cd system/bin

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

  Read the original value:

  0.

  Write value 5 to /dev/hello.

  Read the value again:

  5.
⚠️ **GitHub.com Fallback** ⚠️