Linux内核之整体架构

链接:https://blog.csdn.net/changexhao/article/details/78321295https://www.cnblogs.com/wrjvszq/p/4257164.html

一、Linux体系架构

Linux内核只是Linux操作系统的一部分,对下它管理系统的所有硬件设备,对上它通过系统调用给运行时库或应用程序提供接口;其核心功能就是管理硬件设备和供应用程序使用,主要模块包括CPU、Memory(内存和外存)、输入输出设备、网络设备和其他的外围设备;                

  • 系统调用接口SCI:比如open、read、write等;
  • 进程管理PM:创建进程、销毁进程、调度进程等;
  • 内存管理MM:内存分配、管理等;
  • 虚拟文件系统VFS:为多种文件系统提供统一的操作接口;
  • 网络协议栈:提供各种网络协议;
  • CPU架构相关代码Arch:提高移植性;
  • 设备驱动程序DD:各种设备的驱动,占到内核的70%左右;

二、Linux内核架构和子系统划分

1 Process Scheduler:进程管理或进程调度,负责管理CPU资源,以便让各个进程可以尽量公平的方式访问CPU;

2 Memory Manager:内存管理,负责管理内存资源,以便让各个进程可以安全地共享机器的内存资源,内存管理还提供虚拟内存的机制,可以让进程使用多余物理内存大小的内存,即不用的内存通过文件系统保存在外存中,而需要使用的时候则加载到内存中;

3 VFS(Virtual File System):虚拟文件系统,Linux将不同功能的外围设备(比如硬盘/磁盘、输入输出设备、显示设备等)抽象为可以通过统一的文件操作接口(比如open、read、write、close)来访问,这就是Linux系统“一切皆是文件”的体现;(但是并不彻底,因为CPU、内存、网络等还不是文件)

4 Network:网络子系统,负责管理熊的网络设备,实现多种多样的网络标准;

5 IPC:进程间通信,IPC不管理任何的硬件,仅仅是负责Linux系统中的进程间通信;

三、Linux内核源码

1 源码获取

2 源码目录简介

  • include:内核所需的大部分头文件目录。和平台无关的放在include/linux下,和平台相关的放在include相应的子目录下;
  • kernel:内核管理的核心代码。和硬件相关代码放在arch/*/kernel目录下;
  • mm:内存管理代码。和硬件相关代码放在arch/*/mm目录下;
  • fs:各种文件系统的实现代码;
  • net:不包括网络设备驱动的玩过子系统
  • ipc:进程间的通信代码
  • arch:处理器相关代码,比如x86、arm。下设子目录各自对应具体的CPU,每个子目录下有boot、mm和kernel三个目录,即系统引导、存储管理、系统调用;
  • init:核心的初始化代码。包含main.c和version.c;
  • block:块设备的层次。
  • sound:音频相关的驱动及子系统;
  • drivers:设备驱动
  • lib:内核中使用的库函数,比如CRC、FIFO、list、MD5。和硬件相关代码放在arch/*/lib目录下;
  • crypto:加密、解密相关的库函数;
  • security:提供安全特性;
  • virt:提供虚拟机技术(比如KVM)的支持;
  • usr:用于生成inittramfs的代码;
  • firmware:设备驱动的固件;
  • samples:示例代码;
  • tools:常用工具,比如性能剖析、自测试等;
  • Kconfig、Kbuild、Makefile、scripts:用于内核编译的配置文件、脚本等;

四、Linux内核配置、编译、安装

1 x86配置

(1)方法一:交互式,在内核顶层目录下运行make config

(2)方法二:菜单式,在内核顶层目录下运行make menuconfig

2 x86编译

(1)内核编译

  • make zImage:编译出的内核 < 512k
  • make bzImage:通用编译命令

(2)内核模块编译:make modules命令编译内核模块

(3)内核模块安装:make modules_install命令将编译号的内核模块copy到当前系统的/lib/modules下的**目录下;

(4)内核模块打包:mkinitrd initrd-$version $version命令对内核模块进行打包,其中initrd-$version为打包后的文件名字,$version为要打包的目录;

3 x86安装

(1)拷贝内核:copy内核编译出来的内核映像(步骤1)到启动目录,即cp arch/$cpu/boot/bzImage /boot/vmlinuxz-$version

(2)拷贝内核模块:copy内核模块打包文件(步骤4)到/boot目录下,即cp initrd-$version /boot/ 

(3)修改启动配置文件:修改/etc/grub.conf文件

未完待续~

转载于:https://www.cnblogs.com/bo1990/p/11428966.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值