HAL -- (2):编写android C可执行文件调用驱动
在前一篇文章中,我们介绍了如何在Ubuntu上为Android系统编写Linux内核驱动程序。在这个名为zhx_pritn的Linux内核驱动程序中,我们实现了基本的都一个整形int数据的读写。在这一篇文章里,我们将通过自己编写的C可执行程序来访问设备文件/dev/zhx_print。可能读者会觉得奇怪,怎么能在Android系统中用C语言来编写应用程序呢?Android系统上的应用程序不都是Java应用程序吗?其实是可以的,读者不妨用adb shell命令连上Android模拟器,在/system/bin目录下可以看到很多C可执行程序,如cat命令。今天,我们就来学习一下怎么在Android系统中添加用C语言编写的可执行程序.
一.:参照HAL(1):编写android内核驱动 一文,准备好Linux驱动程序。使用Android模拟器加载包含这个Linux驱动程序的内核文件,并且使用adb shell命令连接上模拟,验证在/dev目录中存在设备文件zhx_print。
二:进入到Android源代码工程的external目录,创建zhx_print目录:
USER-NAME@MACHINE-NAME:~/Android$
cd external
USER-NAME@MACHINE-NAME:~/Android/external$ mkdir zhx_print
USER-NAME@MACHINE-NAME:~/Android/external$ mkdir zhx_print
三:进入zhx_print目录,创建print.c文件
print.c
#include<stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#define PRINT_NAME "/dev/zhx_print"
int main(void)
{
int fd = -1;
int val = 101;
fd = open(PRINT_NAME,O_RDWR) ;
if(fd == -1)
{
printf("open zhx_print error.\n");
return 0;
}
printf("Read value\n");
read(fd,&val,sizeof(val));
printf("value = %d\n",val);
printf("write value\n");
val = 100;
write(fd,&val,sizeof(val));
val = 0;
printf("Read value again\n");
read(fd,&val,sizeof(val));
printf("value = %d\n",val);
close(fd);
return 0;
}
#include <stdlib.h>
#include <fcntl.h>
#define PRINT_NAME "/dev/zhx_print"
int main(void)
{
int fd = -1;
int val = 101;
fd = open(PRINT_NAME,O_RDWR) ;
if(fd == -1)
{
printf("open zhx_print error.\n");
return 0;
}
printf("Read value\n");
read(fd,&val,sizeof(val));
printf("value = %d\n",val);
printf("write value\n");
val = 100;
write(fd,&val,sizeof(val));
val = 0;
printf("Read value again\n");
read(fd,&val,sizeof(val));
printf("value = %d\n",val);
close(fd);
return 0;
}
四:在zhx_print目录下创建Android.mk文件
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := zhx_print
LOCAL_SRC_FILES := $(call all-subdir-c-files)
include $(BUILD_EXECUTABLE)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := zhx_print
LOCAL_SRC_FILES := $(call all-subdir-c-files)
include $(BUILD_EXECUTABLE)
五:在zhx_print目录下执行以下命令:
/ics/external/zhx_print$ mm
六:在android源码目录下执行以下命令:
ics$ make snod
ok 到这里,就在android系统上添加了 zhx_print可执行程序,
七:在android系统里面执行以下命令:
root@android:/system/bin# ./zhx_print
./zhx_print
Read value
value = 20
write value
Read value again
value = 100
root@android:/system/bin#
./zhx_print
Read value
value = 20
write value
Read value again
value = 100
root@android:/system/bin#
到这里就可以看到效果了!!!