资源预览内容
第1页 / 共24页
第2页 / 共24页
第3页 / 共24页
第4页 / 共24页
第5页 / 共24页
第6页 / 共24页
第7页 / 共24页
第8页 / 共24页
第9页 / 共24页
第10页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
n n教学操作系统 教学操作系统有两大类,一类是针对RISC结构MIPS处理器的,另外一类是针对CISC结构的the Intel IA-32 (or x86)通用处理器的。 这样分类是因为:处理器是操作系统运行的硬件环境中最重要的部分。 第1章 GeekOS教学操作系统概论 一、针对RISC结构MIPS处理器的教学操作系统n nNachosNachos(Not Another Completely Heuristic Not Another Completely Heuristic Operating SystemOperating System)。是建立在软件模拟的虚拟机)。是建立在软件模拟的虚拟机)。是建立在软件模拟的虚拟机)。是建立在软件模拟的虚拟机之上的教学操作系统,采用之上的教学操作系统,采用之上的教学操作系统,采用之上的教学操作系统,采用MIPS R2/3000MIPS R2/3000的指令集,的指令集,的指令集,的指令集,能模拟主存、中断、网络以及磁盘系统等所必须的硬能模拟主存、中断、网络以及磁盘系统等所必须的硬能模拟主存、中断、网络以及磁盘系统等所必须的硬能模拟主存、中断、网络以及磁盘系统等所必须的硬件系统,美国加州大学伯克利分校多次采用该操作系件系统,美国加州大学伯克利分校多次采用该操作系件系统,美国加州大学伯克利分校多次采用该操作系件系统,美国加州大学伯克利分校多次采用该操作系统作为课程设计平台。统作为课程设计平台。统作为课程设计平台。统作为课程设计平台。n nOS/161OS/161是运行在与操作系统无关的是运行在与操作系统无关的是运行在与操作系统无关的是运行在与操作系统无关的system/161system/161模模模模拟器上的,操作系统代码是拟器上的,操作系统代码是拟器上的,操作系统代码是拟器上的,操作系统代码是MIPSMIPS对应的机器代码。对应的机器代码。对应的机器代码。对应的机器代码。n n无论是无论是NachosNachos还是还是OS/161OS/161,若学生使用,若学生使用WindowsWindows或或Linux Linux 开发环境的话,都需要使用交叉编译器才能把开发环境的话,都需要使用交叉编译器才能把代码编译成代码编译成MIPSMIPS相应的机器代码。相应的机器代码。二、针对针对CISC结构的Intel IA-32 (or x86)通用处理器的教学操作系统n nMINIX:是:是Andrew S. Tanenbaum(AST)于)于1987年开发的,年开发的,目前主要有目前主要有1.5 版和版和2.0 版两个版本在使用。版两个版本在使用。MINIX 系统是免费的,可以从许多系统是免费的,可以从许多FTP 上上下载,下载,MINIX是一个包括了虚拟内存管理、是一个包括了虚拟内存管理、文件系统、设备驱动程序、网络和用户态程文件系统、设备驱动程序、网络和用户态程序等的比较完整的操作系统,由两万多行代序等的比较完整的操作系统,由两万多行代码组成。码组成。n n对于教学有点过于庞大和复杂,而且由于它对于教学有点过于庞大和复杂,而且由于它已经实现了操作系统的全部基本功能,没有已经实现了操作系统的全部基本功能,没有留下合适的练习让学生自己完成留下合适的练习让学生自己完成 n nGeekOSGeekOS:是一个基于:是一个基于:是一个基于:是一个基于X86X86架构的架构的架构的架构的PCPC机上运行的机上运行的机上运行的机上运行的微操作系统内核,由美国马理兰大学的教师开发,微操作系统内核,由美国马理兰大学的教师开发,微操作系统内核,由美国马理兰大学的教师开发,微操作系统内核,由美国马理兰大学的教师开发,是一个用是一个用是一个用是一个用C C语言开发的操作系统,语言开发的操作系统,语言开发的操作系统,语言开发的操作系统, GeekOSGeekOS主要用主要用主要用主要用于操作系统课程设计,目的是使学生能够实际动手于操作系统课程设计,目的是使学生能够实际动手于操作系统课程设计,目的是使学生能够实际动手于操作系统课程设计,目的是使学生能够实际动手参与到一个操作系统的开发工作中。参与到一个操作系统的开发工作中。参与到一个操作系统的开发工作中。参与到一个操作系统的开发工作中。学生可以在学生可以在学生可以在学生可以在LinuxLinux或或或或UnixUnix环境下对其进行功能扩充,也可以环境下对其进行功能扩充,也可以环境下对其进行功能扩充,也可以环境下对其进行功能扩充,也可以在在在在windowswindows下使用下使用下使用下使用CygwinCygwin工具进行开发,且其工具进行开发,且其工具进行开发,且其工具进行开发,且其针对进程、文件系统、存储管理等操作系统核心内针对进程、文件系统、存储管理等操作系统核心内针对进程、文件系统、存储管理等操作系统核心内针对进程、文件系统、存储管理等操作系统核心内容分别设计了容分别设计了容分别设计了容分别设计了7 7个难度逐渐增加的项目供教师选择个难度逐渐增加的项目供教师选择个难度逐渐增加的项目供教师选择个难度逐渐增加的项目供教师选择 。n n出于教学目的,这个系统内核设计简单,却又兼备出于教学目的,这个系统内核设计简单,却又兼备出于教学目的,这个系统内核设计简单,却又兼备出于教学目的,这个系统内核设计简单,却又兼备实用性,它可以运行在真正的实用性,它可以运行在真正的实用性,它可以运行在真正的实用性,它可以运行在真正的X86 PCX86 PC硬件平台。硬件平台。硬件平台。硬件平台。 三、三、GeekOS系统源代码结构系统源代码结构 n nGeekOS操作系统源文件操作系统源文件geekos-0.3.0.zipgeekos-0.3.0.zip可可以从以从http:/geekos.sourceforge.net下载。下载。 1.GeekOS系统源代码结构系统源代码结构 2、GeekOS的设计项目的设计项目 项目项目项目项目0 0:项目:项目:项目:项目0 0要求实现一个内核进程,功能是实现要求实现一个内核进程,功能是实现要求实现一个内核进程,功能是实现要求实现一个内核进程,功能是实现从键盘接收一个按键,并在屏幕上显示。主要是让学从键盘接收一个按键,并在屏幕上显示。主要是让学从键盘接收一个按键,并在屏幕上显示。主要是让学从键盘接收一个按键,并在屏幕上显示。主要是让学生熟悉生熟悉生熟悉生熟悉GeekOSGeekOS的编译、运行过程,了解计算机系统的编译、运行过程,了解计算机系统的编译、运行过程,了解计算机系统的编译、运行过程,了解计算机系统的启动原理。的启动原理。的启动原理。的启动原理。项目项目项目项目1 1:项目要求学生熟悉:项目要求学生熟悉:项目要求学生熟悉:项目要求学生熟悉ELFELF文件格式,并编写代文件格式,并编写代文件格式,并编写代文件格式,并编写代码对码对码对码对ELFELF文件进行分析,并将分析传送给加载器。主文件进行分析,并将分析传送给加载器。主文件进行分析,并将分析传送给加载器。主文件进行分析,并将分析传送给加载器。主要让学生熟悉可执行链接文件(要让学生熟悉可执行链接文件(要让学生熟悉可执行链接文件(要让学生熟悉可执行链接文件(ELFELF文件)的结构,文件)的结构,文件)的结构,文件)的结构,并学会加载和运行可执行文件。并学会加载和运行可执行文件。并学会加载和运行可执行文件。并学会加载和运行可执行文件。项目项目项目项目2 2:要求学生实现对用户态进程的支持。在项目:要求学生实现对用户态进程的支持。在项目:要求学生实现对用户态进程的支持。在项目:要求学生实现对用户态进程的支持。在项目2 2实现之前,实现之前,实现之前,实现之前,GeekOSGeekOS一直使用内核进程。对用户态进一直使用内核进程。对用户态进一直使用内核进程。对用户态进一直使用内核进程。对用户态进程执行的支持包括用户态进程结构的初始化、用户进程执行的支持包括用户态进程结构的初始化、用户进程执行的支持包括用户态进程结构的初始化、用户进程执行的支持包括用户态进程结构的初始化、用户进程空间的初始化、用户进程切换和用户程序导入等。程空间的初始化、用户进程切换和用户程序导入等。程空间的初始化、用户进程切换和用户程序导入等。程空间的初始化、用户进程切换和用户程序导入等。该项目中,存储分配依然使用分段分配方式。实现项该项目中,存储分配依然使用分段分配方式。实现项该项目中,存储分配依然使用分段分配方式。实现项该项目中,存储分配依然使用分段分配方式。实现项目目目目2 2后,用户就可以使用后,用户就可以使用后,用户就可以使用后,用户就可以使用GeekOSGeekOS提供的命令行解释器提供的命令行解释器提供的命令行解释器提供的命令行解释器ShellShell运行一些命令来执行运行一些命令来执行运行一些命令来执行运行一些命令来执行PFATPFAT文件系统内的用户测文件系统内的用户测文件系统内的用户测文件系统内的用户测试程序。试程序。试程序。试程序。项目项目项目项目3 3:要求学生改进:要求学生改进:要求学生改进:要求学生改进GeekOSGeekOS的调度程序,实现基于的调度程序,实现基于的调度程序,实现基于的调度程序,实现基于4 4级反馈队列的调度算法(初始级反馈队列的调度算法(初始级反馈队列的调度算法(初始级反馈队列的调度算法(初始GeekOSGeekOS系统仅提供了系统仅提供了系统仅提供了系统仅提供了FIFOFIFO进程调度算法),并实现信号量,支持进程间通进程调度算法),并实现信号量,支持进程间通进程调度算法),并实现信号量,支持进程间通进程调度算法),并实现信号量,支持进程间通信。信。信。信。GeekOS的设计项目的设计项目 项目项目项目项目4 4:要求学生实现分页虚存管理,以替代在项目:要求学生实现分页虚存管理,以替代在项目:要求学生实现分页虚存管理,以替代在项目:要求学生实现分页虚存管理,以替代在项目1 1和和和和项目项目项目项目2 2中采用的分段存储管理。实现分页虚存管理后。系中采用的分段存储管理。实现分页虚存管理后。系中采用的分段存储管理。实现分页虚存管理后。系中采用的分段存储管理。实现分页虚存管理后。系统在内存不够的情况下就可以将部分页调到硬盘,以释放统在内存不够的情况下就可以将部分页调到硬盘,以释放统在内存不够的情况下就可以将部分页调到硬盘,以释放统在内存不够的情况下就可以将部分页调到硬盘,以释放内存实现虚拟存储技术。内存实现虚拟存储技术。内存实现虚拟存储技术。内存实现虚拟存储技术。项目项目项目项目5 5:要求实现:要求实现:要求实现:要求实现GOSFSGOSFS文件系统。由于文件系统。由于文件系统。由于文件系统。由于GeekOSGeekOS使用了使用了使用了使用了虚拟文件系统,可以加载不同的文件系统,而系统默认加虚拟文件系统,可以加载不同的文件系统,而系统默认加虚拟文件系统,可以加载不同的文件系统,而系统默认加虚拟文件系统,可以加载不同的文件系统,而系统默认加载的是载的是载的是载的是PFATPFAT只读文件系统。在这个项目中,需要实现一只读文件系统。在这个项目中,需要实现一只读文件系统。在这个项目中,需要实现一只读文件系统。在这个项目中,需要实现一个多极目录的、可读写的文件系统。个多极目录的、可读写的文件系统。个多极目录的、可读写的文件系统。个多极目录的、可读写的文件系统。项目项目项目项目6 6:要求为文件系统增加访问控制列表,并使用匿名:要求为文件系统增加访问控制列表,并使用匿名:要求为文件系统增加访问控制列表,并使用匿名:要求为文件系统增加访问控制列表,并使用匿名半双工管道实现进程间通信。半双工管道实现进程间通信。半双工管道实现进程间通信。半双工管道实现进程间通信。GeekOS的设计项目的设计项目一、一、GeekOS系统开发调试环境系统开发调试环境n n在在WindowsWindows下使用下使用CygwinCygwin模拟模拟LinuxLinux的开发环境;的开发环境;n n在在PCPC机上直接安装机上直接安装LinuxLinux进行开发调试;进行开发调试;n n在虚拟机上安装在虚拟机上安装LinuxLinux进行开发调试进行开发调试 ; 建议使用后两种环境进行项目开发,会减少许多建议使用后两种环境进行项目开发,会减少许多不必要的困难,不必要的困难, LinuxLinux最好使用最好使用red hat 9.0red hat 9.0版本。版本。第2章 课程设计环境 Bochs/GeekOSGeekOS编译环境计算机硬件Windows操作系统VMware (硬件模拟器)Linux操作系统GeekOS计算机硬件Windows操作系统BOCHS(硬件模拟器)GeekOSGeekOS运行环境计算机硬件Linux操作系统BOCHS(硬件模拟器)GeekOS计算机硬件Linux操作系统GeekOS 二、二、GeekOS开发的工具软件开发的工具软件 n nGNU gccGNU gcc编译器:用来编译编译器:用来编译编译器:用来编译编译器:用来编译C C语言程序代码语言程序代码语言程序代码语言程序代码n nNASMNASM汇编器:用来编译汇编语言程序代码汇编器:用来编译汇编语言程序代码汇编器:用来编译汇编语言程序代码汇编器:用来编译汇编语言程序代码n nGNU gdbGNU gdb调试器:用来查找程序代码错误调试器:用来查找程序代码错误调试器:用来查找程序代码错误调试器:用来查找程序代码错误n nBochs PCBochs PC模拟器:用来运行模拟器:用来运行模拟器:用来运行模拟器:用来运行GeekOSGeekOS系统系统系统系统n nSource InsightSource Insight : : 程序编辑器和代码浏览器程序编辑器和代码浏览器程序编辑器和代码浏览器程序编辑器和代码浏览器( (下载源码就到下载源码就到源码网源码网源码网源码网: :www.codepub.comwww.codepub.com) n nGeekOS运行于Windows(或Linux)下的Bochs PC模拟器,Bochs 是用 C+ 开发的可移植的 IA-32 (x86) PC 模拟器,它包括对 Intel x86 CPU 、通用 I/O 设备和可定制的 BIOS 的模拟,几乎可以运行在所有流行的平台上。目前, Bochs 可以模拟 386, 486, Pentium Pro 或者 AMD64 CPU 。Bochs 的模拟环境中也可以运行大部分的操作系统,包括 Linux, Windows 95, DOS, Windows NT 4, FreeBSD, MINIX 等。 Bochs 由 Kevin Lawton 创建,此项目当前仍由他维护。 三、Bochs PC 模拟器模拟器 1、Bochs安装和使用安装和使用n nbochs有Linux和Windows等不同环境的软件安装包,用户根据操作系统平台下载相应的版本。如果用户选择在Cygwin中开发调试则选择Windows版本下载。在Windows系统下安装Bochs非常简单,直接运行安装软件,按提示操作就可完成。在Linux系统中需先解压软件包,然后再配置编译生成系统文件。n n推荐使用的Bochs 版本是2.0以上,版本2.1.1可以很好的运行GeekOS。n n为了模拟一台计算机执行一个操作系统软件,bochs需要几个文件来代替PC机硬件的不同部分:n nbochsbochs模拟器程序本身模拟器程序本身n nBIOS-bochs-lastestBIOS-bochs-lastest模拟模拟bochsbochs硬件的硬件的BIOSBIOS。n nVGABIOS-lgpl-lastestVGABIOS-lgpl-lastest模拟模拟bochsbochs显示系统的显示系统的BIOSBIOS。n nbochsrc.txtbochsrc.txt描述模拟器硬件配置的配置文件。描述模拟器硬件配置的配置文件。n ndisk image(.img)disk image(.img)包含了一个模拟器能引导的操包含了一个模拟器能引导的操作系统镜像作系统镜像 2、 Bochs系统文件系统文件3、在、在Bochs运行运行GeekOS n n开始一个开始一个开始一个开始一个GeekOSGeekOS项目,添加相应的代码项目,添加相应的代码项目,添加相应的代码项目,添加相应的代码 。n n利用利用makemake命令编译系统,生成镜像命令编译系统,生成镜像fd.imgfd.img 。n n$ cd $ cd /project0/build/project0/buildn n$ make depend$ make dependn n$ make$ make n n编写相应的编写相应的BochsBochs的配置文件。的配置文件。的配置文件。的配置文件。n n运行运行BochsBochs模拟器,执行模拟器,执行模拟器,执行模拟器,执行GeekOSGeekOS。n n$ cd $ cd /bochs/bochsn n$ bochs$ bochsn n运行后,屏幕上会有一些提示。运行运行后,屏幕上会有一些提示。运行运行后,屏幕上会有一些提示。运行运行后,屏幕上会有一些提示。运行GeekOSGeekOS选择选择选择选择Begin Begin simulationsimulation,如果,如果,如果,如果GeekOS GeekOS 编译成功,并且编译成功,并且编译成功,并且编译成功,并且bochsbochs的配置的配置的配置的配置也没问题,将会看到一个模拟也没问题,将会看到一个模拟也没问题,将会看到一个模拟也没问题,将会看到一个模拟VGAVGA的文本窗口,的文本窗口,的文本窗口,的文本窗口,GeekosGeekos就就就就能运行程序输出相应信息能运行程序输出相应信息能运行程序输出相应信息能运行程序输出相应信息 运行运行GeekOS的Bochs配置文件举例配置文件举例vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latestvgaromimage: file=$BXSHARE/VGABIOS-lgpl-latestromimage: file=$BXSHARE/BIOS-bochs-latest, address=0xf0000romimage: file=$BXSHARE/BIOS-bochs-latest, address=0xf0000megs: 8megs: 8boot: aboot: aata0:enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14ata0:enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14ata0-master:type=disk,mode=flat,path=diskc.img,cylinders=40,heads=8,spt=64ata0-master:type=disk,mode=flat,path=diskc.img,cylinders=40,heads=8,spt=64floppya: 1_44=fd.img, status=insertedfloppya: 1_44=fd.img, status=inserted#floppya: 1_44=fd_aug.img, status=inserted#floppya: 1_44=fd_aug.img, status=insertedlog: ./bochs.outlog: ./bochs.outkeyboard_serial_delay: 200keyboard_serial_delay: 200floppy_command_delay: 500floppy_command_delay: 500vga_update_interval: 300000vga_update_interval: 300000ips: 1000000ips: 1000000mouse: enabled=0mouse: enabled=0private_colormap: enabled=0private_colormap: enabled=0i440fxsupport: enabled=0i440fxsupport: enabled=0一、make工具简介n n无论是在无论是在LinuxLinux还是在还是在UNIXUNIX环境中,环境中,makemake都是一都是一个非常重要的系统开发工具。利用个非常重要的系统开发工具。利用makemake工具,可工具,可以将大型的开发项目分解成为多个更易于管理的以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,模块,对于一个包括几百个源文件的应用程序,使用使用makemake和和makefilemakefile工具就可以简洁明快地理顺工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系。各个源文件之间纷繁复杂的相互关系。 makemake能能够按照规则自动完成编译工作,并且可以只对程够按照规则自动完成编译工作,并且可以只对程序员在上次编译后修改过的文件进行编译,减少序员在上次编译后修改过的文件进行编译,减少重复编译的工作量。重复编译的工作量。 它就是字符操作方式下的项它就是字符操作方式下的项目管理工具。目管理工具。第3章 make工具 makefile文件内容文件内容 nMake文件包含五方面的内容,即具体规则、隐含规则、宏定义、指令和注释。下面分别对它们进行说明:u具体规则:用于阐述什么时间或怎样重新生成称为规则目标的一个或多个文件。u隐含规则:用于阐述什么时间或怎样重新生成同一个文件名的一系列文件。u宏宏定义:为一个宏赋一个固定的字符串值,从而在以后的文件中能够用该宏代替这个字符串。u指令:make根据makefile文件执行一定任务的命令。 (1)读其它makefile文件(如果包括)。(2)根据变量的值判定是否使用或忽略makefile文件的部分内容。(3)定义多行变量,即定义变量值可以包含多行字符的变量。u以“”开始的行是注释行,注释行在处理时将被make命令忽略, makefile规则规则 n n targets . : dependencys . targets . : dependencys . command command . . . . n ntargetstargets是一个目标文件或一组目标文件,可以是中间目是一个目标文件或一组目标文件,可以是中间目是一个目标文件或一组目标文件,可以是中间目是一个目标文件或一组目标文件,可以是中间目标文件,也可以是执行文件。还可以是一个标签标文件,也可以是执行文件。还可以是一个标签标文件,也可以是执行文件。还可以是一个标签标文件,也可以是执行文件。还可以是一个标签(LabelLabel),对于标签这种特性,在下面会有解释。),对于标签这种特性,在下面会有解释。),对于标签这种特性,在下面会有解释。),对于标签这种特性,在下面会有解释。 n ndependencysdependencys就是用来说明要生成对应就是用来说明要生成对应就是用来说明要生成对应就是用来说明要生成对应targetstargets所需要所需要所需要所需要的文件或是目标,即由哪些源文件来生成的文件或是目标,即由哪些源文件来生成的文件或是目标,即由哪些源文件来生成的文件或是目标,即由哪些源文件来生成targetstargets。n ncommandcommand就是就是就是就是makemake需要执行的命令(任意的需要执行的命令(任意的需要执行的命令(任意的需要执行的命令(任意的ShellShell命命命命令),每一个命令必须以令),每一个命令必须以令),每一个命令必须以令),每一个命令必须以TabTab键开始,不能用空格符号替键开始,不能用空格符号替键开始,不能用空格符号替键开始,不能用空格符号替代。它是用来说明如何生成代。它是用来说明如何生成代。它是用来说明如何生成代。它是用来说明如何生成targetstargets。 每一次执行每一次执行每一次执行每一次执行makemake命令时,如果命令时,如果命令时,如果命令时,如果dependencysdependencys中有一个中有一个中有一个中有一个以上的文件比以上的文件比以上的文件比以上的文件比targettarget文件要新的话,文件要新的话,文件要新的话,文件要新的话,commandcommand所定义的命所定义的命所定义的命所定义的命令就会被系统执行,否则表示目标文件原来已经生成,并且令就会被系统执行,否则表示目标文件原来已经生成,并且令就会被系统执行,否则表示目标文件原来已经生成,并且令就会被系统执行,否则表示目标文件原来已经生成,并且是最新的,是最新的,是最新的,是最新的,commandcommand命令不再执行。命令不再执行。命令不再执行。命令不再执行。 Makefile文件示例文件示例 edit : main.o kbd.o cc -o edit main.o kbd.o main.o : main.c defs.h cc -c main.c kbd.o : kbd.c defs.h command.h cc -c kbd.c clean : rm edit main.o kbd.omake工作原理工作原理 在默认的方式下,只要输入在默认的方式下,只要输入makemake命令就可以工作。具体的处理命令就可以工作。具体的处理过程如下:过程如下:(1)make(1)make会在当前目录下找文件名为会在当前目录下找文件名为“ “MakefileMakefile” ”或或“ “makefilemakefile” ”的文件。的文件。 (2)(2)如果找到,它会找文件中的第一个目标文件(如果找到,它会找文件中的第一个目标文件(targettarget),在上),在上面的例子中,它会找到面的例子中,它会找到“ “editedit” ”这个文件,并把这个文件作为这个文件,并把这个文件作为最终的目标文件。最终的目标文件。 (3)(3)如果如果editedit文件不存在,或是文件不存在,或是editedit所依赖的后面的所依赖的后面的.o.o文件的修改文件的修改时间要比时间要比editedit这个文件新,那么,就会执行后面所定义的命令这个文件新,那么,就会执行后面所定义的命令来生成来生成editedit这个文件。这个文件。 (4)(4)如果如果editedit所依赖的所依赖的.o.o文件也不存在,那么文件也不存在,那么makemake会在当前文件中会在当前文件中找目标为找目标为.o.o文件的依赖性,如果找到则再根据那一个规则生成文件的依赖性,如果找到则再根据那一个规则生成.o.o文件(这有点像一个堆栈的过程)。文件(这有点像一个堆栈的过程)。 (5)(5)如果指定的如果指定的C C文件和文件和H H文件是存在的,文件是存在的, makemake会生成会生成.o.o文件,然文件,然后再用后再用.o.o文件生成文件生成makemake的最终任务,也就是链接生成执行文件的最终任务,也就是链接生成执行文件editedit。 n n在GeekOS中, makefile文件具体功能文件具体功能如下:n n指定指定GeekOSGeekOS如何被编译,哪些源文件被编译,如何被编译,哪些源文件被编译,哪些用户程序被编译等等。通常不同项目的编译哪些用户程序被编译等等。通常不同项目的编译仅仅需要修改这一部分。仅仅需要修改这一部分。n n定义了编译定义了编译GeekOSGeekOS要用到的工具程序。要用到的工具程序。n n指定规则:描述系统如何编译源程序。指定规则:描述系统如何编译源程序。n n指定系统编译生成的指定文件指定系统编译生成的指定文件 。( (下载源码就到下载源码就到源码网源码网源码网源码网: :www.codepub.comwww.codepub.com) GeekOS的的makefile文件功能文件功能 GeekOS项目开发流程项目开发流程 n n开始一个开始一个开始一个开始一个GeekOSGeekOS项目,首先添加相应的代码项目,首先添加相应的代码项目,首先添加相应的代码项目,首先添加相应的代码 。n n在在LinuxLinux下利用下利用makemake命令编译系统,生成命令编译系统,生成系统镜像文件系统镜像文件系统镜像文件系统镜像文件。n n$ cd $ cd /project0/build/project0/buildn n$ make depend$ make dependn n$ make$ make n n编写每个项目相应的编写每个项目相应的BochsBochs的配置文件。的配置文件。的配置文件。的配置文件。n n运行运行BochsBochs模拟器,执行模拟器,执行模拟器,执行模拟器,执行GeekOSGeekOS内核。内核。n n$ cd $ cd /bochs/bochsn n$ bochs$ bochsn n运行后,屏幕上会有一些提示。运行运行后,屏幕上会有一些提示。运行运行后,屏幕上会有一些提示。运行运行后,屏幕上会有一些提示。运行GeekOSGeekOS选择选择选择选择Begin Begin simulationsimulation,如果,如果,如果,如果GeekOS GeekOS 编译成功,并且编译成功,并且编译成功,并且编译成功,并且bochsbochs的配置也的配置也的配置也的配置也没问题,将会看到一个模拟没问题,将会看到一个模拟没问题,将会看到一个模拟没问题,将会看到一个模拟VGAVGA的文本窗口,的文本窗口,的文本窗口,的文本窗口,GeekosGeekos就能运就能运就能运就能运行程序输出相应信息行程序输出相应信息行程序输出相应信息行程序输出相应信息 (每个环境具体运行的命令格式会有一些不同)(每个环境具体运行的命令格式会有一些不同)(每个环境具体运行的命令格式会有一些不同)(每个环境具体运行的命令格式会有一些不同)
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号