从LINUX 驱动 到APK (2)

通过c语言实现对对应节点的操作修改对应的参数值

  此次在实现了对应的内核驱动的基础上实现linux应用程序访问对用的驱动节点的过程。实现过程:添加对用的实现文件,添加编译规则,编译实现

  1、添加对用的实现文件

    选择合适的位置存放相关源码,本次我存放在:vendor\welcome 目录下,新建welcome.c

    Tips:在编译出现未定义的情况,有可能是内核升级后没有对应的头文件,可以linux下使用终端man 函数名 可以看到函数使用及定义的相关头文件,添加即可

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
//驱动节点为内核生成的节点
#define DEVICE_NAME "/dev/welcomf"

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.%m\n",DEVICE_NAME);
        return -1;
    }

    printf("Read original value : \n");
    read(fd,&val,sizeof(val));
    printf("val = %d.\n",val);

    val = 2;
    printf("write value %d to %s.\n",val,DEVICE_NAME);
    write(fd,&val,sizeof(val));

    printf("Read  value again : \n");
    read(fd,&val,sizeof(val));
    printf("val = %d.\n",val);

    return 0;
}

  2、添加编译规则 在此目录下添加 Android.mk    

LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS:=optional
LOCAL_MODULE:=welcomebin
LOCAL_SRC_FILES:=$(call all-subdir-c-files)
include $(BUILD_EXECUTABLE)

  3、编译实现 直接编译模块 mmm vendor/welcome

    然后打包下载 ,或者直接将生产的bin文件使用adb push到system/bin 目录即可----如果不能使用注意节点权限问题

   通过adb 进入到相应目录运行该bin文件即可。能正确输出log 及结果 即完成代码

时间: 2024-10-14 18:22:10

从LINUX 驱动 到APK (2)的相关文章

从linux 驱动 到apk 前言

前段时间抽空,实现了一下从kernel到apk的全过程,主要借鉴老罗的博客从java层到framework到JNI到HAL到kernel的hello 例子: http://blog.csdn.net/luoshengyang/article/details/6568411 之前这篇博文看了很多遍,觉得不是很难,应该问题不到,真到实现的时候才发现里面有不少坑,正印证了那句老话"纸上得来终觉浅,绝知此事要躬行",还是要多练,才能搞懂.此次博客以实用主义的角度出发,移植实现功能. 1.实现一

从LINUX 驱动 到APK (1)

实现一个简单的内核驱动 此次实现基于MTK8173平台Android 6.0 实现. 此次使用一个虚拟的硬件设备,这个设备只有一个4字节的寄存器,它可读可写,移植的角度来实现我们将其命名为welcome.在kernel部分要实现一个驱动主要分为,添加编译选择选项,实现对应的相关驱动,添加进入内核编译. 1,.添加编译选项 此项选择的源码存放的路径为 kernel-3.18\drivers\misc\mediatek目录 1.1 修改Kconfig文件 再合适的位置添加 config MTK_WE

Linux代码的重用与强行卸载Linux驱动

(一)Linux代码的重用 重用=静态重用(将要重用的代码放到其他的文件的头文件中声明)+动态重用(使用另外一个Linux驱动中的资源,例如函数.变量.宏等) 1.编译是由多个文件组成的Linux驱动(静态重用) 对于复杂的Linux驱动,需要使用多个源代码文件存放不同的功能代码,这样做有利于代码分类和管理,那么就不得不编译多个源代码文件,最终生成.ko文件或编译进Linux内核 下面,就介绍将3个.c文件分别编译为3个.o文件,并将这3个.o文件链接(link)成一个.ko文件——静态重用 假

第六章——使用实例来理解Linux驱动开发及心得

在这一章中主要介绍了一个Linux驱动程序,以实战的方式向我们介绍了一个Linux驱动程序的例子. Linux驱动的工作和访问方式是Linux的亮点之一,同时受到了业界的广泛好评. Linux系统 将每一个驱动都映射成一个文件.这些文件称为设备文件或驱动文件,都保存在/dev目录中.这种 设计理念使得与Linux驱动进行交互就像与普通文件进行交互一样容易.当然,也比访问LinuxAPI 更容易. 由于大多数Linux驱动都有与其对应的设备文件, 因此与Linux驱动交换数据就变成了与 设备文件交

Linux驱动开发盲点笔记1

1. vim中在找到搜索目标后,使用n与N进行定位查找 2. vim中使用gg到最好第一行,使用xxxG到某一行,否则G直接到最后一行: 3. ln -s 产生的链接文件最终指向的目标文件src 新产生的当前软链接文件dst. ln -s project(磁盘上实际存在的文件或者目录) a.lnk ln -s src dst(新产生的文件dst,dst链接到src) symlink功能类似 4 tar -czvf 最终生产的tar打包好的文件 待打包的文件或者文件夹 tar czvf a.tar

常见 wifi热点的linux 驱动

小度Wifi.360Wifi Windows.linux驱动 小度wifi什么的就是一个无线网卡,当然可以自由使用,然官方却说不支持无限网卡功能… 现提供Windows平台和linux平台的驱动安装方法. Windows 驱动下载:http://pan.baidu.com/s/1GcFF1 Linux 使用lsusb命令可以获取USB设备ID.小度wifi为2955:0001或2955:1001 360WIFI2为148F:760B 二者均使用Mediatek Ralink MT7601芯片,都

浅析Linux驱动模型中的底层数据结构kobject和kset

1.kobject Linux内核用kobject来表示一个内核对象.它和Sysfs文件系统联系密切,在内核中注册到系统中的每个kobject对象在sysfs文件系统中对对应着一个文件目录.kobject数据结构通常的用法是嵌入到其对他的数据结构中(即容器,比如cdev结构),用于实现内核对该类数据结构对象的管理.这些数据结构(容器)通过kobject连接起来,形成了一个树状结构. 它在源码中的定义为: /*<include/linux/kobject.h>*/ struct kobject

Linux驱动经典面试题目

1.  linux驱动分类 2.  信号量与自旋锁 3.  platform总线设备及总线设备如何编写 4.  kmalloc和vmalloc的区别 5.  module_init的级别 6.  添加驱动 7.  IIC原理,总线框架,设备编写方法,i2c_msg 8.  kernel panic 9.  USB总线,USB传输种类,urb等 10.android boot 流程 11.android init解析init.rcLinux驱动经典面试题目,布布扣,bubuko.com

几个Linux驱动面试题目

这几天面试几个想做安卓Linux驱动的,总体感觉上驱动基础还是比较薄弱,大部分情况是虽然做过驱动,但是基本上都是采用内核现成的,或者是开发板上已经有的,单独写过模块驱动很少,驱动机制理解不是很透彻.以下是几个随口问过的基础问题,供参考. 1.字符型驱动设备你是怎么创建设备文件的,就是/dev/下面的设备文件,供上层应用程序打开使用的? 2.写一个中断服务需要注意哪些?如果中断产生之后要做比较多的事情你是怎么做的? 3.自旋锁和信号量在互斥使用时需要注意哪些?在中断服务程序里面的互斥是使用自旋锁还