Linux内核源码组织结构

本文深入剖析Linux内核源码结构,包括源码树分析、Makefile的编译流程和Kconfig配置选项。通过理解这些内容,有助于进行内核移植和驱动开发。详细探讨了Makefile中如何决定编译哪些文件,以及Kconfig如何生成配置界面。
摘要由CSDN通过智能技术生成
本文主要参考韦东山老师的《嵌入式Linux应用开发完全手册》,基于Linux-2.6.32.2源码。

概要:本文内容包含Linux源码树结构分析Linux Makefile分析Kconfig文件分析Linux内核配置选项分析。这些知识是为了理解内核文件的组织形式,为具体移植内核做知识准备。

1. Linux源码树结构分析

对Linux源码树下个子目录内包含的内容进行列表罗列:

目录 简介
arch 体系结构相关的代码,每一个子目录代表一种架构
block 块设备的通用函数
crypot 常用加密和散列算法、压缩和CRC校核算法
fs Linux支持的文件系统,每一个子目录代表一种文件系统
include 内核头文件:基本头文件(include/linux )、驱动或功能部件头文件(例:include/mtd )、体系相关头文件(linux/asm-arm )
driver 所有的驱动程序,每一个子目录代表一类驱动程序
init 内核的初始化程序,其中main.c中的start_kernel函数是内核引导后执行的第一个函数
ipc 进程间通信代码
kernel 内核管理的核心代码,与体系相关的代码在/arch/$(ARCH)/kernel
lib 内核用到的库函数,与处理器相关的库函数位于/arch/$(ARCH)/lib
mm 内存管理代码,与处理器体系相关的位于/arch/$(ARCH)/mm
net 与网络相关的代码,每一个子目录对应于网络的一个方面
security 安全、密钥相关的代码
sound 音频相关的驱动程序
usr 用来制作一个压缩的cpio归档文件:initrd的镜像,它可以作为内核启动后挂载的第一个文件系统
script 用于配置、编译内核的脚本文件
Document 内核文档
2.Linux Makefile分析

主要从三个方面讲解:编译哪些文件如何编译文件如何连接文件
最权威的参考资料:/Documentation/Kbuild/makefiles.txt

Linux Makefile的分类

名称 描述
顶层Makefile 总体上控制着内核的编译
arch/$(ARCH)/Makefile 决定哪些和体系相关的代码参加编译
.config 配置文件,内核配置时产生,所有的Makefile都根据这个文件编译内核(包括顶层的和各分成的Makefile)
scripts/Makefile.* Makefile公用的通用规则、脚本等
*/Makefile 负责该目录下文件的编译
  • 编译哪些文件

顶层Makefile决定哪些目录中的文件将编译进内核

    init-y      := init/
    drivers-y   := drivers/ sound/ firmware/
    net-y       := net/
    libs-y      := lib/
    core-y      := usr/
    ...
    core-y      += kernel/ mm/ fs/ ipc/ security/ crypto/ block/

顶层Makefile将13个子目录分成5个部分:init-ydrivers-ynet-ylibs-ycore-y

顶层通过下列语句包含和体系架构有关的Makefile。仔细观察可以看到/arch子目录的根目录下是没有Makefile文件的,而其它各子目录都是有Makefile。

    include $(srctree)/arch/$(SRCARCH)/Makefile
    ...
    SRCARCH     := $(ARCH)

所以在编译内核之前先要确定ARCH

    ARCH        ?= $(SUBARCH)
    CROSS_COMPILE   ?=
    ...
    SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
                  -e s/arm.*/arm/ -e s/sa110/arm/ \
                  -e s/s390x/s390/ -e s/parisc64/parisc/ \
                  -e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
                  -e s/sh[234].*/sh/ )

默认的ARCH不是我们需要的,所以要进行修改

    ARCH        ?=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值