为什么要阅读linux 内核?
- 爱好,就是喜欢 linux(黑客精神)
- 想深入理解 linux 底层运行机制,对操作系统有深入
- 理解阅读 Linux 内核,你会对整个计算机体系有一个更深刻的认识。作为开发者,不管你从事的是驱动开发,应用开发还是后台开发,你都需要了解操作系统内核的运行机制,这样才能写出更好的代码。
- 作为开发人员不应该只局限在自己的领域,你设计的模块看起来小,但是你不了解进程的调用机制,你不知道进程为什么会阻塞、就绪、执行几个状态。那么很难写出优质的代码。
-
linux0.01 内核源码
基本介绍
Linux 的内核源代码可以从网上下载, 解压缩后文件一般也都位于 linux 目录下。内核源代码有很多版本,可以从linux0.01 内核入手,总共的代码 1w 行左右, 最新版本 5.9.8 总共代码超过 700w 行,非常庞大.内核地址:https://www.kernel.org/
linux0.01 内核源码目录&阅读
linux0.01 的阅读需要懂 c 语言
- 阅读源码前,应知道 Linux 内核源码的整体分布情况。现代的操作系统一般由进程管理、内存管理、文件系统、驱动程序和网络等组成。Linux 内核源码的各个目录大致与此相对应.
- 在阅读方法或顺序上,有纵向与横向之分。所谓纵向就是顺着程序的执行顺序逐步进行;所谓横向,就是按模块进行。它们经常结合在一起进行。
- 对于 Linux 启动的代码可顺着 Linux 的启动顺序一步步来阅读;对于像内存管理部分,可以单独拿出来进行阅读分析。实际上这是一个反复的过程,不可能读一遍就理解
linux 内核源码目录介绍
linux 内核源码main.c 说明
linux 内核最新版和内核升级
内核地址:https://www.kernel.org/ 查看
下载&解压最新版
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.8.16.tar.gz
tar -zxvf linux-5.8.16.tar.gz
linux 内核升级应用实例
uname -a // 查看当前的内核版本
yum info kernel -q //检测内核版本,显示可以升级的内核
yum update kernel //升级内核
yum list kernel -q //查看已经安装的内核 ``` [root@localhost init]# uname -a Linux localhost.localdomain 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux [root@localhost init]# yum info kernel -q 已安装的软件包 名称 :kernel 架构 :x86_64 版本 :3.10.0 发布 :957.el7 大小 :63 M 源 :installed 来自源:anaconda 简介 : The Linux kernel 网址 :http://www.kernel.org/ 协议 : GPLv2 描述 : The kernel package contains the Linux kernel (vmlinuz), the core of any: Linux operating system. The kernel handles the basic functions
: of the operating system: memory allocation, process allocation, device
: input and output, etc.
可安装的软件包 名称 :kernel 架构 :x86_64 版本 :3.10.0 发布 :1160.53.1.el7 大小 :50 M 源 :updates/7/x86_64 简介 : The Linux kernel 网址 :http://www.kernel.org/ 协议 : GPLv2 描述 : The kernel package contains the Linux kernel (vmlinuz), the core of any : Linux operating system. The kernel handles the basic functions : of the operating system: memory allocation, process allocation, device : input and output, etc.
[root@localhost init]# yum update kernel 已加载插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile
- base: mirrors.ustc.edu.cn
- extras: mirrors.ustc.edu.cn
- updates: mirrors.ustc.edu.cn 正在解决依赖关系 —> 正在检查事务 —-> 软件包 kernel.x86_64.0.3.10.0-1160.53.1.el7 将被 安装 —> 正在处理依赖关系 linux-firmware >= 20190429-72,它被软件包 kernel-3.10.0-1160.53.1.el7.x86_64 需要 —> 正在检查事务 —-> 软件包 linux-firmware.noarch.0.20180911-69.git85c5d90.el7 将被 升级 —-> 软件包 linux-firmware.noarch.0.20200421-80.git78c0348.el7_9 将被 更新 —> 解决依赖关系完成
依赖关系解决
=============================================================================================================================================
Package 架构 版本 源 大小
正在安装: kernel x86_64 3.10.0-1160.53.1.el7 updates 50 M 为依赖而更新: linux-firmware noarch 20200421-80.git78c0348.el7_9 updates 80 M
事务概要
安装 1 软件包 升级 ( 1 依赖软件包)
总计:131 M Is this ok [y/d/N]: y Downloading packages: Running transaction check Running transaction test Transaction test succeeded Running transaction 正在更新 : linux-firmware-20200421-80.git78c0348.el7_9.noarch 1/3 正在安装 : kernel-3.10.0-1160.53.1.el7.x86_64 2/3 清理 : linux-firmware-20180911-69.git85c5d90.el7.noarch 3/3 验证中 : kernel-3.10.0-1160.53.1.el7.x86_64 1/3 验证中 : linux-firmware-20200421-80.git78c0348.el7_9.noarch 2/3 验证中 : linux-firmware-20180911-69.git85c5d90.el7.noarch 3/3
已安装: kernel.x86_64 0:3.10.0-1160.53.1.el7
作为依赖被升级: linux-firmware.noarch 0:20200421-80.git78c0348.el7_9
完毕! [root@localhost init]# yum list kernel -q 已安装的软件包 kernel.x86_64 3.10.0-957.el7 @anaconda kernel.x86_64 3.10.0-1160.53.1.el7 @updates [root@localhost init]# uname -a Linux localhost.localdomain 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux [root@localhost init]# reboot
选择升级后的内核版本进入系统,查看当前内核版本
[root@localhost ~]# uname -a Linux localhost.localdomain 3.10.0-1160.53.1.el7.x86_64 #1 SMP Fri Jan 14 13:59:45 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux ```