首页 > 其他分享 >驱动编写——《Android深度探索(卷1):HAL与驱动开发》笔记

驱动编写——《Android深度探索(卷1):HAL与驱动开发》笔记

时间:2024-09-06 10:05:47浏览次数:4  
标签:count HAL 函数 static file 驱动 Android buf

设备驱动大致骨架

驱动代码.c文件

#include<linux/module.h>
#include<linux/init.h>
#include <linux/slab.h>//使用kmalloc就需要include


static unsigned char men[100000];
//设备文件file,buf数据位置,count可读字节数,ppos偏移量
static ssize_t 驱动读函数(struct file *file,char *buf,size_t count,loff_t *ppos){
    copy_to_user(buf,(void*)mem,written_count);
    return written_count;
}

//设备文件file,buf数据,count可写字节数,ppos偏移量
static ssize_t 驱动写函数(struct file *file,char *buf,size_t count,loff_t *ppos){
    copy_from_user(mem,buf,count);
    return count;
}

#define DEVICE_NAME "驱动名字"
static struct file_operations dev_fops =
{
    .owner=THIS_MODULE,
    .read=驱动读函数,
    .write=驱动写函数,
    ……其他操作比如poll,ioctl
} ;

static struct miscdecice misc=
{
    .minor = MISC_DYNAMIC_MINOR,
    .name = DEVICE_NAME,
    .fops = &dev_fops
};


int 初始化驱动函数()
{
    printk(打印内核日志信息);
    //atoi(用户空间)    simple_strtol(内核空间)
    //itoa(用户空间)     snprintf(内核空间)
    int ret=misc_register(&misc);//注册设备文件,注册完后,dev/目录下会多个驱动文件,read/write这个文件就能调用你的驱动read/write了。

}


int 卸载驱动函数()
{
    misc_deregister()//注销设备文件
}
MODULE_AUTHOR(作者)        //可选
MODULE_LICENSE(开源协议)    //可选
MODULE_ALIAS(别名)          //可选
MODULE_DESCRIPTION(描述)    //可选

module_init(初始化驱动函数)
module_exit(卸载驱动函数)

同级目录下Makefile文件

下面3选1,对应不同的项目结构
obj-m+=驱动名字.o#需要手动insmod(单纯安装)、modprobe(检测依赖后进行安装)  和rmmod
obj-m+=驱动名字.o#系统启动时,它会自动使用modprobe安装驱动,不需要你手动执行安装驱动的命令。
obj-$(CONFIG_驱动名字)+=驱动名字.o#根据mk配置项来决定,一般还要在某个defconfig文件配置CONFIG_驱动名字的值

编程理念

  • static

因为在C语言中用static声明函数、变量等资源,系统会将这些函数和变量单独放在内存的某一个区域,直到程序完全退出,否则这些资源不会被释放。Linux驱动一旦装载,除非手动卸载或关机,驱动会一直驻留内存,因此这些函数和变量资源会一直在内存中。也就是说多次调用这些资源不用再进行压栈、出栈操作了,有利于提高驱动的运行效率。

  • 避免使用浮点
  • 不可使用c库
  • 目前搜寻的资料中表示,驱动的阻塞与否完全依赖于自身代码的实现,内核并不干预这个。所以如果用户使用非阻塞打开,而代码里不管fd的O_NONBLOCK,一律阻塞的话。也是可行的。这个我还不是很确定,有点空试一下。
  • 模块依赖

调试

  • ls -l /dev
  • dmesg 查看内核输出
  • echo 输入 > /dev/你的驱动
  • cat /dev/你的驱动

标签:count,HAL,函数,static,file,驱动,Android,buf
From: https://www.cnblogs.com/chenshao107/p/18393477

相关文章

  • Linux在驱动里做定时循环
    1.使用内核定时器实现思路是,在驱动里使用一个内核定时器,定时一个时间后,执行回调函数,再在回调函数里重新设置一次定时时间,以此往复,在回调函数里里执行自己的业务Linux4.4内核/*一些变量*/#definePOLL_PERIOD(HZ/1)/*(HZ/100):Pollingperiod.01seconds(10ms)*......
  • 硬件-常用驱动电路设计
    文章目录一:技术理论1.1驱动电路定义1.2低端驱动与高端驱动二:OC门与OD门2.1OC门(opencollect)2.2OD门(opendrain)2.3应用说明2.4阅读手册(达林顿管ULN2003A)三:推挽输出3.1定义3.2STM32单片机的GPIO口3.3图腾柱驱动电路四:半桥4.1定义4.2应用4.3阅读手册五:全......
  • 系统设计思想之Domain驱动
    一、DDD从放弃到入门   希望了解一套微服务框架的;希望学习到新技术的;开发的系统不复杂,模块少而独立的;当前自己设计的架构已满足拓展性,可复用性,技术与业务复杂度已分离的;   这几类人群不是DDD的目标人群,建议尽早放弃,学习领域驱动设计能得到的收获概括起来大致如下:  ......
  • Android平台通过RTSP服务实现摄像头麦克风共享
    技术背景前些年,我们在完成Android平台RTMP直播推送模块后,遇到这样的技术需求,好多开发者希望在Android平台,实现摄像头和麦克风音视频数据采集编码打包后,对外提供RTSP(RealTimeStreamingProtocol)服务。通常,这样的技术需求,需要通过集成支持RTSP服务功能的库或自己实现轻量级的RTSP服......
  • Datawhale X 李宏毅苹果书 AI夏令营(进阶Task03)
    批量归一化为什么不同的参数在更新时其梯度变化如此之大?首先,对于模型中w1,w2两个参数,可以看到其w1参数的梯度变化较为平滑,w2梯度变化较为陡峭,原因是x1较小时,当w1变化较大,由于x1较小,其整体乘积较小,对损失值影响不大;x2较大时,w2发生变化,其乘积较大,其对损失值变化很大,影响较大。......
  • 【转载】《扩散模型是实时游戏引擎(Diffusion Models Are Real-Time Game Engines)》的
    地址:https://www.youtube.com/watch?v=VniPJII6ak08月29号,谷歌DeepMind发布了一篇名为《扩散模型是实时游戏引擎(DiffusionModelsAreReal-TimeGameEngines)》的论文,向我们展示了世界上第一个完全由神经模型驱动的游戏引擎,GameNGen。这也是历史上首次,AI能在不借助其他......
  • Android开发 - Matrix 处理图像变换解析
    Matrix是什么Matrix是一个用于处理图像变换的类,它可以对图像进行缩放、旋转、平移和倾斜等操作。通俗来讲,Matrix就像是一个数学公式,用来定义如何改变图像的位置、形状或者方向Matrix的主要功能缩放(Scale):可以改变图片的大小,比如放大或缩小旋转(Rotate):可以将图片绕某个......
  • Android BLE & BluetoothGattCallback.onServicesDiscovered不回调或部分回调解决
    A.如题,调用BluetoothGatt.discoverServices()返回true了,但是一直没走到onServicesDiscovered回调中,用Ble调试蓝牙助手测试了,也是一样的情况,所以应该是外设的问题,但是ios的没问题,蓝牙处理还是有差别,网上有一种方式说是延迟去多discoverServices几次,可能可以找到,尝试了一下还是不行......
  • Android平台RTSP|RTMP播放器之视音频效果设置
    RTSP|RTMP播放器模块是大牛直播SDK的SmartMediaKit下非常优异的子产品,功能丰富、性能优异,毫秒级超低延迟,支持Windows、Linux(x86_64|aarch64架构)、Android、iOS平台。先看demo主界面,可以通过界面,做基础的设置,比如旋转、镜像等操作。下面就视音频效果,做个大概的介绍。视频填充效果:......
  • AP2121太阳能草坪灯驱动芯片
    概述AP2121是一款专为太阳能LED草坪灯设计的专用集成电路。仅需一个外接电感即可组成太阳能照明装置。由开关型驱动电路、光控开关电路、过放保护电路、内部集成的肖特基二极管等电路组成。AP2121采用专利技术,使得欠压关断时LED灯无闪烁AP2121工作电压为0.9V到1.5V,适合单节......