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

来源:互联网 发布:ati hd 5770 mac 编辑:程序博客网 时间:2024/06/11 22:14

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#
到这里就可以看到效果了!!!
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 新生儿5天拉稀水怎么办 10个月孩子拉肚子怎么办 不满月的宝宝拉肚子怎么办 一周岁宝宝发烧腹泻呕吐怎么办 6个月宝宝37度怎么办 1岁宝宝发烧37.2怎么办 新生儿发烧37度3怎么办 两个月宝宝抵抗力差怎么办 6月宝宝着凉拉稀怎么办 六个月的宝宝拉肚子怎么办 衣服颜色太深了怎么办 一多半宝宝爱喝水不爱吃饭怎么办 十个月宝宝不爱吃饭怎么办 十个月宝宝突然不爱吃饭怎么办 二十个月宝宝不爱吃饭怎么办 十个月的宝宝不爱吃饭怎么办 6年级学生数学差怎么办 打印机打不出来就是一张白纸怎么办 wps表格下拉数字不递增怎么办 wps表格圈怎么打出来怎么办 手表固定圈掉了怎么办 起来觉得头晕头胀怎么办? 孩子不好好写作业怎么办 孩子考试考差了怎么办 孩子计算题马虎大意怎么办 二年级孩子不认字怎么办 发现计算上的错误怎么办 孩子不好好做作业怎么办 手破了红肿了怎么办呢 老师反应孩子在校粗心胆小怎么办 四年级的学生计算粗心怎么办 老打孩子骂孩子怎么办 站久了脚肿了怎么办 孩子初中了书写越来越潦草怎么办 给孩子自由孩子无法无天怎么办 孩子挑食幼儿园老师该怎么办 老师说孩子挑食家长怎么办 工作中老是粗心不细心怎么办 小孩数学总是特别粗心该怎么办 孩子起范疙瘩的怎么办 做题马虎不认真怎么办