Linux启动过程分析及DNS服务器毕业设计.docx

上传人:b****8 文档编号:29370473 上传时间:2023-07-22 格式:DOCX 页数:13 大小:24.58KB
下载 相关 举报
Linux启动过程分析及DNS服务器毕业设计.docx_第1页
第1页 / 共13页
Linux启动过程分析及DNS服务器毕业设计.docx_第2页
第2页 / 共13页
Linux启动过程分析及DNS服务器毕业设计.docx_第3页
第3页 / 共13页
Linux启动过程分析及DNS服务器毕业设计.docx_第4页
第4页 / 共13页
Linux启动过程分析及DNS服务器毕业设计.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

Linux启动过程分析及DNS服务器毕业设计.docx

《Linux启动过程分析及DNS服务器毕业设计.docx》由会员分享,可在线阅读,更多相关《Linux启动过程分析及DNS服务器毕业设计.docx(13页珍藏版)》请在冰豆网上搜索。

Linux启动过程分析及DNS服务器毕业设计.docx

Linux启动过程分析及DNS服务器毕业设计

长沙师范学校

 

电子信息工程系计算机应用(嵌入式)专业09级

毕业论文(设计)

 

题目:

Linux启动过程分析及DNS服务器

 

指导教师(签名)

2011年10月13日

 

引言

Linux最初是由瑞典赫尔辛基大学的学生LinusTorvalds在1991年开发出来的,之后在GNU的支持下,Linux获得了巨大的发展。

1个嵌入式Linux系统从软件角度看可以分为4个部分:

引导加载程序bootloader),Linux内核,文件系统,应用程序。

其中bootloader是系统启动或复位以后执行的第1段代码,它主要用来初始化处理器及外设,然后调用Linux内核。

Linux内核在完成系统的初始化之后需要挂载某个文件系统做为根文件系统(RootFilesystem)。

根文件系统是Linux系统的核心组成部分,它可以做为Linux系统中文件和数据的存储区域。

应用程序可以说是嵌入式系统的“灵魂”,它所实现的功能通常就是设计该嵌入式系统所要达到的目标。

如果没有应用程序的支持,任何硬件上设计精良的嵌入式系统都没有实用意义。

从以上分析我们可以看出bootloader和Linux内核在嵌入式系统中的关系和作用。

bootloader在运行过程中虽然具有初始化系统和执行用户输入的命令等作用,但它最根本的功能就是为了启动Linux内核。

在嵌入式系统开发的过程中,很大1部分精力都是花在bootloader和Linux内核的开发或移植上。

如果能清楚的了解bootloader执行流程和Linux的启动过程,将有助于明确开发过程中所需的工作,从而加速嵌入式系统的开发过程。

而这正是本文的所要研究的内容。

目录

第一章绪论3

1.1Linux操作系统3

1.1.1Linux操作系统的历史3

1.1.2Linux操作系统的特点4

1.1.3嵌入式LINUX的应用5

2.1Linux的安装5

第二章Bootloader7

2.1Bootloader的概念和作用7

2.2Bootloader的执行过程8

2.3bootloader必须具备的功能8

第三章Linux内核的启动过程10

3.1Linux内核入口10

3.2start_kernel函数11

3.3结论11

第四章Shell12

4.1Shell12

4.2常用Shell命令14

第五章总结19

第一章绪论

1.1Linux操作系统

1.1.1Linux操作系统的历史

Linux操作系统刚开始时并没有被称作Linux,Linus给他的操作系统取名为FREAX,其英文含义是怪诞的、怪物、异想天开等意思。

在他将新的操作系统上载到ftp,funet。

fi服务器上时,管理员AriLemke很不喜欢这个名称。

他认为既然是Linus的操作系统就取其谐音Linux作为该操作系统的目录吧,于是Linux这个名称就开始流传下来。

在Linus的自传《JustforFun》一书中,Linus解释说:

"坦白地说,我从来没有想到过要用Linux这个名称发布这个操作系统,因为这个名字有些太自负了。

而我为最终发布版准备的是什么名字呢Freax。

实际上内核代码中某些早期的Makefile-用于描述如何编译源代码的文件-文件中就已经包含有"Freax"这个名字了,大约存在了半年左右。

但其实这也没什么关系,在当时还不需要一个名字,因为我还没有向任何人发布过内核代码。

而AriLemke,他坚持要用自己的方式将内核代码放到ftp站点上,并且非常不喜欢Freax这个名字。

他坚持要用现在这个名字(Linux),我承认当时我并没有跟他多争论。

但这都是他取的名字。

所以我可以光明正大地说我并不自负,或者部分坦白地说我并没有本位主义思想。

但我想好吧,这也是个好名字,而且以后为这事我总能说服别人,就像我现在做的这样。

"

1.1.2Linux操作系统的特点

嵌入式LINUX操作系统的概念

以应用为中心,以计算机技术为基础,软件、硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗要求严格的专用计算机系统,称为嵌入式系统。

一个最小的嵌入式系统的基本组成为:

①一个用作引导的可用设施(工具);②一个具备内存管理,进程管理和定时器服务的LINUX微内核;③一个初始进程;④硬件的驱动程序;⑤一个或几个应用进程以提供必要的应用功效。

1.1.3嵌入式LINUX的应用

嵌入式系统的涵盖面是非常广泛的,其中,家电市场包括机顶盒、数字电视、可视电话、家庭网络等信息家电;工业市场包括工业控制设备、仪器;商用市场包括掌上电脑、瘦客户机、POS终端等;通信市场包括WAP手机、无线PDA等。

目前被广泛看好的是信息家电市场,国内有很多开发厂商正加大投入、开发和研制新的产品,嵌入式LINUX将是他们首选的操作系统。

2.1Linux的安装

安装Linux有二种方式:

硬盘直接安装和虚拟机安装。

一、硬盘直接安装

把硬盘中的一部分空间开辟出来,专门用来安装Linux,通过制作一个双启动菜单,在开机时由用户选择进入Windows系统或者Linux系统。

二、虚拟机安装

在Windows系统中安装一个专门的“虚拟机”软件,这个软件负责在Windows系统之上运行另一个操作系统,可以是另一个Windows,或者是Linux等任何操作系统。

常用的虚拟机软件有VMware和VirtualPC,运行时相当于生成了一台没有安装任何软件的“祼机”,这台“祼机”可以看作是一台独立的、功能完全的计算机,成为虚拟机,它与安装“虚拟机”软件的计算机没有任何耦合关系,运行虚拟机的真实的PC称为宿主机,甚至能够把虚拟机和宿主机搭建成一个网络。

通常,可以利用“虚拟机”软件来安装体验新的操作系统,面对原有的Windows系统没有任何影响,当不需要这个虚拟机时,只要从硬盘上把虚拟机的镜像文件删掉即可。

安装好VMware软件后,首先要建立一个新的虚拟机,为这个新的虚拟机指定将来要安装的操作系统、规划内存和硬盘容量、设置网络连接方式、指定虚拟机文件的存放路径等,其中比较重要的是VMware网络配置,共4种方式。

如果用户拥有多个IP,适合选择侨接方式,给虚拟机分配一个对立的IP,此虚拟机就相当于网络上的一台独立计算机,与宿主机在网络上的物理地位相同;如果只有一个IP可用,则可选择网络地址转换(NetworkAddressTranslation,NAT)方式,虚拟机和宿主机共用一个IP;Hostonly方式可以使虚拟机和宿主机二者构成一个网络,实现数据传输;custom方式不大常用,在此不作介绍。

虚拟机软件配置完成后,可以接着利用物理光驱或者光盘镜像为这个虚拟机安装一个Linux操作系统。

第二章Bootloader

2.1Bootloader的概念和作用

Bootloader是嵌入式系统的引导加载程序,它是系统上电后运行的第一段程序,其作用类似于PC机上的BIOS。

在完成对系统的初始化任务之后,它会将非易失性存储器(通常是Flash或DOC等)中的Linux内核拷贝到RAM中去,然后跳转到内核的第一条指令处继续执行,从而启动Linux内核。

由此可见,bootloader和Linux内核有着密不可分的联系,要想清楚的了解Linux内核的启动过程,我们必须先得认识bootloader的执行过程,这样才能对嵌入式系统的整个启过程有清晰的掌握。

2.2Bootloader的执行过程

不同的处理器上电或复位后执行的第一条指令地址并不相同,对通常把Flash等非易失性存储器映射到这个地址处,而bootloader就位于该存储器的最前端,所以系统上电或复位后执行的第一段程序便是bootloader。

而因为存储bootloader的存储器不同,bootloader的执行过程也并不相同。

2.3bootloader必须具备的功能

1)初始化RAM

因为Linux内核一般都会在RAM中运行,所以在调用Linux内核之前bootloader必须设置和初始化RAM,为调用Linux内核做好准备。

初始化RAM的任务包括设置CPU的控制寄存器参数,以便能正常使用RAM以及检测RAM大小等。

2)初始化串口串口在Linux的启动过程中有着非常重要的作用,它是Linux内核和用户交互的方式之一。

Linux在启动过程中可以将信息通过串口输出,这样便可清楚的了解Linux的启动过程。

虽然它并不是bootloader必须要完成的工作,但是通过串口输出信息是调试bootloader和Linux内核的强有力的工具,所以一般的bootloader都会在执行过程中初始化一个串口做为调试端口。

3)检测处理器类型

Bootloader在调用Linux内核前必须检测系统的处理器类型,并将其保存到某个常量中提供给Linux内核。

Linux内核在启动过程中会根据该处理器类型调用相应的初始化程序。

4)设置Linux启动参数

Bootloader在执行过程中必须设置和初始化Linux的内核启动参数。

目前传递启动参数主要采用两种方式:

即通过structparam_struct和structtag(标记列表,taggedlist)两种结构传递。

5)调用Linux内核映像

Bootloader完成的最后一项工作便是调用Linux内核。

如果Linux内核存放在Flash中,并且可直接在上面运行(这里的Flash指NorFlash),那么可直接跳转到内核中去执行。

但由于在Flash中执行代码会有种种限制,而且速度也远不及RAM快,所以一般的嵌入式系统都是将Linux内核拷贝到RAM中,然后跳转到RAM中去执行。

不论哪种情况,在跳到Linux内核执行之前CUP的寄存器必须满足以下条件:

r0=0,r1=处理器类型,r2=标记列表在RAM中的地址。

第三章Linux内核的启动过程

3.1Linux内核入口

Linux非压缩内核的入口位于文件/arch/arm/kernel/head-armv.S中的stext段。

该段的基地址就是压缩内核解压后的跳转地址。

如果系统中加载的内核是非压缩的Image,那么bootloader将内核从Flash中拷贝到RAM后将直接跳到该地址处,从而启动Linux内核。

不同体系结构的Linux系统的入口文件是不同的,而且因为该文件与具体体系结构有关,所以一般均用汇编语言编写[3]。

对基于ARM处理的Linux系统来说,该文件就是head-armv.S。

该程序通过查找处理器内核类型和处理器类型调用相应的初始化函数,再建立页表,最后跳转到start_kernel()函数开始内核的初始化工作。

3.2start_kernel函数

start_kernel是所有Linux平台进入系统内核初始化后的入口函数,它主要完成剩余的与硬件平台相关的初始化工作,在进行一系列与内核相关的初始化后,调用第一个用户进程-init进程并等待用户进程的执行,这样整个Linux内核便启动完毕。

3.3结论

Linux内核是一个非常庞大的工程,经过十多年的发展,它已从从最初的几百KB大小发展到现在的几百兆。

清晰的了解它执行的每一个过程是件非常困难的事。

但是在嵌入式开发过程中,我们并不需要十分清楚linux的内部工作机制,只要适当修改linux内核中那些与硬件相关的部分,就可以将linux移植到其它目标平台上。

通过对linux的启动过程的分析,我们可以看出哪些是和硬件相关的,哪些是linux内核内部已实现的功能,这样在移植linux的过程中便有所针对。

而linux内核的分层设计将使linux的移植变得更加容易。

第四章Shell

4.1Shell

Linux提供给用户使用的命令行界面称为shell,它是用C语言编写的一个程序,给用户管理和使用系统提供了一个接口和桥梁。

控制台输入的命令都由shell负责解释,然后调用特定的程序来完成相关操作,shell看起来很像它的英文解释那样,是一个“壳”,包裹着Linux的内核,是联系Linux系统与用户的界面,功能类似于DOS操作系统中的commandcom,但是功能比后者强大得多。

下面介绍shell的几个功能。

1.输入输出重定向及管道

重定向的功能同DOS的重定向功能:

“>”表示重定向输出,“<”表示重定向输入。

而管道符号,是Linux功能强大的一个体现,符号为一条竖线:

“|”,用法为:

Command1|Command2

它的功能是第一个命令command1执行的结果作为command2的输入传给command2,例如:

#ls|more

该命令列出当前目录中的所有文件,并把输出送给more命令作为输入,more命令会分屏显示ls的输出结果。

2.后台执行命令

执行shell命令时,如果在命令后加一个“&”符号,则回车后立刻返回到命令提示符状态下,而命令会在后台执行。

3.命令补全功能

当输入目录名、命令名、文件名时,可以只输入前几个字母,然后按Tab键,如果关几个字母已经能完全标识出相应目标,则shell会补全这个目标的全名,如果仅凭这几个字母还不够,那么shell会列出头字母相匹配的所有目标名供用户选择。

4.环境变量

Shell还提供了一些环境变量,这些变量无须赋值就可以直接使用。

如下表所示。

HOME

用户主目录

PATH

系统路径

TERM

终端类型

UID

用户ID

PWD

当前目录

PS1

主提示符

PS2

辅助提示符

5.脚本功能

除了提供控制命令之外,shell支持编程,即编写shell脚本程序,它是Linux命令的组合,包括类似C语言的条件,循环等程序控制语句等,类似DOS批处理,但功能要强大得多。

用户可以通过shell编程完成特定的工作。

4.2常用Shell命令

1.基本命令

(1)shutdown:

关闭所有程序,根据用户指令关机或者重新启动。

(2)halt:

关机命令。

(3)reboot:

重新启动系统。

(4)logout:

使用户退出系统,相当于Ctrl+D组合键。

(5)man:

提供有关命令的帮助信息,选项为要查询文件名。

2.文件处理命令

(1)cat:

显示文本文件内容。

(2)head:

输出文件的开始部分。

(3)tail:

输出文件的结尾部分。

(4)more:

分屏显示文件内容,显示内容不可向上翻页。

(5)less:

分屏显示文件内容,显示内容可向上翻页。

(6)patch:

把一个目录下的源码文件更新到新的版本。

(7)source:

读取Linux命令组成的文本文件。

(8)mkfifo:

建立管道文件命令。

(9)nm:

列出二进制文件或目标文件中所有的符号。

(10)wc:

输出文件中字节数、单词数、行数。

(11)bc:

计算器命令。

(12)which:

文件定位命令。

(13)ldd:

列出程序运行所需要的共享库。

(14)file:

显示文件属性命令。

3.文件目录操作命令

(1)ls:

显示。

-l选项显示文件的详细信息,-a选项显示所有文件,包括隐含文件。

(2)pwd:

显示当前路径的完整名称。

(3)目录切换。

(4)mkdir:

目录创建命令。

(5)rmdir:

目录删除命令。

(6)mv:

文件改名命令。

(7)cp:

文件复制命令。

(8)rm:

文件删除命令。

(9)ln:

建立连接命令。

(10)touch:

创建空间文件命令。

(11)chown:

修改文件的属主。

(12)umask:

设置新建文件的默认属性。

(13)chmod:

修改文件的权限。

(14)find:

文件搜索命令。

(15)grep:

在文件中查找指定内容。

(16)sort:

交逐行对文件中的内容进行排序。

(17)alias:

为命令指定一个别名。

4.进程作业控制命令

(1)ps:

显示当前系统中运行的进程。

(2)pstree:

以进程树的形式显示系统中运行的进程。

(3)top:

显示系统中进程的动态信息。

(4)fg:

将后台的作业调制前台继续运行。

(5)bg:

另一个暂停的后台作业继续运行。

(6)jobs:

查看系统当前作业。

(7)kill:

发送特定信号给某进程。

5.网络命令

(1)ping:

基于ICMP协议,向远端主机发送一个数据包,如果到达远端主机的网络没有问题,就会在指害时间间隔内返回数据包,由此得知当前网络状态,以及对方主机工作是否正常。

(2)ifconfig:

显示或者设置网络设备。

(3)ifup:

命令ifupeth0相当于ifconfigeth0up,启动网络设备eth0。

(4)ifdown:

命令ifupeth0相当于ifconfigeth0down,关闭网络设备eth0。

(5)netstat:

显示网络连接、路由表和网络接口信息。

(6)route:

查看并编辑计算机的IP路由表。

(7)traceroute:

显示数据包到主机间的路径。

(8)nslookup:

查询一台计算机的IP地址和其对应的域名。

6.备份压缩命令

(1)ar:

归档命令。

(2)tar:

打包解包命令。

(3)gzip:

文件压缩程序。

(4)gunzip:

文件解压程序。

(5)bzip2:

文件压缩程序。

(6)bunzip2:

文件解压缩程序。

7.磁盘管理

(1)fdisk:

硬盘分区命令。

(2)mount:

文件系统挂载命令。

(3)umount:

卸载文件系统。

8.用户管理

(1)su:

用户切换命令。

(2)useradd:

添加用户命令。

(3)passwd:

修改登录密码命令。

(4)userdel:

删除用户命令。

(5)who:

显示当前系统使用者信息。

(6)whoami:

显示用户登录名,相当于命令id–un。

9.模块命令

(1)lsmod:

显示目前系统中正在运行的模块列表。

(2)insmod:

把模块插入到内核中运行。

(3)rmmod:

从内核中卸载模块。

(4)depmod:

检查模块依赖关系。

(5)modprobe:

根据depmod产生的依赖关系加载和卸载模块。

10.其它命令

(1)history:

显示历史命令列表。

(2)service:

启动服务,或停止服务。

(3)clear:

清屏。

(4)time:

测量特定指令执行所需要的时间。

(5)date:

显示系统时间。

(6)cal:

显示当前月的日历。

(7)echo:

标准输出回显命令。

第五章总结

随着毕业日子的逼近,毕业设计也接近了尾声。

在指导老师的带领下,我终于顺利的完成了毕业设计论文。

在没有做毕业设计以前觉得毕业设计只是对这几年来所学知识的单纯总结,但是通过这次做毕业设计发现自己的看法有点太片面。

毕业设计不仅是对前面所学知识的一种检验,而且也是对自己能力的一种提高。

通过这次毕业设计使我明白了自己原来知识还比较欠缺。

自己要学习的东西还太多,以前老是觉得自己什么东西都会,什么东西都懂,有点眼高手低。

通过这次毕业设计,我才明白学习是一个长期积累的过程,在以后的工作、生活中都应该不断的学习,努力提高自己知识和综合素质。

注重理论与实践的相结合。

在整个设计中我更加了解到了:

一、什么是毕业论文

毕业论文是高等院校毕业生提交的一份有一定学术价值的文章。

它是大学生完成学业的标志性作业,是对学习成果的综合性总结和检阅。

二、撰写毕业论文的目的与诺意义

第一个目的是对在校大学最后一次知识的全面检验,是对学生基本知识,基本理论和基本技能掌握与提高程度的一次总测试。

第二目的是培养大学生的科学研究能力,使他们初步掌握进行科学研究的基本程序和方法。

首先,撰写毕业论文是检验学生在校学习成果的重要措施,也是提高教学质量的重要环节。

其次,通过撰写毕业论文,提高写作水平是干部队伍“四化”建设的需要。

再次,提高大学生的写作水平是社会广义物质文明和精神文明建设的需要。

在这次毕业设计中也使欠的同学关系更进一步了,同学之间互相帮助,有什么不懂的大家在一起商量,听听不同的看法对我们更好的理解知识,所以在这里非常感谢帮助我的同学。

总而言之,知识必须通过应用才能实现基价值!

有些东西以为学会了,但真正到用的时候才发现是二回事,所以我认为只有真正会用的时候才是真的学会了。

在此要感谢我的指导老师李列文的悉心指导感谢老师给我的帮助。

在整个设计中我懂得了许多东西,也培养了我对立工作的能力,树立了对自己工作能力的信心,相信会对今后的学习工作生活有非常重要的影响。

而且大大的提高了动手能力,使我充分体会到了在创造过程中探索的艰难和成功时的喜悦。

虽然这个设计做的不够完美,但是在设计过程中所学到的东西是这次毕业设计的最大收获和财富,使我终身受益。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 企业管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1