⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 168.htm

📁 pcb设计资料初学者难得的入门资料包含工厂制作过程
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>CTerm非常精华下载</title>
</head>
<body bgcolor="#FFFFFF">
<table border="0" width="100%" cellspacing="0" cellpadding="0" height="577">
<tr><td width="32%" rowspan="3" height="123"><img src="DDl_back.jpg" width="300" height="129" alt="DDl_back.jpg"></td><td width="30%" background="DDl_back2.jpg" height="35"><p align="center"><a href="http://202.112.58.200"><font face="黑体"><big><big>Tsinghua</big></big></font></a></td></tr>
<tr>
<td width="68%" background="DDl_back2.jpg" height="44"><big><big><font face="黑体"><p align="center">         嵌入式系统                            (BM: turbolinux jacobw)          </font></big></big></td></tr>
<tr>
<td width="68%" height="44" bgcolor="#000000"><font face="黑体"><big><big><p   align="center"></big></big><a href="http://cterm.163.net"><img src="banner.gif" width="400" height="60" alt="banner.gif"border="0"></a></font></td>
</tr>
<tr><td width="100%" colspan="2" height="100" align="center" valign="top"><br><p align="center">[<a href="嵌入式系统.htm">回到开始</a>][<a href="143.htm">上一层</a>][<a href="169.htm">下一篇</a>]
<hr><p align="left"><small>发信人: ArcherX (Archer), 信区: Embedded <br>

标  题: 找到一篇文章,关于linux系统移植的,大家看看 <br>

发信站: BBS 水木清华站 (Mon Dec 24 19:16:31 2001) <br>

  <br>

  <br>

与其它操作系统相比,Linux最大的特点:它是一款遵循GPL的操作系统,我们可以自由 <br>

地使用、修改、和扩展它。正是由于这一特色,Linux受到越来越多人士的青睐。于是, <br>

一个经常会被探讨的问题出现了,即关于Linux系统的移植。对于操作系统而言,这种移 <br>

植通常是跨平台的、与硬件相关的,即硬件系统结构、甚至CPU不同。下面就让我们来看 <br>

看在Linux系统移植方面,我们都需要做些什么。 <br>

一、Linux系统移植的两大部分 <br>

    对于系统移植而言,Linux系统实际上由两个比较独立的部分组成,即内核部分和系 <br>

统部分。通常启动一个Linux系统的过程是这样的:一个不隶属于任何操作系统的加载程 <br>

序将Linux部分内核调入内存,并将控制权交给内存中Linux内核的第一行代码。加载程 <br>

序的工作就完了,此后Linux要将自己的剩余部分全部加载到内存(如果有的话,视硬件 <br>

平台的不同而不同),初始化所有的设备,在内存中建立好所需的数据结构(有关进程 <br>

、设备、内存等)。到此为止Linux内核的工作告一段落,内核已经控制了所有硬件设备 <br>

。至于操作和使用这些硬件设备,则轮到系统部分上场了。内核加载根设备并启动init <br>

守护进程,init守护进程会根据配置文件加载文件系统、配置网络、服务进程、终端等 <br>

。一旦终端初始化完毕,我们就会看到系统的欢迎界面了。小结一下: <br>

  (1)内核部分初始化和控制所有硬件设备(严格说不是所有,而是绝大部分),为内存 <br>

管理、进程管理、设备读写等工作做好一切准备。 <br>

  (2)系统部分加载必需的设备,配置各种环境以便用户可以使用整个系统。 <br>



二、系统移植所必需的环境 <br>

    在进一步叙述之前,我们有必要提一下做系统移植所必需的环境。 <br>

    首先,需要一个新版本的gcc。对于一个准备系统移植的程序员而言,“新”到什么 <br>

程度应该心里有数。做跨平台编译,gcc也许是最好的选择。另外,Linux内核依赖许多 <br>

gcc特有的特性,非它不可。如果你已经会使用gcc并实地操练过多回,那你只需要再进 <br>

一步巩固一下跨平台编译的操作即可。两种编译环境是可用的:非目标平台上的Linux或 <br>

目标平台上的非Linux系统,除非你的开发平台过于特殊,否则你一定能够找到你能用的 <br>

gcc。 <br>

    其次,编译链接库是必需的,而且必须是目标平台的编译链接库。通常这是一个枯 <br>

燥、繁琐、又丝毫没有成就感的过程。幸运的话,会有现成的链接库可以用。否则,你 <br>

需要自己用gcc建立它。 <br>

    最后,需要目标平台的所有文档,越多越好。如果有一定的开发支持/仿真环境,L <br>

oader(加载程序)则最好,这些可以帮助你减少移植过程中浪费在琐事上的时间。 <br>

三、Linux系统移植 <br>

    接下来我们从内核和系统两个方面描述一下移植中的关键。 <br>

  (1) 内存移植 <br>

    Linux系统采用了相对来说并不是很灵活的单一内核机制,但这丝毫没有影响Linux <br>

系统的平台无关性和可扩展性。Linux使用了两种途径分别解决这些问题,很干净利落, <br>

丝毫不拖泥带水,而且十分清晰易懂。分离硬件相关代码和硬件无关代码,使上层代码 <br>

永远不必关心低层换用了什么代码,如何完成了操作。不论对x86上还是在Alpha平台上 <br>

分配一块内存,对上层代码而言没什么不同。硬件相关部分的代码不多,占总代码量的 <br>

很少一部分。所以对更换硬件平台来说,没有什么真正的负担。另一方面,Linux使用内 <br>



核机制很好地解决了扩展的问题,一堆代码可以在需要的时候轻松地加载或卸下,象随 <br>

身听,需要的时候带上,不需要时则锁在抽屉里。 <br>

    Linux内核可以视为由五个功能部分组成:进程管理(包括调度和通信)、内存管理 <br>

、设备管理、虚拟文件系统、网络。它们之间有着复杂的调用关系,但幸运的是,在移 <br>

植中不会触及到太多,因为Linux内核良好的分层结构将硬件相关的代码独立出来。何谓 <br>

硬件相关,何谓无关?以进程管理为例,对进程的时间片轮转调度算法在所有平台的Li <br>

nux中都是一样的,它是与平台无关的;而用来在进程中切换的实现在不同的CPU上是不 <br>

同的,因此需要针对该平台编写代码,这就是平台相关的。上面所讲的五个部分的顺序 <br>

不是随便排的,从前到后分别代表着它们与硬件设备的相关程度。越靠前越高,后面的 <br>

两个虚拟文件系统和网络则几乎与平台无关,它们由设备管理中所支持的驱动程序提供 <br>

底层支持。因此,在做系统移植的时候,需要改动的就是进程管理、内存管理和设备管 <br>

理中被独立出来的那部分即硬件相关部分的代码。在Linux代码树下,这部分代码全部在 <br>

arch目录下。 <br>

    如果你的目标平台已经被Linux核心所支持的话,那么你是幸运的,因为已经没有太 <br>

多的工作让你去做。只要你的交叉编译环境是正确的,你只需要简单的配置、编译就可 <br>

以得到目标代码。否则,需要你去编写,或修改一些代码。只需修改平台相关部分的代 <br>

码即可。但需要对目标平台,主要是对CPU的透彻理解。在Linux的代码树下,可以看到 <br>

,这部分的典型代码量为:2万行左右C代码和2千行左右的汇编(C代码中通常包含许多 <br>

伪汇编指令,因此实际上纯C代码要少很多),这部分工作量是不可小看的。它包含了对 <br>

绝大多数硬件的底层操作,涉及IRQ、内存页表、快表、浮点处理、时钟、多处理器同步 <br>

等问题,频繁的端口编程意味着需要你将目标平台的文档用C语言重写一遍。这就是为什 <br>

么说目标平台的文档极其重要。 <br>



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -