Linux内核分析(一)---linux体系简介|内核源码简介|内核配置编译安装

简介: 原文:Linux内核分析(一)---linux体系简介|内核源码简介|内核配置编译安装Linux内核分析(一) 从本篇博文开始我将对linux内核进行学习和分析,整个过程必将十分艰辛,但我会坚持到底,同时在博文中如果那些地方有问题还请各位大神为我讲解。
原文: Linux内核分析(一)---linux体系简介|内核源码简介|内核配置编译安装

Linux内核分析(一)

从本篇博文开始我将对linux内核进行学习和分析,整个过程必将十分艰辛,但我会坚持到底,同时在博文中如果那些地方有问题还请各位大神为我讲解。

今天我们会分析到以下内容:

1.      Linux体系结构简介

2.      Linux内核源码简介

3.      Linux内核配置、编译、安装

 

l  Linux体系结构简介

1.       Linux体系结构(linux系统构成)

Linux可以分为两部分,分别为用户空间和内核空间具体如下图:

a)        用户空间包括:用户的应用程序、C

b)        内核空间包括:系统调用接口、内核(狭义内核)、平台架构相关的代码

2.       为什么要分为内核空间和用户空间

我们在分析u-boot的时候就说到过,我们的cpu在不同的工作模式下可以访问的寄存器是不一样的,所以为了保护我们的操作系统,避免用户程序将内核搞崩,所以进行了内核空间和用户空间的划分。

a)        Arm处理器工作模式划分:usrFIQIRQsvcabtundsys(具体介绍在http://www.cnblogs.com/wrjvszq/p/4199682.html

b)        X86处理器工作模式划分:Ring0Ring3Ring0下可以执行特权指令,可以访问IO设备,Ring3则有很多的限制

注:我们可以通过系统调用硬件中断来完成用户空间到内核空间的转移

3.       Linux内核结构(广义内核)

Linux内核由七个部分构成,具体如下图:

a)        系统调用接口(SCI):openreadwrite等系统调用

b)        进程管理(PM):创建进程、删除进程、调度进程等

c)        内存管理(MM):内存分配、管理等

d)        虚拟文件系统(VFS):为多种文件系统提供统一的操作接口

e)        网络协议栈:提供各种网络协议

f)         CPU架构相关代码(Arch):为的是提高至移植性

g)        设备驱动程序(DD):各种设备驱动,占到内核的70%左右代码

l  Linux内核源码简介

1.       源码获取

Linux内核获取有两种方法,一种是在www.kernel.org 直接获取,另一种是使用git获取(具体方法参考网络)。

2.       源码目录简介

其源码主要有以下目录(介绍重要目录):

a)        Arch目录:存放处理器相关的代码。下设子目录,分别对应具体的CPU,每个子目录有bootmm,以及kernel三个子目录,分别对应系统引导以及存储管理,和系统调用

b)        Include目录:内核所需要的大部分头文件目录。与平台无关的在include/linux子目录下,与平台相关的则放在include相应的子目录中。

c)        fs目录:存放各种文件系统的实现代码。

d)        init目录:init子目录包含核心的初始化代码(不是系统的引导代码)。其包含两个文件main.cversion.c,可以用来研究核心如何工作。

e)        ipc目录:包含核心进程间的通信代码。

f)         kernel目录:包含内核管理的核心代码。与硬件相关代码放在arch/*/kernel目录下。

g)        mm目录:包含了所有的内存管理代码。与硬件相关的内存管理代码位于arch/*/mm目录下。

h)        scripts目录:包含用于配置核心的脚本文件。

i)          lib目录:包含了核心的库代码,与硬件相关的库代码被放在arch/*/lib/目录下

l  Linux内核配置、编译、安装

1.       X86配置

Linux内核的编译有两种方法,具体如下:

a)        交互式:在内核顶层的目录下运行make config,按照提示一步一步的按照自己的需求对内核进行配置。

b)        菜单式:在内核顶层的目录下运行make menuconfig,菜单式的按照自己的需求对内核进行配置。

2.       X86编译

Linux内核的编译要经过以下步骤,具体如下:

1.        内核编译:linux内核的编译有以下两种方法。

n  make zImage编译出的内核小于512k(老版本内核)

n  make bzImage通用编译命令

注:在以上两个命令中加V=1可查看编译过程中的详细信息

2.        内核模块编译:执行make modules编译内核模块。

3.        内核模块安装:执行make modules_install将编译好的内核模块复制到当前系统的/lib/modules下的**目录下。

4.        内核模块打包:执行mkinitrd initrd-$version $version对内核模块进行打包,其中initrd-$version表示要打包为的文件的名字,$version表示要打包的目录即我们上一步生成的目录。

3.       X86安装

Linux内核的安装要经过以下步骤,具体如下:

a)        拷贝内核:复制1编译出来的内核映像到启动目录cp arch/$cpu/boot/bzImage1编译出来的bzimage/boot/vmlinuz-$version

b)        拷贝内核模块文件:执行cp initrd-$version4生成的文件) /boot/ 4生成的文件拷贝到boot

c)        修改启动配置文件:修改/etc/grub.conf文件

目录
相关文章
|
安全 网络协议 Linux
深入理解Linux内核模块:加载机制、参数传递与实战开发
本文深入解析了Linux内核模块的加载机制、参数传递方式及实战开发技巧。内容涵盖模块基础概念、加载与卸载流程、生命周期管理、参数配置方法,并通过“Hello World”模块和字符设备驱动实例,带领读者逐步掌握模块开发技能。同时,介绍了调试手段、常见问题排查、开发规范及高级特性,如内核线程、模块间通信与性能优化策略。适合希望深入理解Linux内核机制、提升系统编程能力的技术人员阅读与实践。
1026 1
|
10月前
|
安全 Linux iOS开发
Binary Ninja 5.1.8104 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
Binary Ninja 5.1.8104 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
832 53
Binary Ninja 5.1.8104 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
|
10月前
|
安全 Linux iOS开发
Nessus Professional 10.10 Auto Installer for RHEL 10, AlmaLinux 10, Rocky Linux 10 - Nessus 自动化安装程序
Nessus Professional 10.10 Auto Installer for RHEL 10, AlmaLinux 10, Rocky Linux 10 - Nessus 自动化安装程序
653 6
Nessus Professional 10.10 Auto Installer for RHEL 10, AlmaLinux 10, Rocky Linux 10 - Nessus 自动化安装程序
|
10月前
|
Linux API iOS开发
Binary Ninja 4.2.6455 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
Binary Ninja 4.2.6455 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
743 14
Binary Ninja 4.2.6455 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
|
10月前
|
存储 Linux 开发工具
Linux环境下使用Buildroot配置软件包
使用Buildroot可以大大简化嵌入式Linux系统的开发和维护工作,但它需要对Linux系统和交叉编译有深入的理解。通过上述步骤,可以有效地配置和定制软件包,为特定的嵌入式应用构建高效、稳定的系统。
1026 11
|
10月前
|
消息中间件 Kafka Linux
Linux下安装Kafka 3.9.1
本文介绍Kafka 3.9.1版本的安装与配置,包括通过ZooKeeper或KRaft模式启动Kafka。涵盖环境变量设置、日志路径修改、集群UUID生成、存储格式化及服务启停操作,适用于Linux环境下的部署实践。
1254 0
|
12月前
|
网络协议 关系型数据库 Linux
【App Service Linux】在Linux App Service中安装 tcpdump 并抓取网络包
在App Service for Linux环境中,无法像Windows一样直接使用网络排查工具抓包。本文介绍了如何通过TCPDUMP在Linux环境下抓取网络包,包括SSH进入容器、安装tcpdump、执行抓包命令及下载分析文件的完整操作步骤。
530 5
|
12月前
|
弹性计算 安全 Linux
阿里云服务器ECS安装宝塔Linux面板、安装网站(新手图文教程)
本教程详解如何在阿里云服务器上安装宝塔Linux面板,涵盖ECS服务器手动安装步骤,包括系统准备、远程连接、安装命令执行、端口开放及LNMP环境部署,手把手引导用户快速搭建网站环境。