内核模块专题

Linux内核模块调试一

接下来写个专栏专门讲我们写的linux内核模块出现异常时如何定位和调试。我们先构造一个最简单的内核空指针玩玩。 #include <linux/kernel.h>#include <linux/module.h>#include <linux/init.h>struct __ops_dev{char dev_name[64];}ops_dev_t;int __init oops_

驱动开发系列16 - Linux Graphics DRM和KMS内核模块介绍

一:概述         “直接渲染管理器”(DRM)和“内核模式设置”(KMS)API 是 Linux 图形系统的重要组成部分。然而,关于它们具体是什么的文档非常难以找到——而谷歌搜索到的大部分内容都是完全过时的。看起来在这个领域工作的人们太忙了,无法进行文档编写。这篇文章提供了关于 DRM 内核模块内部实现细节的更详细信息。 二:DRI、DRM和KMS的目的         一开始,所有

内核模块编译

Linux内核的整体结构非常庞大,其包含的组件也非常多,如何使用需要的组件: 方法一:把所有的组件都编译进内核文件,即:zImage或bzImage,但这样会导致两个问题:一是生成的内核文件过大;二是如果要添加或删除某个组件,需要重新编译整个内核。 有没有一种机制能让内核文件(zImage或bzImage)本身并不包含某个组件,而是在该组件需要被使用的时候,动态地添加到正在运行的内核中呢?Li

Linux内核开发-编写一个内核模块

0.前言 上一章(点击返回上一章)已经完成了将ubuntu原始内核替换成了自己编好的内核。本章开始编写一个内核模块。 1.内核模块 1.1 什么是内核模块 Linux内核模块可独立于内核之外进行编译,可以在内核运行时动态加载、卸载。内核模块以.ko为后缀。 1.2 操作内核模块常用的指令 # 查看当前正在运行的模块lsmod#插入一个模块insmod module_name# 卸载

内核模块相关命令:lsmod,depmod,m…

lsmod 功能:列出内核已载入模块的状态 用法:lsmod 描述: lsmod 以美观的方式列出/proc/modules的内容。 输出为: Module(模块名)    Size(模块大小)   Used by(被...使用) eg. ne2k_pci           8928               0 8390                 9472

编写Linux内核模块实现文件拷贝

经评论区反馈:如果Linux内核版本为4.XX,那么需要在 vfs_read 和 vfs_write 的地方更改为 kernel_read 和 kernel_write 操作系统课程实验1 添加内核模块 每个人题目都是自己选择的,题目1已经有一位校友给出了标准答案,我捣鼓的是文件拷贝这题,弄了很久也记录一下,给后面的学弟学妹参考 题目4:设计一个带参数的模块,其参数为源文件和目标文件的文件

Linux内核模块导出后无法调用问题解决(模块间函数调用通讯)

Linux模块间通讯方法非常的多,最便捷的方法莫过于函数符号导出,然后直接调用。 然而在linux2.6.26以后的内核中模块的符号导出经常会出现问题,一个模块中的导出符号不能被另外一个模块进行调用。这个使得处理有依赖关系的模块非常的头疼。 1. 符号导出函数 EXPORT_SYMBOL() EXPORT_SYMBOL标签内定义的函数对全部内核代码公开,不用修改内核代码就可以在您的内核模

一起学习Linux内核模块的知识,为编写复杂的设备驱动做好准备

一、Linux内核模块简介 Linux内核的整体架构非常庞大,包含的组件非常多,如果把所有的功能都编译到内核,有导致生成的内核映像越来越大,同时如果我们要修改现有内核的功能,需要重编内核,效率很低。 有没有另一种机制可使得内核本身不包含所有功能,而在这些功能需要被使用的时候,其对应的代码才被动态地加载的内核中呢? Linux提供了这样的机制,就是模块(Module),模块具有这样的特点:

内核篇加载内核模块(Android10)

一、 开发前期准备 本文中使用的是linageOs源码中下载的oneplus3 安卓10内核源码进行研究测试。交叉编译链使用的是linageOs源码中的交叉编译链。 lineageOs源码中oneplus3内核源码位置路径: /home/qiang/lineageOs/kernel/oneplus/msm8996 lineageOs源码中交叉编译目录位置路径: /home/qiang/

Linux内核模块加载驱动方法

打印函数 printk是分级的,它的8 个级别如下: 1、#define KERN_EMERG 0 /*紧急事件消息,系统崩溃之前提示,表示系统不可用*/ 2、#define KERN_ALERT 1 /*报告消息,表示必须立即采取措施*/ 3、#define KERN_CRIT 2 /*临界条件,通常涉及严重的硬件或软件操作失败*/ 4、#define KERN_ERR 3

如何快速了解一个内核模块

EXPORT_SYMBOLEXPORT_SYMBOL_GPLgrep -E "EXPORT_SYMBOL|EXPORT_SYMBOL_GPL" * -nr | awk -F ":" '{print $3}' | awk -F "(" '{print $2}' |awk -F ")" '{print $1}' > log.EXPORT_SYMBOLcflow alais 方法1 指定目录

嵌入式学习-驱动开发前奏-lesson1-内核模块相关知识

一、内核模块的安装与卸载 1.安装 例如usb.ko #insmod usb.ko 2.查看 使用命令#lsmod 可以查看所有已经安装的内核模块 3.卸载 使用命令 #rmmod usb 二、第一个内核模块 1)代码 #include <linux/init.h>#include <linux/module.h>static int hello_init(){prin

linux内核模块的参数传递

模块安装时候可以给模块中的变量传递数值,安装后,模块中变量的值就是安装时所传入的值 ,没有传递的变量,则使用代码中默认值。 带参数的模块安装后会生成目录: /sys/module/模块名/parameters/ 示例:如果安装 了名字为  hello_model_param 的模块,则会生成 /sys/module/hello_model_param/parameters/ 这个文件夹下会生成

驱动基础——带参数的内核模块

目录 0. 引言1. 带参数的内核模块1.1 传入参数1.2 内核模块代码1.3 修改Makefile1.4 模块编译1.5 加载/卸载模块 2. 小结参考 本文使用环境: 内核版本:Linux 3.0.15 / iTop4412_Kernel_3.0 硬件平台:armv7 / itop-4412 编译环境:Ubuntu Linux 12.04 LTS / gcc version

Linux modinfo命令教程:深入理解Linux内核模块(附案例详解和注意事项)

Linux modinfo命令介绍 modinfo(模块信息)命令在Linux系统中用于显示Linux内核模块的信息。此命令从命令行给出的Linux内核模块中提取信息。如果模块名称不是文件名,则默认搜索/lib/modules/kernel-version目录。modinfo可以理解来自任何Linux内核架构的模块。 Linux modinfo命令适用的Linux版本 modinfo命令在所

Linux 使用C语言来加载和卸载内核模块

文章目录 一、insmod/rmmod1.1 insmod1.2 rmmod 二、C语言示例2.1 syscall2.2 dmeo 一、insmod/rmmod 1.1 insmod Linux 使用insmod来加载内核模块: NAMEinsmod - Simple program to insert a module into the Linux Kernel 使用

Linux内核模块时间同步函数汇总

在linux内核模块中能用到的函数比用户空间多,但是它的函数往往被用得很少。当然在内核中叶可以调用用户空间的函数只要直接调用系统调用的封装函数就行,如下: 如调用long gettimeofday(struct timeval tv, struct timezone tz);函数可以直接调用封装体: _syscall1(long,gettimeofday, struct timeval,tv,

内核模块编程之模块工具的使用

内核模块编程之模块工具的使用 Author:tiger-johnTime:2013-08-01mail:jibo.tiger@gmail.co

内核模块编程---hello world

什么是内核模块? 其全称为动态可加载内核模块。之所以提供模块机制,是因为Linux是“单块内核”的操作系统,单内核的最大优点是效率高,因为所有的内容都集中在一起,但其缺点是可扩展性和可维护性相对较差,模块机制就是为了弥补这一缺陷。Linux内核是模块化组成的,它允许我们方便地在运行时动态地向内核中插入或从中删除代码。 模块是具有独立功能的程序,它可以被单独编译,但不能独立运行。它在运行时加载,

《Linux内核编程》第一章:Linux内核模块间通信

====================================================================================================================================== 一、Linux内核模块间通信有几种?     1.符号导出     (1).符号导出函数EXPORT_SYMBOL():导出

Linux内核模块开发(简单)

Linux系统为应用程序提供了功能强大且容易扩展的API,但在某些情况下,这还远远不够。与硬件交互或进行需要访问系统中特权信息的操作时,就需要一个内核模块。 Linux内核模块是一段编译后的二进制代码,直接插入Linux内核中,在 Ring 0(x86–64处理器中执行最低和受保护程度最低的执行环)上运行。这里的代码完全不受检查,但是运行速度很快,可以访问系统中的所有内容。 Intel x8

Linux lsmod命令教程:如何查看已加载的内核模块(附实例详解和注意事项)

Linux lsmod命令介绍 lsmod是一个命令行工具,用于显示已加载的Linux内核模块的信息。内核模块是可以在运行时加载或卸载的代码模块。你可以把内核模块看作是其他软件中的插件。例如,你的显卡驱动程序(特别是如果你正在使用Nvidia驱动程序)就是作为内核模块加载的。 Linux lsmod命令适用的Linux版本 lsmod命令在大多数Linux发行版中都可以使用,包括Debian

linux内核模块开发笔记一

内核模块开发: 如果将所有的组件都编译进内核,会造成内核文件过大,修改组件后,需要重新编译整个内核,效率比较低。内核模块就相当于补丁,在需要的时候才会起作用,模块本身不被编译进内核文件,在运行期间动态的添加和卸载。 模块加载函数: 安装内核模块时,内核模块加载函数被调用,通过module_init宏指定内核模块加载函数。 模块卸载函数: 卸载内核模块时,调用模块卸载函数,通过module

09_gpiochipLinux内核模块

01_basicLinux内核模块-CSDN博客文章浏览阅读318次,点赞3次,收藏3次。环境ID=ubuntuMakefilemodules:clean:basic.creturn 0;运行效果。https://blog.csdn.net/m0_37132481/article/details/136157384my_gpiochip.c #include <linux/kernel.h>#

三、Linux内核模块编写(一个c文件生成一个ko文件)

模块是一个目标文件,可以完成某种独立的功能,但是自身不是一个独立的进程,不能单独运行,可以动态的载入模块,使其成为内核代码的一部分,与内核其他代码的地位完全相同,当不需要某个模块功能时,还可以卸载模块。 (一) 一个c文件生成一个ko文件。 ( 注: ko文件为kernel object文件,也称内核模块 ) 程序包括:hello.c 、Makefile。 a. 编写Makefile文件

三、Linux内核模块编写2(多个c文件生成一个ko文件)

模块是一个目标文件,可以完成某种独立的功能,但是自身不是一个独立的进程,不能单独运行,可以动态的载入模块,使其成为内核代码的一部分,与内核其他代码的地位完全相同,当不需要某个模块功能时,还可以卸载模块。 (一) 多个c文件生成一个ko文件。 ( 注: ko文件为kernel object文件,也称内核模块 ) 程序包括:hello.c 、add.c 、Makefile。 a. 编写Mak