十六.linux开发之Kernel移植——内核的配置和编译原理

本文详细介绍了Linux内核的配置和编译原理,包括内核的子系统、源码目录结构、配置体系、menuconfig的使用及其工作原理。通过分析Kconfig文件,了解配置选项的设置,以及menuconfig如何读取和更新.config文件。通过实验学习思路,验证了menuconfig与.config、Kconfig和Makefile之间的关系,展示了内核配置的完整流程。
摘要由CSDN通过智能技术生成

有道云笔记地址:

详情看这里链接,记录太多,就不一一排版了。

http://note.youdao.com/noteshare?id=d25dbce79566963e3699574a74048154&sub=D0E2BC043B5B415C840A3A2FB393376F

 

本节我们选择linux 2.6.35.7版本kernel进行实践。使用的是九鼎X210的移植版本

补充.内核的子系统(参考A8实验指导书)

Linux 内核主要由 5 个子系统组成:进程调度,内存管理,虚拟文件系统, 网络接口,进程间通信。

1.进程调度( SCHED)

进程调度控制进程对 CPU 的访问。选择下一个进程运行时,由调度程序选择 最值得运行的进程。可运行进程实际上是等待 CPU 资源的进程,如果某个进程在 等待其他资源,则该进程是不可运行进程。 Linux 使用了比较简单的基于优先级 的进程调度算法选择新的进程。

2.内存管理( MM)

内存管理允许多个进程安全的共享主内存区域。 Linux 的内存管理支持虚拟 内存,即在计算机中运行的程序,其代码、数据、堆栈的总量可以超过实际内存 的大小,操作系统只是把当前使用的程序块保留在内存中,其余的程序块则保留 在磁盘中。必要时,操作系统负责在磁盘和内存间交换程序块。内存管理从逻辑 上分为硬件无关部分和硬件有关部分。硬件无关部分提供了进程的映射和逻辑内 存的对换;硬件相关的部分为内存管理硬件提供了虚拟接口。

3.虚拟文件系统( Virtual File System, VFS)

虚拟文件系统隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口, VFS 提供了多达数十种不同的文件系统。虚拟文件系统可以分为逻辑文件系统和 设备驱动程序。逻辑文件系统指 Linux 所支持的文件系统,如 EXT2, FAT 等;设 备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。

4.网络接口( NET)

网络接口提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可 分为网络协议和网络设备驱动程序。网络协议部分负责实现每一种可能的网络传 输协议。网络设备驱动程序负责与硬件设备通信,每一种可能的硬件设备都有相 应的设备驱动程序。

5.进程间通信( IPC)

 进程间通信支持进程间各种通信机制。这些通信机制主要有以下部分:管道 ( Pipe)及有名管道( named pipe);信号( Signal);报文( Message)队列(消 息队列);共享内存;信号量( semaphore);套接口( Socket)。

这些子系统虽然实现的功能相对独立,但存在着较强的依赖性(调用依赖模

块中相应的函数),所以说 Linux 内核是单块结构( monolithic)的。

下图是五个子系统间的互相关系。

各个子系统间的互相关系如下:

进程调度与内存管理之间的关系:这两个子系统互相依赖。在多道程序环境 下,程序要运行的话必须为之创建进程,而创建进程的第一件事情就是将程 序和数据装入内存。

进程间通信与内存管理的关系:进程间通信子系统要依赖内存管理支持共享 内存通信机制,这种机制允许两个进程除了拥有自己的私有空间,还可以存 取共同的内存区域。

虚拟文件系统与网络接口之间的关系:虚拟文件系统利用网络接口支持网络 文件系统( NFS),也利用内存管理支持 RAMDisk 设备。

内存管理与虚拟文件系统之间的关系:内存管理利用虚拟文件系统支持交换, 交换进程( swapd)定期由调度程序调度,这也是内存管理依赖于进程调度的 唯一原因。当一个进程存取的内存映射被换出时,内存管理向文件系统发出 请求,同时挂起当前正在运行的进程。 除了这些依赖关系外,内核中的所有子系统还要依赖于一些共同的资源。这 些资源包括所有子系统都用到的“过程”,例如:分配和释放内存空间的过程, 打印警告或错误信息的过程,还有系统的调试过程等等。

一.linux内核源码目录结构

     Kbuild,Kernel Build,管理内核编译的文件

     Makefile,kernel工程的Makefile。

     mk,是九鼎在移植时自己添加的,不是linux内核本身的东西

     arch,体系架构,arch目录下的子目录存放的是不同种类的架构。譬如arm这种cpu的所有文件都在arch/arm目录下

     block,块设备,一般是存储设备,存放的块设备管理的相关代码。譬如说SD卡、iNand、Nand、硬盘等都是块设备。block目录下放的是一些linux存储体系中关于块设备管理的代码。

     crypto,加密相关,存放加密算法实现代码

     Documentation,说明文档

     drivers,设备驱动模块,存放各种设备类型驱动模块源代码

     firmware,固件。什么是固件?固件其实是软件,不过这个软件是固话到IC里面运行的叫固件。就像S5PV210里的iROM代码

     fs,文件系统,里面列出了linux支持的各种文件系统的实现。

     include,头文件,子目录存放通用的各种模块的头文件

     init,kernel启动时初始化的代码

     ipc,进程间通信机制的代码

     kernel,kernel内核本身需要的代码

    lib,通用的库函数。这里面都是一些公用的有用的库函数,注意这里的库函数和C语言的库函数不一样的。在内核编程中是不能用C语言标准库函数,这里的lib目录下的库函数就是用来替代那些标准库函数的。譬如在内核中要打印信息时不能用printf,而要用printk,这个printk就是我们这个lib目录下的。

    mm,mm是memory management,内存管理。linux的内存管理代码都在这里

    net,网络协议栈,子目录存放各种网络协议,譬如TCP/IP协议栈等都在这里。

    scripts</

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值