9 Linux内核模块设计

合集下载

Linux操作系统的内核设计分析

Linux操作系统的内核设计分析

Linux操作系统的内核设计分析Linux操作系统作为开源操作系统的代表,已经在各个领域得到了广泛应用。

而Linux操作系统的内核则是这个系统之所以能够运转的关键所在。

本文将就Linux操作系统的内核设计进行分析,并探讨其优劣之处。

一、Linux内核设计的基础Linux内核的设计基础主要包括以下几个方面:1. 开放源码Linux内核采用的是GPL协议,这意味着它是一个开放源码的项目。

这为世界各地的开发人员提供了极大的便利,方便他们进行开发和修改。

同时,这也确保了Linux内核的透明度,并且鼓励开发者贡献代码的同时,深度参与到Linux开源社区的构建和升级中。

2. 模块化Linux内核的构造采用的是模块化设计。

这种设计方式将内核代码分成独立的模块,每个模块都可以独立编译、加载和卸载。

采用模块化的设计,能够使得开发人员能够更加细致地打包、编译、并部署只包含他们需要的模块的系统。

3. 多任务Linux内核是一个基于多任务设计的系统。

这意味着它能够使得多个程序同时运行,并能够平滑高效地进行任务的切换。

这给开发人员提供了各种各样的自由,使得他们能够更加高效地进行开发。

4. 支持众多处理器架构Linux内核的支持范围非常广泛,它可以适配众多处理器架构。

这意味着一个制造商可以使用不同的处理器架构去生产设备,并且这些设备都能够安装和运行Linux操作系统。

5. 外层调用接口Linux内核支持开放式的外层调用接口。

这使得用户层可以很容易地调用Linux 内核执行某个任务。

这些用户层应用包括网上购物网站、应用程序和各种驱动程序。

6. 子系统Linux内核的子系统主要包括进程管理、内存管理、I/O管理和网络管理等。

二、Linux内核的优点Linux内核具有以下主要优点:1. 开源性Linux内核本身是一个开源的、由社区驱动的项目。

这意味着在它的附加组件和周边产品中,广大的开发者社区都可以为用户提供帮助和支持。

2. 安全性相比其他闭源操作系统,Linux内核在安全性方面更具优势。

Linux设备驱动程序原理及框架-内核模块入门篇

Linux设备驱动程序原理及框架-内核模块入门篇

Linux设备驱动程序原理及框架-内核模块入门篇内核模块介绍应用层加载模块操作过程内核如何支持可安装模块内核提供的接口及作用模块实例内核模块内核模块介绍Linux采用的是整体式的内核结构,这种结构采用的是整体式的内核结构,采用的是整体式的内核结构的内核一般不能动态的增加新的功能。

为此,的内核一般不能动态的增加新的功能。

为此,Linux提供了一种全新的机制,叫(可安装) 提供了一种全新的机制,可安装) 提供了一种全新的机制模块” )。

利用这个机制“模块”(module)。

利用这个机制,可以)。

利用这个机制,根据需要,根据需要,在不必对内核重新编译链接的条件将可安装模块动态的插入运行中的内核,下,将可安装模块动态的插入运行中的内核,成为内核的一个有机组成部分;成为内核的一个有机组成部分;或者从内核移走已经安装的模块。

正是这种机制,走已经安装的模块。

正是这种机制,使得内核的内存映像保持最小,的内存映像保持最小,但却具有很大的灵活性和可扩充性。

和可扩充性。

内核模块内核模块介绍可安装模块是可以在系统运行时动态地安装和卸载的内核软件。

严格来说,卸载的内核软件。

严格来说,这种软件的作用并不限于设备驱动,并不限于设备驱动,例如有些文件系统就是以可安装模块的形式实现的。

但是,另一方面,可安装模块的形式实现的。

但是,另一方面,它主要用来实现设备驱动程序或者与设备驱动密切相关的部分(如文件系统等)。

密切相关的部分(如文件系统等)。

课程内容内核模块介绍应用层加载模块操作过程内核如何支持可安装模块内核提供的接口及作用模块实例内核模块应用层加载模块操作过程内核引导的过程中,会识别出所有已经安装的硬件设备,内核引导的过程中,会识别出所有已经安装的硬件设备,并且创建好该系统中的硬件设备的列表树:文件系统。

且创建好该系统中的硬件设备的列表树:/sys 文件系统。

(udev 服务就是通过读取该文件系统内容来创建必要的设备文件的。

)。

linux module的用法

linux module的用法

linux module的用法
Linux模块是一种可以动态加载到Linux内核中以扩展其功能的软件组件。

它们通常用于添加新的驱动程序、文件系统或其他内核功能。

下面我将从多个角度来介绍Linux模块的用法。

首先,要编写一个Linux模块,你需要具备一定的C语言编程知识。

一个基本的Linux模块包括初始化函数和清理函数。

初始化函数在模块加载时被调用,而清理函数在模块被卸载时被调用。

你需要使用特定的宏和数据结构来定义模块的初始化和清理函数,以及模块的许可证和作者信息。

其次,编译模块需要使用Linux内核源代码中的构建系统。

你需要确保已经安装了正确版本的内核头文件和构建工具。

然后,你可以编写一个Makefile来编译你的模块。

在Makefile中,你需要指定内核源代码的路径,并使用特定的命令来编译模块。

一旦你编译好了你的模块,你可以使用insmod命令将其加载到内核中。

加载模块后,你可以使用lsmod命令来查看已加载的模块列表。

你还可以使用modinfo命令来查看模块的信息,包括作者、描述和许可证等。

当你不再需要模块时,你可以使用rmmod命令将其从内核中卸载。

卸载模块后,你可以使用dmesg命令来查看内核日志,以确保
模块已经成功卸载。

总的来说,Linux模块的用法涉及到编写模块代码、编译模块、加载模块以及卸载模块等步骤。

掌握了这些基本的用法,你就可以
开始开发自己的Linux内核模块了。

希望这些信息能够帮助你更好
地理解Linux模块的用法。

理工大学Linux实验报告

理工大学Linux实验报告

实验名称实验一Linux操作系统定制安装实验地点博学楼实验时间4月16日网络实验室一、实验目的和要求⑴通过对Linux 操作系统的定制安装,建立对Linux操作系统的初步认识,为后续实验的进行提供基础平台。

⑵掌握Linux操作系统的虚拟机定制安装。

⑶熟悉Linux文件目录结构二、实验内容和原理实验内容:利用虚拟机软件定制安装Linux操作系统,熟悉安装过程中各个选项的意义。

实验原理:虚拟机可以说是一种软件,也可以说是一种技术,它允许用户在一台主机上虚拟出多台计算机,每台虚拟的计算机都可以有自己的硬件及软件配置。

三、主要仪器设备PC机、VMware Player、Redhat/Ubuntu/Fedora四、操作方法与实验步骤⑴安装VMware Player⑵在VMware Player当中创建一个新的虚拟机,指定安装包的路径。

⑶安装定制Redhat Enterprise Linux 5.0说明:⑴对软件开发和和网络服务包进行定制。

⑵选择samba服务、nfs服务、tftp服务、Telnet服务和FTP服务⑶关闭系统防火墙、禁用SELinux服务。

⑷手动设置系统分区。

五、实验数据记录和处理1、安装Ubuntu进入界面:2、选择tftp服务3、对软件开发和网络服务包进行定制,都选择老的软件开发和老的网络服务器4、关闭系统防火网5、禁用SELinux服务六、实验结果与分析七、讨论、心得通过这次实验,在自己电脑的虚拟机上安装好了Ubuntu的镜像文件,并在Ubuntu下写了一些简单的命令,深深地感觉在虚拟机上运行Ubuntu远远要比双系统下方便得多,尤其是在两种不同系统下来回切换。

由于电脑上之前就已经安装过虚拟机,所以,实验报告中未对虚拟机的安装加以赘述。

实验名称实验二熟悉Linux系统的基本命令实验时间4月18日实验地点博学楼网络实验室一、实验目的和要求⑴熟悉Linux命令格式⑵学会如何获取命令帮助信息⑶熟练掌握Linux常用命令⑷掌握GCC命令的使用及其常用参数的含义二、实验内容和原理实验内容:系统设置命令、文件及文件夹操作命令、压缩与解压缩命令、自动补全与历史命令、管道与重定向命令、GCC命令的使用三、主要仪器设备PC机、装有Linux操作系统的虚拟机四、操作方法与实验步骤⑴练习以下常用命令的使用shutdown、reboot、logout、exit、useradd、userdel、su、cd、ls、touch、mkdir、cp、rm、rmdir、mv、more、less、man、du、find、clear、grep、cat、history、tar、unzip、chmod、管道命令|以及重定向命令⑵举例说明管道命令| 的使用⑶举例说明重定向命令<、<<、>、>>的使用⑷编写一个C的源程序,并用gcc进行编译,练习使用gcc的各个参数,理解参数的意义五、实验数据记录和处理1.cd、ls 、mkdir 新建hello文件夹2.cp 复制a到hello文件夹3.rm移除hello 中的a文件4.rmdir移除hello文件夹5.mv更改文件名字、移动文件6.du -b 以字节为单位显示cache目录的大小7.find / -name lolo搜索当前目录下名为lolo的文件8.grep 在lan/b.txt文件里查找字符3,并输出行号-n;输出b.txt内容9.grep重定向追加>>六、讨论、心得本次实验室是熟悉Linux的基本操作命令。

linux系统结构框架

linux系统结构框架

linux系统结构框架
Linux系统一般有4个主要部分:内核、shell、文件系统和应用程序。

内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。

1.内核:内核是操作系统的核心,具有很多最基本功能,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。

Linux 内核由如下几部分组成:内存管理、进程管理、设备驱动程序、文件系统和网络管理等。

2.Shell:shell是命令行解释器,可以为用户提供对系统的访问,也可以被用作程序或者脚本的命令行环境。

有多种shell可以选择,比如bash,zsh,ksh等。

3.文件系统:Linux系统使用一个基于文件的层级结构来组织和存储系统资源。

每个文件和目录都从根目录“/”开始,然后层层嵌套。

4.应用程序:Linux系统上可以运行各种应用程序,包括文本编辑器、浏览器、开发工具等。

应用程序为用户提供了使用系统的接口。

在更细致的层次结构上,Linux系统的内存管理分为几个主要组件,包括物理内存管理、虚拟内存管理以及内核内存管理等。

物理内存管理负责物理内存的分配和回收,虚拟内存管理则将物理内存映射到虚拟地址空间,并实现内存的共享和保护。

内核内存管理则负责内核空间的分配和释放,以及内核页面的交换等。

linux分层设计体系结构

linux分层设计体系结构

linux分层设计体系结构Linux是一种开源的操作系统,其设计采用了分层的体系结构。

这种设计使得Linux具有高度的灵活性和可扩展性,同时也方便了系统的维护和管理。

本文将详细介绍Linux的分层设计体系结构。

在Linux的分层设计中,最底层是硬件层。

硬件层包括计算机的各种硬件设备,如处理器、内存、硬盘、网络接口等。

Linux通过设备驱动程序来管理和控制这些硬件设备,使其能够与操作系统进行交互。

在硬件层之上是内核层。

内核是操作系统的核心,负责管理系统的资源和提供各种系统服务。

Linux的内核是一个单独的模块,可以独立于其他软件进行开发和维护。

内核提供了各种系统调用接口,以及对进程、文件系统、网络和设备的管理和控制功能。

在内核层之上是库层。

库是一组共享的代码和函数,可以为应用程序提供常用的功能和服务。

Linux提供了许多不同的库,如C库、数学库、网络库等。

这些库可以被开发人员用来开发应用程序,提高开发效率和代码复用性。

在库层之上是应用层。

应用层包括各种应用程序和工具,如文本编辑器、图形界面、网络浏览器等。

这些应用程序可以通过系统调用接口与内核进行交互,并利用库提供的功能来实现各种任务和操作。

除了以上四个层次外,Linux还有其他一些重要的组件和模块。

例如,系统初始化和启动过程中,会加载引导程序和初始化程序;文件系统是用来组织和管理文件和目录的;网络协议栈是用来实现网络通信的;系统服务是用来提供各种系统功能和服务的。

这些组件和模块与其他层次之间相互关联,共同构成了Linux的完整体系结构。

Linux的分层设计体系结构具有许多优点。

首先,分层设计使得系统的各个组件和模块之间相互独立,可以分别进行开发、测试和维护,提高了开发和维护效率。

其次,分层设计使得系统的各个层次之间的接口清晰明确,方便了系统的扩展和升级。

此外,分层设计还提高了系统的稳定性和可靠性,一旦某个层次出现问题,不会对其他层次造成影响。

Linux的分层设计体系结构是一种高效、灵活和可扩展的设计方式。

Linux内核模块开发(简单)

Linux内核模块开发(简单)

Linux内核模块开发(简单)Linux系统为应⽤程序提供了功能强⼤且容易扩展的API,但在某些情况下,这还远远不够。

与硬件交互或进⾏需要访问系统中特权信息的操作时,就需要⼀个内核模块。

Linux内核模块是⼀段编译后的⼆进制代码,直接插⼊Linux内核中,在 Ring 0(x86–64处理器中执⾏最低和受保护程度最低的执⾏环)上运⾏。

这⾥的代码完全不受检查,但是运⾏速度很快,可以访问系统中的所有内容。

Intel x86架构使⽤了4个级别来标明不同的特权级。

Ring 0实际就是内核态,拥有最⾼权限。

⽽⼀般应⽤程序处于Ring 3状态--⽤户态。

在Linux中,还存在Ring 1和Ring 2两个级别,⼀般归属驱动程序的级别。

在Windows平台没有Ring 1和Ring 2两个级别,只⽤Ring 0内核态和Ring 3⽤户态。

在权限约束上,⾼特权等级状态可以阅读低特权等级状态的数据,例如进程上下⽂、代码、数据等等,但反之则不可。

Ring 0最⾼可以读取Ring 0-3所有的内容,Ring 1可以读Ring 1-3的,Ring 2以此类推,Ring 3只能读⾃⼰的数据。

1. 为什么要开发内核模块编写Linux内核模块并不是因为内核太庞⼤⽽不敢修改。

直接修改内核源码会导致很多问题,例如:通过更改内核,你将⾯临数据丢失和系统损坏的风险。

内核代码没有常规Linux应⽤程序所拥有的安全防护机制,如果内核发⽣故障,将锁死整个系统。

更糟糕的是,当你修改内核并导致错误后,可能不会⽴即表现出来。

如果模块发⽣错误,在其加载时就锁定系统是最好的选择,如果不锁定,当你向模块中添加更多代码时,你将会⾯临失控循环和内存泄漏的风险,如果不⼩⼼,它们会随着计算机继续运⾏⽽持续增长,最终,关键的存储器结构甚⾄缓冲区都可能被覆盖。

编写内核模块时,基本是可以丢弃传统的应⽤程序开发范例。

除了加载和卸载模块之外,你还需要编写响应系统事件的代码(⽽不是按顺序模式执⾏的代码)。

Linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解

Linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解

printk(KERN_WARNING fmt, ##arg) printk(KERN_DEBUG fmt, ##arg)
/* Module Init & Exit function */ static int __init myModule_init(void) {
/* Module init code */ PRINTK("myModule_init\n"); return 0;
图形
工具
前面我们介绍模块编程的时候介绍了驱动进入内核有两种方式:模块和直接编译进内核,并介绍 了模块的一种编译方式——在一个独立的文件夹通过makefile配合内核源码路径完成
那么如何将驱动直接编译进内核呢? 在我们实际内核的移植配置过程中经常听说的内核裁剪又是怎么麽回事呢? 我们在进行linux内核配置的时候经常会执行make menuconfig这个命令,然后屏幕上会出现以下 界面:
首页 业界 移动 云计算 研发 论坛 博客 下载 更多
process的专栏
您还未登录!| 登录 | 注册 | 帮助
个人资料
dianhuiren
访问:71424次 积分:1219分 排名:第8764名 原创:37篇 转载:127篇 译文:0篇 评论:3条
目录视图
摘要视图
订阅
《这些年,我们读过的技术经典图书》主题有奖征文 经理
这些配置工具都是使用脚本语言,如 Tcl/TK、Perl 编写的(也包含一些用 C 编写的代码)。本文
/dianhuiren/article/details/6917132
1/5
2012年04月 (6) 2012年03月 (15) 2012年02月 (16)
并不是对配置系统本身进行分析,而是介绍如何使用配置系统。所以,除非是配置系统的维护者,一般 的内核开发者无须了解它们的原理,只需要知道如何编写 Makefile 和配置文件就可以。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

管理内核模块的命令
rmmod 移除已挂载模块
用法:rmmod 模块名(不带后缀) 等同于:modprobe -r 模块名
insmod 挂载模块
insmod 需要给出模块所在目录的绝对路径,以及要带有模块 文件名后缀(.o 或.ko)
功能上没有modprobe 强。
管理内核模块的命令
depmod 创建模块依赖关系的列表
设备驱动
模块 4
硬件平台
内核模块概述
什么是内核模块? 内核模块是一种没有经过链接,不能独立运行的目 标文件,是在内核空间中运行的程序。经过链接装载 到内核里面成为内核的一部分,可以访问内核的公用 符号(函数和变量)。 内核模块可以让操作系统内核在需要时载入和执行, 在不需要时由操作系统卸载。它们扩展了操作系统内 核的功能却不需要重新启动系统。 如果没有内核模块,我们不得不一次又一次重新编 译生成单内核操作系统的内核镜 像来加入新的功能。 这还意味着一个臃肿的内核。
内核模块概述
太多的设备驱动和内核功能集成在内核中,内核过于庞大。如
何解决?
Linux内核引入内核模块机制。通过动态加载内核模块,使得在运行过 程中扩展内核的功能。不需要的时候,卸载该内核模块。
libc
系统调用
模块
进储文
1
程 存 件 网络 多媒 模 模块
管 管 系 通讯 体 块 2
理理统
机 模块
制3
构建模块
模块代码编写好后,下一步就是编译模块了。 编译模块过程中的第一步是决定在那里管理模块源码:
你可以把模块源码加入到内核源代码树中; 也可以在内核源代码树之外维护和构建你的模块源码。
放在内核源代码树中
将模块源码放到内核源码的目录下去进行编译是最理 想的选择; 首先你要清楚你的模块应在内核源代码树中处于何处。 设备驱动程序存放在内核源码树根目录drivers/的子 目录下
CONFIG_HELLO_MODULE = m
放在内核源代码树中
添加编译目标 内核源码每个子目录下都有一个Makefile负责该目录 下的文件编译工作; Makefile中的目标:
obj-m += xxx.o 表示xxx.c文件编译成模块 obj-y+=xxx.o 表示xxx.c文件编译进内核映像文件uImage中
Linux内核模块设计
内核模块概述 内核模块代码结构 内核模块编译 管理内核模块的命令
教学内容
教学要求
了解内核模块机制的优缺点; 掌握内核模块程序的格式框架; 掌握内核模块入口、出口函数编写的格式; 掌握内核模块管理命令的使用;
内核模பைடு நூலகம்概述
Linux内核是整体式结构,各个子系统联系紧密,作为 一个大程序在内核空间运行。
Hello World 模块
hello_init()函数是模块的入口点,在模块装载时被调用。
module_init()实际上是一个宏调用,它惟一的参数便是模块的初始化 函数。模块的所有初始化函数必须符合下面的形式: int module_name_init(void);
▶该模块入口函数通常不会被外部函数直接调用,所以它一般被标记为 static类型。 ▶init函数会返回一个int型数值,如果初始化顺利完成,那么它的返回值为
模块源码已经放到内核中去了,但是内核的配置是用 make menuconfig来配置的,也就是说是通过配置菜单来 选择那些功能进行编译。 我们只是把模块源码放到内核里面去了,但是配置菜单上, 还没有相应的选项; 所以下一步是添加相应的配置选项; 配置菜单中的配置选项是来源与Kconfig文件的,内核源 码的每个子目录下都有Kconfig文件,负责提供菜单选项;
如果该模块被编译进内核,而不是动态加载,则宏 __init的使用会在初始化完成后丢弃该函数并收回所 占内存。 如果该模块被编译进内核,宏__exit将忽略“清理 收尾”的函数。 这些宏在头文件linux/init.h定义。
Hello World 模块
内核模块证书和内核模块文档说明
2.4内核后,引入识别代码是否在GPL许可下发布的机制 。 在使用非公开的源代码产品时会得到警告。通过宏 MODULE_LICENSE(“GPL”),设置模块遵守GPL证书,取 消警告信息。 宏MODULE_DESCRIPTION()用来描述模块的用途。 宏MODULE_AUTHOR()用来声明模块的作者。 这些宏都在头文件linux/module.h定义。使用这些宏只是 用来提供识别信息。
tristate 表示该选项有三种选择“Y”,“N”,“M”; default 表示默认的选择是什么 help 提示帮助信息 配置选项添加到相应的Kconfig文件后,我们在make menuconfig的时候就可以找到我们的配置菜单了。
放在内核源代码树中
make menuconfig 的配置菜单上选中我们的配置选项 Device drivers --> character devices -->
Hello World 模块
一个内核模块至少包含两个函数
初始化函数,在模块加载到内核时被调用。 卸载函数,在内核模块被卸载时被调用。 现在的模块“初始化”和“卸载”函数可以起任意的名 字。通过宏 module_init()声明初始化函数,通过 module_exit()声明卸载函数 。 任一个内核模块需要包含linux/module.h
类似地,卸载一个模块,你可使用rmmod命令。
rmmod module 比如,rmmod hello_module
管理内核模块的命令
lsmod 列出已经挂载的内核模块
lsmod 是列出目前系统中已加载的模块的名称及大小 等
效果跟通过less /proc/modules查看模块一样。
modinfo 查看模块信息
设备驱动文件被进一步按照类别、类型或特殊驱动程序等 更有序地组织起来。如 字符设备存在于drivers/char/目录下 而块设备存放在drivers/block/目录下 USB设备则存放在drivers/usb/目录下
例如:将我们的模块文件放到drivers/char目录下
放在内核源代码树中
添加相应的配置选项
放在内核源代码树中
现在,我们的模块代码hello_module.c已经添加到内核
源码中;
并且drivers/char/Kconfig添加了配置菜单;
在drivers/char/Makefile添加了目标;
下一步要做的工作就是编译内核:
make
#会编译所有东西
或者
make modules
#只编译模块
obj-m+=hello_module.o 可以使用如下的命令来编译模块:
make -C /home/sice/linux-3.5 M=/home/sice/hello_module modules
Makefile文件实例:
安装模块
编译后的模块文件(.ko)要加载到内核中,就必须将 内核放置到跟文件系统中,一般放置在跟文件系统的 lib/modules/version/目录下:
modinfo 可以查看模块的信息,通过查看模块信息来 判定这个模块的用途。
modinfo 模块名
管理内核模块的命令
modprobe 挂载新模块以及新模块相依赖的模块
modprobe 模块名,在挂载该内核模块的同时,这个模块所依 赖的模块也被同时挂载。
modprobe还有其他用法,问他的“man” 。例如:modprobe l 是列出内核中所有的模块,包括已挂载和未挂载的,读取的 模块列表就位于 /lib/modules/‘uname -r’ 目录中。
放在内核源代码树中
配置好后,保存退出配置菜单,所有的配置选项会保存 在.config隐藏文件中; 例如,我们在.config文件中查找配置选项如下:
我们找到CONFIG_HELLO_MODULE=m ; 也就是说Kconfig文件中的选项:
config HELLO_MODULE 在选择为模块后,保存在.config文件中的形式是:
内核模块概述
模块机制的优点:
减小内核映像尺寸,增加系统灵活性; 节省开发时间;修改内核,不必重新编译整个内核。 模块的目标代码一旦被链入内核,作用和静态链接的内 核目标代码完全等价。
模块机制的缺点:
对系统性能有一定损失; 使用不当时会导致系统崩溃;
Hello World 模块
Hello world模块,展示编写内核模块的基础
放在内核源码外
我们也可以将我们的模块代码hello_module.c放在内核源 码以外的任意地方进行编译; 例如:
内核源码目录:/home/sice/linux-3.5 我们新建一个目录来保存模块代码,模块代码放在: /home/sice/hello_module目录下 需要在这个目录下新建一个Makefile文件,文件的内容为:
目前的的Linux 发行版所用的内核是4.x版本,是自 动解决依赖关系。
depmod -a为所有列在/etc/modprobe.conf 或 /etc/modules.conf 中的所有模块创建依赖关系,并且 写入到modules.dep文件
depmod –e 列出已挂载但不可用的模块
课堂小结
如:我们的网络跟文件是/opt/rootfs,.ko文件就应该拷 贝到/opt/rootfs/lib/modules/linux-3.5-sice目录下;
模块的加载与卸载
加载模块最简单的方法是通过insmod命令。
insmod module 需要载入的模块名称由参数module指定,比如:
insmod hello_module.ko
例如,我们在drivers/char/Makefile文件中添加目 标:
上面的$(CONFIG_HELLO_MODULE)就是取.config文 件中的CONFIG_HELLO_MODULE的值;该值为m;
相关文档
最新文档