/*设备驱动模块加载函数*/
196 int globalmem_init(void)
197 {
198 int result;
199 dev_t devno = MKDEV(globalmem_major, 0);
200
201 /* 申请设备号*/
202 if (globalmem_major)
203 result = register_chrdev_region(devno, 2, "globalmem");
204 else /* 动态申请设备号 */
205 {
206 result = alloc_chrdev_region(&devno, 0, 2, "globalmem");
207 globalmem_major = MAJOR(devno);
208 }
209 if (result < 0)
210 return result;
211
212 /* 动态申请2个设备结构体的内存*/
213 globalmem_devp = kmalloc(2*sizeof(struct globalmem_dev), GFP_KERNEL);
214 if (!globalmem_devp) /*申请失败*/
215 {
216 result = - ENOMEM;
217 goto fail_malloc;
218 }
219 memset(globalmem_devp, 0, 2*sizeof(struct globalmem_dev));
220
221 globalmem_setup_cdev(&globalmem_devp[0], 0);
222 globalmem_setup_cdev(&globalmem_devp[1], 1);
223 return 0;
224
225 fail_malloc: unregister_chrdev_region(devno, 2);
226 return result;
227 }
228
229 /*模块卸载函数*/
230 void globalmem_exit(void)
231 {
232 cdev_del(&(globalmem_devp[0].cdev));
233 cdev_del(&(globalmem_devp[1].cdev)); /*注销cdev*/
234 kfree(globalmem_devp); /*释放设备结构体内存*/
235 unregister_chrdev_region(MKDEV(globalmem_major, 0), 2); /*释放设备号*/
236 }
237
238 MODULE_AUTHOR("Song Baohua");
239 MODULE_LICENSE("Dual BSD/GPL");
240
241 module_param(globalmem_major, int, S_IRUGO);
242
243 module_init(globalmem_init);
244 module_exit(globalmem_exit);
主要的不同在于同时申请了2个globalmem的空间。其他的都一样,很简单。
相关推荐
python语言下使用opencv接口cv2.VideoCapture()接口调用海康机器人工业相机
文章目录 目录 文章目录 前言 一、opencv接口介绍 二、调用海康机器人工业相机 1.使用海康机器人工业相机的前提 2.调用海康机器人工业相机进行显示 3.调用海康机器人工业相机进行存图 4.调用海康机器人工业相机存视频 5.调用海康机器人工业相机进行简单图像处理 总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下.
globalmem设备驱动
下面将以linux设备驱动开发详解上的globalmem设备驱动为例来详细分析字符设备驱动的过程。 #include //模块所需的大量符号和函数定义 #include #include //文件系统相关的函数和头文件 #include #include #include //包含驱动程序使用的大部分内核API的定义,包括睡眠函数以及各种变量声明 #include //指
Claude Code 完整学习笔记
Claude Code 学习笔记摘要 Claude Code是Anthropic推出的智能编码工具,基于Claude Opus 4.5模型构建,提供跨平台支持(终端/VS Code/JetBrains/Web等)。核心功能包括: 代码库理解与多文件编辑 命令执行与开发工具集成 智能体协作开发流程 安装要求Node.js≥18,提供原生/Homebrew/npm等多种安装方式,支持环境变量配置API访问。基础交互模式包括会话管理、文件操作和代码审查等功能,可自动读写文件并执行精确修改。 (149字)
linux设备驱动开发详解——globalmem
linux设备驱动开发详解——globalmem 收藏 常见的两种错误:1.在插入模块的时候出现如下问题: # insmod globalmem.ko in
SAP HR模块配置假期日历和缺勤类型
SAP的HR模块。业务顾问在实施时一般会配置未来10年的假期日历,到期后再进行配置。同时,增加请假类型(缺勤信息类型)。记录这一过程。
Win10本地账户密码遗忘?巧用指纹/PIN快速重置(家庭版/专业版通用指南)
本文提供了一份详细的Win10本地账户密码遗忘自救指南,适用于家庭版和专业版用户。核心方法是利用已登录的指纹或PIN码权限,通过创建新的管理员账户或使用系统工具,安全重置遗忘的本地账户密码,无需第三方工具或重装系统,有效保护个人数据。
《linux设备驱动开发详解》中globalmem代码笔记
代码 先把完整代码粘上,后面再逐个解释 #include #include #include #include #include #include #include #include #define GLOBALMEM_SIZE 0x1000 #define GLOBALMEM_MAJOR 0 #define GLOBALMEM_MAGIC 'g' #define MEM_
2、瑞丽-伯纳德对流的拉格朗日拟序结构(FTLE场结果对比)
在中,我简单比较了瑞丽伯纳德对流的FTLE场,但是因为粒子追踪采用的是欧拉方法,所以精度不是很高, 因此与文献中的结果还是有些差别。下面放一张文献中的FTLE场,参数与上篇文章是一致的,Ra = 1e8;Pr = 1;本文将详细的介绍如何得到这样的图片,好吧,其实也不是很详细。总之,先展示以下我个人的结果。可以看出,上图基本上与文献是一致的,因为这里展示的是瞬时场,所以当然不可能是完全一致,至于提取的LCS结构,我在下面也会提及。本着详细介绍的原则,所以这里我很良心的从流场计算开始介绍。
Linux设备驱动入门----globalmem字符设备驱动
1、什么是globalmem虚拟设备 (1)、globalmem字符设备驱动中,分配一片内存大小为GLOBALMEM_SIZE(4K)的空间 (2)、提供对该片内存的读写、控制和定位函数 (3)、用户进程能够通过linux系统调用访问这篇内存 [cpp] view plain copy #include #include
127.手机防回滚机制(Anti-Rollback)详解|efuse熔丝原理与降级绕过方案
手机刷机与维修技术指南 本文针对电子工程师和维修人员,详细介绍了主流手机品牌(高通、联发科、苹果)的刷机原理与维修方法。内容包括三大平台的刷机协议差异、关键操作模式(Fastboot/DFU/EDL)、分区表修复等核心技术,并提供了完整的Python自动化刷机脚本。文章重点解决系统崩溃、基带丢失、分区损坏等常见故障,涵盖从环境搭建到具体操作的全流程指导,所有指令均经过实测验证。适用于专业维修场景下的跨品牌设备修复需求。
统信UOS丨开机无法进入系统 无法打开控制台访问权限,root账号被锁定(cannot open access to console, the root account is locked)
步骤四:分别打开文件发现Roota下的fstab就是我们要找的文件,打开查看Roota的属性发现其为挂载的磁盘nvme0n1p3。步骤三:按Win+E打开文件管理器在分区中查找/etc/fstab文件,发现Roota和Rootb下都有该文件。步骤二:按键盘Ctrl+Alt+F4,进入终端控制台,如下图所示输入startx回车,进入桌面。步骤一:找到UOS系统安装的U盘,选择U盘启动进入安装界面,如下图所示。步骤七:关机,拔出U盘,启动电脑,OK,问题解决。
ubantu14.04第三个使用文件私有数据的globalmem的设备驱动
1. 代码如下:#include #include #include #include #include #include #include #include #include //#include //找不到这个文件 #include // for kmalloc and kfree function #include #define GLOBALMEM_SIZE 0
汉书HE8,好用的汇编代码编写工具
汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大
linux设备驱动--globalmem字符设备框架分析
linux设备驱动--globalmem字符设备框架分析 最近正在学习设备驱动开发,因此打算写一个系列博客,即是对自己学习的一个总结,也是对自己的一个督促,有不对,不足,需要改正的地方还望大家指出,而且希望结识志同道合的朋友一起学习技术,共同进步。 作者:liufei_learning(转载请注明出处) email:flying0216@foxmail.com IT学习交流群:...
VC中sqlite的使用
在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示
Statistics and Machine Learning Toolbox
Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具
Linux设备驱动开发详解globalmem
常见的两种错误: 1.在插入模块的时候出现如下问题: #insmod globalmem.ko insmod: error inserting 'globalmem.ko': -1 Device or resource busyANSWER:主设备号被占用了,换另一个。你把globalmem.c文件里面的宏定义那里改为226或其他,然后再编译就可以...
设备驱动实例--globalmem
globalmem所学
linux-2.6.38.8 内核下实现《linux设备驱动开发详解》globalmem 驱动实例
--摘要 《linux设备驱动开发详解》第6章介绍了globalmem驱动实例,但是其实现环境是在比较低的内核版本下的,对于使用Fedora15的用户参照书上介绍的步骤会出现很多问题,这是由于Fedora15使用了2.6.38版的内核,这个内核比较新,进行了许多的更新,导致书本上介绍的部分代码已不支持了。本文介绍了2.6.38.8内核下,实现globalmem驱动实例的整个过程.最后贴...
《Linux设备驱动开发详解》源码——globalmem
/home/lihacker/develop/svn/ldd6410-read-only/training/kernel/drivers/
《linux设备驱动开发详解》学习之globalmem
1.代码: #include #include #include #include #include //#include #include #include #include #include #include #include #include #define GLOBALMEM_SIZE 0x1000 /*4KB*/ #de
Linux设备驱动开发详解 globalmem 设备驱动源码,适配x86_64深度操作系统linux内核版本5.15.45
编辑源码:~/code/kernel-module-project/globalmem/globalmem_module.c。最后有个报错,可能是ioctl新版本接口未实现导致,以后再分析。测试globalmem_module.ko。创建设备节点(注意主设备号是509)查看/proc/devices。编辑Makefile。
Linux设备驱动中的并发控制(四)
并发和竞态广泛存在,中断屏蔽、原子操作、自旋锁和互斥体都是解决并发问题的机制。中断屏蔽很少单独被使用,原子操作只能针对整数进行,因此自旋锁和互斥体应用最为广泛。自旋锁会导致死循环,锁定期间不允许阻塞因此要求锁定的临界区小。互斥体允许临界区阻塞,可以适用于临界区大的情况。
linux设备驱动开发学习之旅--简单字符驱动实例globalmem
[cpp] view plaincopy /** * Author:hasen * 参考 :《linux设备驱动开发详解》 * 简介:android小菜鸟的linux * 设备驱动开发学习之旅 * 主题:简单的字符设备驱动globalmem * Date:2014-10-30 */ /**
1万+



被折叠的 条评论
为什么被折叠?



