Linux内核模块加载驱动方法

2024-06-07 22:58

本文主要是介绍Linux内核模块加载驱动方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

打印函数 printk是分级的,它的8 个级别如下:

1、#define KERN_EMERG 0

/*紧急事件消息,系统崩溃之前提示,表示系统不可用*/

2、#define KERN_ALERT 1

/*报告消息,表示必须立即采取措施*/

3、#define KERN_CRIT 2

/*临界条件,通常涉及严重的硬件或软件操作失败*/

4、#define KERN_ERR 3

/*错误条件,驱动程序常用 KERN_ERR来报告硬件的错误*/

5、#define KERN_WARNING 4

/*警告条件,对可能出现问题的情况进行警告*/

6、#define KERN_NOTICE 5

/*正常但又重要的条件,用于提醒*/

7、#define KERN_INFO 6

/*提示信息,如驱动程序启动时,打印硬件信息*/

8、#define KERN_DEBUG 7

/*调试级别的消息*/

mini_linux_mo

#include <linux/init.h>
#include <linux/module.h>MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("TOPEET");static int hello_init(void)
{printk(KERN_EMERG "HELLO WORLD enter!\n");return 0;
}static void hello_exit(void)
{printk(KERN_EMERG "HELLO WORLD exit!\n");}module_init(hello_init);
module_exit(hello_exit);

Makefile

#!/bin/bash
#通知编译器我们要编译模块的哪些源码
#这里是编译itop4412_hello.c这个文件编译成中间文件itop4412_hello.o
obj-m += mini_linux_module.o #源码目录变量,这里用户需要根据实际情况选择路径
#作者是将Linux的源码拷贝到目录/home/topeet/android4.0下并解压的
KDIR := /home/topeet/android4.0/iTop4412_Kernel_3.0#当前目录变量
PWD ?= $(shell pwd)#make命名默认寻找第一个目标
#make -C就是指调用执行的路径
#$(KDIR)Linux源码目录,作者这里指的是/home/topeet/android4.0/iTop4412_Kernel_3.0
#$(PWD)当前目录变量
#modules要执行的操作
all:make -C $(KDIR) M=$(PWD) modules#make clean执行的操作是删除后缀为o的文件
clean:rm -rf *.o


加载模块

insmod /mnt/udisk/mini_linux_module.ko

查看一下模块信息

mini_linux_module 700 0 -Live 0xbf000000

卸载驱动模块

rmmod mini_linux_module

如果会报错无法卸载,提示没有文件夹。在这里根据提示,使用命令“mkdir /lib/modules/3.0.15" 新建目录 lib/moudules/3.0.15

新建文件夹之后,再使用卸载驱动模块的命令“rmmod mini_linux_module”,可以看到打印出了在卸载驱动函数里面添加的打印信息:Hello world exit!,最后使用命令:lsmod,对比前面的 lsmod,发现已经没有了加载的模块驱动了。

这篇关于Linux内核模块加载驱动方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1040537

相关文章

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

Maven 配置中的 <mirror>绕过 HTTP 阻断机制的方法

《Maven配置中的<mirror>绕过HTTP阻断机制的方法》:本文主要介绍Maven配置中的<mirror>绕过HTTP阻断机制的方法,本文给大家分享问题原因及解决方案,感兴趣的朋友一... 目录一、问题场景:升级 Maven 后构建失败二、解决方案:通过 <mirror> 配置覆盖默认行为1. 配置示

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

Mybatis Plus Join使用方法示例详解

《MybatisPlusJoin使用方法示例详解》:本文主要介绍MybatisPlusJoin使用方法示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录1、pom文件2、yaml配置文件3、分页插件4、示例代码:5、测试代码6、和PageHelper结合6

Java中实现线程的创建和启动的方法

《Java中实现线程的创建和启动的方法》在Java中,实现线程的创建和启动是两个不同但紧密相关的概念,理解为什么要启动线程(调用start()方法)而非直接调用run()方法,是掌握多线程编程的关键,... 目录1. 线程的生命周期2. start() vs run() 的本质区别3. 为什么必须通过 st

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

详解Linux中常见环境变量的特点与设置

《详解Linux中常见环境变量的特点与设置》环境变量是操作系统和用户设置的一些动态键值对,为运行的程序提供配置信息,理解环境变量对于系统管理、软件开发都很重要,下面小编就为大家详细介绍一下吧... 目录前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变