Linux内核源码 - 23.介绍&内核升级
为什么要阅读linux内核?
爱好,就是喜欢linux(黑客精神)
想深入理解linux底层运行机制,对操作系统有深入理解
阅读Linux内核,你会整个计算机体系有一个更深刻的认知。作为开发者,不管你从事是驱动开发,应用开发还是后台开发,你都需要了解操作系统内核的运行机制,这样才能写出更好的代码。
作为开发人员不应该只局限在自己的领域,你设计的模块看起来小,但是你不了解进程的调用机制,你不知道进程为什么会阻塞、就绪、执行几个状态。那么很难写出优质的代码。
作为追求的程序员,还是应该深入的了解一个操作系统的底层机制,比如(linux/unix)最好是源码级别的,这样你写多线程高并发程序,包括架构,优化,算法等,高度不一样,当然也不是要求把一个非常庞大的Linux系统内核每一行都读懂,起码至少你看几个核心的模块。
linux0.01内核源码
基本介绍
Linux的内核源代码可以从网上下载,解压缩后文件一般都位于linux目录下。内核源代码有很多版本,可以从linux0.01 内核入手,总共的代码1w行左右,版本 5.9.8 总共代码超过700w行,非常庞大。
很多人害怕都Linux内核,Linux内核这样大而复杂的系统代码,阅读起来确实有很多困难,但是也不象想象的那么高不可攀。建议可以从 linux0.01 入手。
linux0.01内核源码目录&阅读
阅读内核源码技巧
1、linux0.01 的阅读需要懂c语言
2、阅读源码前,应知道Linux内核源码的整体分布情况。现代的操作系统一般有进程管理、内存管理、文件系统、驱动程序和网络等组成。Linux内核源码的各个目录大致与此相对应。
3、在阅读方法或顺序上,有纵向与横向之分。所谓的纵向就是顺者程序的执行顺序逐步进行;所谓的横向,就是按模块进行。它们经常结合在一起进行。
4、对应Linux启动的代码可顺者Linux的启动顺序一步步来阅读;对于像内存管理部分,可以单独拿出来进行阅读分析。实际上这是一个反复的过程,不可能读一遍就理解
linux内核源码阅读&目录介绍&main.c 说明
目录说明:
boot
:和系统引导相关的代码
fs
:存放linux支持的文件系统代码
include
:存放linux核心需要的头文件,比如:asm、linux、sys
init
:包含了内核启动的处理代码(INITiation)。main.c是内核的核心文件,这是用来衔接所有的其他文件的源代码主文件。
kernel
:系统内核相关的源码
lib
:存放库代码
mm
:和内存管理相关的代码
tools
:和内核交互的工具
Makefile
:编译文件
main.c 文件
void main(void) /* This really IS void, no error here. */
{ /* The startup routine assumes (well, ...) this */
/*
* Interrupts are still disabled. Do necessary setups, then
* enable them
*/
time_init(); # 初始化运行时间
tty_init(); # tty初始化 终端
trap_init(); # 陷阱门(硬件中断向量)初始化
sched_init(); # 调度程序初始化
buffer_init(); # 缓存管理初始化
hd_init(); # 硬盘初始化
sti(); # 所有初始化工作完后,开启中断
move_to_user_mode(); # 进入到用户模式
if (!fork()) { /* we count on this going ok */
init();
}
/*
* NOTE!! For any other task 'pause()' would mean we have to get a
* signal to awaken, but task0 is the sole exception (see 'schedule()')
* as task 0 gets activated at every idle moment (when no other tasks
* can run). For task0 'pause()' just means we go check if some other
* task can run, and if not we return here.
*/
for(;;) pause();
}
linux内核最新版本和内核升级
内核地址
下载&解压最新版本
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.8.16.tar.gz
【下载】
tar -zxvf linux-5.8.16.tar.gz
【解压】
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内核升级应用实例
将Centos系统从 7.6内核升级到7.8版内核(兼容性问题)
具体步骤,演示
uname -a
【查看当前的内核版本】
yum info kernel -q
【检测内核版本,显示可以升级的内核】
yum update kernel
【升级内核】
yum list kernel-q
【查看已经安装的内核】
uname -a
yum info kernel -q
yum update kernel
yum list kernel -q
重启选择内核版本