帕克系统网 - 帕克系统家园专业干净的系统网站
最新更新 系统重装教程(一看就会视频+图文版)
当前位置: 首页 > 系统教程 > Linux系统

Linux内核引导时通过 文件读取要加载的文件系统。

更新日期:2023-11-19 16:54:56

来源:[db:来源]

手机扫码继续观看

一、 Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统。

二、 Linux面试题部分享:

1 在Linux系统中,以 文件 方式访问设备 。

2 Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统。

3 Linux文件系统中每个文件用 索引节点来标识。

Linux文件系统使用索引节点来记录文件信息,作用于Windows的文件分配表类似,索引节点是一个数据结构,它包含了一个文件的文件名,位置,大小,建立或修改时间,访问权限,所属关系等文件控制信息,一个文件系统维护了一个索引节点的数组,每个文件或目录都与索引结点数组中的唯一一个元素对应,系统为每个索引结点分配了一个号码,也就是该结点在数组中的索引号,称为索引结点号。

Linux文件系统将文件索引结点号和文件名同时保存在目录中,所以目录只是将文件的名称和它的索引结点号结合在一起的一张表。目录中每一对文件名称和索引结点号称为一个连接。

4 全部磁盘块由四个部分组成,分别为引导块 、专用块 、 i节点表块 和数据存储块。

Linux系统中的每个文件都被赋予一个唯一的数值,这个数值称做索引节点。索引节点存储在一个称作索引节点表< inode table>中,该表在磁盘格式化时被分配。每个实际的磁盘或分区都有其自己的索引节点表。一个索引节点包含文件的所有信息,包括磁盘上数据的地址和文件类型。文件类型包括如普通文件、目录和特殊文件这样的信息。

linux硬盘组织方式为:引导区、超级块(superblock),索引结点(inode),数据块(datablock),目录块(diredtory block)。其中超级块中包含了关于该硬盘或分区上的文件系统的整体信息,如文件系统的大小等;超级块后面的数据结构是索引结点,它包含了针对某一个具体文件的几乎全部信息,如文件的存取权限、所有者、大小、建立时间以及对应的目录块和数据块等;数据块是真正存储文件内容的位置。但是索引结点中不包括文件的名字,文件名是放在目录块里的。目录块里包含有文件的名字以及此文件的索引结点编号。

linux内核之模块参数及导出符号

1 模块参数

用 “module_param (参数名,参数类型,参数读 / 写权限) ” 为模块定义一个参数,例如下列代码定义了 1 个整型参数和 1 个字符指针参数:

1 static char book_name = "dissecting Linux Device Driver";

2 module_param(book_name, charp, S_IRUGO);

3 static int book_num = 4000;

4 module_param(book_num, int, S_IRUGO);

在装载内核模块时,用户可以向模块传递参数,形式为 “insmode 模块名 参数名 = 参数值,如果不传递,参数将使用模块内定义的缺省值。参数类型可以是 byte 、 short 、 ushort 、 int 、 uint 、 long 、 ulong 、 charp (字符指针)、 bool 或 invbool (布尔的反),在模块被编译时会将 module_param 中声明的类型与变量定义的类型进行比较,判断是否一致。模块被加载后,在 /sys/module/ 目录下将出现以此模块名命名的目录。在此模块的目录下还将出现 parameters 目录,其中包含一系列以参数名命名的文件节点,这些文件的权限值就是传入module_param ()的 “参数读 / 写权限” ,而文件的内容为参数的值。

insmod命令加载模块后,通过查看 “/var/log/messages” 日志文件可以看到内核的输出:

# tail -n 2 /var/log/messages

tail -n 2表示输入文件的最后2行

2 导出符号

Linux 的 “/proc/kallsyms” 文件对应着内核符号表,它记录了符号以及符号所在的内存地址。模块可以使用如下宏导出符号到内核符号表中:

EXPORT_SYMBOL( 符号名 );

EXPORT_SYMBOL_GPL( 符号名 );

导出的符号可以被其他模块使用,只需使用前声明一下即可。 EXPORT_SYMBOL_GPL ()只适用于包含 GPL许可权的模块。

如果符号名是“e_symbol”,从 “/proc/kallsyms” 文件中找出 e_symbol 的相关信息:

# grep e_symbol /proc/kallsyms

8000af1c t e_symbol [export_symb]

在Linux内核编译过程中,通常使用make命令来生成新的内核。

拓展知识:

make命令是一个自动化构建工具,它可以根据Makefile文件中的规则和依赖关系来生成目标文件。在Linux内核编译中,Makefile文件包含了编译内核所需的规则和依赖关系。当您在终端中运行make命令时,它会根据Makefile文件中的规则来构建内核,并生成新的内核镜像文件。

要生成新的内核,您通常需要先准备好所需的工具和环境,并确保内核源代码的正确配置和下载。然后,在终端中进入内核源代码的根目录,并运行make命令。make命令会根据Makefile文件中的规则和依赖关系来构建内核,并生成新的内核镜像文件。

需要注意的是,在编译内核之前,您需要确保系统已经安装了必要的编译工具和依赖库。此外,您还需要根据实际情况配置内核源代码,例如选择正确的体系结构、配置内核参数等。这些步骤可能会因内核版本和配置的不同而有所差异。

总之,在Linux内核编译过程中,使用make命令生成新的内核是一种常见的做法。通过运行make命令并根据Makefile文件中的规则和依赖关系来构建内核,可以生成新的内核镜像文件。

Linux 内核设计的理念主要有这几个点:

MutiTask,多任务

SMP,对称多处理

ELF,可执行文件链接格式

Monolithic Kernel,宏内核

MutiTask

MutiTask 的意思是多任务,代表着 Linux 是一个多任务的操作系统。多任务意味着可以有多个任务同时执行,这里的「同时」可以是并发或并行:

对于单核 CPU 时,可以让每个任务执行一小段时间,时间到就切换另外一个任务,从宏观角度看,一段时间内执行了多个任务,这被称为并发。

对于多核 CPU 时,多个任务可以同时被不同核心的 CPU 同时执行,这被称为并行。

SMP

SMP 的意思是对称多处理,代表着每个 CPU 的地位是相等的,对资源的使用权限也是相同的,多个 CPU 共享同一个内存,每个 CPU 都可以访问完整的内存和硬件资源。

这个特点决定了 Linux 操作系统不会有某个 CPU 单独服务应用程序或内核程序,而是每个程序都可以被分配到任意一个 CPU 上被执行。

ELF

ELF 的意思是可执行文件链接格式,它是 Linux 操作系统中可执行文件的存储格式;

ELF 文件格式

ELF 把文件分成了一个个分段,每一个段都有自己的作用,具体每个段的作用这里就不详细说明了,感兴趣的同学可以去看《程序员的自我修养——链接、装载和库》这本书。

另外,ELF 文件有两种索引,Program header table 中记录了「运行时」所需的段,而 Section header table 记录了二进制文件中各个「段的首地址」。

那 ELF 文件怎么生成的呢?

我们编写的代码,首先通过「编译器」编译成汇编代码,接着通过「汇编器」变成目标代码,也就是目标文件,最后通过「链接器」把多个目标文件以及调用的各种函数库链接起来,形成一个可执行文件,也就是 ELF 文件。

那 ELF 文件是怎么被执行的呢?

执行 ELF 文件的时候,会通过「装载器」把 ELF 文件装载到内存里,CPU 读取内存中宏内核的特征是系统内核的所有模块,比如进程调度、内存管理、文件系统、设备驱动等,都运行在内核态。

不过,Linux 也实现了动态加载内核模块的功能,例如大部分设备驱动是以可加载模块的形式存在的,与内核其他模块解藕,让驱动开发和驱动加载更为方便、灵活。

当你在编译一个设备驱动模块时,你需要在系统中安装内核头文件。内核头文件同样在你编译与内核直接链接的用户空间程序时需要。当你在这些情况下安装内核头文件时,你必须确保内核头文件精确地与你当前内核版本匹配(比如:3130-24-generic)。

如果你的内核是发行版自带的内核版本,或者使用默认的包管理器的基础仓库升级的(比如:apt-ger、aptitude或者yum),你也可以使用包管理器来安装内核头文件。另一方面,如果下载的是kernel源码并且手动编译的,你可以使用make命令来安装匹配的内核头文件。

现在我们假设你的内核是发行版自带的,让我们看下该如何安装匹配的头文件。

在 Debian、Ubuntu 或者 Linux Mint 上安装内核头文件

假设你没有手动编译内核,你可以使用apt-get命令来安装匹配的内核头文件。

首先,使用dpkg-query命令检查是否有可用的内核头文件。

$ dpkg-query -s linux-headers-$(uname -r)

dpkg-query: package 'linux-headers-3110-26-generic' is not installed and no information is available

接着使用下面的命令安装匹配的内核头文件。

$ sudo apt-get install linux-headers-$(uname -r)

验证头文件是否成功安装。

$ dpkg-query -s linux-headers-$(uname -r)

Package: linux-headers-3110-26-generic

Status: install ok installed

Debian、Ubuntu、Linux Mint默认头文件在/usr/src下。

在 Fedora、CentOS 或者 RHEL 上安装内核头文件

假设你没有手动编译内核,你可以使用yum命令来安装匹配的内核头文件。

首先,用下面的命令检查系统是否已经安装了头文件。如果下面的命令没有任何输出,这就意味着还没有头文件。

$ rpm -qa | grep kernel-headers-$(uname -r)

接着用yum命令安装头文件。这个命令会自动找出合适的头文件并安装。

$ sudo yum install kernel-headers

验证包安装的状态。

$ rpm -qa | grep kernel-headers-$(uname -r)

该文章是否有帮助到您?
Windows 10 系统在线下载
Windows 10 是迄今为止最好的 Windows|前往下载,成就你的非凡
立即下载 视频教程:如何安装该系统?
常见问题
系统下载排行

热门关键词
专题
安卓下载 更多
手机上观看
扫码手机上观看