linux 内核模块开发,Linux内核模块开发(笔记)

Linux内核模块开发(笔记)

作者:扶凯 来源: 扶凯 时间:2011-11-21 00:21:11 人气:249 评论:0

标签: 内核

个人笔记。。在不放过来都快找不到了。有空还得好好整理一下了。

调试方法

printk() 是用来调试内核最常用的一种技术,他打印的信息会输出在 dmesg 中,所以调试前最好使用 dmesg -c 来清掉以前 dmesg 的信息。 使用的例子如下:

printk(KERN_DEBUG "Here i am:%s:%d\n", FUNCTION, LINE);

可以打印的级别可以看看 linux/kernel.h 中的定义。

strace 这个命令超级强大,可以显示程序所有的系统调用,还可以显示调用时使用的参数。 但这个时候不需要麻烦的配置就可以直接使用,但不能象

gdb 调试 c 程序一样,所以内核为我们提供了一个 kdb ,可以支持动态修改变量,断点设置,单步执行

kernel oops messages

这是内核开发时常会出现的一个错误信息。主要原因是由于 NULL 指针引用,和其它不正常的指针操作引起的。这时 oops 会显示故障时的处理器信息, 模块 CPU 寄存器内容,页描述符表的位置之类的信息。

内核模块简单介绍

模块是工作在内核空间的

模块实际是目标文件(由函数和数据结构组成),不象普通程序有个链接的过程,不能独立运行,只能在运行时链接到系统做为内核的一部分运行,从面扩展内核功

内核模块会占用内核空间的内存,所以会影响内存使用,它还会修改内核中的一些内容,所以容易造成系统挂掉。在内核中需要维护符号表。并且内核之间有依赖

性。

最简单的内核模块

注:如果是 redhat 安装的话,需要安装 kernel-devel 才能写内核模块,如果是自己编译内核,记的不要删除源码,不然没法开发模块。

放个编译上面模块的 Makefile

给 Makefile 放到上面 hello.c 的相同的目录中(如果上面写的模块代码叫 hello.c 的话)。然后使用 make 就能编译了。

insmod lsmod rmmod

调用 insmod 时会给需要的模块加载进内核,会给 ko 的文件以目标代码加载。装载时会调用 module_init 指定的函数。退出也调用相应的 module_exit.

lsmod 可以显示你写的模块,其实是读 /proc/modules 。接下来我写写怎么样自己通过内核来建 proc 文件。

模块加载参数

如果在模块加载时,想指定参数,也提供了相应的头文件

这样以后,直接在内核模块内使用 test 的变量就行了。

模块的信息

在程序中可以为模块加一些描述,发行版权声明,和作者。

模块的符号导出

在 Perl 中,模块是可以导出变量和方法到其它的模块中的。在 Linux 内核中也有这样的方法。

这二个可以导出指定的全局变量,也可以是方法。这个要加载 的头文件,不要忘记了。

其它的模块要使用这个,直接使用 extern void name(void); 就可以使用了。这些导出的函数只能内核和内核模块使用。不能用户调用,可以由 /proc/kallsyms 来查看导出的变量和方法

实例

写个内核模块,通过 proc 可以见到一些信息,通过 proc 的读和写的功能。来实现设置和读取信息。

proc 介绍

proc 是一个非常方便的用来动态的向 Linux 内核加入和禁用代码的一个方法。

proc/sys 中是用来配置内核的参数,可以通过 sysctl -w key=value

象普通文件可以支持 open,read,write,close

例如

proc 的功能实现

proc 在 c 中是一个结构体来实现的,是 struct proc_dir_entry 。它可以给读写绑定到特定的函数上。然后通过别人对 proc 中文件的操作来触发和回调相应的绑定的函数。

read_proc 和 write_proc 是这个结构体的成员,也是一种结构体。函数就注册在这个上面。有兴趣的同学可以看看 include/linux/proc_fs.h 中的 read_proc_t 和 write_proc_t 的定义。

实现起来也简单。

在这的 create_proc_entery 会返回一个 proc_dir_entry 的结构体的引用。失败就是 NULL 。

这样,当用户空间进行 read 的系统调用时,如使用 cat proc 中的内容时。内核会调用注册到 read_proc 上的这个 my_read_proc 来实现的.

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

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

相关文章

《麻省理工科技评论》发布2019年全球十大突破性技术!

来源:钱塘大数据《麻省理工科技评论》每年都会评选出当年的“十大突破性技术”,这份在全球科技领域举足轻重的榜单,曾精准预测了脑机接口、智能手表、癌症基因疗法、深度学习等诸多热门技术的崛起。正如比尔盖茨所说,看过这些突破…

猿辅导python编程老师面试_猿辅导辅导老师面试过程➕感受

一个周前拿到了猿辅导的offer,看到很多知有在问猿辅导的面试,碰巧又是秋招季,就在这里给大家谈一下我的面试过程和感受。先放一张我的的offer我在之前的文章中介绍过自己,因为是二本财务专业毕业,工作比较难找&#xf…

给排水规范大全2020_住宅电气、给排水、消防安装工程的质量通病分析

“住宅项目机电安装工程”质量通病分析,从电气工程、给排水工程、消防工程3方面案例分析,各中案例非常值得各施工企业学习。01.电气工程施工质量通病02.给排水工程施工质量通病03.消防工程施工质量通病上述所列质量通病并不是全部,质量通病是…

oracle 实现ID自增

CREATE TABLE testTable1 ( ID INT NOT NULL, NAME VARCHAR2(4000) NOT NULL, PRIMARY KEY(ID) ) TABLESPACE MYDB;--创建自增ID,名称为:表名_字段名_SEQ CREATE SEQUENCE testTable1_ID_SEQ MINVALUE 1 NOMAXVALUE INCREMENT BY 1 START WITH 1 NOCACHE…

从ACT-R探讨认知智能

来源: 人机与认知实验室【ACT—R模型最大的不足在于缺乏意向性与形式化的有机结合,这也是AI的瓶颈之一】哈耶克在默知识的基础上发展出了一整套体系,他说:“因为默知识不可表达,所以不可记录,所以不可集中&…

python 轨迹预测_CVPR 2019轨迹预测竞赛冠军方法总结

背景CVPR 2019 是机器视觉方向最重要的学术会议,本届大会共吸引了来自全世界各地共计 5160 篇论文,共接收 1294 篇论文,投稿数量和接受数量都创下了历史新高,其中与自动驾驶相关的论文、项目和展商也是扎堆亮相,成为本…

如何看创建媒体日期_汽车各零部件也有身份证,教你们如何看这些部件的出生日期...

大家在逛超市选商品时不知道有没有看产品生产日期的习惯呢?反正小编无论买什么食物,只能是吃进肚子里的都去有意无意的看一下生产日期,这些产品的生产日期也一般都是非常直观的印在外包装上。而汽车由成千上万个零部件组成,每个零部件都来自…

在MyEclipse中更换或修改svn的用户名和密码

1、通过删除SVN客户端的账号配置文件 (1)找到我们使用的客户端配置文件,Windows XP中的位置是在系统盘的Documents and Settings\Administrator\Application Data\Subversion\auth\文件夹中,Windows 7中的位置是在C:/Users/用…

Science发现了改变情绪的大脑受体

来源:中国生物技术网 北京时间11月12日,发表在《Science》上的一篇新研究中,一个国际研究团队在大脑中一个研究甚少的区域发现了一种被认为与消极情绪有关的受体。靶向该受体,可以调节消极情绪。该研究可能会为精神疾病带来更有针…

linux源码下载阿帕奇,Ubuntu 12.04下源码安装Apache

环境:Ubuntu 12.04【简单安装】一般第一次安装Apache都较为顺利。1. 下载并解压rootubuntu:/home/qy/share#tar zxvf httpd-2.2.22.tar.gzrootubuntu:/home/qy/share#cd httpd-2.2.22在http-2.2.22里有文件README和INSTALL,用more命令可以阅读。2. 配置r…

latex自动生成中文目录_texpad: 中文输出+自动参考文献生成(bib+bst)

写在前面:本文仅记录自己在家无聊,接触了下LaTeX。本文是在MAC下使用TexpadMacTeX,进行LaTeX编辑,a.输出中文问题,此问题参考自:texpad中如何使用中文?(mac OS) - Peregrinatio的回答…

github里的默认域_恕我直言!你对Python里的import一无所知

写 Python 通常我们会怎样导包?可能大部分情况下都是用 import,但除了 import 你还会些什么呢?下面我们来介绍一些骚操作。1. 直接 import 人尽皆知的方法,直接导入即可import os与此类似的还有,不再细讲import ...一般…

ModelMapper 中高级使用 java

ModelMapper 是一个java对象自动映射的第三方架包,用起来很方便,配合阿里的frstjson可以极大简化后台代码。 但是ModelMapper 中文使用说明很少,官网http://modelmapper.org/的解释也很不明了所以我研究了好久。 ModelMapper modelMapper ne…

为何云原生在吞噬世界 ?

来源:云头条长话短说,本文的目的是帮助你了解云原生的功能及带来的业务效益,并探讨准备迁移到这种新型计算模式的企业面临的种种选择和陷阱。“计算机革命已过去了60年,离微处理器的发明已有40年,现代互联网兴起至今已…

Linux as4开启telnet,Red hat AS4开启telnet过程

这里写一个Red hat AS4开启telnet过程开启过程,按照以下步骤(4个步骤)就可以了:1、确定你的telnet服务打开没有:[root111 ~]# chkconfig --list|grep telnettelnet: offkrb5-telnet: off[root111 ~]#注意检查结果这里是关闭状态2、打开tel…

python修改静态html_Python 静态页面爬虫---urllib3库实现

1、生产请求urllib3库是通过PoolManager实例来生产请求的,由该实例处理与线程池的链接机线程安全的所有细节urllib3.request函数创建一个请求语法:http urllib3.PoolManager()rq http.request(method,url,headers{默认为None},fields{默认为None},**urlo…

xgboost算法_工业大数据:分析算法

一. 应用背景大数据分析模型的研究可以分为3个层次,即描述分析(探索历史数据并描述发生了什么)、预测分析(未来的概率和趋势)和规范分析(对未来的决策给出建议)。工业大数据分析的理论和技术研究仍处于起步阶段,主要应用场景如下:1. 预测性维…

GC之七--gc日志分析工具

性能测试排查定位问题,分析调优过程中,会遇到要分析gc日志,人肉分析gc日志有时比较困难,相关图形化或命令行工具可以有效地帮助辅助分析。 Gc日志参数 通过在tomcat启动脚本中添加相关参数生成gc日志 -verbose.gc开关可显示GC的操…

python爬虫网络库下载_Python3 DHT 网络磁力种子爬虫

Python3 DHT 网络磁力种子采集器😎 严肃的理论磁力链接现在我们使用迅雷等工具下载资源的时候,基本上都只需要一个叫做磁力链接的东西就可以了,非常方便。磁力定义磁力链接是对等网络中进行信息检索和下载文档的电脑程序。和基于“位置”连接…

postgresql修炼之道_PostgreSQL的TOAST技术

本文参考:PostgreSQL TOAST 技术理解《PostgreSQL修炼之道》一、TOAST是什么?TOAST是“The Oversized-Attribute Storage Technique”(超尺寸属性存储技术)的缩写,主要用于存储一个大字段的值。要理解TOAST&#xff0c…