第13章 Linux内核3
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Linux内核
大纲
Linux内核简介 Linux内核体系结构 Linux内核目录结构 ARM-Linux内核启动分析 ARM-Linux系统调用 Linux内核配置
Linux 内核简介
在计算机技术的发展史上,Unix的出现是 一个重要的里程碑。
免费 源代码
Unix的两大主流
BSD版本的Unix System V版本的Unix
Linux内核配置
Linux的模块机制
Linux中的可加载模块是Linux内核支持的 动态可加载模块,它们是内核的一部分, 但是并没有编译到内核中去。模块可以单 独编译成目标代码,以.o的目标文件形式 存在。它可以根据需要在系统启动后动态 加载到系统内核中。当模块不再被需要时 ,可以动态的卸载出系统内核。 Linux中大多数设备驱动程序都以模块形 式存在。超级用户可以通过insmod和 rmmod命令将模块装入或卸载。
Arm-linux 的启动和初始化——第三个阶段
Init()的执行-• 总线初始化(比如pci_init()) • 网络初始化(sock_init()) • 创建事件管理内核线程,重命名为 keventd(start_context_thread()). • 启动任何使用_initcall表示的函数,方便内核开 发者添加启动函数(do_initcall()) • 设备初始化,包括并口、字符设备、块设备等。 • 文件系统初始化(filesystem_setup()) • 安装root文件系统(mount_root())
Linux 内核简介
Linux版本的规定(x.yy.zz) x介于0到9之间
x标志着内核在设计上或实现上的重大改变
yy介于0到99之间
yy偶数表示相对稳定,已经发行的版本 yy奇数表示开发中的版本
zz介于0到99之间
zz内核增加内容不是很多,改动不大
Linux 内核简介
Linux 内核简介
ARM-Linux内核启动代码分析
Arm-linux 的启动和初始化
内核的初始化是一个非常漫长的过程,整 个过程可以分为三个阶段: 第一个阶段主要是找到Linux内核的入口地 址开启Cache和MMU,解压缩内核; 第二个阶段跳入C语言函数,调用大量的初 始化函数,完成内核的各种初始化; 第三个阶段是创建启动第一个内核线程 init(),完成各种外部设备的初始化;挂载 根文件系统。
Drivers 设备驱动程序(1)
block 块设备驱动程序 scsi SCSI设备驱动程序 char 字符设备驱动程序 net 网卡设备 sound 音频卡设备 paride 从并口访问IDE设备的支持 joystick 游戏杆 ftape 磁带流设备 hfmodem 无线电设备 ip2 IntelliPort的多端口串行控制器
Arm-linux 的启动和初始化
• 可安装模块机制初始化(init_modules()) • 释放命令行和参数块等占用的物理内存,收集和计算出 一些统计信息(mem_init()) • 内核cache初始化(kmem_cache_init()) • 延时校准(获得时钟jiffies与CPU主频ticks的延迟, calibrate_delay()) • 根据物理内存大小,计算可创建线程(包含进程)数量 (fork_init()) • 启动init过程,创建第一个内核线程,调用init()函数。 至此, start_kernel()结束,基本的内核环境已经建立起 来
新版本内核的获取和更新
linux内核版本发布的官方网站 http://www.kernel.org 发布形式:一种是full/Source 版本,另外一种 是patch文件,即补丁。 完整内核版本较大,一般是tar.gz或者是.bz2 文件,二者分别是使用gzip或者bzip2进行压缩 的文件,使用时需要解压缩。 patch文件则比较小,一般只有几十K到几百K, 但是patch文件是针对于特定的版本的,你需要 找到自己对应的版本才能使用。
Linux内核编译配置原则
正确合理的设置内核编译配置选项的基本原 则? 自己定制编译的内核运行更快(具有更少 的代码) 不需要的功能编译进入内核可能会增加被 系统攻击者利用的漏洞 将某种功能编译为模块方式会比编译到内 核内的方式速度要慢一些
Linux内核编译模式
把component编译到内核中(build-in) 优点:在内核启动时就可以自动支持相应部分的 功能,这样的优点是方便、速度快,机器一启动 ,你就可以使用这部分功能了 缺点:内核变得肥大,不管你是否需要这部分功 能,它都会存在,也是Windows惯用的招数 把component编译成模块(module),生成 对源自文库的.o文件,动态调用。 优点:不会使内核过分庞大, 缺点:需要自己来调用这些模块,速度相对会较 慢。
asm-m68k Motorola-IBM的基于PowerPC的体系结构
asm-ppc Motorola-IBM的PowerPC体系结构 asm-s390 IBM的System/390体系结构 asm-sparc Sun的SPARC体系结构 asm-sparc64 Sun的Ultra-SPARC体系结构 asm-arm 基于ARM处理器的体系结构 net 网络 scsi SCSI支持 video 视频卡支持 config 定义内核配置的宏所在的头文件
ufs UnixBSD、SunOs、FreeBSD、NetBSD、OpenBSD和NeXTStep文件系统
affs Amiga的快速文件系统(FFS) coda Coda网络文件系统 hfs 苹果的Macintosh文件系统
adfs Acorn磁盘填充文件系统 efs SGI IRIX的EFS文件系统 qnx4 QNX4 OS使用不的文件系统 romfs 只读小文件系统 autofs 目录自动装载程序的支持 lockd 远程文件锁定的支持
fs
文件系统(1)
proc /proc虚拟文件系统 devpts /dev/pts虚拟文件系统 ext2 Linux本地的Ext2文件系统 isofs ISO9660文件系统(CD-ROM) nfs 网络文件系统(NFS)
nfsd 集成的网络文件系统服务器 fat 基于FAT的文件系统的通用代码 msdos 微软的MS-DOS文件系统
Linux开发过程
基于天才的思想开发而成 基于Unix等各种操作系统的优点 公开的开发过程是其最强大的生命力
http://www.kernel.org
Linux 内核简介
主要发行商:
Linux 内核体系结构
Linux 内核体系结构概述
内核系统结构图
Linux 内核体系结构概述
Linux 内核源代码目录概述
Arch平台相关代码文件
arch 平台相关代码 i386 IBM的PC体系结构 alpha 康柏的Alpha体系结构 s390 IBM的System/390体系结构 sparc Sun的SPARC体系结构 sparc64 Sun的Ultra-SPARC体系结构 mips SGI的MIPS体系结构 ppc Motorola-IBM的基于PowerPC的体系结构 m68k Motorola的基于MC680x0的体系结构 arm 基于ARM处理器的体系结构
POSIX标准
Linux 内核简介
“类Unix”--Minix
Unix商业版本 Andrew S. Tanenbaum
缺乏实用性
Linus Torvalds 公布于 互联网 实用的 Unix Linux
类Unix--GNU GNU/Linux FSF支持
GPL
使自由软件及其衍生 产品继续保持开放 状态,从整体上促进 软件的共享和重复使用
Linux内核编译
为什么重新编译内核? Linux是一个自由软件,内核版本不断更新,并 增加了许多特性 根据自身系统,定制更高效,更稳定内核的需要 更新的版本支持更多的硬件,具备更好的进程管 理能力,运行速度更快,更稳定,并一般会修复 老版本中的bug。 经常性地选择升级更新的系统内核是Linux使 用者的必要操作内容
第二个阶段跳入C语言函数,调用大量的初 始化函数,完成内核的各种初始化;
Linux/init/main.c
输出Linux版本信息(printk(linux_banner))
设置体系结构相关的环境(setup_arch()) 页表结构初始化(paging_init(),在 setup_arch())中完成)
Arm-linux 的启动和初始化
• • • • • 解析内核命令行参数(parse_options()) 设置系统自陷入口(trap_init()) 初始化系统IRQ(init_IRQ()) 内核进程调度器机制初始化(sched_init()) 时间、定时器初始化(包括读取CMOS时钟,评测 主频和初始化定时器中断等,time_init()) • 软中断初始化(softirq_init()) • 控制台初始化(为输出信息而先于PCI初始化, console_init())
第一级文件结构(1)
init 内核初始化代码
kernel 内核核心部分:进程、定时、程序执行、信 号、模块。。。
Mm 内存管理
arch 平台相关代码 fs 文件系统 Net 网络代码
第一级文件结构(2)
Ipc 的进程间通信 Drivers 设备驱动程序
Lib 通用内核函数
Include 头文件(.h) scripts 生成内核映像的外部程序 Documentation有关内核各个部分的通用解释和注释的 文本文件
Arm-linux 的启动和初始化——第一阶段
第一个阶段主要是找到Linux内核的入口 地址开启Cache和MMU,解压缩内核;
Linux/arch/arm/kernel/head.S /arch/arm/boot/compressed/misc.c
decompress_kernel()
Arm-linux 的启动和初始化——第二阶段
pnp 即插即用的支持 usb 通用串行总线(USB)的支持
pci PCI总线的支持
sbus Sun的SPARC SBus的支持
nubus 苹果的Macintosh Nubus的支持 zorro Amiga的Zorro总线的支持 dio 惠普的HP300 DIO总线的支持 tc Sun的TurboChannel支持(尚未完成)
vfat 微软的Windows文件系统(VFAT) nls 本地语言支持 ntfs 微软的Windows NT文件系统 smbfs 微软的Windows服务器消息块(SMB)文件系统 umsdos UMSDOS文件系统
fs
文件系统(2)
minix MINIX文件系统 hpfs IBM的OS/2文件系统 sysv SystemV、SCO、Xenix、Coherent和Version7文件系统 ncpfs Novell的Netware核心协议(NCP0
Include 头文件(.h)
linux 内核核心部分 asm-generic 平台无关 低级头文件 asm-i386 IBM的PC体 系结构 asm-alpha 康柏的Alpha体系结构 asm-mips SGI的MIPS体系结构 lockd 远程文件加锁 nfsd 集成的网络文件服务器 sunrpc Sun的远程过程调用 byteorder 字节交换函数 modules 模块支持
ARM-Linux系统调用
系统调用是操作系统提供的服务,用户程 序通过各种系统调用,来引用内核提供的 各种服务,系统调用的执行让用户程序陷 入内核。 系统调用时应用程序从用户空间进入内核 空间的唯一途径。 在x86处理器上,Linux系统调用是通过自 陷指令“INT 0x80”实现的。 对于ARM处理器,其自陷指令是swi或svc 。
video 视频卡设备
cdrom 专用CD-ROM设备(除ATAPI和SCSI之外) isd0n ISDN设备
apl000 富士的AP1000设备 macintosh 苹果的Macintosh设备 sgi SGI的设备 fc4 光纤设备 acorn Acorn的设备 misc 杂项设备
Drivers 设备驱动程序(2)
大纲
Linux内核简介 Linux内核体系结构 Linux内核目录结构 ARM-Linux内核启动分析 ARM-Linux系统调用 Linux内核配置
Linux 内核简介
在计算机技术的发展史上,Unix的出现是 一个重要的里程碑。
免费 源代码
Unix的两大主流
BSD版本的Unix System V版本的Unix
Linux内核配置
Linux的模块机制
Linux中的可加载模块是Linux内核支持的 动态可加载模块,它们是内核的一部分, 但是并没有编译到内核中去。模块可以单 独编译成目标代码,以.o的目标文件形式 存在。它可以根据需要在系统启动后动态 加载到系统内核中。当模块不再被需要时 ,可以动态的卸载出系统内核。 Linux中大多数设备驱动程序都以模块形 式存在。超级用户可以通过insmod和 rmmod命令将模块装入或卸载。
Arm-linux 的启动和初始化——第三个阶段
Init()的执行-• 总线初始化(比如pci_init()) • 网络初始化(sock_init()) • 创建事件管理内核线程,重命名为 keventd(start_context_thread()). • 启动任何使用_initcall表示的函数,方便内核开 发者添加启动函数(do_initcall()) • 设备初始化,包括并口、字符设备、块设备等。 • 文件系统初始化(filesystem_setup()) • 安装root文件系统(mount_root())
Linux 内核简介
Linux版本的规定(x.yy.zz) x介于0到9之间
x标志着内核在设计上或实现上的重大改变
yy介于0到99之间
yy偶数表示相对稳定,已经发行的版本 yy奇数表示开发中的版本
zz介于0到99之间
zz内核增加内容不是很多,改动不大
Linux 内核简介
Linux 内核简介
ARM-Linux内核启动代码分析
Arm-linux 的启动和初始化
内核的初始化是一个非常漫长的过程,整 个过程可以分为三个阶段: 第一个阶段主要是找到Linux内核的入口地 址开启Cache和MMU,解压缩内核; 第二个阶段跳入C语言函数,调用大量的初 始化函数,完成内核的各种初始化; 第三个阶段是创建启动第一个内核线程 init(),完成各种外部设备的初始化;挂载 根文件系统。
Drivers 设备驱动程序(1)
block 块设备驱动程序 scsi SCSI设备驱动程序 char 字符设备驱动程序 net 网卡设备 sound 音频卡设备 paride 从并口访问IDE设备的支持 joystick 游戏杆 ftape 磁带流设备 hfmodem 无线电设备 ip2 IntelliPort的多端口串行控制器
Arm-linux 的启动和初始化
• 可安装模块机制初始化(init_modules()) • 释放命令行和参数块等占用的物理内存,收集和计算出 一些统计信息(mem_init()) • 内核cache初始化(kmem_cache_init()) • 延时校准(获得时钟jiffies与CPU主频ticks的延迟, calibrate_delay()) • 根据物理内存大小,计算可创建线程(包含进程)数量 (fork_init()) • 启动init过程,创建第一个内核线程,调用init()函数。 至此, start_kernel()结束,基本的内核环境已经建立起 来
新版本内核的获取和更新
linux内核版本发布的官方网站 http://www.kernel.org 发布形式:一种是full/Source 版本,另外一种 是patch文件,即补丁。 完整内核版本较大,一般是tar.gz或者是.bz2 文件,二者分别是使用gzip或者bzip2进行压缩 的文件,使用时需要解压缩。 patch文件则比较小,一般只有几十K到几百K, 但是patch文件是针对于特定的版本的,你需要 找到自己对应的版本才能使用。
Linux内核编译配置原则
正确合理的设置内核编译配置选项的基本原 则? 自己定制编译的内核运行更快(具有更少 的代码) 不需要的功能编译进入内核可能会增加被 系统攻击者利用的漏洞 将某种功能编译为模块方式会比编译到内 核内的方式速度要慢一些
Linux内核编译模式
把component编译到内核中(build-in) 优点:在内核启动时就可以自动支持相应部分的 功能,这样的优点是方便、速度快,机器一启动 ,你就可以使用这部分功能了 缺点:内核变得肥大,不管你是否需要这部分功 能,它都会存在,也是Windows惯用的招数 把component编译成模块(module),生成 对源自文库的.o文件,动态调用。 优点:不会使内核过分庞大, 缺点:需要自己来调用这些模块,速度相对会较 慢。
asm-m68k Motorola-IBM的基于PowerPC的体系结构
asm-ppc Motorola-IBM的PowerPC体系结构 asm-s390 IBM的System/390体系结构 asm-sparc Sun的SPARC体系结构 asm-sparc64 Sun的Ultra-SPARC体系结构 asm-arm 基于ARM处理器的体系结构 net 网络 scsi SCSI支持 video 视频卡支持 config 定义内核配置的宏所在的头文件
ufs UnixBSD、SunOs、FreeBSD、NetBSD、OpenBSD和NeXTStep文件系统
affs Amiga的快速文件系统(FFS) coda Coda网络文件系统 hfs 苹果的Macintosh文件系统
adfs Acorn磁盘填充文件系统 efs SGI IRIX的EFS文件系统 qnx4 QNX4 OS使用不的文件系统 romfs 只读小文件系统 autofs 目录自动装载程序的支持 lockd 远程文件锁定的支持
fs
文件系统(1)
proc /proc虚拟文件系统 devpts /dev/pts虚拟文件系统 ext2 Linux本地的Ext2文件系统 isofs ISO9660文件系统(CD-ROM) nfs 网络文件系统(NFS)
nfsd 集成的网络文件系统服务器 fat 基于FAT的文件系统的通用代码 msdos 微软的MS-DOS文件系统
Linux开发过程
基于天才的思想开发而成 基于Unix等各种操作系统的优点 公开的开发过程是其最强大的生命力
http://www.kernel.org
Linux 内核简介
主要发行商:
Linux 内核体系结构
Linux 内核体系结构概述
内核系统结构图
Linux 内核体系结构概述
Linux 内核源代码目录概述
Arch平台相关代码文件
arch 平台相关代码 i386 IBM的PC体系结构 alpha 康柏的Alpha体系结构 s390 IBM的System/390体系结构 sparc Sun的SPARC体系结构 sparc64 Sun的Ultra-SPARC体系结构 mips SGI的MIPS体系结构 ppc Motorola-IBM的基于PowerPC的体系结构 m68k Motorola的基于MC680x0的体系结构 arm 基于ARM处理器的体系结构
POSIX标准
Linux 内核简介
“类Unix”--Minix
Unix商业版本 Andrew S. Tanenbaum
缺乏实用性
Linus Torvalds 公布于 互联网 实用的 Unix Linux
类Unix--GNU GNU/Linux FSF支持
GPL
使自由软件及其衍生 产品继续保持开放 状态,从整体上促进 软件的共享和重复使用
Linux内核编译
为什么重新编译内核? Linux是一个自由软件,内核版本不断更新,并 增加了许多特性 根据自身系统,定制更高效,更稳定内核的需要 更新的版本支持更多的硬件,具备更好的进程管 理能力,运行速度更快,更稳定,并一般会修复 老版本中的bug。 经常性地选择升级更新的系统内核是Linux使 用者的必要操作内容
第二个阶段跳入C语言函数,调用大量的初 始化函数,完成内核的各种初始化;
Linux/init/main.c
输出Linux版本信息(printk(linux_banner))
设置体系结构相关的环境(setup_arch()) 页表结构初始化(paging_init(),在 setup_arch())中完成)
Arm-linux 的启动和初始化
• • • • • 解析内核命令行参数(parse_options()) 设置系统自陷入口(trap_init()) 初始化系统IRQ(init_IRQ()) 内核进程调度器机制初始化(sched_init()) 时间、定时器初始化(包括读取CMOS时钟,评测 主频和初始化定时器中断等,time_init()) • 软中断初始化(softirq_init()) • 控制台初始化(为输出信息而先于PCI初始化, console_init())
第一级文件结构(1)
init 内核初始化代码
kernel 内核核心部分:进程、定时、程序执行、信 号、模块。。。
Mm 内存管理
arch 平台相关代码 fs 文件系统 Net 网络代码
第一级文件结构(2)
Ipc 的进程间通信 Drivers 设备驱动程序
Lib 通用内核函数
Include 头文件(.h) scripts 生成内核映像的外部程序 Documentation有关内核各个部分的通用解释和注释的 文本文件
Arm-linux 的启动和初始化——第一阶段
第一个阶段主要是找到Linux内核的入口 地址开启Cache和MMU,解压缩内核;
Linux/arch/arm/kernel/head.S /arch/arm/boot/compressed/misc.c
decompress_kernel()
Arm-linux 的启动和初始化——第二阶段
pnp 即插即用的支持 usb 通用串行总线(USB)的支持
pci PCI总线的支持
sbus Sun的SPARC SBus的支持
nubus 苹果的Macintosh Nubus的支持 zorro Amiga的Zorro总线的支持 dio 惠普的HP300 DIO总线的支持 tc Sun的TurboChannel支持(尚未完成)
vfat 微软的Windows文件系统(VFAT) nls 本地语言支持 ntfs 微软的Windows NT文件系统 smbfs 微软的Windows服务器消息块(SMB)文件系统 umsdos UMSDOS文件系统
fs
文件系统(2)
minix MINIX文件系统 hpfs IBM的OS/2文件系统 sysv SystemV、SCO、Xenix、Coherent和Version7文件系统 ncpfs Novell的Netware核心协议(NCP0
Include 头文件(.h)
linux 内核核心部分 asm-generic 平台无关 低级头文件 asm-i386 IBM的PC体 系结构 asm-alpha 康柏的Alpha体系结构 asm-mips SGI的MIPS体系结构 lockd 远程文件加锁 nfsd 集成的网络文件服务器 sunrpc Sun的远程过程调用 byteorder 字节交换函数 modules 模块支持
ARM-Linux系统调用
系统调用是操作系统提供的服务,用户程 序通过各种系统调用,来引用内核提供的 各种服务,系统调用的执行让用户程序陷 入内核。 系统调用时应用程序从用户空间进入内核 空间的唯一途径。 在x86处理器上,Linux系统调用是通过自 陷指令“INT 0x80”实现的。 对于ARM处理器,其自陷指令是swi或svc 。
video 视频卡设备
cdrom 专用CD-ROM设备(除ATAPI和SCSI之外) isd0n ISDN设备
apl000 富士的AP1000设备 macintosh 苹果的Macintosh设备 sgi SGI的设备 fc4 光纤设备 acorn Acorn的设备 misc 杂项设备
Drivers 设备驱动程序(2)