百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Linux Kernel学习003——内核源码

gudong366 2025-07-21 14:40 4 浏览

Linux学习笔记:老版本内核的坑,新工具救场,代码门道藏着啥秘密.

最近想学Linux内核,网上查资料发现现在的稳定版本都已经到5.x了,但我跟着教程选的是2.6.34。官网下载链接卡着老卡,后来用清华那个镜像站才下成功,tar解压命令输了好几回才记熟。在线看代码倒是方便,在elixir那个网站能找对应版本,不过翻来翻去感觉目录结构特别乱。

开始以为内核代码就是一堆.c文件随便放,结果打开目录发现分类特别细致。文档放在Documentation文件夹里,架构相关的代码都在arch下面,驱动全塞在drivers里。block是磁盘读写的,mm是内存管理的,kernel目录看着像核心部分。但这些名字光看不知道具体干啥,得一个一个去翻注释。

下载回来编译的时候各种依赖报错,搞了半天才发现CentOS6.10的glibc太旧了,得想办法解决。虚拟机跑了好几天卡成PPT,换成VMware之后稍微快点。现在还在研究init这个目录,里面main.c应该是启动入口,但从代码到实际运行流程还是摸不着头脑。

在线工具其实挺好用,比如elixir能跨版本对比代码,把2.6和5.x的block目录一对比,就能看出API改了不少。但有些老代码的写法现在没人用了,查资料费劲。比如内存管理那块,slab分配器和伙伴系统到底是怎么配合的,看书也说不清,只能慢慢拆开看。

最近发现security目录里的Yama模块,查了下历史记录,这个安全模块是从2.6.34开始加进来的。虽然现在的内核版本早就升级了,但老版本漏洞修复记录反而更清晰。比如某些驱动的漏洞补丁,在旧代码里能找到最早怎么改的,对理解原理有帮助。

折腾这么久终于把环境搭好了,用gedit打开mm/slub.c发现全是函数调用链,完全理不出头绪。不过用gedit插件加个代码折叠功能,至少看得清楚些。网上有人说学内核得从小版本入手,但2.6的代码结构和现在差异太大,调试起来还是绕弯子。

打算先把init的引导流程画个图,看着流程图再对照代码好理解点。但发现init/main.c后面调用了太多其他模块函数,比如启动驱动的时候会跳转到drivers目录下的代码。现在才明白,原来内核代码像一棵树根,每个目录都是枝干上的分叉。

工具方面elixir网站更新了搜索功能,现在能精准找到某个函数的修改记录。比如查到mm/memory.c里的某个函数,可以看到从2.6到5.4的每次改动。这种时间线对比挺有用的,能看出开发者怎么逐步优化算法的。不过有时候改动太小,看不出啥区别。

最头疼的是编译过程,make menuconfig配置项太多,不小心改了个参数就得重编译。有次改了内核编译选项,重启之后黑屏了,折腾了半天才恢复出厂设置。现在学会每次改完配置都备份.config文件,免得重装系统。

听说用WSL跑Linux更方便,但试了下wsl2直接编译2.6内核老是报错,可能是命名空间不兼容的问题。还是老老实实用CentOS虚拟机吧,虽然卡点但起码能跑通。最近准备把block目录里的队列管理代码过一遍,看看2.6时代的IO调度策略是什么样的。

相关推荐

由浅入深学shell,70页shell脚本编程入门,满满干货建议收藏

不会Linux的程序员不是好程序员,不会shell编程就不能说自己会Linux。shell作为Unix第一个脚本语言,结合了延展性和高效的优点,保持独有的编程特色,并不断地优化,使得它能与其他脚本语言...

小白7天掌握Shell编程:脚本的创建和执行

一、课前声明1、本分享仅做学习交流,请自觉遵守法律法规!2、搜索:Kali与编程,学习更多网络攻防干货!二、知识点详解Shell脚本的格式要求:脚本要以!#/bin/bash开头,其中bash可以替换...

飞牛fnNAS搭建Web版Linux系统(飞牛网改版升级说明)

飞牛NAS本身就是Linux内核(Debian发行版),那为何还要安装一个Linux呢?因为飞牛的Linux是特殊版本,并不能运行PC端的带UI的程序,比如我需要登录微信,需要使用wps打字……,这是...

如何在 Linux 中使用 Sysctl 命令?

sysctl是一个用于配置和查询Linux内核参数的命令行工具。它通过与/proc/sys虚拟文件系统交互,允许用户在运行时动态修改内核参数。这些参数控制着系统的各种行为,包括网络设置、文件...

Apple尝试使用轻量级Linux虚拟机实现容器化

Apple于本周一发布了一个开源的容器化框架,用于在Mac上创建和运行Linux容器镜像。软件容器将应用程序及其依赖项组合成一个单元,在主机上运行于隔离环境中。由于它们基于符合OCI标准...

Docker 安全与权限控制:别让你的容器变成“漏洞盒子”

在享受容器带来的轻量与灵活的同时,我们也必须面对一个现实问题:安全隐患。容器并不是天然安全,错误配置甚至可能让攻击者“越狱”入侵主机!本篇将带你从多个层面强化Docker的安全防护,构建真正可放心...

网络安全必备!Linux firewalld 防火墙原理 + 配置实战(放行http)

5.1了解firewall防火墙基础概念与原理5.1.1Linux防火墙概述在网络安全领域,防火墙是保障网络安全的关键屏障,Linux系统中的firewall防火墙(firewalld服...

从零开始搭建 Linux PXE 无盘启动服务器

在企业环境或实验室中,PXE(PrebootExecutionEnvironment,无盘启动)被广泛用于大规模批量部署操作系统。通过PXE,无需U盘或CD,就能远程启动和安装Linux...

[250417] Fedora 42 正式发布,搭载 Linux 6.14 内核和 GNOME 48 桌面环境

Fedora42正式发布FedoraLinux42现已正式发布!此版本基于最新的Linux内核6.14构建,带来了众多激动人心的新特性和改进,旨在提供更现代化、更强大、更易用的Li...

Linux Kernel学习003——内核源码

Linux学习笔记:老版本内核的坑,新工具救场,代码门道藏着啥秘密.最近想学Linux内核,网上查资料发现现在的稳定版本都已经到5.x了,但我跟着教程选的是2.6.34。官网下载链接卡着老卡,后来用清...

Linux:实现Hadoop集群Master无密码登录

以下所介绍的安装方式都是在线安装方式,如果你需要连网请参考:Linux:宿主机通过桥接方式连接的VMware内部Linux14.04虚拟机(静态IP)实现上网方案环境:OS:LinuxUbuntu1...

除了Win10,微软还发布了一套“专业版Linux”系统

IT之家讯9月21消息,不知道大家是否还记得,微软CEO纳德拉曾在去年的一次活动中公开宣称“微软爱Linux”,其实那个时候的微软就已经在服务器方面拥抱Linux了。而最近,除了最新Windows1...

Linux系统匿名上网小技巧(linux匿名文件)

Tails可以做什么+优点Tails所有数据连接通过Tor网络传输,可以为个人用户提供最好的匿名性和安全性,并且它是一个Linux系统,不会感染Windows系统的病毒,它可以存储在闪存盘上运行。-...

Linux环境中DeepSeek AI大模型使用与管理之七:安装Cherry Studio

简介:在Linux系统中成功通过Ollama部署DeepSeek-R1大模型后,用户通常需要一个直观且易于操作的客户端来访问和交互。为了满足这一需求,本文将详细介绍如何在Linux环境中安装和配置Ch...

Linux系统部署Go编程环境(一)使用Go语言编写简单web服务器

摘要:Go语言是一个开源的编程语言,Go语言被称为“互联网时代的C语言”。Go语言的风格类似于C语言。其语法在C语言的基础上进行了大幅的简化,去掉了不需要的表达式括号,循环也只有for一种表示...