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 来实现的.
linux 内核模块开发,Linux内核模块开发(笔记)相关推荐
- Linux内核开发_内核模块
内核模块是什么? Linux下的内核模块类似于Windows下的DLL动态链接库技术,和我们平常所使用的一些动态链接的SDK库一样,只是调用者是内核而已,不是用户态的程序. 内核模块拥有的的权限是和用 ...
- linux内核驱动ldd3_走进linux 驱动开发 之 内核模块
一.Linux内核简介 1.宏内核与微内核 内核分为四大类:单内核(宏内核):微内核:混合内核:外内核. 宏内核(Monolithickernel)是将内核从整体上作为一个大过程来实现,所有的内核服务 ...
- iTop-4412_开发板Linux编程之TFTP服务器学习笔记
学习笔记部分内容参考iTop-4412开发板教程 学习目标:掌握linux下文件编辑.权限修改.路径跳转.ip信息查看等相关命令 1.ubuntu主机搭建TPTF服务器 • 搭建服务器 – 安装xin ...
- 《linux设备驱动开发详解》笔记——15 linux i2c驱动
<linux设备驱动开发详解>笔记--15 linux i2c驱动 15.1 总体结构 如下图,i2c驱动分为如下几个重要模块 核心层core,完成i2c总线.设备.驱动模型,对用户提供s ...
- 嵌入式linux编程,嵌入式Linux学习笔记 - 嵌入式Linux基础知识和开发环境的构建_Linux编程_Linux公社-Linux系统门户网站...
注:所有内容基于友善之臂Mini2440开发板 一.嵌入式Linux开发环境的构建 嵌入式开发一般分为三个步骤: 1.编译bootloader,烧到开发板 2.编译嵌入式Linux内核,烧到开发板 3 ...
- 【B站视频教程笔记】基于VSCode和CMake实现C/C++开发 | Linux篇(gcc/g++)(安装、配置、使用详细教程)(VSCode教程)(CMake教程)(精!)
基于VSCode和CMake实现C/C++开发 | Linux篇 文章目录 目录结构 文件编辑 vim(编辑器之神,linux里可以畅通无阻,必学,但不是现在!) 安装GCC和GDB g++编译过程 ...
- 嵌入式Linux设备驱动程序开发指南20(Linux USB设备驱动)——读书笔记
Linux USB设备驱动 二十.Linux USB设备驱动 20.1 USB简介 20.1.1 USB2.0总线拓扑 20.1.2 USB总线枚举和设备布局 20.1.3 USB数据传输 20.1. ...
- 【嵌入式Linux】嵌入式Linux驱动开发基础知识之总线设备驱动模型
文章目录 前言 1.驱动编写的三种方法 1.1.传统写法 1.2.总线驱动模型 1.3.设备树驱动模型 2.Linux实现分离:Bus/Dev/Drv模型 2.1.Bus/Dev/Drv模型 2.2. ...
- 【Linux 内核】Linux 内核特性 ( 组织形式 | 进程调度 | 内核线程 | 多平台虚拟内存管理 | 虚拟文件系统 | 内核模块机制 | 定制系统调用 | 网络模块架构 )
文章目录 一.Linux 内核特性 1.Linux 内核组织形式 2.Linux 进程调度 3.Linux 内核线程 4.Linux 内核多平台虚拟内存管理 5.Linux 虚拟文件系统 6.Linu ...
- Linux 内核开发 - Eclipse内核开发环境搭建
翻译这篇文章的时候,我也想过可能会有高手说,内核开发用vi就足够了,还用什么eclipse,当然对于内核中函数特别了解的人确实如此,但是对于新 手,每使用一个函数,就要去查找一下函数的定义,实在是非常 ...
最新文章
- WebService的事务处理 (转)
- 实习推荐 | 腾讯AI Lab虚拟人中心招聘算法工程师实习生
- 循环结构, while, do……while
- git根据用户过滤提交记录
- 高老师架构设计思考短句集(1)
- 【渝粤教育】电大中专跨境电子商务理论与实务 (3)作业 题库
- Java学习教程,Java基础教程(入门到精通)
- 如何更改html的默认应用,win10如何修改默认应用
- 移动端后台管理系统框架
- BLDC无刷直流电机的原理及驱动基础
- 战舰世界换服务器改什么文件,战舰世界国服更新账号继承并合区,直营服已更新092...
- 酷睿i3 10105f参数 i310105f属于什么水平 i3 10105f性能怎么样
- 机器人导论 学习笔记2 - 运动学(D-H模型)
- 指数基金日涨跌幅python_用Python验证指数基金定投策略
- codeblocks 编译器设置方法 也可以酱紫滴
- Android中相册的实现
- Codeforces Round #322 (Div. 2) B. Luxurious Houses 水题
- 大学生如何在网上赚零花钱,适合学生党可做的零花钱项目
- 一款恋爱星座男女配对微信小程序源码
- 再谈“所托非人勿怪人,忠人之事需灵变”
热门文章
- 华为正式发布鸿蒙智慧屏,5499 元、21999 元,2021 款华为智慧屏 V55/V85 明日 0 点正式开售:搭载鸿蒙系统...
- Django模板(编写html代码
- 机器学习方法_机器学习模型应用方法综述
- 【Text_classification】 PaddlePaddle框架下出错调整到运行的实验和记录
- 视频问答兴起,多跳问答热度衰退,92篇论文看智能问答的发展趋势
- ACL20 | 让笨重的BERT问答匹配模型变快!
- 技术动态 | 清华大学开源OpenKE:知识表示学习平台
- Pandas重复数据的查看和去重
- MyBatis中SQL语句相关内容
- android一体机-迅为10.1寸用于售货机、人机界面、自动终端、触摸控制