当前位置: 首页 > news >正文

零基础学Linux内核:1、Linux源码组织架构

文章目录

  • 前言
  • 一、Linux内核的特征
  • 二、Linux操作系统结构
    • 1.Linux在系统中的位置
    • 2.Linux内核的主要子系统
    • 3、Linux系统主要数据结构
  • 三、linux内核源码组织
    • 1、下载Linux源码
    • 2、Linux版本号
    • 3、linux源码架构目录讲解


前言

这里将是我们从零开始学习Linux的第一节,这节课我们将了解Linux源码的各个文件夹的组成与含义。


一、Linux内核的特征

1、开源:Linux内核是开源的,用户和开发者可以自由地查看、学习、修改和分发内核代码,促进了协作和创新。

2、可移植性:Linux内核被设计为高度可移植的,可以在各种不同的硬件平台上运行,包括个人计算机、服务器、嵌入式设备、移动设备等。

3、多任务和多用户支持:Linux内核支持多任务和多用户操作。它可以同时运行多个程序,并为每个程序提供独立的执行环境。

4、强大的网络支持:Linux内核具有强大的网络支持,包括TCP/IP协议栈、网络设备驱动程序和网络协议的实现。

5、模块化设计:Linux内核采用了模块化的设计,允许核心功能和设备驱动程序以模块的形式加载和卸载,提高了系统的灵活性和可维护性。

6、良好的性能和可靠性:Linux内核经过长时间的发展和优化,具有良好的性能和可靠性。

7、支持广泛的硬件和软件生态系统:Linux内核支持广泛的硬件设备和软件应用。它具有丰富的设备驱动程序和接口,可以与各种硬件设备和外部设备进行通信。同时,Linux拥有庞大的开源软件生态系统,提供了各种应用程序、开发工具和库,满足了不同用户和开发者的需求。

二、Linux操作系统结构

1.Linux在系统中的位置

在这里插入图片描述

2.Linux内核的主要子系统

Linux内核可以根据功能和任务划分为以下几个主要的子系统:

1、进程管理子系统:负责管理进程的创建、调度、终止和通信等任务。

2、文件系统子系统:提供文件和目录的管理、访问和操作功能,包括各种文件系统的实现。

3、网络子系统:处理网络协议栈、网络设备驱动程序和网络通信等网络相关任务。

4、内存管理子系统:管理系统内存的分配、释放和映射,包括虚拟内存管理和页面置换等功能。

5、设备驱动程序子系统:提供与硬件设备的交互和控制,包括各种设备驱动程序的实现。

每个子系统都有特定的责任和功能,通过协同工作,实现了Linux内核的全面功能和可靠性。

Linux内核还包含其他子系统,如电源管理子系统、安全子系统、时钟和定时器子系统等,这些子系统也在特定领域提供了重要的功能和服务。

3、Linux系统主要数据结构

在Linux内核中,有以下这些使用频率较高的数据结构:

task_struct: 代表一个进程数据结构指针,形成一个task数据
mm_struct:代码进程的虚拟内存
inode:代表虚拟文件系统中的文件、目录等对应的索引节点

还有很多相关的数据结构,我们后面慢慢讲

三、linux内核源码组织

1、下载Linux源码

想要更快的了解Linux架构,那么首先需要下载一版Linux源码,关于如何下载Linux源码:可以查看我之前写的文章:https://blog.csdn.net/qq_43257914/article/details/134344756?spm=1001.2014.3001.5501

2、Linux版本号

在这里插入图片描述

linux内核版本有两种:稳定版、开发版
linux内核版本号由3组数字组成
1、第一组:内核主版本
2、第二组:偶数表示稳定版本、奇数表示开发中版本
3、第三组:错误修补此数
举个例子:linux-4.5.1
4:主版本号
5:此版本号,表示开发中版本(因其为奇数)
1:修订版本号,表示修改次数

3、linux源码架构目录讲解

arch: 			不同平台体系相关代码
block:		 	块设备驱动
certs: 			与认证和签名相关代码
crypto: 		内核常用加密、压缩算法等代码
Documentation:	描述模块功能和协议规范代码
Driver:		驱动程序(USB总结、PCI总结、显卡驱动等)
firmware目录:	主要是一些二进制固件
fs:				虚拟文件系统代码
include:		内核源码依赖绝大部分头文件
init:			内核初始化代码,联系到内存各组件入口
ipc:			进程间通信实现,比如共享内存、信号量、匿名管道等
kernel:			内核核心代码,包括进程间通信、IRQ、时间等
lib:			C标准的子集 
mm:			内存管理相关实现
net:			网络协议代码,比如 TCP、IPv6、WiFi、以太网等
samples:		内核示例代码 
scripts:		编译和配置内核所需脚本:per/bash 等
security:		内核安全模型相关代码:如 selinux
sound:			声卡驱动源码
tools:			与内核交互
usr:			用户打包和压缩内核的实现源码
virt:			/kvm 虚拟化目录相关支持实现

相关文章:

零基础学Linux内核:1、Linux源码组织架构

文章目录 前言一、Linux内核的特征二、Linux操作系统结构1.Linux在系统中的位置2.Linux内核的主要子系统3、Linux系统主要数据结构 三、linux内核源码组织1、下载Linux源码2、Linux版本号3、linux源码架构目录讲解 前言 这里将是我们从零开始学习Linux的第一节,这节…...

STM32中Msp函数的意义

msp(MCU Support Package) 举个例子:串口初始化函数HAL_UART_Init()与串口底层初始化函数HAL_UART_MspInit() HAL_UART_Init()用于初始化串口通讯协议如波特率、有效位等 HAL_UART_MspInit()用于初始化于MCU相关的配置比如时钟、NVIC、GPI…...

PTA NeuDs_数据库题目

二.单选题 1.数据库应用程序的编写是基于数据库三级模式中的。 A.模式 B.外模式 C.内模式 D.逻辑模式 用户应用程序根据外模式进行数据操作,通过外模式一模式映射,定义和建立某个外模式与模式间的对应关系 2.对创建数据库模式一类的数据库对象的授权…...

pulseaudio是如何测试出音频延迟的

通常专业的音频设备生产厂商都有专业的设备来测试精确的音频链路延时。 那么没有专业设备怎么测试出音频延迟呢?如下图,我们可以看到pulseaudio可以测试出硬件音频延迟。 那么,他是怎么测试出硬件延迟的呢?他的理论依据是什么呢?接下来我带大伙一起探索一下。 /*占位…...

【docker】docker的基础命令

基础操作 docker info #查看docker的基本信息docker version #查看docker版本信息一、镜像操作 1、搜索镜像 docker search nginx2、下载镜像 docker pull nginx#从仓库中下载镜像,若没有指定标签,则下载最新的版本,也就是标签为: lat…...

RocketMq 主题(TOPIC)生产级应用

RocketMq是阿里出品(基于MetaQ)的开源中间件,已捐赠给Apache基金会并成为Apache的顶级项目。基于java语言实现,十万级数据吞吐量,ms级处理速度,分布式架构,功能强大,扩展性强。 官方…...

队列实现栈VS栈实现队列

目录 【1】用队列实现栈 思路分析 ​ 易错总结 Queue.c&Queue.h手撕队列 声明栈MyStack 创建&初始化栈myStackCreate 压栈myStackPush 出栈&返回栈顶元素myStackPop 返回栈顶元素myStackTop 判断栈空否myStackEmpty 释放空间myStackFree MyStack总代码…...

C/C++: 统计整数

【问题描述】 输入若干个整数,统计出现次数最多的那个整数。如果出现最多的整数有两个以上,打印最早输入的那个整数。 【输入形式】 从标准输入读取输入。第一行只有一个数字N(1≤N≤10000),代表整数的个数。以后的N行…...

docker容器生成镜像并上传个人账户

登录到 Docker Hub 账户&#xff1a; docker login这将提示你输入你的 Docker Hub 账户名和密码。 为容器创建镜像 docker commit <容器名或容器ID> <你的用户名>/<镜像名:标签>例子 docker commit my_container yourusername/my_image:latest推送镜像到…...

hdlbits系列verilog解答(exams/m2014_q4g)-48

文章目录 一、问题描述二、verilog源码三、仿真结果一、问题描述 本次我们将一次创建多个逻辑门,对两个输入a和b通过组合逻辑实现七种不同的输出: out_and: a and bout_or: a or bout_xor: a xor bout_nand: a nand bout_nor: a nor bout_xnor: a xnor bout_anotb: a and-no…...

在vue或者react或angular中,模板表达式中的箭头函数是无效的吗?为什么无效?

出现此问题的背景&#xff1a; 我在Angular项目中对一个标签属性绑定了一个箭头函数&#xff0c;编译报错。 在vue或者react或angular中&#xff0c;模板表达式中的箭头函数是无效的吗&#xff1f; 在 Vue、React 或 Angular 中&#xff0c;模板表达式中的箭头函数是无效的。…...

C++11『lambda表达式 ‖ 线程库 ‖ 包装器』

✨个人主页&#xff1a; 北 海 &#x1f389;所属专栏&#xff1a; C修行之路 &#x1f383;操作环境&#xff1a; Visual Studio 2022 版本 17.6.5 文章目录 &#x1f307;前言&#x1f3d9;️正文1.lambda表达式1.1.仿函数的使用1.2.lambda表达式的语法1.3.lambda表达式的使用…...

MATLAB算法实战应用案例精讲-【数模应用】漫谈机器学习(四)(附实战案例及代码实现)

目录 机器学习学习路线 学习编写抽象类 固定随机数种子 先加载少量数据...

JavaScript 中松散类型的理解

JavaScript 是一种动态类型语言&#xff0c;它的松散类型是其独特的特性之一。本文将深入探讨 JavaScript 中松散类型的概念以及如何在代码中应用。 引言 JavaScript 是一种强大而灵活的语言&#xff0c;它的松散类型使得变量的类型可以在运行时动态改变。这为开发人员带来了…...

java基于springboot公益帮学网站 新闻发布系统的设计与实现vue

以Java为开发平台&#xff0c;综合利用Java Web开发技术、数据库技术等&#xff0c;开发出公益帮学网站。用户使用版块&#xff1a;可以选择注册并登录&#xff0c;可以浏览信息、可以网上互动、发布文章、内容推荐等。后台管理员管理版块&#xff1a;以管理员身份登录网站后台…...

VMware 安装 Centos7 超详细过程

VMware 安装 Centos7 超详细过程 分类 编程技术 1.软硬件准备 软件&#xff1a;推荐使用 VMware&#xff0c;我用的是 VMware 12 镜像&#xff1a;CentOS6 ,如果没有镜像可以在阿里云下载 centos安装包下载_开源镜像站-阿里云 硬件&#xff1a;因为是在宿主机上运行虚拟化软…...

03:2440--UART

目录 一:UART 1:概念 2:工作模式 3:逻辑电平 4:串口结构图 5:时间的计算 二:寄存器 1:简单的UART传输数据 A:GPHCON--配置引脚 B:GPHUP----使能内部上拉​编辑 C: UCON0---设置频率115200 D: ULCON0----数据格式8n1 E:发送数据 A:UTRSTAT0 B:UTXHO--发送数据输…...

Vatee万腾的科技冒险:Vatee独特探索力量的数字化征程

在数字化时代的激流中&#xff0c;Vatee万腾以其独特的科技冒险精神&#xff0c;引领着一场前所未有的数字化征程。这不仅仅是一次冒险&#xff0c;更是对未知的深度探索&#xff0c;将科技的力量推向新的高度。 Vatee万腾在科技领域敢于挑战传统&#xff0c;积极探索未知的可能…...

物联网后端个人第十二周总结

学习工作进度 物联网方面 1.模拟设备通过规则引擎将数据通过mqtt进行转发 在物联网平台上实现模拟设备通过规则引擎将数据通过mqtt进行转发已经全部完成了&#xff0c;所使用的物联网平台在这方面有不少的问题和bug&#xff0c;也可能是没有按照开发者的想法对平台进行使用才导…...

Linux C语言 26-可变参数

Linux C语言 26-可变参数 本节关键字&#xff1a;可变参数、va_list、va_arg、va_end 相关C库函数&#xff1a;va_list、va_arg、va_end 什么是可变参数&#xff1f; C语言中的可变参数是指函数能够接受不定数量的参数。在不确定函数参数时&#xff0c;使用“char *format, …...

终极React Native Permissions测试与调试指南:从Jest模拟到真机调试的完整手册

终极React Native Permissions测试与调试指南&#xff1a;从Jest模拟到真机调试的完整手册 【免费下载链接】react-native-permissions An unified permissions API for React Native on iOS, Android and Windows. 项目地址: https://gitcode.com/gh_mirrors/re/react-nativ…...

Phi-3-mini-4k-instruct入门指南:Ollama中phi3:mini模型选择与加载验证方法

Phi-3-mini-4k-instruct入门指南&#xff1a;Ollama中phi3:mini模型选择与加载验证方法 想快速上手一个轻量级但能力强大的AI助手&#xff1f;Phi-3-mini-4k-instruct可能就是你要找的解决方案。这个只有38亿参数的小模型&#xff0c;在多项测试中表现出了惊人的能力&#xff0…...

SUPER COLORIZER作品集:从经典素描到赛博朋克的风格化上色展示

SUPER COLORIZER作品集&#xff1a;从经典素描到赛博朋克的风格化上色展示 你有没有想过&#xff0c;一张简单的黑白线稿&#xff0c;能在几秒钟内变成一幅充满未来感的赛博朋克画作&#xff0c;或者一幅意境深远的水墨画&#xff1f;这听起来像是专业画师的工作&#xff0c;但…...

Cadence PCB SI仿真实战:如何手动添加VIA过孔模型提升板级链路精度

Cadence PCB SI仿真实战&#xff1a;手动添加VIA过孔模型提升DDR4/5设计精度 在高速PCB设计中&#xff0c;信号完整性(SI)问题往往成为工程师面临的最大挑战之一。特别是当信号速率达到DDR4/5等级时&#xff0c;过孔(VIA)效应导致的信号失真可能直接影响系统稳定性。本文将深入…...

5分钟快速上手iOS虚拟定位:iFakeLocation免费跨平台工具完全指南

5分钟快速上手iOS虚拟定位&#xff1a;iFakeLocation免费跨平台工具完全指南 【免费下载链接】iFakeLocation Simulate locations on iOS devices on Windows, Mac and Ubuntu. 项目地址: https://gitcode.com/gh_mirrors/if/iFakeLocation iFakeLocation是一款完全免费…...

PHP怎么处理Eloquent Attribute Inference属性推断_Laravel从数据自动推导类型【操作】

PHPStorm 识别 Eloquent 属性类型依赖 property 注解&#xff0c;$casts 等运行时配置不参与静态分析&#xff1b;需配合 Laravel Idea 插件生成注解&#xff0c;并用 Larastan/ Psalm 插件增强类型检查。PHP 本身不支持 Eloquent 属性类型推断&#xff0c;Laravel 也不提供运行…...

电化学信号区分算法开发

电化学相似信号区分算法 1. 问题定义与数据生成 import numpy as np import pandas as pd import matplotlib.pyplot as plt from scipy.signal import gaussian, convolve from sklearn.model_selection import train_test_split...

Python实战:构建SPC控制图实现生产质量监控

1. 为什么生产质量监控需要SPC控制图 在制造业干了十多年的朋友都知道&#xff0c;生产线上最让人头疼的就是质量波动。上周还运行得好好的产线&#xff0c;这周突然不良率飙升&#xff0c;这种事儿我见得太多了。传统的质检方法往往是事后抽检&#xff0c;等发现问题时已经生产…...

深入解析ZYNQ FSBL:从BOOT.bin构建到启动流程优化

1. ZYNQ启动流程与FSBL的核心作用 第一次接触ZYNQ启动流程时&#xff0c;我被这个"俄罗斯套娃"式的引导过程震惊了。就像打开一个礼盒发现里面还有更小的礼盒&#xff0c;ZYNQ的启动也是层层递进的过程。FSBL&#xff08;First Stage Boot Loader&#xff09;就是这…...

2026 软著申请全流程手把手教程|纯干货、自主申请高通过率指南

本文为纯技术流程教学&#xff0c;基于软件开发企业实操经验整理&#xff0c;适2026年3月版权中心改革后的审核标准&#xff0c;手把手教你自主完成软著申请&#xff0c;避开 90% 的新手坑。 重要前提&#xff1a; 1. 2026年3月版权中心强化材料审核&#xff0c;套模板申请必…...