Linux内核解读
作用:先利用默认的配置文件,进行初步配 置 命令:
书本上的方法: 1. 按Load an Alternate Configuation File 回车后输 入./arch/arm/configs/S3c2440_deconfig.config;然后保存 2. 直接用命令 [root@local ~]# cp arch/arm/configs/S3c2440_deconfig.config .config
依赖体系结构的代码
尽管 Linux 很大程度上独立于所运行的体系结 构,但是有些元素则必须考虑体系结构才能正 常操作并实现更高效率。./linux/arch 子目录定 义了内核源代码中依赖于体系结构的部分,其 中包含了各种特定于体系结构的子目录(共同 组成了 BSP)。对于一个典型的桌面系统来说, 使用的是 i386 目录。每个体系结构子目录都 包含了很多其他子目录,每个子目录都关注内 核中的一个特定方面,例如引导、内核、内存 管理等。这些依赖体系结构的代码可以 在 ./linux/arch 中找到。
配置内核选项
---为什么要进行内核配置(补充)
要使得标准内核源代码能够生成特殊的 目标文件 从标准---特殊:所以要进行配置
配置内核选择
---内核配置的方法(P138)
make config:命令行模式的配置方法 make oldconfig:利用已有的.config文件 make menuconfig:文本菜单式配置,实验中 采用更的方法(如果.config文件存在,使 用.config的默认配置) make xconfig:图形化界面的配置方法,可通 过鼠标进行配置,需要 X Window的支持(如 果.config文件存在,使用.config的默认配置) 注意:无论何种方法,都是为了修改生成linux目 录下的.config文件
利用make menuconfig启动配 置界面
命令 [root@local ~]# cd linux-2.6.22.1(实验为 linux2.6.30.4) [root@local ~]# make menuconfig 利用文本菜单的方式进行配置 结果---启动配置界面,如下图
读取已有的配置文件
Linux内核源码的组成部分
/Linux2.6.30.4 --+--/arch 存放体系结构的源代码 |-- /document 存放一些说明文档 |-- /drivers 存放驱动程序源代码 |-- /fs 存放支持文件系统的源代码 |-- /include 包括编译核心所需要的大部分头文件 |-- /init 包含核心的初始化代码(不是系统引导代码) |-- /ipc 核心进程间通信的代码 |-- /kernel 内核管理的核心代码 |-- /lib 核心库代码 |-- /mm 独立于cpu结构的内存管理代码
虚拟文件系统
虚拟文件系统(VFS)是 Linux 内核中非常有用的一个 方面,因为它为文件系统提供了一个通用的接口抽象。 VFS 在 SCI 和内核所支持的文件系统之间提供了一个 交换层
虚拟文件系统
在 VFS 上面,是对诸如 open、close、read 和 write 之类的函数的一个通用 API 抽象。在 VFS 下面是文件 系统抽象,它定义了上层函数的实现方式。它们是给 定文件系统(超过 50 个)的插件。文件系统的源代码 可以在 ./linux/fs 中找到。 文件系统层之下是缓冲区缓存,它为文件系统层提供 了一个通用函数集(与具体文件系统无关)。这个缓 存层通过将数据保留一段时间(或者随即预先读取数 据以便在需要是就可用)优化了对物理设备的访问。 缓冲区缓存之下是设备驱动程序,它实现了特定物理 设备的接口。
内存管理
内核所管理的另外一个重要资源是内存。为了提高效 率,如果由硬件管理虚拟内存,内存是按照所谓的内 存页 方式进行管理的(对于大部分体系结构来说都是 4KB)。Linux 包括了管理可用内存的方式,以及物理 和虚拟映射所使用的硬件机制。 不过内存管理要管理的可不止 4KB 缓冲区。Linux 提 供了对 4KB 缓冲区的抽象,例如 slab 分配器。这种内 存管理模式使用 4KB 缓冲区为基数,然后从中分配结 构,并跟踪内存页使用情况,比如哪些内存页是满的, 哪些页面没有完全使用,哪些页面为空。这样就允许 该模式根据系统需要来动态调整内存使用。 为了支持多个用户使用内存,有时会出现可用内存被 消耗光的情况。由于这个原因,页面可以移出内存并 放入磁盘中。这个过程称为交换,因为页面会被从内 存交换到硬盘上。内存管理的源代码可以 在 ./linux/mm 中找到。
配置内核
修改makefile 添加devfs配置(2.6以后的内核版本取消 此选项) 配置内核选项
注:实验以及课程设计中所涉及的开发板 安装的内核版本为linux2.6.30.4
配置内核---修改makefile文件 (P137)
修改makefile文件的目的---指明使用的编译器 是交叉编译器! 修改参数ARCH 和CROSS_COMPILE
两种方法实现一个目的:将S3C2440_deconfig.config 文件保存成为.config的配置文件
读取已有的配置文件
命令(接上页)
实验四的方法: 1. 按Load an Alternate Configuation File 回车后输 入./config_EmbedSky_A70_256MB ;然后保存 2. 直接用命令 [root@local ~]# cp config_EmbedSky_A70_256MB .config 两种方法实现一个目的:将 config_EmbedSky_A70_256MB文件保存成 为.config的配置文件
如何进行linux内核移植(书本 第六章)
NAND FLASH分区 配置内核 内核编译 下载内核到开发板
NAND FLASH分区
NAND FLASH的作用
NAND FLASH共有64M,用于存储开发板的引导程序、内核、文 件系统(相当于计算机的硬盘)
为什么要指明NAND FLASH的分区情况
进程管理
进程管理的重点是进程的执行。在内核中,这 些进程称为线程,代表了单独的处理器虚拟化 (线程代码、数据、堆栈和 CPU 寄存器)。 在用户空间,通常使用进程 这个术语,不过 Linux 实现并没有区分这两个概念(进程和线 程)。内核通过 SCI 提供了一个应用程序编程 接口(API)来创建一个新进程(fork、exec 或 Portable Operating System Interface [POSIX] 函数),停止进程(kill、exit),并 在它们之间进行通信和同步(signal 或者 POSIX 机制)。
Linux内核源码的组成部分
|-- /net |-- /scripts |-- /block |-- / cypto |-- / security |-- /sound |-- /usr |-- /makefile |-- /config
核心的网络部分代码 包含用于配置核心的脚本文件 块设备的I/O调度 常用加密和散列算法 主要包含Selinux模块 音频设备的驱动核心代码 实现了用于打包和压缩的cpio等 编译规则文件 配置文件
什么是内核
增强型计算机(对于应用程序) 资源管理器(对于程序) 库
内核的类型
微内核
只有最基本的功能直接由中央内核(微内核)实现, 所有其他的功能都委托给一些独立进程,这些进程通 过明确定义的通信接口与中心内核通信。应用:机器 人、医疗器械
宏内核---linux内核
内核的全部代码,包括所有子系统都打包到一个文件 中
网络堆栈
网络堆栈在设计上遵循模拟协议本身的分层体 系结构。回想一下,Internet Protocol (IP) 是 传输协议(通常称为传输控制协议或 TCP)下 面的核心网络层协议。TCP 上面是 socket 层, 它是通过 SCI 进行调用的。 socket 层是网络子系统的标准 API,它为各种 网络协议提供了一个用户接口。从原始帧访问 到 IP 协议数据单元(PDU),再到 TCP 和 User Datagram Protocol (UDP),socket 层提 供了一种标准化的方法来管理连接,并在各个 终点之间移动数据。内核中网络源代码可以 在 ./linux/net 中找到。
ARCH参数表明要内核运行的目标是ARM体系 CROSS参数表明编译此内核需要使用交叉编译器是 arm-linux-前缀的交叉编译器
注意:如果需要使用特殊指定的交叉编译器 (不是用PATH路径下指定下的),可以用绝 对路径方式,(书P137)
配置内核选项
为什么要进行配置(补充) 配置方法 启动界面 读取已有的配置文件 选择具体的配置选项
设备驱动程序
Linux 内核中有大量代码都在设备驱动程 序中,它们能够运转特定的硬件设备。 Linux 源码树提供了一个驱动程序子目录, 这个目录又进一步划分为各种支持设备, 例如 Bluetooth、I2C、serial 等。设备驱 动程序的代码可以在 ./linux/drivers 中找 到。
Linux内核编译移植
课程主要内容
什么是内核(扩展)
内核定义 内核的类型 Linux内核的启动过程 内核的组成部分 内核的五大功能模块 内核代码结构的简要剖析
如何进行内核移植(书本第六章内容)
什么是内核
内核是操作系统最基本的部分。 内核通常提供一种硬件抽象的方法来完 成应用程序对计算机资源的访问。 内核为应用软件和硬件提供了一套简洁, 统一的接口,使程序设计更为简单。