Linux操作系统分析

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

......基于x86的Linux启动代码分析小结和作业.......Linux操作系统分析2基于x86的Linux启动代码分析陈香兰(xlanchen@ustc.edu.cn)计算机应用教研室@计算机学院嵌入式系统实验室@苏州研究院中国科学技术大学Fall2010陈香兰(xlanchen@ustc.edu.cn)Linux操作系统分析......基于x86的Linux启动代码分析小结和作业..Outline...1基于x86的Linux启动代码分析...2小结和作业陈香兰(xlanchen@ustc.edu.cn)Linux操作系统分析......基于x86的Linux启动代码分析小结和作业..源代码来源内核版本:2.6.26解压缩后,成功编译一次建立SourceInsight工程Windows+SourceInsightWine+SourceInsight安装wine:sudoapt-getinstallwine在wine中安装SourceInsight:wineXXX.exe陈香兰(xlanchen@ustc.edu.cn)Linux操作系统分析......基于x86的Linux启动代码分析小结和作业..基于x86的Linux启动代码分析了解linux的源码组织看目录结构了解linux的内核代码结构看Makefile了解基于x86的linux的bootimage的结构看Makefile文件和链接描述文件掌握x86的启动流程阅读启动源码文件陈香兰(xlanchen@ustc.edu.cn)Linux操作系统分析......基于x86的Linux启动代码分析小结和作业..Linux-2.6.26阅读linux目录下的README关于Linux的介绍(WHATISLINUX?)该版本内核支持的体系结构(ONWHATHARDWAREDOESITRUN?)Linux源代码目录中的文档目录(DOCUMENTATION)如何配置、编译、安装INSTALLINGthekernelBUILDdirectoryforthekernelCONFIGURINGthekernelCOMPILINGthekernel等等陈香兰(xlanchen@ustc.edu.cn)Linux操作系统分析......基于x86的Linux启动代码分析小结和作业..Linux内核源代码中的主要子目录IDocumentation内核方面的相关文档。arch与体系结构相关的代码。对应于每个支持的体系结构,有一个相应的目录如x86、arm、alpha等。每个体系结构子目录下包含几个主要的子目录:kernel与体系结构相关的核心代码mm与体系结构相关的内存管理代码lib与体系结构相关的库代码include内核头文件。对每种支持的体系结构有相应的子目录,如asm-x86、asm-arm、asm-alpha等。符号链接asm,如“asm-asm-x86”。实际上,“#include‘asm/xxxx.h’”?陈香兰(xlanchen@ustc.edu.cn)Linux操作系统分析......基于x86的Linux启动代码分析小结和作业..Linux内核源代码中的主要子目录IIinit内核初始化代码。提供main.c,包含startkernel函数。kernel内核管理代码。mm内存管理代码。ipc进程间通讯代码。net网络部分代码。lib与体系结构无关的内核库代码。drivers设备驱动代码。每类设备有相应的子目录,如char、block、net等fs文件系统代码。每个支持文件系统有相应的子目录,如ext2、proc等。modules可动态加载的模块。Scripts配置核心的脚本文件。等等陈香兰(xlanchen@ustc.edu.cn)Linux操作系统分析......基于x86的Linux启动代码分析小结和作业..考虑Arch为i386考察如下目录观察Linux源码的根目录观察arch目录观察arch下的x86目录arch/x86/bootarch/x86/boot/compressedarch/x86/kernel观察Linux的init目录陈香兰(xlanchen@ustc.edu.cn)Linux操作系统分析......基于x86的Linux启动代码分析小结和作业..阅读documentation/i386/boot.txtI由于一些历史的原因,基于x86的Linux的启动比较复杂这个文档(THELINUX/I386BOOTPROTOCOL)包含如下内容...1Linux/i386的启动协议(若干个)...2内存布局图(MEMORYLAYOUT)...3实模式下的内核头结构及细节(THEREAL-MODEKERNELHEADER)...4内核的命令行(THEKERNELCOMMANDLINE)...5MEMORYLAYOUTOFTHEREAL-MODECODE...6启动配置示例(SAMPLEBOOTCONFIGURATION)...7装载Linux的剩余部分(LOADINGTHERESTOFTHEKERNEL)陈香兰(xlanchen@ustc.edu.cn)Linux操作系统分析......基于x86的Linux启动代码分析小结和作业..阅读documentation/i386/boot.txtII...8特殊的命令行参数(SPECIALCOMMANDLINEOPTIONS)...9运行内核(RUNNINGTHEKERNEL)...10高级启动回调函数(ADVANCEDBOOTLOADERHOOKS)...1132-bitBOOTPROTOCOL陈香兰(xlanchen@ustc.edu.cn)Linux操作系统分析......基于x86的Linux启动代码分析小结和作业..阅读Linux源码根目录下的Makefile找到缺省目标all找到vmlinux目标,并阅读陈香兰(xlanchen@ustc.edu.cn)Linux操作系统分析......基于x86的Linux启动代码分析小结和作业..解释:关于$(callifchangedrule;vmlinux)#rulevmlinux陈香兰(xlanchen@ustc.edu.cn)Linux操作系统分析......基于x86的Linux启动代码分析小结和作业链接描述文件?链接顺序:vmlinux-initvmlinux-main陈香兰(xlanchen@ustc.edu.cn)Linux操作系统分析......基于x86的Linux启动代码分析小结和作业..参见“Documentation/kbuild/makefiles.txt”陈香兰(xlanchen@ustc.edu.cn)Linux操作系统分析......基于x86的Linux启动代码分析小结和作业注意:vmlinux-initvmlinux-mainvmlinux-dirs陈香兰(xlanchen@ustc.edu.cn)Linux操作系统分析......基于x86的Linux启动代码分析小结和作业..主要目标文件的编译..vmlinux###不妨以core-y为例,观察体系相关和体系无关部分的代码是如何被包含进来的陈香兰(xlanchen@ustc.edu.cn)Linux操作系统分析......基于x86的Linux启动代码分析小结和作业..x86的启动文件..根据vmlinux-init找到head-y,init-y关于arch/x86/Makefile的引入根Makefile中以include的方式包含了X86体系结构相关部分的Makefile在这个Makefile中其中,变量BITS为32或者64,我们只考虑32位的情况在根Makefile中可以看到vmlinux包含如下内容i386/kernel/head32.S等+init/main.c+init/version.o+COREFILES+DRIVERS+NETWORKS+LIBS陈香兰(xlanchen@ustc.edu.cn)Linux操作系统分析......基于x86的Linux启动代码分析小结和作业..为便于阅读,了解关于命令输出的相关内容..陈香兰(xlanchen@ustc.edu.cn)Linux操作系统分析......基于x86的Linux启动代码分析小结和作业..makeXXX若makeinstall在x86的Makefile中有install规则若makebzImage/zImage等,则要找到对应的目标然后进行bzImage/zImage可在arch/x86的Makefile中找到相应规则其他的zXXX/bzXXX也都依赖于boot下的zImage/bzImage它们最终都找到i386/boot/Makefile陈香兰(xlanchen@ustc.edu.cn)Linux操作系统分析......基于x86的Linux启动代码分析小结和作业..考虑bootbzImageIMakebzImage…在arch/X86/Makefile中z代表压缩;b代表大内核到boot目录下的Makefile观察boot目录和boot下的Makefile观察compressed目录及该目录下的Makefile陈香兰(xlanchen@ustc.edu.cn)Linux操作系统分析......基于x86的Linux启动代码分析小结和作业..考虑bootbzImageII.最后:........在Linux内核源代码顶层目录下生成一个vmlinuxarch/x86/kernel/head32.S+init/main.c+compressed下的vmlinux为compressed/head32.S+压缩后的顶层目录下的vmlinuxboot下的bzImage为boot下header.S等(即setup.bin)+compressed/vmlinux陈香兰(xlanchen@ustc.edu.cn)Linux操作系统分析......基于x86的Linux启动代码分析小结和作业..x86的启动(小结)boot/header.S等compressed/head32.S等kernel/head32.S等init/main.c陈香兰(xlanchen@ustc.edu.cn)Linux操作系统分析......基于x86的Linux启动代码分析小结和作业..I386机器的启动层次...1BIOS(BasicI/OSystem)...2Bootloader软盘启动硬盘启动嵌套bootloader例如:grub、lilo、::::::...3Linuxkernel.Bootloader必须完成内核代码的加载,然后跳转到入口处运行........陈香兰(xlanchen@ustc.edu.cn)Linux操作系统分析......基于x86的Linux启动代码分析小结和作业..BIOSI加电,RESET引脚.CPU加电后,将会初始化程序指针到某个约定好的地址上取指令运行,在这个地指处,往往安排了启动相关的代码,例如BIOS或者reset向量处理入口........初始化寄存器;CS:IP=0xfffffff0,inROMROMBIOSBIOS启动内容POST(上电自检)初始化硬件设备搜索一个操作系统来启动根据配置,操作系统可以在软盘/硬盘/CDROM上把对应设备的第一个扇区的内容(bootloader或部分)拷贝到RAM(0x7c00)处跳转到0x7c00处执行陈香兰(xlanchen@ustc.edu.cn)Linux操作系统分析......基于x86的Linux启动代码分析小结和作业..Bootloader(引导装载程序)BIOS调用Bootloader把操作系统内核映像装载到RAM中考虑IBMPC的启动.软盘启动:........BIOS拷贝第一个扇区的内容(bootsect)到RA

1 / 58
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功