随笔分类 -  linux驱动

摘要:内核模块在insmod时允许传递参数,来实现更灵活的需求。例如:在调试内核模块时,可能需要控制该模块的日志输出等级,来方便分析模块的问题。普通的做法是代码中有一个变量控制日志等级,修改编译后加载模块。 但是如果通过传递参数的方式来修改日志等级,就无需修改和重新编译了。 linux内核通过宏modul 阅读全文
posted @ 2024-12-10 10:42 thammer 阅读(19) 评论(0) 推荐(0) 编辑
摘要:本文针对嵌入式设备 0.准备工作 安装并配置好交叉编译工具链 交叉编译linux内核,为编译内核模块提供编译环境 1.内核模块的入口和出口 linux内核提供了一对注册宏module_init(initfn)和module_exit(exitfn),它俩用于向内核注入内核模块的入口函数和出口函数。分 阅读全文
posted @ 2024-09-26 18:55 thammer 阅读(32) 评论(0) 推荐(0) 编辑
摘要:linux ARM的原子操作源文件位于 linux源码宏展开 最开始由如下宏定义,linux的各种宏太复杂了,分析起来有点费劲 又根据 "GCC内联汇编" 的替换规则,result,tmp,v counter,&v counter,i按照出现的顺序分别替换%0 %4,操作数被逐个替换: 单独提取汇编 阅读全文
posted @ 2020-03-30 00:26 thammer 阅读(1051) 评论(0) 推荐(0) 编辑
摘要:下面是一个最简单的字符设备驱动。 #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/cdev.h> #include <linux/slab.h> #include <lin 阅读全文
posted @ 2020-03-21 21:59 thammer 阅读(253) 评论(0) 推荐(0) 编辑
摘要:本文是我迭代学习的笔记,不保证内容的严谨性。 目录 "1.linux内核模块简介" "2.linux内核模块示例" "3.内核模块加载/卸载原理" 1. linux内核模块简介 由于linux内核需要支持多种功能模块或者硬件设备,而这些功能模块或者硬件设备在不同板子上千差万别。受存储空间的限制,不可 阅读全文
posted @ 2020-03-21 15:02 thammer 阅读(454) 评论(0) 推荐(0) 编辑
摘要:首先来个简单版本 1 /* given a pointer @ptr to the field @member embedded into type (usually 2 * struct) @type, return pointer to the embedding instance of @ty 阅读全文
posted @ 2015-05-09 22:49 thammer 阅读(227) 评论(0) 推荐(0) 编辑
摘要:typeof基本介绍 1 typeof(x) 这是它的使用方法,x可以是数据类型或者表达式。它的作用时期和sizeof类似,就是它是在编译器从高级语言(如C语言)翻译成汇编语言时起作用,这个很重要,稍后会解释。 当x是数据类型时,它和关键字typedef很相似,只不过typedef是要先定义再使用, 阅读全文
posted @ 2015-05-09 18:01 thammer 阅读(580) 评论(0) 推荐(0) 编辑
摘要:一个简单的驱动 模块的使用能使linux内核便于裁剪,根据不同的应用需求得到一个最小的内核,同时调试内核驱动也更为方便,比如如果调试i2c驱动,如果不采用模块的方式,那么每次修改i2c驱动就得编译整个内核,对于编译调试极其耗时,使用模块,一个简单的insmod就将模块加载进了内核,如果觉得不合适,需 阅读全文
posted @ 2015-05-03 22:56 thammer 阅读(491) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示