Android 驱动学习调试

1 Android 驱动代码编译

参考https://www.sharetechnote.com/html/Linux_DeviceDriver_Programing.html#Device_Driver_HelloWorld编译ko文件调试驱动代码,将ko文件push到手机上验证

相关C文件testdriver.c

#include <linux/init.h>
#include <linux/module.h>
static int __init testdriver_init(void)
{printk("Test Driver Initialized\n");return 0;
}
static void __exit testdriver_exit(void)
{printk("Test Driver Being Removed\n");
}
module_init(testdriver_init);
module_exit(testdriver_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("ShareTechnote");
MODULE_DESCRIPTION("Test Driver : The Simplest Driver");
MODULE_VERSION("1.0.0");

相关Make file文件如下

obj-m += testdriver.o 
KDIR  := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd) 
default:
$(MAKE) -C $(KDIR) M=$(PWD) modules

Make编译

编译成功后push到手机上data/data目录,安装后报错

insmod: failed to load testdriver.ko: Exec format error

原因1:内核版本不一致

手机内核版本,使用uname -r

电脑内核版本为:5.4.0-137-generic

原因2:网上搜索后需要使用ARM交叉编译

Make file参考网络建议修改Makefile,相关Make file文件如下

obj-m += testdriver.oKDIR  := ${OUT}/obj/KERNEL_OBJ/$(info kdir is $(KDIR))PWD := $(shell pwd)$(info pwd is $(PWD))default:$(MAKE) CROSS_COMPILE=aarch64-linux-gnu- LLVM=1 LLVM_IAS=1  ARCH=arm64 -C $(KDIR) M=$(PWD) modules

编译报错,尝试各种方式无法解决该问题

解决方案:搜索相关MTK基线上相关代码,在vendor\mediatek\kernel_modules上有MTK加的相关KO文件的编译,添加Android.mk,修改Makefile如下

Android.mk文件

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

$(info zmao android mk start)

LOCAL_MODULE := testdriver.ko

LOCAL_PROPRIETARY_MODULE := true

LOCAL_MODULE_OWNER := mtk

LOCAL_SRC_FILES := \

testdriver.c \

Makefile

ifeq ($(TARGET_OUT_VENDOR),)

LOCAL_MODULE_PATH := $(ALPS_OUT)/vendor/lib/modules

else

LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/lib/modules

endif

$(info kernel mode is $(MTK_KERNEL_MODULE))

include $(MTK_KERNEL_MODULE)

Makefile文件

$(warning zmao start complie)

$(warning ########################### is $(srctree))

ccflags-y += -Wno-unused-variable

ldflags-y += -s

obj-m += testdriver.o

$(warning zmao success !!!!!!!)

成功编译出ko文件,push到手机上测试,成功安装驱动程序

2、调试驱动程序时出现 No such device or address Error

网上搜了很多,最后发现open函数没有执行,需要添加如下代码

    printk("zmao init start \n");

    cdev_init(&_cdev,&testdriver_fops);

    _cdev.owner = THIS_MODULE;

    _cdev.ops = &testdriver_fops;//Create Dev and file_operations Connected

    cdev_add(&_cdev,first,1);

    printk("zmao init end %d \n");

static int __init testdriver_init(void){printk("zmao Test Driver Initialized\n");if (alloc_chrdev_region(&first, 0, 3, "TestDriver") < 0){return -1;}printk("zmao <Major, Minor>: <%d, %d>\n", MAJOR(first), MINOR(first));if ((cl = class_create(THIS_MODULE, "chardrv")) == NULL){printk(KERN_INFO "class_create() failed");unregister_chrdev_region(first, 1);return -1;}if (device_create(cl, NULL, first, NULL, "testdriver") == NULL){printk("zmao device_create() failed");class_destroy(cl);unregister_chrdev_region(first, 1);return -1;}printk("zmao init start \n");cdev_init(&_cdev,&testdriver_fops);_cdev.owner = THIS_MODULE;_cdev.ops = &testdriver_fops;//Create Dev and file_operations Connectedcdev_add(&_cdev,first,1);printk("zmao init end %d \n");return 0;}

3、添加C进程访问内核驱动 

Android.mk文件

LOCAL_PATH := $(call my-dir)
$(info start client compile ++++)
include $(CLEAR_VARS)  
LOCAL_MODULE_TAGS := optional  
LOCAL_SRC_FILES := rwtest.c   
LOCAL_MODULE := rwtest
LOCAL_MODULE_CLASS := EXECUTABLES
$(info start client compile ----)
include $(BUILD_EXECUTABLE)

rwtest.c文件 

#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
int main()
{int fd;int ret = 0;char buff[100];fd = open("/dev/testdriver",O_RDWR);if(fd < 0) {printf("/dev/testdriver open failed (ret = %d)\n",fd);return 1;};ret = read(fd,buff,10);printf("%s\n",buff);ret = write(fd,"Hello",6);close(fd);return 1;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/174681.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

批量去除pdf每一页相同未知的同样的内容

例如我想去除每一页右下角的www.alevelcollege.com ①打开acrobat pro ②编辑文件和图像 ③ctrlF输入字符串www.alevelcollege.com替换为空 ④鼠标点击替换 ⑤回车键按下不放&#xff0c;会自动翻页&#xff0c;直到翻页到最后一页。

input改造文件上传,el-table的改造,点击上传,拖拽上传,多选上传

第一个input标签效果 第二个input标签的效果 el-table的改造效果 <template><div class"outerBox"><div class"analyze" v-if"status"><div class"unFile"><div class"mainBox"><img clas…

电阻距离------Resistance distance

原来的解释来自维基百科&#xff1a;https://en.wikipedia.org/wiki/Resistance_distance 在图论中&#xff0c;简单连通图G的两个顶点之间的电阻距离等于电网上两个等效点之间的电阻&#xff0c;电网被构造为与G相对应&#xff0c;每条边被一欧姆的电阻代替。它是图上的度量。…

分布式:一文掌握分布式ID生成方案

目录 背景1、UUID2、数据库自增ID2.1、主键表2.2、ID自增步长设置 3、号段模式4、Redis INCR5、雪花算法6、美团(Leaf)7、百度(Uidgenerator)8、滴滴(TinyID)总结比较 背景 在复杂的分布式系统中&#xff0c;往往需要对大量的数据进行唯一标识&#xff0c;比如在对一个订单表进…

Python-函数

目录 一、函数的定义与调用 二、日期时间函数 1、时间戳 2、日历函数 三、随机数函数 1、random.random() 2、random.uniform(a,b) 3、random.randomint(a,b) 4、random.randrange(start,stop,step) 5、random.choice(sequence) 6、random.shuffle([random]) 7、ran…

2023年阿里云双11优惠来了,单笔最高可省2400元!

2023年阿里云双11活动终于来了&#xff0c;阿里云推出了金秋云创季活动&#xff0c;新用户、老用户、企业用户均可领取金秋上云礼包&#xff0c;单笔最高立减2400元&#xff01; 一、活动时间 满减券领取时间&#xff1a;2023年10月27日0点0分0秒-2023年11月30日23点59分59秒 …

BSTree二叉树讲解

二叉搜索树的概念&#xff1a; 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值 若它的右子树不为空&#xff0c;则右子树上所有节点的值…

YOLOv5— Fruit Detection

&#x1f368; 本文为[&#x1f517;365天深度学习训练营学习记录博客 &#x1f366; 参考文章&#xff1a;365天深度学习训练营-第7周&#xff1a;咖啡豆识别&#xff08;训练营内部成员可读&#xff09; &#x1f356; 原作者&#xff1a;[K同学啊 | 接辅导、项目定制](https…

CentOS 安装 tomcat 并设置 开机自启动

CentOS 安装 tomcat 并设置 开机自启动 下载jdk和tomcat curl https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz curl https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.15/bin/apache-tomcat-10.1.15.tar.gz解压jdk和tomcat并修改目录名称 tar -z…

homeassistant安装HACS应用商店

环境&#xff1a;iStoreOS&#xff0c;已在商店中安装homeassistant。 homeassistant在iStoreOS中是以docker容器运行的。 1、进入终端&#xff0c;输入账号和密码&#xff08;默认&#xff1a;root&#xff0c;password&#xff09; 查看容器&#xff1a;docker ps 进入容…

3.3每日一题(变量可分离方程)

1、判断类型选方法&#xff1a;等式中分别提一个x、y出来&#xff0c;形成了x与y相乘的等式&#xff1b;为变量可分离类型 2、不一定非得把y解出来&#xff0c;化成上述的等式即可&#xff08;为隐函数的方程解&#xff09; 注&#xff1a;等式不定积分后记得&#xff0b;一个…

大数据-Storm流式框架(七)---Storm事务

storm 事务 需求 storm 对于保证消息处理&#xff0c;提供了最少一次的处理保证。最常见的问题是如果元组可以被 重发&#xff0c;可以用于计数吗&#xff1f;不会重复计数吗&#xff1f; strom0.7.0 引入了事务性拓扑的概念&#xff0c;可以保证消息仅被严格的处理一次。因此可…

【电路笔记】-交流电感和感抗

交流电感和感抗 文章目录 交流电感和感抗1、概述1.1 电感1.2 电感器 2、频率特性2.1 电抗(Reactance)2.2 相移2.3 感应现象 3、RL滤波器4、总结 在之前有 交流电阻的文章中&#xff0c;我们已经看到电阻器在正常频率下的直流或交流状态下的行为是相同的。 然而&#xff0c;其他…

【机器学习合集】人脸表情分类任务Pytorch实现TensorBoardX的使用 ->(个人学习记录笔记)

人脸表情分类任务 注意&#xff1a;整个项目来自阿里云天池&#xff0c;下面是开发人员的联系方式&#xff0c;本人仅作为学习记录&#xff01;&#xff01;&#xff01;该文章原因&#xff0c;学习该项目&#xff0c;完善注释内容&#xff0c;针对新版本的Pytorch进行部分代码…

山东大学开发可解释深度学习算法 RetroExplainer,4 步识别有机物的逆合成路线

逆合成旨在找到一系列合适的反应物&#xff0c;以高效合成目标产物。这是解决有机合成路线的重要方法&#xff0c;也是有机合成路线设计的最简单、最基本的方法。 早期的逆合成研究多依赖编程&#xff0c;随后这一工作被 AI 接替。然而&#xff0c;现有的逆合成方法多关注单步逆…

机器学习第一周

一、概述 机器学习大致会被划分为两类&#xff1a;监督学习&#xff0c;无监督学习 1.1 监督学习 监督学习其实就是&#xff0c;给计算机一些输入x和正确的输出y&#xff08;训练数据集&#xff09;&#xff0c;让他总结x->y的映射关系&#xff0c;从而给他其他的输入x&a…

【算法】动态规划之LeetCode 53.最大子数组和

目录 文章目录 **目录**&#x1f4d1;前言1.题目描述2. 动态规划法 &#x1f4d1;文章末尾 &#x1f4d1;前言 本文主要是leetcode题解析&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是青衿&#x1f947; ☁…

ThreadLocal 会出现内存泄漏吗?

ThreadLocal ThreadLocal 是一个用来解决线程安全性问题的工具。它相当于让每个线程都开辟一块内存空间&#xff0c;用来存储共享变量的副本。然后每个线程只需要访问和操作自己的共享变量副本即可&#xff0c;从而避免多线程竞争同一个共享资源。它的工作原理很简单&#xff0…

基于Ubuntu20.04安装ROS系统

文章目录 一、ROS简介二、ROS安装三、ROS安装测试四、安装问题解决1. sudo rosdepc init&#xff1a;找不到命令2. ERROR: cannot download default sources list from...3. Command roscore not found...4. Resource not found: roslaunch... 一、ROS简介 ROS是用于编写机器人…

[ubuntu系统下的文本编辑器nano,vim,gedit,文件使用,以及版本更新问题]

文本编辑器概要 在Ubuntu系统下&#xff0c;有许多文本编辑器可供选择&#xff0c;每个编辑器都有其独特的特性和用途。以下是一些常见的文本编辑器&#xff1a; Gedit&#xff1a; 这是Ubuntu默认的文本编辑器&#xff0c;它简单易用&#xff0c;适合基本的文本编辑任务。 安…