1、1、 系统的基本初始化内容包括哪些?概况 系统的引导和初始化是操作系统实现控制的第一步,也是集中体现系统优劣的重要部分。LINUX 作为一个免费的准 UNIX 操作系统,在众多业余爱好者以及小型商业处理市场表现不俗,成为继 WINDOWS 系列后的另一个主流。了解 LINUX 系统的初始化,对于进一步掌握 UNIX 系统是十分有帮助的。 通常,LINUX 系统的初始化可以分为两部分:内核部分和 init 程序部分。内核主要完成系统的硬件检测和初始化,init 程序则主要完成系统的各项配置。 初始化详解 (1) 内核部分 通常情况下,计算机首先用 LILO 程序引导内核的一部分(这部分没有被压缩
2、) ,以此来引导内核的其他部分。LILO 程序是最常用的、也是比较完善的 LINUX 系统引导器,PC 机通常从硬盘的引导扇区读取这部分程序。关于 LILO 程序的详细内容可以参照其他资料。 内核被解压缩并装入内存后,开始初始化硬件和设备驱动程序。下面是内核初始化系统的具体步骤(各个版本之间会有一定的差异,下面是 2.2.16-22 版本的一个例子): (1) 检测 CPU 的主频和控制台的显示类型,并对 CPU 速度用 Bogo MIPS 程序进行估算。 (2) 此后内核通过外设显示系统内存信息:如 131072k(128M),127820k 剩余,使用的具体情况为:1048k 内核代码,4
3、12k 保留,1728k 数据等。尔后是各类 hash table 的信息。 (3) 内核加载磁盘空间限量支持,完成 CPU 检测(包括检查数学协处理器) ,以及 POSIX适应性检测。 (4) 初始化 PCI BIOS,检测系统的 PCI 设备,并加载 TCP/IP 网络支持。 (5) 内核开始检测其他各种硬件设备:如 PS/2 端口设备,串行口设备,硬盘,软盘,SCSI等。 (2) init 程序部分 init 程序通常在/sbin 或/bin 下,它负责在系统启动时运行一系列程序和脚本文件。 init程序一旦被内核调用,便成为系统的第 0 号进程,该进程对于 LINUX 系统是十分重要的
4、,有关它的详细内容请参阅其他资料。init 进程做的每一步都由/etc/initab 中的配置决定。inittab 文件的每一行包含四个域,格式为: code:runlevels:action:command (1) code 域用单个或两个字符序列来作为本行的标识,这个标识在此文件中是唯一的。文件中的某些记录必须使用特定的 code 才能使系统工作正常。 (2) runlevels 域给出的是本行的运行级别。LINUX 系统运行在一定的级别下,当 inittab 文件指定了某一特定的运行级别时,该记录行包含的命令将被执行。RedHat 系统通常设置了7 个运行级别(0-6) ,各运行级别的说
5、明包含在 inittab 文件的开头。 (3) action 域指出的是 init 程序执行 command 命令的方式。比如:只执行 command 一次,还是在它退出时重启。 (4) command 域给出相应记录行要执行的命令。 2、C 程序和 ARM 的汇编程序之间相互调用必须遵守什么规则?并比较汇编程序调用 C 程序和 C 程序中调用汇编程序的区别。遵守规则:在使用 C 语言时,要用到和汇编语言的混合编程。若汇编代码较为简洁,则可使用直接内嵌汇编的方法;否则要将汇编程序以文件的形式加入到项目中,按照ATPCS(ARM/Thumb 过程调用标准, ARM/Thumb Procedure
6、 Call Standard)的规定与 C 程序相互调用与访问。在 C 程序和 ARM 汇编程序之间相互调用时必须遵守 ATPCS 规则。ATPCS 规定了一些子程序间调用的基本规则,哪寄存器的使用规则,堆栈的使用规则和参数的传递规则等。区别:3、何为交叉编译?简述采用交叉编译的原因及其特点。交叉编译(cross-compilation)是指,在某个主机平台上(比如 PC 上)用交叉编译器编译出可在其他平台上(比如 ARM 上)运行的代码的过程。 交叉编译这个概念的出现和流行是和嵌入式系统的广泛发展同步的。我们常用的计算机软件,都需要通过编译的方式,把使用高级计算机语言编写的代码(比如 C 代
7、码)编译(compile)成计算机可以识别和执行的二进制代码。比如,我们在 Windows 平台上,可使用 Visual C+ 开发环境,编写程序并编译成可执行程序。这种方式下,我们使用 PC 平台上的 Windows 工具开发针对 Windows 本身的可执行程序,这种编译过程称为 native compilation,中文可理解为本机编译。然而,在进行嵌入式系统的开发时,运行程序的目标平台通常具有有限的存储空间和运算能力,比如常见的 ARM 平台,其一般的静态存储空间大概是 16 到 32 MB,而 CPU 的主频大概在 100MHz 到 500MHz 之间。这种情况下,在 ARM 平台上
8、进行本机编译就不太可能了,这是因为一般的编译工具链(compilation tool chain)需要很大的存储空间,并需要很强的 CPU 运算能力。为了解决这个问题,交叉编译工具就应运而生了。通过交叉编译工具,我们就可以在 CPU 能力很强、存储控件足够的主机平台上(比如 PC 上)编译出针对其他平台的可执行程序。4、比较 NOR Flash、NAND Flash、EEPROM 的特点与区别。EEPROM 和 FLASH 的最主要的区别 1、EEPROM 可以按“位”擦写而 FLASH 只能一大片一大片的擦。 2.EEPROM 一般容量都不大如果大的话EEPROM 相对与 FLASH 就没有
9、价格上的优势了。市面上卖的 stand alone 的EERPOM 一般都是在 64KBIT 以下 而 FLASH 一般都是 8MEG BIT 以上NOR 型 。 3.读的速度的话 应该不是两者的差别 只是 EERPOM 一般用于低端产品 读的速度不需要那么快 真要做的话 其实也是可以做的和 FLASH 差不多。 4.因为 EEPROM 的存储单元是两个管子而 FLASH 是一个SST 的除外 类似于两管 所以 CYCLING 的话EEPROM 比 FLASH 要好一些 到1000K 次也没有问题的。总的来说对与用户来说 EEPROM 和 FLASH 没有大的区别只是 EEPROM 是低端产品
10、 容量低 价格便宜 但是稳定性较 FLASH 要好一些。 Flash memory 指的是“闪存”所谓“闪存”它也是一种非易失性的内存属于 EEPROM 的改进产品。它的最大特点是必须按块(Block)擦除(每个区块的大小不定 不同厂家的产品有不同的规格) 而 EEPROM 则可以一次只擦除一个字节(Byte)。目前“闪存”被广泛用在 PC 机的主板上 用来保存 BIOS 程序 便于进行程序的升级。其另外一大应用领域是用来作为硬盘的替代品 具有抗震、速度快、无噪声、耗电低的优点 但是将其用来取代 RAM 就显得不合适 因为 RAM 需要能够按字节改写 而 Flash ROM 做不到一般而言,f
11、lash 分为 nor 和 nand2 种,简单的说就是用 or 门和 and 门搭建的 2 种 flash。目前用为海量存储器的 flash 都是 nand 结构,而一些当成 rom 使用的 flash 为 nor 结构。至于他们的物理上的区别,我也不明白,为了让自己扫盲,特地找了篇比较他们特性的入门文章,看来还是要多学习才行。intel 也在将 nand flash 向 pc 主存储器方向推广,目前的产业能力也预示着这并不是妄想,目前最高的容量的 nand flash 已经达到了 16Gbit/单片,说不定过几年,我们就再也不能在 pc 里听见读写磁盘时候发出的吱吱声了。性能比较flash
12、 闪存是非易失存储器,可以对称为块的存储器单元块进行擦写和再编程。任何 flash器件的写入操作只能在空或已擦除的单元内进行,所以大多数情况下,在进行写入操作之前必须先执行擦除。NAND 器件执行擦除操作是十分简单的,而 NOR 则要求在进行擦除前先要将目标块内所有的位都写为 0。由于擦除 NOR 器件时是以 64128KB 的块进行的,执行一个写入/擦除操作的时间为 5s,与此相反,擦除 NAND 器件是以 832KB 的块进行的,执行相同的操作最多只需要 4ms。执行擦除时块尺寸的不同进一步拉大了 NOR 和 NADN 之间的性能差距,统计表明,对于给定的一套写入操作(尤其是更新小文件时更
13、多的擦除操作必须在基于 NOR 的单元中进行。这样,当选择存储解决方案时,设计师必须权衡以下的各项因素。NOR 的读速度比 NAND 稍快一些。NAND 的写入速度比 NOR 快很多。NAND 的 4ms 擦除速度远比 NOR 的 5s 快。大多数写入操作需要先进行擦除操作。NAND 的擦除单元更小,相应的擦除电路更少。接口差别NOR flash 带有 SRAM 接口,有足够的地址引脚来寻址,可以很容易地存取其内部的每一个字节。NAND 器件使用复杂的 I/O 口来串行地存取数据,各个产品或厂商的方法可能各不相同。8 个引脚用来传送控制、地址和数据信息。NAND 读和写操作采用 512 字节的
14、块,这一点有点像硬盘管理此类操作,很自然地,基于 NAND 的存储器就可以取代硬盘或其他块设备。容量和成本NAND flash 的单元尺寸几乎是 NOR 器件的一半,由于生产过程更为简单,NAND 结构可以在给定的模具尺寸内提供更高的容量,也就相应地降低了价格。NOR flash 占据了容量为 116MB闪存市场的大部分,而 NAND flash 只是用在 8128MB 的产品当中,这也说明 NOR 主要应用在代码存储介质中,NAND 适合于数据存储,NAND 在 CompactFlash、Secure Digital、PC Cards和 MMC 存储卡市场上所占份额最大。可靠性和耐用性采用
15、flahs 介质时一个需要重点考虑的问题是可靠性。对于需要扩展 MTBF 的系统来说,Flash 是非常合适的存储方案。可以从寿命(耐用性)、位交换和坏块处理三个方面来比较 NOR和 NAND 的可靠性。寿命(耐用性)在 NAND 闪存中每个块的最大擦写次数是一百万次,而 NOR 的擦写次数是十万次。NAND 存储器除了具有 10 比 1 的块擦除周期优势,典型的 NAND 块尺寸要比 NOR 器件小 8 倍,每个 NAND存储器块在给定的时间内的删除次数要少一些。位交换所有 flash 器件都受位交换现象的困扰。在某些情况下(很少见,NAND 发生的次数要比 NOR多),一个比特位会发生反转
16、或被报告反转了。一位的变化可能不很明显,但是如果发生在一个关键文件上,这个小小的故障可能导致系统停机。如果只是报告有问题,多读几次就可能解决了。当然,如果这个位真的改变了,就必须采用错误探测/错误更正(EDC/ECC)算法。位反转的问题更多见于 NAND 闪存,NAND 的供应商建议使用 NAND 闪存的时候,同时使用 EDC/ECC 算法。这个问题对于用 NAND 存储多媒体信息时倒不是致命的。当然,如果用本地存储设备来存储操作系统、配置文件或其他敏感信息时,必须使用 EDC/ECC 系统以确保可靠性。坏块处理NAND 器件中的坏块是随机分布的。以前也曾有过消除坏块的努力,但发现成品率太低,
17、代价太高,根本不划算。NAND 器件需要对介质进行初始化扫描以发现坏块,并将坏块标记为不可用。在已制成的器件中,如果通过可靠的方法不能进行这项处理,将导致高故障率。易于使用可以非常直接地使用基于 NOR 的闪存,可以像其他存储器那样连接,并可以在上面直接运行代码。由于需要 I/O 接口,NAND 要复杂得多。各种 NAND 器件的存取方法因厂家而异。在使用 NAND 器件时,必须先写入驱动程序,才能继续执行其他操作。向 NAND 器件写入信息需要相当的技巧,因为设计师绝不能向坏块写入,这就意味着在 NAND 器件上自始至终都必须进行虚拟映射。软件支持当讨论软件支持的时候,应该区别基本的读/写/
18、擦操作和高一级的用于磁盘仿真和闪存管理算法的软件,包括性能优化。在 NOR 器件上运行代码不需要任何的软件支持,在 NAND 器件上进行同样操作时,通常需要驱动程序,也就是内存技术驱动程序(MTD),NAND 和 NOR 器件在进行写入和擦除操作时都需要 MTD。使用 NOR 器件时所需要的 MTD 要相对少一些,许多厂商都提供用于 NOR 器件的更高级软件,这其中包括 M-System 的 TrueFFS 驱动,该驱动被 Wind River System、Microsoft、QNX Software System、Symbian 和 Intel 等厂商所采用。驱动还用于对DiskOnChip 产品进行仿真和 NAND 闪存的管理,包括纠错、坏块处理和损耗平衡。