在第一篇文章中,我们介绍了如何在Ubuntu 上为Android 系统编写Linux内核驱动程序。在这个名为hello 的Linux 内核驱动程序中,创建三个不同的文件节点来供用户空间访问,分别是传统的设备文件/dev/hello、proc 系统文件/proc/hello 和devfs 系统属性文件/sys/class/hello/hello/val。进一步,还通过cat 命令来直接访问/proc/hello 和/sys/class/hello/hello/val 文件来,以验证驱动程序的正确性。在这一篇文章里,我们将通过自己编写的C 可执行程序来访问设备文件/dev/hello。可能读者会觉得奇怪,怎么能在Android 系统中用C 语言来编写应用程序呢?Android 系统上的应用程序不都是Java 应用程序吗?其实是可以的,读者不妨用adb shell 命令连上Android 模拟器,在/system/bin 目录下可以看到很多C 可执行程序,如cat 命令。今天,我们就来学习一下怎么在Android 系统中添加用C 语言编写的可执行程序吧。

一. 进入到Android 源代码工程的external 目录,创建hello 目录:

linuxidc@www.linuxidc.com:~/Android$ cd external

linuxidc@www.linuxidc.com:~/Android/external$ mkdir hello_test

二. 在hello 目录中新建hello_test.c和Android.mk 文件:

hello_test.c

#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;}

Android.mk

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE_TAGS := optionalLOCAL_MODULE := hello_testLOCAL_SRC_FILES := $(call all-subdir-c-files)include $(BUILD_EXECUTABLE)

这个程序的作用中,打开/dev/hello 文件,然后先读出/dev/hello 文件中的值,接着写入值5 到/dev/hello 中去,最后再

次读出/dev/hello 文件中的值,看看是否是我们刚才写入的值5。从/dev/hello 文件读写的值实际上就是我们虚拟的硬件的寄

存器val 的值。

三、编译

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

cd external/hello

mm

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

四、测试运行

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

Read the original value:

0.

Write value 5 to /dev/hello.

Read the value again:

5.

看到这个结果,就说我们编写的C 可执行程序可以访问我们编写的Linux 内核驱动程序了。

介绍完了如何使用C 语言编写的可执行程序来访问我们的Linux 内核驱动程序,读者可能会问,能不能在Android 的

Application Frameworks 提供Java 接口来访问Linux 内核驱动程序呢?可以的,接下来的几篇文章中,我们将介绍如何在Android

的Application Frameworks 中,增加Java 接口来访问Linux 内核驱动程序,敬请期待。

更多相关文章

  1. One省电卫士 - Android内核级省电App
  2. Android(安卓)实现文件上传功能(upload)
  3. Windows平台下如何使用Android(安卓)NDK
  4. Android中APK安装过程及原理解析
  5. Android从代码到apk的编译过程
  6. Android(安卓)中自定义 Menu 资源
  7. Android使用XML文件定义用户界面
  8. 【Based Android】让你的android应用使用可爱的iphone备忘录字体
  9. NPM 和webpack 的基础使用

随机推荐

  1. 关于Android隐式启动Activity
  2. ubutun下NDK编译环境配置
  3. Andriod视频http://pan.baidu.com/share/
  4. Mac下Android(安卓)SDK配置环境变量的配
  5. Android加载相册和拍照
  6. Android(安卓)获得软键盘状态
  7. Android:Activity移入移出效果
  8. Android(安卓)9.0进入后台或者锁屏时保活
  9. Android设置字母大小写
  10. android gallery 竖直(上下)滑动