在Ubuntu上为Android系统内置C可执行程序测试Linux内核驱动程序---Android8.0版本实现-对照老罗版本

        老罗版本参见:https://blog.csdn.net/luoshengyang/article/details/6571210

        在前一篇文章中,我们介绍了如何在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语言编写的可执行程序吧。

         完整代码见:https://pan.baidu.com/s/13jG4uFJqKS_YKG543L7SKQ 
         提取码:vgmf 

        一. 参照在Ubuntu上为Android系统编写Linux内核驱动程序---Android8.0版本实现-对照老罗版本一文,准备好Linux驱动程序。在系统中使用这个C可执行程序,验证在/dev目录中存在设备文件hello。

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

      zh@ubuntu:sourcecode/trunk/Android/external$ mkdir hello

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

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h> // for open
#include <unistd.h> // for close

#define DEVICE_NAME "/dev/hello"

int main(int argc, char** argv) {
    int fd = -1; 
 

        这个程序的作用中,打开/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)
        #LOCAL_FLAGS += -Wno-error
        include $(BUILD_EXECUTABLE)

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

     五. 在hello目录使用mm命令进行编译:

      zh@ubuntu:sourcecode/trunk/Android/external/hello$ mm -j16

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

    六. 将hello bin文件导入到系统,并修改为777权限

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

     使用前确保驱动已加载:

Hi3751V:/ # lsmod                                                         
Module                  Size  Used by
hello                   4003  1
Hi3751V:/ #  

Hi3751V:/ # cat /sys/class/hello/hello/val                                
0
Hi3751V:/ #  

驱动已正常加载,执行hello:

Hi3751V:/ # hello                                                         
Read original value:
0.

Write value 5 to /dev/hello.

Read the value again:
5.

Hi3751V:/ # 

看到这个结果,就说我们编写的C可执行程序可以访问我们编写的Linux内核驱动程序了。也说明我们写的驱动程序是可用的,可以用访问/dev/hello文件的方式来进行相关操作。

      介绍完了如何使用C语言编写的可执行程序来访问我们的Linux内核驱动程序,读者可能会问,能不能在Android的Application Frameworks提供Java接口来访问Linux内核驱动程序呢?可以的,接下来的几篇文章中,我们将介绍如何在Android的Application Frameworks中,增加Java接口来访问Linux内核驱动程序,敬请期待。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值