Kernel-基础知识

内核基本知识:

  • 内核结构
  • 补丁
  • 内核编译


内核代码树介绍:

linux-2.6.29

|-arch : 包含和硬件体系结构相关的代码

|-block : 硬盘调度算法,不是驱动

|-firmware : 固件,如BOIS

|-Documentation: 标准官方文档

|-dirver : linux设备驱动

|-fs : 内核所支持的文件体系

|-include :头文件。linux/module.h linux/init.h 常用库。

|-init :库文件代码,C库函数在内核中的实现。

​ init/main.c ->start_kernel->内核执行第一条代码

|-ipc : 进程件通信

|-mm :内存管理

|-kernel : 内核核心部分,包括进程调度等

|-net :网络协议

|-sound : 所有音频相关

内核补丁:

补丁基于某个版本内核生成的,用于升级旧版本内核。

  • 对应版本的补丁只能用于对应版本的内核
  • 如果在已打补丁的内核中再打补丁,需要先卸载原先补丁。
  1. 制作补丁:

    1
    diff -Nur linux-2.6.30/ linux-2.6.30.1/ > linux-2.6.30.1.patch
  2. 打补丁:

    1
    2
    3
    4
    5
    cd linux-2.6.30	//!!注意在原文件夹的目录中打补丁
    patch -p1 < ../linux-2.6.30.1.patch //-p1是忽略一级目录

    ##单文件
    patch vimrc < vim.1.patch // 即可
  3. 撤销补丁

    1
    2
    cd linux-2.6.30 //!!注意在原文件夹的目录中打补丁
    patch -R < ../linux-2.6.30.1.patch //撤销补丁

内核与模块编译

1
make = make bzImage + make modules
  1. 如果只编译内核, 即只编译配置文件中的 -y 选项, 可以直接用命令make bzImage
  2. 如果只编译模块, 即只编译配置文件中的 -m 选项, 可以直接使用 make modules

只是想单独编译一个模块, 则可以使用:

1
make -C /root/linux-2.6.29/xxx/  M=`pwd` module

//-C 指定内核makefile的路径,可以使用相对路径。

//-M 指定要编译的文件的路径,同样使用相对路径。

编译生成的模块可以指定存放目录

1
make -C /root/linux-2.6.29/xxx M=`pwd`  modules_install INSTALL_MOD_PATH=/modules/
欣赏此文? 求鼓励,求支持!