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内核模块开发(笔记)相关推荐

  1. Linux内核开发_内核模块

    内核模块是什么? Linux下的内核模块类似于Windows下的DLL动态链接库技术,和我们平常所使用的一些动态链接的SDK库一样,只是调用者是内核而已,不是用户态的程序. 内核模块拥有的的权限是和用 ...

  2. linux内核驱动ldd3_走进linux 驱动开发 之 内核模块

    一.Linux内核简介 1.宏内核与微内核 内核分为四大类:单内核(宏内核):微内核:混合内核:外内核. 宏内核(Monolithickernel)是将内核从整体上作为一个大过程来实现,所有的内核服务 ...

  3. iTop-4412_开发板Linux编程之TFTP服务器学习笔记

    学习笔记部分内容参考iTop-4412开发板教程 学习目标:掌握linux下文件编辑.权限修改.路径跳转.ip信息查看等相关命令 1.ubuntu主机搭建TPTF服务器 • 搭建服务器 – 安装xin ...

  4. 《linux设备驱动开发详解》笔记——15 linux i2c驱动

    <linux设备驱动开发详解>笔记--15 linux i2c驱动 15.1 总体结构 如下图,i2c驱动分为如下几个重要模块 核心层core,完成i2c总线.设备.驱动模型,对用户提供s ...

  5. 嵌入式linux编程,嵌入式Linux学习笔记 - 嵌入式Linux基础知识和开发环境的构建_Linux编程_Linux公社-Linux系统门户网站...

    注:所有内容基于友善之臂Mini2440开发板 一.嵌入式Linux开发环境的构建 嵌入式开发一般分为三个步骤: 1.编译bootloader,烧到开发板 2.编译嵌入式Linux内核,烧到开发板 3 ...

  6. 【B站视频教程笔记】基于VSCode和CMake实现C/C++开发 | Linux篇(gcc/g++)(安装、配置、使用详细教程)(VSCode教程)(CMake教程)(精!)

    基于VSCode和CMake实现C/C++开发 | Linux篇 文章目录 目录结构 文件编辑 vim(编辑器之神,linux里可以畅通无阻,必学,但不是现在!) 安装GCC和GDB g++编译过程 ...

  7. 嵌入式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. ...

  8. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之总线设备驱动模型

    文章目录 前言 1.驱动编写的三种方法 1.1.传统写法 1.2.总线驱动模型 1.3.设备树驱动模型 2.Linux实现分离:Bus/Dev/Drv模型 2.1.Bus/Dev/Drv模型 2.2. ...

  9. 【Linux 内核】Linux 内核特性 ( 组织形式 | 进程调度 | 内核线程 | 多平台虚拟内存管理 | 虚拟文件系统 | 内核模块机制 | 定制系统调用 | 网络模块架构 )

    文章目录 一.Linux 内核特性 1.Linux 内核组织形式 2.Linux 进程调度 3.Linux 内核线程 4.Linux 内核多平台虚拟内存管理 5.Linux 虚拟文件系统 6.Linu ...

  10. Linux 内核开发 - Eclipse内核开发环境搭建

    翻译这篇文章的时候,我也想过可能会有高手说,内核开发用vi就足够了,还用什么eclipse,当然对于内核中函数特别了解的人确实如此,但是对于新 手,每使用一个函数,就要去查找一下函数的定义,实在是非常 ...

最新文章

  1. WebService的事务处理 (转)
  2. 实习推荐 | 腾讯AI Lab虚拟人中心招聘算法工程师实习生
  3. 循环结构, while, do……while
  4. git根据用户过滤提交记录
  5. 高老师架构设计思考短句集(1)
  6. 【渝粤教育】电大中专跨境电子商务理论与实务 (3)作业 题库
  7. Java学习教程,Java基础教程(入门到精通)
  8. 如何更改html的默认应用,win10如何修改默认应用
  9. 移动端后台管理系统框架
  10. BLDC无刷直流电机的原理及驱动基础
  11. 战舰世界换服务器改什么文件,战舰世界国服更新账号继承并合区,直营服已更新092...
  12. 酷睿i3 10105f参数 i310105f属于什么水平 i3 10105f性能怎么样
  13. 机器人导论 学习笔记2 - 运动学(D-H模型)
  14. 指数基金日涨跌幅python_用Python验证指数基金定投策略
  15. codeblocks 编译器设置方法 也可以酱紫滴
  16. Android中相册的实现
  17. Codeforces Round #322 (Div. 2) B. Luxurious Houses 水题
  18. 大学生如何在网上赚零花钱,适合学生党可做的零花钱项目
  19. 一款恋爱星座男女配对微信小程序源码
  20. 再谈“所托非人勿怪人,忠人之事需灵变”

热门文章

  1. 华为正式发布鸿蒙智慧屏,5499 元、21999 元,2021 款华为智慧屏 V55/V85 明日 0 点正式开售:搭载鸿蒙系统...
  2. Django模板(编写html代码
  3. 机器学习方法_机器学习模型应用方法综述
  4. 【Text_classification】 PaddlePaddle框架下出错调整到运行的实验和记录
  5. 视频问答兴起,多跳问答热度衰退,92篇论文看智能问答的发展趋势
  6. ACL20 | 让笨重的BERT问答匹配模型变快!
  7. 技术动态 | 清华大学开源OpenKE:知识表示学习平台
  8. Pandas重复数据的查看和去重
  9. MyBatis中SQL语句相关内容
  10. android一体机-迅为10.1寸用于售货机、人机界面、自动终端、触摸控制