嵌入式学习59-ARM7(自动设备号和混杂设备)

2024-04-26 10:20

本文主要是介绍嵌入式学习59-ARM7(自动设备号和混杂设备),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

知识零碎:

                头文件查找:  /arm/路径下的头文件

                          linux驱动程序的编写,编译,运行过程

--------------------------------------------------------------------------------------------------------------------------------    1.编写  key_misc_driver1.c文件                                                                                                          2. 修改Makefile文件中的obj-m,填入.c文件,改为.o文件

           

 3.   make clean 清除上次生成的.o一系列文件                                                                                         make   生成新的.o系列文件                                                                                                          4.  cp   key_misc_driver1.ko  ~/nfs/rootfs                                                                                          5.  arm-linux-gcc   -oapp  main.c    交叉编译器编译                                                                          6.   内核代码   insmod    key_misc_driver1.ko       插入模块                                                              7. ./app 运行                                                                                                                                        8.  rmmod    key_misc_driver1  删除模块

简述字符设备驱动框架?                                                                                                 ←(背)

总结:

=====设备驱动初始化函数=====
(1)申请字符设备号(alloc_chrdev_region)->dev_t
(2)字符设备初始化(cdev_init)->fops<->led_dev
(3)添加设备号(cdev_add)->字符设备文件操作结构体led_dev<->dev_t
(4)创建设备结点-创建类(class_create)-类下创建设备(device_create)
(5)寄存器映射(ioremap)
(6)裸机设备初始化(led_init)

=====字符设备文件操作结构体函数=====
(1)【copy_from_user】:用户空间写入寄存器
(2)逻辑设备驱动(led_on)


=====字符设备驱动卸载函数=====
是字符设备驱动初始化函数的逆过程
                                                                                                                                 ←(背诵详细版)

=========================================================================

(Linux环境下的字符设备驱动都是围绕cdev这个结构展开的,它本身是linux系统对字符设备的抽象,所以重点就是cdev的初始化。                                                                                                    1.我们首先初始化file_operrations结构体的初始化                                                                        方便用户层在进行系统调用时进行内核调用完成对设备的控制   

 2.然后申请设备号,用alloc——chadev——region,有了设备号就可以用cdevinit进行初始化   

 3.初始化之后通过cdev——add将设备添加到内核中,这样我们就完成了cdev的初始化。)

                                                                                                                             ←(简略理解版)


 

自动获得设备号函数

alloc  chardev  region:分配字符设备区域                                                                                         *dev:设备号的数据类型(unsigned int)                                                                                          baseminor:申请的子设备号从几开始                                                                                                 count:申请子设备号的个数                                                                                                                *name: 设备起名                         

                                                                   

---------------------------------------------------------------------------------------------------------------------------------

     cdev:类型名

12(高位)   20(低位)                         

 特殊:                                                                                                                                                         所有的主设备号都是10号

           混杂设备是字符设备的一种。

这篇关于嵌入式学习59-ARM7(自动设备号和混杂设备)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/937323

相关文章

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

SpringBoot项目启动后自动加载系统配置的多种实现方式

《SpringBoot项目启动后自动加载系统配置的多种实现方式》:本文主要介绍SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的... 目录1. 使用 CommandLineRunner实现方式:2. 使用 ApplicationRunne

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

python实现自动登录12306自动抢票功能

《python实现自动登录12306自动抢票功能》随着互联网技术的发展,越来越多的人选择通过网络平台购票,特别是在中国,12306作为官方火车票预订平台,承担了巨大的访问量,对于热门线路或者节假日出行... 目录一、遇到的问题?二、改进三、进阶–展望总结一、遇到的问题?1.url-正确的表头:就是首先ur

Spring使用@Retryable实现自动重试机制

《Spring使用@Retryable实现自动重试机制》在微服务架构中,服务之间的调用可能会因为一些暂时性的错误而失败,例如网络波动、数据库连接超时或第三方服务不可用等,在本文中,我们将介绍如何在Sp... 目录引言1. 什么是 @Retryable?2. 如何在 Spring 中使用 @Retryable

使用 Python 和 LabelMe 实现图片验证码的自动标注功能

《使用Python和LabelMe实现图片验证码的自动标注功能》文章介绍了如何使用Python和LabelMe自动标注图片验证码,主要步骤包括图像预处理、OCR识别和生成标注文件,通过结合Pa... 目录使用 python 和 LabelMe 实现图片验证码的自动标注环境准备必备工具安装依赖实现自动标注核心

QT实现TCP客户端自动连接

《QT实现TCP客户端自动连接》这篇文章主要为大家详细介绍了QT中一个TCP客户端自动连接的测试模型,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录版本 1:没有取消按钮 测试效果测试代码版本 2:有取消按钮测试效果测试代码版本 1:没有取消按钮 测试效果缺陷:无法手动停

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06