HAL(2) -- 编写android C可执行文件调用驱动

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
 
三:进入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;
}
 
四:在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)
 
五:在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#
到这里就可以看到效果了!!!
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值