Linux 内核开发 的核心知识点

1. 内核基础与架构

  • 内核职责
    • 进程调度
    • 内存管理
    • 文件系统
    • 设备驱动
    • 网络通信
    • 系统调用接口
  • 内核架构
    • 宏内核
    • 微内核
    • 混合内核
  • 内核空间 vs 用户空间
    • 特权级别
    • 上下文切换
    • 系统调用
  • 内核源码树结构
    • /arch: 体系结构相关代码
    • /drivers: 设备驱动程序
    • /fs: 文件系统
    • /include: 头文件
    • /init: 内核初始化
    • /kernel: 核心子系统
    • /mm: 内存管理
    • /net: 网络栈

2. 核心子系统

  • 进程管理
    • 进程描述符 struct task_struct
    • 进程状态
    • 进程创建 (fork, vfork, clone)
    • 进程调度器
      • CFS
      • 实时调度器
    • 内核线程
  • 内存管理
    • 虚拟内存
    • 分页与页表
    • 物理内存管理: 伙伴系统、SLAB/SLUB分配器
    • VMAs
    • 页缓存
    • 内存回收
  • 文件系统
    • VFS
    • 索引节点
    • 目录项缓存
    • 具体文件系统: ext4, XFS, Btrfs
  • 设备驱动
    • 三类设备
      • 字符设备
      • 块设备
      • 网络设备
    • 驱动模型
    • 设备树
    • sysfs, procfs, debugfs
  • 网络栈
    • 套接字
    • 协议栈: TCP, UDP, IP
    • 网络设备驱动
    • Netfilter

3. 内核开发关键技术

  • 同步与并发
    • 原子操作
    • 自旋锁
    • 信号量
    • 互斥锁
    • 完成变量
    • RCU
  • 中断处理
    • 上半部
    • 下半部机制
      • 软中断
      • 任务队列
      • 工作队列
  • 内核定时器
    • jiffies
    • 定时器API
    • 高精度定时器
  • 内存分配
    • kmalloc / kfree
    • vmalloc / vfree
    • get_free_pages
  • 内核调试
    • printk
    • oops 分析
    • gdb + kgdb
    • strace / ltrace
    • SystemTap
    • ftrace
    • KASAN, UBSAN

4. 开发流程与社区

  • 获取源码
    • git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
  • 配置与编译
    • make menuconfig
    • make -jN
    • 交叉编译
  • 代码风格
    • 遵循 Linux Kernel Coding Style
  • 提交补丁
    • git format-patch
    • 邮件列表提交
    • 回应评审意见

5. 重要概念与机制

  • 模块机制
    • insmod, rmmod, modprobe
    • 模块初始化与退出
  • Syscall
    • 实现原理
    • 添加新系统调用
  • Kconfig 与 Makefile
    • 配置选项定义
    • 源码编译规则
  • 容器与虚拟化支持
    • Namespaces
    • Cgroups
    • KVM
相关推荐
2402_8828938613 分钟前
Linux 进程概念详解(下)—— 进程调度、环境变量与虚拟地址空间
linux·进程·虚拟地址空间
虚无的纽扣15 分钟前
【Linux】揭开文件系统神秘的面纱:第四讲:可执行文件的组装车间
linux·运维·服务器
YMWM_17 分钟前
ubuntu系统字体缩放配置
linux·运维·ubuntu
Amelio_Ming22 分钟前
rk3588 pcie驱动分析之二 (pcie设备树节点分析)
linux·嵌入式硬件
zbyyd40 分钟前
Linux字符设备驱动:LED驱动实战开发
linux·单片机·arm·驱动
曦夜日长43 分钟前
Git系统篇,Git远程仓库(三):本地仓库与远程仓库的交互
linux·服务器·网络·git·交互
学linux的QQ蛋1 小时前
sys文件系统与misc文件系统学习小总结
linux·学习·驱动
曦夜日长10 小时前
Git系统篇,Git本地使用(一):从“究极进化版“到三个区域的底层原理
大数据·linux·git·elasticsearch
shimly12345610 小时前
给断网无 sudo ubuntu22.04 机器安装 nodejs
linux
别动我齐刘海12 小时前
Linux 系统调试学习1
linux·运维·服务器·c++·学习·机器学习·机器人