首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux内核(内核模块加载过程(超详细)

GRUB 加载了内核之后,内核首先会再进行二次系统自检,而不一定使用 BIOS 检测硬件信息。这时内核终于开始替代 BIOS 接管 Linux 启动过程了。...这个文件是一个压缩内核镜像我们已经知道,Linux 会把不重要功能编译成内核模块,在需要时再调用,从而保证了内核不会过大。...如果 Linux 安装在 IDE 硬盘之上,并且采用是默认 ext3/4 文件系统,那么内核启动后加载根分区和模块加载都没有什么问题,系统会顺利启动。...它们作用类似,可以通过启动引导程序加载到内存中,然后会解压缩并在内存中仿真成一个根目录,并且这个仿真的文件系统能够提供一个可执行程序,通过该程序来加载启动过程中所需内核模块,比如 USB、SATA....也就是说,通过 initramfs 虚拟文件系统在内存中模拟出一个根目录,然后在这个模拟根目录中加载 SCSI 等硬件驱动,就可以加载真正根目录了,之后才能调用 Linux 第一个进程 /sbin

36720

linux内核模块加载命令

5、depmod 创建模块依赖关系列表 6、insmod 挂载模块; 二,与内核模块加载相关配置文件; 1、模块配置文件 modules.conf 或 modprobe.conf 2、内核模块其它配置文件...三,、硬件驱动在系统中目录; 四、自己编译驱动办法; 一,内核相关命令 1、lsmod 列出已经加载内核模块; lsmod 是列出目前系统中已加载模块名称及大小等;另外我们还可以查看 /proc...或 modprobe.conf 内核模块开机自动挂载模块一般是位于一个配置文件,一般Linux发行版本都有 /etc/modules.conf 或 /etc/modprobe.conf 。...比如Fedora Core 4.0 内核模块开机自动加载文件是 /etc/modprobe.conf ;在这个文件中,一般是写入模块加载命令或模块别名定义等;比如我们在modules.conf 中可能会发行类似的一行...modules.conf 中加入什么内容; 如果您有些模块不能开机加载,您想让一些模块加机自动加载,就可以把modprobe 模块 直接写入配置文件; 2、内核模块其它配置文件 内核模块其它配置文件还是需要了解

5K30
您找到你想要的搜索结果了吗?
是的
没有找到

Linux内核模块驱动加载与dmesg调试

因为近期用到了Linux内核相关知识,下面随笔将给出内核模块编写记录,供大家参考。...1、运行环境   Ubuntu 版本:20.04   Linux内核版本:5.4.0-42-generic   gcc版本:gcc version 9.3.0   驱动和一般应用程序执行方式很大不同...2、内核模块模型说明 (1)驱动和一般应用程序执行方式很大不同   一般应用由main函数开始执行,流程基本由程序自身控制   驱动程序没有main函数,由回调方式驱动运行 (2)回调方式:   先向内核注册函数...,然后应用程序触发这些函数执行   例如:驱动程序在初始化时,向内核注册处理某个设备写操作函数   当应用程序使用write系统调用写该设备时,内核就会调用注册上述函数 3、内核模型常见回调函数举例...DriverMMap(struct file *pslFileStruct, struct vm_area_struct *pslVirtualMemoryArea); 16 17 #endif 8、编译内核模块

6.5K20

OpenCAS 内核模块加载

OpenCAS 内核模块加载 内核模块基本研发步骤介绍 模块加载函数,当通过insmod或者modprobe命令加载内核模块,模块加载函数会自动在内核中执行模块初始化函数 模块卸载函数,当rmmod命令卸载内核模块时候...,会在内核执行模块销毁函数 模块许可申明,许可证是用来描述内核模块许可权限 模块参数,模块参数是模块被加载时候可以传递参数,它对应模块全局变量 模块到处符号,内核模块可以导出符号(symbol...,对应变量或者函数),导出后其他内核模块可以使用本模块函数或者变量 模块作者申请 内核模块样例 #include #include ...当opencas初始化完毕后会加载cas_cache和cas_disk这两个内核模块init函数。...cache_cache中init函数会执行如下函数调用核心函数,这个内核模块主要是通过module_init(cas_init_module)来完成对应加载服务 static int __init

1.5K20

Linux内核模块详解

通过这一章学习,希望能够理解Linux提出内核模块这个机制意义;理解并掌握Linux实现内核模块机制基本技术路线;运用Linux提供工具和命令,掌握操作内核模块方法。...第二个实验,演示如何将多个源文件,合并到一个内核模块中。上述实验过程中,将会遇到Linux为此开发内核模块操作工具lsmod、insmod、rmmod等。...所以在内核模块编程过程中,必须特别的小心。 好了,下面我们可以具体地看一看内核模块机制究竟是怎么实现。 2.2 内核符号表 首先,我们来了解一下内核符号表这个概念。...使用内核模块 3.1 模块加载 系统调用当然是将内核模块插入到内核可行方法。但是毕竟太底层了。此外,Linux环境里还有两种方法可达到此目的。...调用init_module(),向它传递上面所创建用户态内存区地址,其实现过程我们已经详细分析过了。 释放用户态内存, 整个过程结束。 3.2 模块卸载 要卸载一个内核模块使用rmmod命令。

8.2K20

加载内核模块-Unknown symbol错误分析

在调试过程中,发现一个问题,编译生成一个KO文件,insmod加载后报错: Unknown symbol var_set_integer (err 0) Unknown symbol parse_arg_eq...例如: [root@localhost sw_64-3_8]# modinfo linux-bcm-core.ko filename: linux-bcm-core.ko license:...(函数名); 2)在调用该函数模块中使用extern对之声明; 3)首先加载定义该函数模块,再加载调用该函数模块。...【模块加载顺序前后要求,一般就是依赖于符号调用】 编译生成ko模块之后,用insmod命令加载此模块到内核。这个程序加载模块代码段和数据段到内核。...补充: 1, 【 Linux模块间通讯方法非常多,最便捷方法莫过于函数符号导出,然后直接调用。】

2.8K30

我们离不开 Linux 内核模块 | Linux 中国

Linux 内核今年就要满 30 岁了! 如果你像我们一样对此特别重视,那么让我们本周用几个特别的文章来庆祝 Linux。 今天,我们先来看看来自社区对“你不能没有哪个 Linux 内核模块?...— Stephan Avenwedde #3 最有用内核模块无疑是 snd-hda-intel,因为它支持大多数集成声卡。我可以一边听音乐,一边在 Linux 桌面上编码一个音频编曲器。...所以,对于那些让软盘磁带机在 1990 年代 Linux 上工作无名英雄,你真是太厉害了! — Jim Hall #8 嗯,这很简单。是 kvm 内核模块。...就个人而言,我无法想象在没有虚拟机情况下完成日常工作。我愿意相信我们大多数人都是这样。kvm 模块在使 Linux 成为云战略核心方面也发挥了很大作用。...你生活中不能没有什么 Linux 内核模块

2.4K31

Linux启动引导程序(GRUB)加载内核过程

我们知道启动引导程序(Boot Loader,也就是 GRUB)会在启动过程加载内核,之后内核才能取代 BIOS 接管启动过程。如果没有启动引导程,那么内核是不能被加载。...本节,我们就来看看启动引导程序加载内核过程,当然 initramfs 这个虚拟文件系统也是要靠启动引导程序调用。...GRUB加载内核过程GRUB 作用有以下几个:加载操作系统内核;拥有一个可以让用户选择菜单,来选择到底启动哪个系统;可以调用其他启动引导程序,来实现多系统引导。...答案是空间不够,GRUB 功能非常强大,MBRM 空间是不够使用。那么 Linux 解决办法是把 GRUB 程序分成了三个阶段来执行。...接下来内核就可以接管启动过程,继续自检与加载硬件模块了。

31620

linux 网络内核模块了解01

这两个函数语法,类似于另外来自于libc用户空间库姊妹函数malloc 和free 调用。...内核维护其专属内存缓存网络数据结构 套接字缓冲区描述符 邻居协议映射 路由表 关键数据结构 struct sk_buff 一个封包就存储在这里,所有网络分层都会使用这个结构来存储其报头,有关用户数据信息...多个不同网络分层都会使用这个结构。 (MAC 或L2分层上另一种链路层协议, L3IP以及L4TCP 或UDP)都会使用这个结构。...并且当该结构从一个分层传到另一个分层时,其不通字段会随之变化。 L4 在传给L3 之前会附加一个报头。 L3 在传给L2之前又会挤上其自己报头。...sbk相关处理函数 数据预留和对齐 skb_reserve skb_put skb_push struct net_device 在Linux 内核中没中网络设备都用这个数据结构表示,包括软硬件配置信息

1.9K10

linux 内核模块开发相关文章搜集和模块开发过程小技巧

最近需要开发一些内核模块,进行探究linux内核一些特征,现在把一些遇到比较好文章和知识点,进行简要记录和备忘; 内核模块开发相关链接: https://www.thegeekstuff.com/...内存模型讲解和Linux访问userspace内存API讲解; 内核模块开发过程遇到知识点: make命令,会隐士调用cc -c 命令,生成.o文件;所以在内核模块makefile中,可以直接写上:...内核模块只能访问内核导出函数和变量;EXPORT_SYMBOL(my_variable);  想要熟悉内核模块编程,写一个linux设备驱动程序是比较好学习方法;  在进行开发linux内核模块时候...,最好下载对应版本linux内核代码,使用source insight或者vscode工具进行打开进行参考;因为经常内核中API会改变;你参考别人针对其他版本开发代码,编译不通过; 内核模块和内核公用一个地址空间...最简单内核模块编译示例: //必要头文件 #include // included for all kernel modules #include <linux/kernel.h

78720

Linux为什么使用内核模块

我们常常说到操作系统有Linux、Windows、mac OS等等,手机安卓系统就是基于Linux操作系统,这些操作系统从内核角度分为宏内核和微内核,Linux是典型宏内核操作系统,Windows...在驱动开发初期,需要经常修改驱动代码,这对驱动开发者来说造成很大困扰,显然是不可接受,所以可维护性差。 为了弥补这一缺陷,Linux内核提供了模块机制,称为内核模块。...而不管加载还是卸载,都不需要重新启动整个系统。...注意,内核模块不一定是驱动程序,驱动程序也不一定都是模块形式。...前面说到宏内核把所有内核功能整体编译在一起,形成一个单独内核镜像文件,镜像文件就会比较大,而且整个内核镜像将会被加载到内存中运行,然而,内核模块这一特点就有助于减小内核镜像文件大小,自然也就减少了内核所占内存空间

2.5K20

Linuxlsmod命令列出内核模块

lsmod是一个命令行程序,用于显示有关已加载Linux内核模块信息。 内核模块 内核是操作系统核心组件。 它管理系统资源,并且是计算机硬件和软件之间桥梁。...Linux内核具有模块化设计。 内核模块通常称为驱动程序是一段扩展内核功能代码。 模块要么编译为可加载模块,要么内置在内核中。...可加载模块可以根据需要在正在运行内核中进行加载和卸载,而无需重新启动系统。 通常,模块是由udev(设备管理器)按需加载。...内核模块存储在/lib/modules/目录中。 要找到正在运行内核版本,请使用uname -r命令。...在命令行中运行lsmod以了解当前正在加载哪些内核模块: lsmod 该命令在新一行上输出每个已加载内核模块信息: Module Size Used by cmac

4K20

加载加载Class文件过程

加载加载Class文件过程 jdk8和9有一些区别,这里以8为准,9作为最后扩充 类加载器是用于加载class文件,我们从这里开始介绍 前言 因为底层硬件不同,如果在不同硬件上都要做一次适配化无疑是令人奔溃...建议每次发布生产环境时分为 生产环境机器总数/8=发布总批次数 类加载过程 一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它整个生命周期将会经历加载 (Loading)、验证(Verification...其他流程顺序是固定 接下来分别探究每一个过程分别做了什么 加载 1.根据类全类名来获取定义此类二进制字节流。...2.并将字节流所代表静态存储结构转换为特定运行时数据结构 3.在内存中生成一个代表这个类java.lang.Class实例对象 加载过程会校验cafe babe魔法数,常量池,文件长度,是否有父类等...准备 类中定义变量(即静态变量,被static修饰变量)分配内存并设置类变量初 始值阶段 解析 将常量池内符号引用替换为直接引用过程 方法引用,java.lang.NoSuchMethodError

1.2K20

Class文件加载过程

直接能访问到内容 initializing:静态变量赋值为初始值 类加载器:classLoader Bootstrap类加载器在获取时会显示null 因为它是C++实现 Java没有与其对应...Tips:加载加载器是不是就是它parent 不是 不是 不是 parent是加载过程中需要查找一个层次关系,至于parent是被谁加载是两回事 父加载器不是类加载加载器 也不是类加载父类加载器...类加载过程: 说到class加载过程就要提到双亲委派机制: 双亲委派是一个孩子向父亲方向,然后父亲向孩子方向双亲委派过程 为什么要有双亲委派:其实是主要为了安全问题 次要是避免再次加载...所有的类加载器都是Launcher内部类 我们加载时候需要先调用loadclass方法,loadclass方法调用了重载loadClass方法 需不需要解析 把符号引用直接转换为直接访问地址...parentload (这就是双亲委派过程_其实parent也是先findloadedclass 如果找不到也是调用parent 类似于递归调用,这里parent 是final修饰 修改不了);

19120

jvm加载过程

java类加载过程 JVM将类加载过程分为三个步骤:装载(Load)、链接(Link)和初始化(Initialize) 1、装载 通过一个类全限定类名获取类二进制字节流 将在这个字节流代表静态存储结果转化为方法区运行时内存...,因为final在编译时候就会分配,准备阶段会显示初始化) 解析:把常量池中符号引用转换为直接引用 3、初始化 为类静态变量赋予正确初始值 实例查看类加载器 public class ClassLoaderDemo...sun.misc.Launcher$ExtClassLoader@39a054a5 Grandfather of classLoader1 -> null classLoader2 -> null null Java类加载过程使用是双亲委派模型...而是会把这个请求委托给父类加载器去执行,如果父类加载器还存在父类加载器,则进一步向上委托,以此递归。...// 默认情况下,仅向加载类授予权限,以访问创建URLClassLoader时指定URL。

72220

加载过程

生命周期 类加载过程 加载 验证 准备 解析 初始化 卸载 类生命周期 一个类完整生命周期如下: 类加载过程 Class 文件需要加载到虚拟机中之后才能运行和使用,那么虚拟机是如何加载这些...系统加载 Class 类型文件主要三步:加载->连接->初始化。连接过程又可分为三步:验证->准备->解析。...加载加载过程第一步,主要完成下面 3 件事情: 通过全类名获取定义此类二进制字节流 将字节流所代表静态存储结构转换为方法区运行时数据结构 在内存中生成一个代表该类 Class 对象,作为方法区这些数据访问入口...综上,解析阶段是虚拟机将常量池内符号引用替换为直接引用过程,也就是得到类或者字段、方法在内存中指针或者偏移量。...初始化 初始化阶段是执行初始化方法 ()方法过程,是类加载最后一步,这一步 JVM 才开始真正执行类中定义 Java 程序代码(字节码)。

57720
领券