Linux内核

基本概念

Linux内核特性

  1. 可移植性,支持的硬件平台广泛
  2. 超强的网络功能
  3. 多任务多用户系统
  4. 模块化的设计

五大子系统

  1. 进程管理子系统
  2. 内存管理子系统
  3. 文件系统子系统
  4. 网络协议子系统
  5. 设备管理子系统

五大子系统

目录结构

目录结构的描述:

目录结构的描述

与平台相关的kernel会和与平台无关的kernel功能相辅相成,无关的会依赖相关代码

相辅相成

平台无关

与平台无关的目录树:

与平台无关的目录树

平台有关–arch

arch中与平台相关代码:

arch中与平台相关

命名规律

当内核中头文件重名如何解决?

问题
头文件命名规范:

头文件命名规范

内核配置

问题

  • 配置哪些目录需要编译
  • 配置哪些文件需要编译
    编译时到底文件是哪个目录?
    Makefile

    方法与思路

配置步骤:

  1. 配置仓库选取,即配置单的修改
  2. 交叉编译器的修改
  3. 体系结构体的选择
  4. 增删改查

体系结构选择的配置,交叉编译方式的选择

修改Makefile

各个目录的编译有Makefile进行选择编译。

各个子目录Makefile

  • obj-y : 编译进内核
  • obj- : 不编译进去
  • obj-m: 以模块形式编译
    条件编译:

条件编译

**主目录Makefile的修改: **

修改连接的平台相关代码:【hdr-arch,SRCARCH变量表示平台】

修改连接的平台相关代码

修改连接的平台相关代码

  1. 修改变量,其中SRCARCH等于ARCH

修改ARCH变量
SUBARCH默认就是X86的,内核默认配置按照X86。所以根据要求进行修好ARCH这个变量为ARM或其它。

  1. 编译方式修改

修改编译方式

确定哪些文件要编译—配置单

文件命名规范:CONFIG_XXXXX

选择配置单并移动到主目录下,将其命名为xxxx.config(其中这个配置单并不满足,所以芯片公司会提供默认配置单defconfig) 。
修改defconfig使其使用开发板
找到系统对应的配置单:

找到系统对应的配置单

make menuconfig(增删改查)

menuconfig界面:

menuconfig

流程:
通过一个Kconfig构成menuconfig界面的组成,然后通过menuconfig生成.config文件。最后.config文件构成Makefile的链接,进行编译。

Kconfig–>make menuconfig–>.config–>Makefile

内核编译

过程:

编译过程

  1. 编译生成vmlinux:OS elf file。(不可被执行的,操作系统可执行文件)
  2. 将vmlinux copy出来到Image
  3. Image太大,将其压缩为zImage
  4. 为了满足uBoot规则,进行封装格式化为uImage