当前位置:首页 >> IT/计算机 >>

arm-linux学习


嵌入式 ARM +Linux 学习

目录 1 前言 2 嵌入式 ARM+Linux 主要学习内容 3 嵌入式 ARM+Linux 开发基础知识 嵌入式 ARM 简介 嵌入式 Linux 简介 嵌入式 ARM+Linux 开发流程 嵌入式 Linux 开发环境的建立 Linux 常用命令的使用 VI 指令介绍
4 ARM 平台硬件电路的介绍和调试 本 ARM 系统开发平台 AT91RM9200 微处理器主要特点

本 ARM 系统开发平台的硬件组成及原理 本 ARM 系统开发平台的调试 5 Linux 内核的移植,裁剪和编译 Linux 内核源代码的目录分析 如何配置内核 如何编译内核 6 文件系统的制作 文件系统的介绍和组成 链接库和命令集的制作 配置文件的制作 7 引导程序,内核与根文件系统的烧写 ARM 系统的启动方式的介绍和选择 超级终端的设置 引导程序 uboot 的烧写 内核与根文件系统的烧写 8 ARM+Linux 驱动程序的开发 概论 设备接口文件 中断处理 应用实例 9 快速上手

一 前



嵌入式系统无疑是当前最热门最有发展前途的 IT 应用领域之一。 嵌入式系统用在一些特定 专用设备上,通常这些设备的硬件资源(如处理器、存储器等)非常有限,并且对成本很敏感, 有时对实时响应要求很高等。特别是随着消费家电的智能化,嵌入式更显重要。像我们平常常 见到的手机、 PDA、 电子字典、 可视电话、 VCD/DVD/MP3 Player、 数字相机(DC)、 数字摄像机(DV)、 U-Disk、机顶盒(Set Top Box)、高清电视(HDTV)、游戏机、智能玩具、交换机、路由器、数控 设备或仪表、汽车电子、家电控制系统、医疗仪器、航天航空设备等等都是典型的嵌入式系统。 嵌入式系统是软硬结合的东西,搞嵌入式开发的人有两类。 一类是学电子工程、通信工程等偏硬件专业出身的人,他们主要是搞硬件设计,有时要开 发一些与硬件关系最密切的最底层软件,如 BootLoader、Board Support Package(像 PC 的 BIOS 一样,往下驱动硬件,往上支持操作系统),最初级的硬件驱动程序等。他们的优势是对硬件原 理非常清楚,不足是他们更擅长定义各种硬件接口,但对复杂软件系统往往力不从心(例如嵌入 式操作系统原理和复杂应用软件等)。 另一类是学软件、计算机专业出身的人,主要从事嵌入式操作系统和应用软件的开发。如 果学软件的人对硬件原理和接口有较好的掌握,就完全也可写 BSP 和硬件驱动程序。嵌入式硬 件设计完后,各种功能就全靠软件来实现了,嵌入式设备的增值很大程度上取决于嵌入式软件, 这占了嵌入式系统的最主要工作(目前有很多公司将硬件设计包给了专门的硬件公司, 稍复杂的 硬件都交给台湾或国外公司设计,国内的硬件设计力量很弱,很多嵌入式公司自己只负责开发 软件,因为公司都知道,嵌入式产品的差异很大程度在软件上,在软件方面是最有“花头“可 做的), 所以搞软件的人完全不用担心在嵌入式市场上的用武之地, 越是智能设备越是复杂系统, 软件越起关键作用,而且这是目前的趋势。 从事嵌入式软件开发的好处是: (1) 目前国内外这方面的人都很稀缺。一方面,是因为这一领域入门门槛较高,不仅要懂 较底层软件(例如操作系统级、驱动程序级软件),对软件专业水平要求较高(嵌入式系统对软件 设计的时间和空间效率要求较高),而且必须懂得硬件的工作原理,所以非专业 IT 人员很难切 入这一领域;另一方面,是因为这一领域较新,目前发展太快,很多软硬件技术出现时间不长或 正在出现(如 ARM 处理器、嵌入式操作系统、MPEG 技术、无线通信协议等),掌握这些新技术的 人当然很难找。嵌入式人才稀缺,身价自然就高,越有经验价格就越高。其实嵌入式人才稀少, 根本原因可能是大多数人无条件接触,这需要相应的嵌入式开发板和软件,另外需要有经验的人 进行指导开发流程。 (2) 与企业计算等应用软件不同,嵌入式领域人才的工作强度通常低一些(但收入不低)。 搞企业应用软件的 IT 企业,这个用户的系统搞完了,又得去搞下一个用户的,而且每个用户的 需求和完成时间都得按客户要求改变,往往疲于奔命,重复劳动。相比而言,搞嵌入式系统的 公司,都有自己的产品计划,按自己的节奏行事。所开发的产品通常是通用的,不会因客户的 不同而修改。一个产品型号开发完了,往往有较长一段空闲时间(或只是对软件进行一些小修 补),有时间进行充电和休整。另外,从事嵌入式软件的每个人工作范围相对狭窄,所涉及的专 业技术范围就是那些(ARM、RTOS、MPEG、802.11 等),时间长了这些东西会越搞越有经验,卖 卖老本,几句指导也够让那些初入道者琢磨半年的。若搞应用软件,可能下一个客户要换成一 个完全不同的软件开发平台,那就苦了。 从事嵌入式软件开发的缺点是: (1) 入门起点较高,所用到的技术往往都有一定难度,若软硬件基础不好,特别是操作系 统级软件功底不深,则可能不适于此行。 (2) 这方面的企业数量要远少于企业计算类企业。 特别是从事嵌入式的小企业数量较多(小 企业要搞自己的产品创业),知名大公司较少(搞嵌入式的大公司主要有 Intel、Motorola、TI、 Philip、Samsung、Sony、Futjtum、Bell-Alcatel、意法半导体、Microtek、研华、华为、中 兴通信、上广电等制造类企业)。这些企业的习惯思维方式是到电子、通信等偏硬专业找人。

(3)有少数公司经常要硕士以上的人搞嵌入式,主要是基于嵌入式的难度。但大多数公司也 并无此要求,只要有经验即可。 若有兴趣的同学要学习嵌入式, 应做到以下几点(实际上很多公司的招聘广告上就是这样 写的): (1) 掌握主流嵌入式微处理器的结构与原理 (2) 必须掌握一个嵌入式操作系统 (3) 必须熟悉嵌入式软件开发流程并至少做过一个嵌入式软件项目。 在嵌入式软件方面最重要的课程包括: (1) 嵌入式微处理器结构与应用:这是一门嵌入式硬件基础课程, 嵌入式是软硬件结合的技 术,搞嵌入式软件的人应对 ARM 处理器工作原理和接口技术有充分了解。若不了解处理器原理, 怎么能控制硬件工作, 怎么能写出节省内存又运行高速的最优代码(嵌入式软件设计特别讲究时 空效率),怎么能写出驱动程序(驱动程序都是与硬件打交道的)?很多公司招聘嵌入式软件人员 时都要求熟悉 ARM 处理器,将来若同学到公司中从事嵌入式软件开发,公司都会给你一本该设 备的硬件规格说明书 (xxx Specification),您必须能看懂其中的内存分布和端口使用等最基 本的说明(就像 x86 汇编一样),否则怎么设计软件。有些同学觉得嵌入式处理器课程较枯燥, 这主要是硬件课程都较抽象的原因。 (2) 嵌入式操作系统类课程 除了 WinCE 的实时性稍差外, 大多数嵌入式操作系统的实时性都很强,所以也可称为实时操 作系统 Real Time Operating System.从事嵌入式的人至少须掌握一个嵌入式操作系统(当然掌 握两个更好),这在嵌入式的所有技术中是最为关键的了。目前最重要的 RTOS 主要包括: 第一类、传统的经典 RTOS:最主要的便是 Vxworks 操作系统,以及其 Tornado 开发平台。 Vxworks 因出现稍早,实时性很强(据说可在 1ms 内响应外部事件请求),并且内核可极微(据说 最小可 8K),可靠性较高等,所以在北美,Vxworks 占据了嵌入式系统的多半疆山。特别是在通 信设备等实时性要求较高的系统中, 几乎非 Vxworks 莫属。 Vxworks 的很多概念和技术都和 Linux 很类似, 主要是 C 语言开发。 Bell-alcatel、 像 Lucent、 华为等通信企业在开发产品时, Vxworks 用得很多。但 Vxworks 因价格很高,所以一些小公司或小产品中往往用不起。目前很多公司都 在往嵌入式 Linux 转(听说华为目前正在这样转)。但无论如何,Vxworks 在一段长时间内仍是 不可动摇的。与 Vxworks 类似的稍有名的实时操作系统还有 pSOS、QNX、Nucleus 等 RTOS。 第二类、嵌入式 Linux 操作系统:Linux 的前途除作为服务器操作系统外,最成功的便是在 嵌入式领域的应用,原因当然是免费、开源、支持软件多、呼拥者众,这样嵌入式产品成本会 低。Linux 本身不是一个为嵌入式设计的操作系统,不是微内核的,并且实时性不强。目前应 用在嵌入式领域的 Linux 系统主要有两类:一类是专为嵌入式设计的已被裁减过的 Linux 系统, 最常用的是 uCLinux(不带 MMU 功能),目前占较大应用份额,可在 ARM7 上跑;另一类是跑在 ARM 9 上的, 可使用更多的 Linux 功能(当然 uCLinux 更可跑在 ARM 9 上)。 很多人预测, 嵌入式 Linux 预计将占嵌入式操作系统的 50%以上份额,非常重要。缺点是熟悉 Linux 的人太少,开发难度 稍大。另外,目前我们能发现很多教材和很多大学都以 ucOS/II 为教学用实时操作系统,这主 要是由于 ucOS/II 较简单,且开源,非常适合入门者学习实时操作系统原理,但由于 ucOS/II 功能有限,实用用得较少,所以我们不建议学习它。况且熟悉了 Linux 开发,不仅在嵌入式领 域有用, 对开发 Linux 应用软件, 对加深操作系统的认识也有帮助, 可谓一举多得。 目前 Intel、 Philip 都在大搞 ARM+LINUX 的嵌入式开发,Fujitum 则是在自己的处理器上大搞 Linux 开发。 目前在嵌入式 Linux 领域,以下几个方面的人特别难找,一是能将 Linux 移植到某个新型号的 开发版上;二是能写 Linux 驱动程序的人;三是熟悉 Linux 内核裁减和优化的人。 第三类、 Windows CE 嵌入式操作系统:Microsoft 也看准了嵌入式的巨大市场,MS 永远是 最厉害的,WinCE 出来只有几年时间,但目前已占据了很大市场份额,特别是在 PDA、手机、显 示仪表等界面要求较高或者要求快速开发的场合,WinCE 目前已很流行(据说有一家卖工控机的 公司板子卖得太好, 以至来不及为客户裁减 WinCE)。 WinCE 目前开发平台主要为 WinCE Platform Builder,有时也用 EVC 环境开发一些较上层的应用,由于 WinCE 开发都是大家熟悉的 VC++环

境,所以学过 Windows 程序设计课程的同学都不会有多大难度,这也是 WinCE 容易被人们接受 的原因,开发环境方便快速,微软的强大技术支持,WinCE 开发难度远低于嵌入式 Linux。对于 急于完成,不想拿嵌入式 Linux 冒险的开发场合,WinCE 是最合适了(找嵌入式 Linux 的人可没 那么好找的),毕竟公司不能像学生学习那样试试看,保证开发成功更重要。 (3) 嵌入式开发的其它相关软件课程 搞嵌入式若能熟悉嵌入式应用的一些主要领域,这样的人更受企业欢迎。主要的相关领域 包括: A、数字图像压缩技术:这是嵌入式最重要最热门的应用领域之一,主要是应掌握 MPEG 编解 码算法和技术,如 DVD、MP3、PDA、高精电视、机顶盒等都涉及 MPEG 高速解码问题。 B、通信协议及编程技术:这包括传统的 TCP/IP 协议和热门的无线通信协议。首先,大多数 嵌入式设备都要连入局域网或 Internet,所以首先应掌握 TCP/IP 协议及其编程,这是需首要 掌握的基本技术;其次,无线通信是目前的大趋势,所以掌握无线通信协议及编程也是是很重要 的。无结通信协议包括无线局域网通信协议 802.11 系列,Bluetooth,以及移动通信(如 GPRS、 GSM、CDMA 等)。 C、网络与信息安全技术:如加密技术,数字证书 CA 等。 D、DSP 技术:DSP 是 Digital Signal Process 数字信号处理的意思,DSP 处理器通过硬件 实现数字信号处理算法,如高速数据采集、压缩、解压缩、通信等。数字信号处理是电子、通 信等硬件专业的课程,对于搞软件的人若能了解一下最好。目前 DSP 人才较缺。如果有信号与 系统、数字信号处理等课程基础,对于学习 MPEG 编解码原理会有很大帮助。 (4)嵌入式开发的相关硬件基础 对于软件工程专业的学生,从事嵌入式软件开发,像数字电路、计算机组成原理、嵌入式 微处理器结构等硬件课程是较重要的。另外,C/C++、数据结构和算法、特别是操作系统等软件 基础课也是十分重要的。我们的主要目地是能看懂硬件工作原理,但重点应是在嵌入式软件, 特别操作系统级软件。 很多研究生里有些是学电子、通信类专业过来的,有较好的模拟电路和单片机基础,学嵌 入式非常合适。嵌入式本身就是从单片机发展过来的,只是单片机不带 OS,而现在很多嵌入式 应用越来越复杂,以至不得不引入嵌入式操作系统。另外,为追求更高速的信号处理速度,现 在在一些速度要求较高的场合,有不少公司是将一些 DSP 算法,如 MPEG 压缩解压缩算法等用硬 件来实现,这就涉及到 HDL 数字电路设计技术及其 FPGA/IP 核实现技术,这方面的人目前市场 上也很缺。 另外,能写驱动程序的人目前是非常紧缺的(驱动程序也可归于嵌入式范畴),包括桌面 Windows 中的 DDK 开发环境和 WDM 驱动程序。公司每时每刻都要推出新产品,每一个新产品出 来了,要能被操作系统所使用,是必须写驱动程序的。写驱动程序就必须掌握操作系统(如 Windows 或 Linux)的内部工作原理,还涉及到少量硬件知识,难度较大,所以这方面的人很难 找。想成为高手的同学,也可从驱动程序方面获得突破。 本文主要就嵌入式在 ARM+Linux 学习展开讨论和进行指导说明。



嵌入式 ARM+Linux 主要学习内容

ARM作为一款处理器级芯片,与Linux紧密联系在一起,ARM与Linux一起在嵌入式领域占 有重要的地位,具体背景与前景这里就不多说了,现在主要讲述关于要学习ARM与Linux需要 掌握它们的哪些领域。 学习 ARM 与 Linux,具体分为 ARM 与 Linux 基础知识的学习,ARM 平台硬件电路介绍和调 试, Linux 内核的移植和编译, 文件系统的制作, 引导程序, 内核与根文件系统的烧写, ARM+Linux 驱动程序和应用程序的开发等,每一部分相对独立也相互联系,且对人的要求较高,要求真正 的软硬通吃,现在先粗略的介绍下上面的每一领域。 ARM 与 Linux 基础知识的学习,这部分主要包括对 ARM 处理器和 Linux 操作系统基本的介 绍,使大家对它们有一些初步的理解,掌握一定的背景知识。Linux 环境基本命令的使用,这 也是比较基本的内容,比如打开关闭编辑文件等,只有掌握它们,才能够在 Linux 下进行操作, 进而进行软件开发。一些软件开发的主要流程和 ARM 系统交叉编译环境的搭建,任何系统都 有它的开发环境,一般单片机的设计开发,主要是通过集成开发环境来完成程序的编辑,编译, 下载,以及运行通过下载线将 PC 机与单片机联系在一起,然而,ARM 系统(处理器)的开发 没有这样的集成开发环境,它需要一台 Linux 服务器(即装有 Linux 的电脑) ,一台工作站(装 有一般 windows 系统的电脑) ,一个 ARM 目标板一起工作才能够完成系统的开发,这就需要掌 握 Linux 基本的命令操作,交叉编译的流程和原理,以及必要功能的配置等。 ARM 平台硬件电路介绍和调试。由于嵌入式系统是一个整体,是一个系统,所以除 ARM 外 还需要很多外围设备才能够正常工作起来 (这里我们把 ARM 当作处理器使用) 比如网络芯片, , flash,sdram 等,这就需要我们掌握 ARM 处理器本身的体系结构以及具体的控制方法,这包括 它的引脚功能,工作原理等,还有 ARM 与外围芯片的具体电路,它们的工作原理和方式。除 此之外,我们还应该掌握焊接,调试电路,学会应该怎么焊接整个系统,并在这个过程中找出 它可能会产生的问题,一旦系统电路不正常,能够找出它的故障并且去解决它,这需要扎实的 硬件功底和经验。 Linux内核的移植和编译,根文件系统的制作。在硬件平台之上的系统层,主要有 内核和根文件系统两大部分,两种缺一不可。这部分需要理解Linux系统在ARM平台的启动方 式,以及bootloader的概念(相当于一般PC机的BIOS),内核和文件系统的概念,它们的功能, 实现原理和相互之间的联系,相对比较深,要深入的话就要涉计到Linux本身,操作系统的概念 和实现原理。我们重点放在内核的如何编译,以及如何配置里面大量的内核选项使之能够成功 运行在ARM硬件平台上,以及了解文件系统的组成和功能,如何制作根文件系统等。

引导程序,内核与根文件系统的烧写。这一部分主要是学会如何在一个没有任 何软件的硬件平台上搭建软件系统的过程,包括bootloader,内核,根文件系统的 烧写,相当于给pc机装操作系统的过程,不过比它要复杂的多,需要了解一定的硬 件知识,ARM系统的启动方式等等,这些对于嵌入式的学习来说是必不可少的。 ARM+Linux驱动程序和应用程序的开发。这部分对软件和硬件能力的要求都比较高,
开发一款外设驱动程序, 既要懂得外设芯片和对应ARM接口的硬件结构和原理, 还要懂得Linux 对于外围设备的处理机制以及对应一系列的接口函数,需要一定的操作系统知识的基础。 应用 程序的开发,复杂的应用程序有很多,比如手机上的游戏,qt界面的设计,网络服务等,驱动 程序需要应用程序的调用才能实现它的功能。 ARM 系统主要领域就是这些,每一部分具体知识我们将在后面进行介绍。



嵌入式 ARM+Linux 开发基础知识

3.1 嵌入式 ARM 简介
ARM(Advanced RISC Machines)是微处理器行业的一家知名企业,设计了大量高性能、廉 价、耗能低的 RISC 处理器、相关技术及软件。技术具有性能高、成本低和能耗省的特点。适用 于多种领域,比如嵌入控制、消费/教育类多媒体、DSP 和移动式应用等。 ARM 将其技术授权给世界上许多著名的半导体、软件和 OEM 厂商,每个厂商得到的都是一 套独一无二的 ARM 相关技术及服务。利用这种合伙关系,ARM 很快成为许多全球性 RISC 标准的 缔造者。 目前, 总共有 30 家半导体公司与 ARM 签订了硬件技术使用许可协议, 其中包括 Intel、 IBM、 LG 半导体、NEC、SONY、菲利浦和国民半导体这样的大公司。至于软件系统的合伙人,则包括 微软、升阳和 MRI 等一系列知名公司。 ARM 架构是面向低预算市场设计的第一款 RISC 微处理器。 2.产品介绍 ARM 提供一系列内核、体系扩展、微处理器和系统芯片方案。由于所有产品均采用一个通 用的软件体系,所以相同的软件可在所有产品中运行(理论上如此) 。典型的产品如下。 ①CPU 内核 --ARM7:小型、快速、低能耗、集成式 RISC 内核,用于移动通信。 -- ARM7TDMI(Thumb):这是公司授权用户最多的一项产品,将 ARM7 指令集同 Thumb 扩展组 合在一起,以减少内存容量和系统成本。同时,它还利用嵌入式 ICE 调试技术来简化系统设计, 并用一个 DSP 增强扩展来改进性能。该产品的典型用途是数字蜂窝电话和硬盘驱动器。 --ARM9TDMI:采用 5 阶段管道化 ARM9 内核,同时配备 Thumb 扩展、调试和 Harvard 总线。 在生产工艺相同的情况下,性能可达 ARM7TDMI 的两倍之多。常用于连网和顶置盒。 ②体系扩展 -- Thumb:以 16 位系统的成本,提供 32 位 RISC 性能,特别注意的是它所需的内存容量非 常小。 ③嵌入式 ICE 调试 由于集成了类似于 ICE 的 CPU 内核调试技术,所以原型设计和系统芯片的调试得到了极大 的简化。 ④微处理器 --ARM710 系列,包括 ARM710、ARM710T、ARM720T 和 ARM740T:低价、低能耗、封装式常规 系统微型处理器,配有高速缓存(Cache) 、内存管理、写缓冲和 JTAG。广泛应用于手持式计算、 数据通信和消费类多媒体。 --ARM940T、920T 系列:低价、低能耗、高性能系统微处理器,配有 Cache、内存管理和写 缓冲。应用于高级引擎管理、保安系统、顶置盒、便携计算机和高档打印机。 --StrongARM:性能很高、同时满足常规应用需要的一种微处理器技术,与 DEC 联合研制, 后来授权给 Intel。SA110 处理器、SA1100 PDA 系统芯片和 SA1500 多媒体处理器芯片均采用了 这一技术。 --ARM7500 和 ARM7500FE:高度集成的单芯片 RISC 计算机, 基于一个缓存式 ARM7 32 位内核, 拥有内存和 I/O 控制器、3 个 DMA 通道、片上视频控制器和调色板以及立体声端口;ARM7500FE 则增加了一个浮点运算单元以及对 EDO DRAM 的支持。特别适合电视顶置盒和网络计算机(NC) 。 Windows CE 的 Pocket PC 只支持 ARMWindows CE 可支持多种嵌入式处理器,但基于 Windows CE 的 Pocket PC 则只支持 ARM 一种。微软在对 SH3、MIPS、ARM 等嵌入式处理器做了评估后认为, ARM 是一种性价比较好的选择。 由于目前 ARM 在手持设备市场占有 90%以上的份额, 只支持 ARM, 可以有效地缩短应用程序开发与测试的时间,也降低了研发费用。由于 ARM 开放其处理器授权,

因此,用户在市场上可以在多家整机厂商中进行选择,从而保证了这一市场的竞争性。

3.2 嵌入式 Linux 简介
Linux 正在嵌入式开发领域稳步发展,Linux 使用 GPL,所有对特定开发板,PDA,掌上机, 可携带设备等使用嵌入式 Linux 感兴趣的人都可以从英特网上免费下载其内核和应用程序,并 开始移植和开发。许多 Linux 改良品种迎合了嵌入式市场,它们包括了 RTLinux(实时 Linux) uCLinux(用于非 MMU 设备的 Linux) ,ARM-Linux(ARM 上的 Linux)和其它 Linux 系统。 嵌入式 Linux 的发展比较迅速。NEC,索尼已经在销售个人视频录像机等汲取 Linux 的消 费类电子产品,摩托罗拉则计划在其未来的大多数手机上使用 Linux,IBM 也制定了在手持机 上运行 Linux 的计划。 数年来, “Linux 标准库” 组织一直在从事对在服务器上运行的 Linux 进行标准化的工作, 现在,嵌入式计算领域也开始了这一工作。嵌入式 Linux 标准吸引了“Linux 标准库”以及 Unix 组织中有益的元素。 虽然大多数 Linux 系统运行在 PC 平台上,但 Linux 也是嵌入式系统的可靠主力。Linux 的 安装和管理比 Unix 更加简单灵活,这对于 Unix 专家来说有事一个优点,因为 Linux 中的许多 命令和编程接口同传统的 Unix 一样,但对于习惯于 Windows 操作系统的人来说,需要记忆大 量的命令行参数却是一个缺点。 随着 Linux 社团的不断努力,Linux 的人机界面开发环境正在不 断完善。 典型的 Linux 系统经过打包, 在拥有硬盘和大容量内存的 PC 机上运行, 嵌入式系统不需要 这么高的配置。一个功能完备的 Linux 内核要求大约 1MB 内存。而 Linux 微内核只占用其中很 小一部分内存,包括虚拟内存和所有核心的操作系统功能在内,在需要占用系统约 100K 内存。 只要有 500K 的内存, 一个网络栈和基本使用程序的完全的 Linux 系统就可以在一台 8 位总线的 Intel386 微处理器上运行得很好了。由于内存要求常常是根据需要的应用所决定的,比如 Web 服务器或者 SNMP 代理,Linux 系统甚至可以仅使用 256KB ROM 和 512KB RAM 进行工作。 因此它是一个瞄准嵌入式市场的轻量级操作系统。 与传统实时操作系统相比(RTOS) ,采用象嵌入式 Linux 这样的开发源码的操作系统对策 另外一个好处是 Linux 开发团队看来会比 RTOS 的供应商更快的支持新的 IP 协议和其它协议。 例如,用于 Linux 的设备驱动程序要比用于商业操作系统的设备驱动程序多,如网络接口卡驱 动程序以及并口和串口驱动程序。 核心 Linux 操作系统本身的微内核体系结构相当简单,网络和文件系统以模块形式置于微 内核的上层。驱动程序和其它部件可在运行时作为可加载模块编译或添加到内核。这为构造定 制的可嵌入式系统提供了高度模块化的构建方法。而在典型情况下该系统需结合定制的驱动程 序和应用程序以提供附加功能。 嵌入式系统也常常要求通用的功能,为了避免重复劳动,这些功能的实现运用了许多现成 的程序和驱动程序。 它们可以用于公共外设和应用。 Linux 可以在外设范围广泛的多数微处理器 上运行,并早已经有了现成的应用库。 Linux 用于嵌入式的因特网设备也是很合适的,原因是它支持多处理器系统,该特性使得 Linux 具有伸缩性。因此设计人员可以选择在双处理器 系统上运行实时应用,提高整体的处理 能力,例如,你可以在一个处理器运行 GUI,同时在另一个处理器上运行 Linux 系统。 在嵌入式系统上运行 Linux 的一个缺点是 Linux 体系提供实时性能需要添加实时软件模块。 而这些模块运行的内核空间正是操作系统实现调度策略,硬件中断异常和执行程序部分。由于 这些实时软件模块是在内核空间运行的,因此代码错误可能会破坏操作系统从而影响整个系统 的可靠性,这对实时应用将是一个非常严重的弱点。

3.3 嵌入式 ARM+Linux 开发流程
嵌入式 Linux 开发,根据应用需求的不同有不同的配置开发方法,但是一般都要经过以下 过程:

建立开发环境。比如操作系统使用 REDHAT 9 选择定制安装或全部安装,通过网络下载相 应的 GCC 交叉编译器进行安装(比如 ARM-Linux-gcc,ARM-uclibc-gcc) 。 配置开发主机。如果是 windows 主机,配置超级终端。一般参数为波特率 115200.数据位 8 位,停止位 1.,无奇偶校验,软硬件控制流设为无,如果是 Linux 主机,MINICOM 的配置也 是这样,超级终端的作用是作为调试嵌入式开发板信息输出的监视器和键盘输入的工具;配置 网络,主要是配置 NFS 网络文件系统,FTP,Telnet 服务等需要关闭防火墙。简化了嵌入式网络 调试环境设置过程。 建立引导装载程序 Bootloader,从网络上下载一些公开源代码的 Bootloader,如 U-BOOT, BLOB,VIVI,LILO,ARM-BOOT 等 , 根 据 自 己 具 体 芯 片 进 行 移 植 修 改 ( 本 文 将 主 要 讨 论 U-BOOT) ,有些芯片没有内置引导装载程序,比如三星的 ARM7,ARM9 系列芯片,这样就需 要通过编写烧写开发板上 flash 的烧写程序, 网络上有免费下载的 Windows 下通过 JTAG 并口简 易仿真器烧写 ARM 外围 flash 芯片的程序。也有 Linux 下公开源代码的 J-FLASH 程序。如果不 能烧写自己的开发板。就需要根据自己的具体电路进行源代码修改。这是让系统可以正常运行 的第一步。如果你购买了厂家的仿真器当然容易烧写 flash 了。但是其中的核心技术是无法了解 的。这对于需要迅速开发应用的人来说可以极大的提高开发速度。 下载别人已经移植好的 Linux 操作系统(也可以自己移植) 。如 UCLinux,ARM-Linux 等, 如果有专门针对你所使用的 CPU 移植好的 Linux 操作系统那是再好不过,下载后再添加自己的 特定硬件的驱动程序。进行调试修改,可以使用模块方式或编译进内核两种方式调试驱动。 建立根文件系统,从 www.busybox.net 下载使用 Busybox 软件进行功能裁剪,产生一个最 基本的根文件系统,再根据自己的应用需要添加其它的程序。默认的启动脚本一般不会符合应 用的需要,所以要修改根文件系统的启动脚本。它的存放位置位于/etc 目录下。包括: /etc/init.d/rc.S、/etc/profile 等,自动挂载文件系统的配置文件/etc/fstab,具体情况会随系统不同 而不同。根文件系统有只读、可读可写等类型,需要一些工具来产生烧写映像文件。 建立应用程序的 flash 磁盘分区,一般使用 JFFS2 或 YAFFS 文件系统,这需要在内核中提 供这些文件系统的驱动,有的系统使用一个线性 flash(NOR 型)512K-32M,有的系统使用非线 性 flash(NAND 型)8-512M。有的同时使用,需要根据应用规划 flash 的分区方案。 开发应用和驱动程序,这也是我们的主要工作,可以下载到根文件系统中,也可以放入 Cramfs,JFFS2 等文件系统中,有的应用或驱动程序不使用根文件系统,而是将它们直接与内 核编译在一起。 烧写内核,根文件系统,应用程序。

3.4 嵌入式 ARM+Linux 开发环境的建立
该开发环境又称为交叉编译环境,嵌入式 Linux 开发环境一般由如下几部分构成:Linux 服务器(宿主机) 、工作站、嵌入式目标系统和将它们连接在一起的网络环境,其具体结构如下 图所示: 嵌入式 Linux 开发环境的基本结构

在上图所示的嵌入式Linux开发环境中,Linux服务器作为嵌入式Linux内核编译、应用程 序编译的公共平台,一般由单独的一台PC机充当,安装常用的桌面标准Linux操作系统,如 RedHat Linux等。 工作站即为普通的局域网络计算机,可以是一台或多台,以支持小组项目开发,工作站一 般安装常用的Windows操作系统, 仍然可以完成各种日常工作, 当需要使用Linux服务器资源时, 可从工作站远程登录到Linux服务器,以完成各项需要的操作。 嵌入式目标系统是我们需要开发的最终产品,可以根据开发需要与工作站连接(通常是通 过串行接口或USB接口),或连接到局域网络中(通过以太网接口)。 工作站作为开发人员的操作终端, 可能需要经常登录Linux服务器使用相关资源, 并在Linux 服务器和工作站之间进行文件的传输,因此,一般需要在工作站上安装FTP客户端程序(如 Cuteftp等)和Telnet客户端程序(如SecureCRT等),当Linux服务器的FTP服务和Telnet服务 运行时,开发人员就可以方便的在工作站和Linux服务器之间进行文件传输,并可以通过Telnet 方式登陆到Linux服务器,并对其进行相关操作。 为便于理解,我们约定以后的操作方式如下:开发人员在其中的一台工作站进行操作,通 过远程登陆的方式操作Linux服务器,并使用FTP方式在Linux服务器和工作站之间进行文件传 输,同时嵌入式目标系统需要与网络连接,嵌入式目标系统的串行接口与该工作站的RS232接 口连接,使用工作站上的超级终端作为嵌入式目标系统输入输出终端。 显然,我们首先需要在网络中的 Linux 服务器安装桌面标准 Linux 操作系统(我们约定使 用 RedHat Linux 9),并需要保证局域网络畅通。开发基于 Linux 的应用程序,一般的步骤是 先编写程序源码, 然后编译调试, 最终生成可执行程序。 目前, 已有各种基于 X86 架构的 GUN 开发工具集,如 C 编译器 GCC,C++编译器 G++、连接器、调试器等,这些工具一般都作为标 准 Linux 的一部分存在。 但使用这些工具编译出来的可执行程序只能在基于 X86 架构的 CPU 上 运行,因为编译器最终编译出来的是基于 X86 架构的机器码。 为使编译出的可执行代码能在 诸如 ARM 或其它体系架构的 CPU 上运行,必须有一个编译工具,这个工具应该能运行在基于 X86 架构的 Linux 服务器上,但通过它编译生成的可执行代码能够支持在其他体系结构的 CPU 上运行,这样的一个编译工具就叫交叉编译工具。 为什么要使用交叉编译呢?这是由于嵌入式 设备没有足够的内存以及存储资源来完成其编译过程,所以人们想了个办法,就在主机上完成 针对目标机的代码编译生成,这个过程称为交叉编译。这也目前大多数嵌入式设备开发所使用 的编译方式。 我们如何得到支持特定微处理器架构的交叉编译工具呢?交叉编译工具一般由专门的机构 负责维护,可以从他们的网站上免费取得,但我们已在CD中提供了基于H9200F开发的Linux交

叉编译工具,以下我们描述交叉编译环境的建立过程: 我 们 首 先以 Root 身 份在 Linux服 务 器上 新 建一 个用 于 嵌 入式 Linux开 发 的工 作 目 录: /home/work,以后所有的开发工作都在这个目录下进行。 编译工具以压缩包的形式,由我们提供,文件名为:cross-2.95.3.tar.bz2,包括ARM-gcc 编译器和一些实用程序,位于文件夹 (工具) 里; 在Linux服务器的/usr/local目录新建子目录ARM,从某工作站上通过FTP方式,将文件 cross-2.95.3.tar.bz2传输到Linux服务器的/usr/local/ARM目录,然后以远程登录的方式,进行 解压安装的操作: #bunzip2 cross-2.95.3.tar.bz2 #tar xvf cross-2.95.3.tar 当以上的工作完成以后,就会在当前目录生成一个名为2.95.3的文件夹,嵌入式编译工具就安 装在这个目录中,可以完成源代码的编译。 上述讲解了交叉编译的概念以及编译器的安装,除此之外,还要对服务器进行一系列的配 置,如NFS服务,IP的设置,telnet服务,ftp服务等。我们主要介绍在终端下用命令进行配置, 若准备使用图形界面配置,请大家自己查阅相关资料进行学习。

NFS下载方式的配置(程序的开发流程)
首先NFS方式是一种下载方式,将服务器的文件下载到目标板上去,作为程序开发的重要 一个步骤,一般的程序开发首先在Linux服务器上编辑源文件,然后交叉编译,最后生成可执行 文件,但生成的可执行文件不再通过FTP等方式下载到嵌入式目标系统,而是在嵌入式目标系 统端通过NFS方式挂载Linux服务器的共享分区,让应用程序直接运行在嵌入式目标系统,并进 行调试。 NFS方式需要Linux服务器端和嵌入式目标系统端均能支持NFS文件系统。 与其他方式相 比较,NFS方式具有较高的调试效率,是一种经常采用的方法。NFS方式的开发流程如下图所 示。

当开发人员完成了应用程序的调试与开发,可以将调试好的应用程序下载到嵌入式目标系 统的Flash文件系统,或直接编译到嵌入式Linux内核并烧写到系统的Flash,从而最终形成一个 独立的嵌入式应用系 现介绍NFS的配置方法 网络文件系统(NFS,Network File System)是一种将远程主机上的分区(目录)经网络 挂载到本地系统的一种机制,通过对网络文件系统的支持,用户可以在本地系统上像操作本地 分区一样来对远程主机的共享分区(目录)进行操作。 在嵌入式Linux的开发过程中,开发者需要在Linux服务器上进行所有的软件开发,交叉编 译后,通用FTP方式将可执行文件下载到嵌入式系统运行,但这种方式不但效率低下,且无法 实现在线的调试。 因此, 可以通过建立NFS, 把Linux服务器上的特定分区共享到待调试的嵌入式目标系统上, 就可以直接在嵌入式目标系统上操作Linux服务器,同时可以在线对程序进行调试和修改,大大 的方便了软件的开发。因此,NFS的是嵌入式Linux开发的一个重要的组成部分,本部分内容将 详细说明如何配置嵌入式Linux的NFS开发环境。 嵌入式Linux的NFS开发环境的实现包括两个方面:一是Linux服务器端的NFS服务器支 持;二是嵌入式目标系统的NFS客户端的支持。因此,NFS开发环境的建立需要配置Linux服务 器端和嵌入式目标系统端。 Linux服务器端的NFS配置: 以root身份登陆Linux服务器,编辑/etc目录下的共享目录配置文件exports,指定共享目录 及权限等。 执行如下命令编辑文件/etc/exports: # vi /etc/exports 在该文件里添加如下内容: /home/work 192.168.0.*(rw,sync,no_root_squash)

然后保存退出。 添加的内容表示:允许ip地址范围在192.168.0.*的计算机以读写的权限来访问/home/work 目录。/home/work也称为服务器输出共享目录。 括号内的参数意义描述如下: rw:读/写权限,只读权限的参数为ro; sync:数据同步写入内存和硬盘,也可以使用async,此时数据会先暂存于内存中,而不 立即写入硬盘。 no_root_squash:NFS服务器共享目录用户的属性,如果用户是 root,那么对于这个共享 目录来说就具有 root 的权限。 接着执行如下命令,启动端口映射: # /etc/rc.d/init.d/portmap start 最后执行如下命令启动NFS服务, 此时NFS会激活守护进程, 然后就开始监听 Client 端的 请求: # /etc/rc.d/init.d/nfs start 用户也可以重新启动Linux服务器,自动启动NFS服务。 在 NFS 服务器启动后,还需要检查 Linux 服务器的防火墙等设置(一般需要关闭防火墙 服务) 确保没有屏蔽掉 NFS 使用的端口和允许通信的主机, , 主要是检查 Linux 服务器 iptables, ipchains 等选项的设置,以及/etc/hosts.deny,/etc/hosts.allow 文件。 我们首先在Linux服务器上进行NFS服务器的回环测试,验证共享目录是否能够被访问。在 Linux服务器上运行如下命令: # mount –t nfs 192.168.0.20:/home/work /mnt # ls /mnt 命令将Linux服务器的NFS输出共享目录挂载到/mnt目录下,因此,如果NFS正常工作,应 该能够在/mnt目录看到/home/work共享目录中的内容。

嵌入式目标系统NFS客户端的配置:
在 Linux 服务器设置好后,还需要对客户端进行相关配置。主要是在内核配置选项上选上 相关选项使内核支持 NFS 网络文件系统。 我们已在 H9200F 系统所提供给用户的 Linux 内核进行了相应的配置,用户可以省略这一 步的相关操作。 在嵌入式目标系统的 Linux Shell 下,执行如下命令来进行 NFS 共享目录挂载: # mkdir /mnt/nfs //建立 Linux 服务器输出共享目录的挂载点; # mount –t nfs 192.168.0.20:/home/work /mnt/nfs –o nolock # cd /mnt/nfs # ls 此时,嵌入式目标系统端所显示的内容即为 Linux 服务器的输出目录的内容,即 Linux 服 务器的输出目录/home/work 通过 NFS 映射到了嵌入式目标系统的/mnt/nfs 目录。 用户可以用增/删/修改文件的方式来验证实际效果。 mount 命令中的 192.168.0.20 为 Linux 服务器的 IP 地址,/home/work 为 Linux 服务器端 所配置的共享输出目录,/mnt/nfs 为嵌入式设备上的本地目录。 服务器 IP 的配置 ifconfig etho 192.168.0.200 或 /sbin/ ifconfig etho 192.168.0.200 TFTP 服务器的搭建

在 Linux 下,不管使用的是哪一种 super-server,inetd 或者 xinetd,默认情况下 TFTP 服务 是禁用的,所以要修改文件来开启服务。 根据(1)的安装方法,可以修改文件/etc/xinetd.d/tftp。主要是设置 TFTP 服务器的根目录,开 启服务。修改后的文件如下: service tftp { socket_type =dgram protocol =udp wait =yes user =root server =/usr/sbin/in.tftpd server_args =-s /home/lqm/tftpboot -c disable =no per_source =11 cps =100 2 flags =IPv4 } 说明:修改项 server_args= -s <path> -c,其中<path>处可以改为你的 tftp-server 的根目 录,参数-s 指定 chroot,-c 指定了可以创建文件。 (如果不行,就在/etc/xinted 下执行./vsftp 试试) 创建 tftp 根目录,启动 tftp-server #mkdir /home/lqm/tftpboot #chmod o+w /home/lqm/tftpboot #/sbin/service xinetd restart 这样,tftp-server 就启动了。你可以登陆本机测试以下,命令如下: #tftp your-ip-address tftp>get <download file> tftp>put <upload file> tftp>q 注意:tftp 服务只是在 u-boot 下载内核映象和 ramdisk 时才使用,系统跑起来之后,如果 用 tftp 是很不方便的,主要是应为 tftp 的功能实在有限。在对容量不是太苛刻的情况下,选用 ftp client 比 tftp client 要好一些。 我完成移植后, 如果进行相应的测试, 一般会搭建好 nfs 环境, 这样 Host 和 Target Board 端修改是同步的,比较理想。

使用系统的 Telnet 服务器
修改文件/etc/xinetd.d/telnet。主要是设置 TFTP 服务器的根目录,开启服务。修改后的文件 如下,

service telnet { flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/in.telnetd log_on_failure += USERID disable = no }

再敲入命令 service xinetd restart

3.5 Linux 常用命令的使用
3.5.1 文件列表–ls ls 以默认方式显示当前目录文件列表 ls –a #显示所有文件包括隐藏文件 ls –l #显示文件属性,包括大小,日期,符号连接,是否可读写及是否可执行 3.5.2 目录切换–cd cd dir #切换到当前目录下的dir 目录 cd / #切换到根目录 cd .. #切换到到上一级目录 3.5.3 复制–cp cp source target #将文件source 复制为target cp /root/source . #将/root 下的文件source 复制到当前目录 cp –av soure_dir target_dir #将整个目录复制,两目录完全一样 cp –fr source_dir target_dir #将整个目录复制, 并且是以非链接方式复制, 当source 目录带有符号链接时,两个目录不相同 3.5.4 删除–rm rm file rm -fr dir 3.5.5 移动–mv mv source target

#删除某一个文件 #删除当前目录下叫dir 的整个目录

#将文件source 更名为target

3.5.6 比较–diff diff dir1 dir2 #比较目录1 与目录2 的文件列表是否相同,但不比较文件的实 际内容,不同则列出 diff file1 file2 #比较文件1 与文件2 的内容是否相同,如果是文本格式的文件, 则将不相同的内容显示,如果是二进制代码则只表示两个文件是不同的 3.5.7 回显–echo echo message #显示一串字符 echo "message message2" #显示不连续的字符串 3.5.8 容量查看–du du du -sm /root

#计算当前目录的容量 #计算/root 目录的容量并以M 为单位

3.5.9 文件内容查看–cat cat file #显示文件的内容,和DOS 的type 相同 cat file | more #显示文件的内容并传输到more 程序实现分页显示,使用命令less file可实现相同的功能 3.5.10 分页查看–more

more

#分页命令,一般通过管道将内容传给它,如ls | more

3.5.11 时间日期–date date #显示当前日期时间 date -s 20:30:30 #设置系统时间为20:30:30 date -s 2002-3-5 #设置系统时期为2002-3-5 3.5.12 查找–find find -name /path file 3.5.13 搜索–grep grep -ir “chars” 大小写,-r 为下一级目录

#在/path 目录下查找看是否有文件file

#在当前目录的所有文件查找字串chars,并忽略大小写,-i 为

3.5.14 设置环境变量–export export LC_ALL=zh_CN.GB2312

#将环境变量LC_ALL 的值设为zh_CN.GB2312

3.5.15 编辑–vi vi file #编辑文件file vi 原基本使用及命令: 输入命令的方式为先按ctrl+c, 然后输入:x(退出),:x!(退出并保存) :w(写入文 件),:w!(不询问方式写入文件), :r file(读文件file) ,:%s/oldchars/newchars/g(将所有字 串oldchars 换成newchars) 这一类的命令进行操作 3.5.16 压缩与解压–tar tar xfzv file.tgz #将文件file.tgz 解压 tar cfzv file.tgz source_path #将文件source_path 压缩为file.tgz 3.5.17挂接–mount mount -t yaffs /dev/mtdblock/0 /mnt #把/dev/mtdblock/0 装载到/mnt 目录 mount -t nfs 192.168.0.1:/opt/workspace /mnt #将nfs 服务的共享目录 /opt/workspace 挂接到/mnt 目录 3.5.18 启动信息显示–dmesg dmesg #显示kernle 启动及驱动装载信息 3.5.19 改变文件权限–chmod chmod a+x file #将file 文件设置为可执行,脚本类文件一定要这样设置一个, 否则得用bash file 才能执行 chmod 666 file #将文件file 设置为可读写 3.5.20 创建节点–mknod mknod /dev/tty1 c 4 1 tty终端 3.5.21 进程查看–ps ps

#创建字符设备tty1,主设备号为4,从设备号为1,即第一个

#显示当前系统进程信息

ps –ef 3.5.22 杀死进程–kill kill -9 500

#显示系统所有进程信息

#将进程编号为500 的程序杀死

3.6 VI 指令介绍
Vi 编辑器主要用来作为程序或文本的编辑工具,它的常用指令如下: 进入 vi 的命令 vi filename: 打开或新建文件,并将光标置于第一行首 vi +n filename: 打开文件,并将光标置于第 n 行首 vi + filename: 打开文件,并将光标置于最后一行首 vi +/pattern filename: 打开文件,并将光标置于第一个与 pattern 匹配的串处 vi -r filename: 在上次正用 vi 编辑时发生系统崩溃,恢复 filename vi filename??filename: 打开多个文件,依次进行编辑 移动光标类命令 h: 光标左移一个字符 l: 光标右移一个字符 space: 光标右移一个字符 Backspace: 光标左移一个字符 k 或 Ctrl+p: 光标上移一行 j 或 Ctrl+n: 光标下移一行 Enter: 光标下移一行 w 或 W : 光标右移一个字至字首 b 或 B : 光标左移一个字至字首 e 或 E : 光标右移一个字至字尾 ): 光标移至句尾

(: 光标移至句首 }: 光标移至段落开头 {: 光标移至段落结尾 nG: 光标移至第 n 行首 n+: 光标下移 n 行 n-: 光标上移 n 行 n$: 光标移至第 n 行尾 H: 光标移至屏幕顶行 M: 光标移至屏幕中间行 L: 光标移至屏幕最后行 0: 光标移至当前行首 $: 光标移至当前行尾 屏幕翻滚类命令 Ctrl+u: 向文件首翻半屏 Ctrl+d: 向文件尾翻半屏 Ctrl+f: 向文件尾翻一屏 Ctrl+b: 向文件首翻一屏 nz: 将第 n 行滚至屏幕顶部,不指定 n 时将当前行滚至屏幕顶部。 插入文本类命令 i: 在光标前 I: 在当前行首 a: 光标后 A: 在当前行尾

o: 在当前行之下新开一行 O: 在当前行之上新开一行 r: 替换当前字符 R: 替换当前字符及其后的字符,直至按 ESC 键 s: 从当前光标位置处开始,以输入的文本替代指定数目的字符 S: 删除指定数目的行,并以所输入文本代替之 ncw 或 nCW: 修改指定数目的字 nCC: 修改指定数目的行 删除命令 ndw 或 ndW: 删除光标处开始及其后的 n-1 个字 do: 删至行首 d$: 删至行尾 ndd: 删除当前行及其后 n-1 行 x 或 X: 删除一个字符,x 删除光标后的,而 X 删除光标前的 Ctrl+u: 删除输入方式下所输入的文本 搜索及替换命令 /pattern: 从光标开始处向文件尾搜索 pattern ?pattern: 从光标开始处向文件首搜索 pattern n: 在同一方向重复上一次搜索命令 N: 在反方向上重复上一次搜索命令 :s/p1/p2/g: 将当前行中所有 p1 均用 p2 替代 :n1,n2s/p1/p2/g: 将第 n1 至 n2 行中所有 p1 均用 p2 替代 :g/p1/s//p2/g: 将文件中所有 p1 均用 p2 替换

选项设置 all: 列出所有选项设置情况 term: 设置终端类型 ignorance: 在搜索中忽略大小写 list: 显示制表位(Ctrl+I)和行尾标志($) number: 显示行号 report: 显示由面向行的命令修改过的数目 terse: 显示简短的警告信息 warn: 在转到别的文件时若没保存当前文件则显示 NO write 信息 nomagic: 允许在搜索模式中,使用前面不带“\”的特殊字符 nowrapscan: 禁止 vi 在搜索到达文件两端时,又从另一端开始 mesg: 允许 vi 显示其他用户用 write 写到自己终端上的信息 最后行方式命令 :n1,n2 co n3: 将 n1 行到 n2 行之间的内容拷贝到第 n3 行下 :n1,n2 m n3:将 n1 行到 n2 行之间的内容移至到第 n3 行下 :n1,n2 d: 将 n1 行到 n2 行之间的内容删除 :w: 保存当前文件 :e filename: 打开文件 filename 进行编辑 :x: 保存当前文件并退出 :q: 退出 vi :q!: 不保存文件并退出 vi :!command: 执行 shell 命令 command :n1,n2 w!command: 将文件中 n1 行至 n2 行的内容作为 command 的输入并执行之, 若不 指定 n1,n2,则表示将整个文件内容作为 command 的输入

:r!command: 将命令 command 的输出结果放到当前行 寄存器操作 "?nyy: 将当前行及其下 n 行的内容保存到寄存器?中,其中?为一个字母,n 为一数字 "?nyw: 将当前行及其下 n 个字保存到寄存器?中,其中?为一个字母,n 为一个数 字 "?nyl: 将当前行及其下 n 个字符保存到寄存器?中,其中?为一个字母,n 为一个数字 "?p: 取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母,也可以是 一个数字 ndd: 将当前行及其下共 n 行文本删除,并将所删内容放到 1 号删除寄存器中

四 ARM平台硬件电路的介绍和调试
根据用户需求,设计初特定的嵌入式应用系统,是每一个嵌入式系统设计工程师应该达到 的目标。嵌入式应用系统的设计包含硬件系统的设计和软件系统设计两个部分,并且这两部分 的设计是相互关联,密不可分的,嵌入式应用系统的设计经常需要在硬件和软件的设计之间进 行权衡与折中。因此,这就要求嵌入式系统设计工程师具有较深厚的硬件和软件基础,并具有 熟练应用的能力。 这也是嵌入式应用系统设计与其他的纯粹的软件设计或硬件设计最大的区别。 本章以本实验平台为基础,详细分析系统的硬件设计,实现细节,调试技巧等。

4.1 本 ARM 系统开发平台 AT91RM9200 微处理器主要特点
先简单介绍一下 AT91RM9200 微处理器,具体详细资料请查阅该芯片的数据手册,该微 处理器是一款由 ATMEL 设计生产的嵌入式 ARM 微处理器,采用 208 脚 PQFP 封装,内含一 个 ARM920T 核和以下片内外围,其主要特性如下: ◆ ARM920T ARM-Thumb微处理器核: ? ?工作频率:180MHz,运行速度:200MIPS; ? ?内嵌16KB的数据Cache,16KB指令Cache,写缓冲区; ? ?全功能的MMU(Memory Management Unit); ? ?内嵌Debug通信通道的Emulator; ? ?嵌入式Trace Macrocell (仅限于256-ball BGA 封装); ◆ 片内存储器: ? ?内嵌16KB SRAM和128KB ROM,方便用户调试; ◆ 外部总线EBI接口: ? ?支持SDRAM、Static Memory、Burst Flash、Glueless Connection to CompactFlash ◆ 功能强大的片内外围电路: ? ?增强型的时钟产生器和电源管理控制器; ? ?带有两个PLL的片内振荡器; ? ?慢速的时钟操作模式和软件电源优化能力; ? ?四个可编程的外部时钟信号; ? ?包括周期性中断、看门狗和第二计数器的系统定时器; ? ?带有报警中断的实时时钟(RTC); ? ?调试单元,支持两线UART的Debug调试通道; ? ?带有8个优先级、可单个屏蔽中断源、Spurious中断保护的先进中断控制器; ? ?7个外部中断源和一个快速中断源; ? ?四个32位的PIO控制器,可达122个可编程I/O引脚(每个都有输入控制、可中 断及开路的输出能力); ? ?20通道的DMA控制器; ◆ 10M/100M网卡: ? ?传输媒体独立接口(MII)或精简传输媒体独立接口(RMII); ? ?集成28字节的FIFOs和直接用于收发DMA通道; ◆ 双USB 2.0 主口(12 M-bits/秒): ? ?两个片内收发器(208脚的PQFP封装只有一个);

? ?集成的FIFOs和DMA通道; ◆ 一个USB 2.0从口(12 M-bits/秒): ? ?一个片内收发器;2KB可配置的集成FIFOs; ◆ 多媒体卡接口(Multimedia Card Interface,MCI): ? ?支持自动协议控制和快速自动数据传输器; ? ?兼容MMC卡和SD存储卡,最多可支持两个SD存储卡; ◆ 三个同步的串行控制器(Synchronous Serial Controllers,SSC): ? ?每个收发器均有的独立的时钟和帧同步信号; ? ?支持I2S模拟接口,支持时分多路复用; ? ?支持32位高速连续数据流发送; ◆ 四个同步/异步收发器 (USART): ? ?支持ISO7816 T0/T1标准智能卡; ? ?支持软、硬件握手功能; ? ?支持RS485传输、速度可达115 Kbps的红外传输; ? ?USART1带有全功能Modem控制线; ◆ 主/从串行外围接口(SPI): ? ?8/16位可编程数据长度,4个外围芯片选择信号; ◆ 两个3通道,16位的定时器/计数器(TC): ????? ?3个外部时钟输入, 每个I/O通道有两个可以复用的I/O口; ????? ?双PWM生成,捕获/波形模式,向上和向下计数兼容; ◆ 两线接口(Two-wire Interface,TWI): ????? ?以主模式支持所有两线的Atmel EEPROMs设备; ◆ IEEE 1149.1 JTAG边界扫描接口; ◆ 供电电源: ????? ?1.65V 到1.95V for VDDCORE, VDDOSC and VDDPLL; ????? ?1.65V 到3.6V for VDDIOP (外设I/Os) and for VDDIOM (内存I/Os); ◆ 可选择 208 脚 PQFP 和 256 脚 BGA 封装;

4.2 本 ARM 系统开发平台的硬件组成及原理
该 ARM 平台可用于教学以及产品开发, 内嵌 100M 以太网, cpu 带有 usb2.0 协议的 usb host 与 device 接口,支持 sd 卡,2s 音频和全功能 9 线串口等,主频 180Mhz,带有 mmu 主存管理 单元,性能稳定,功能强大。 该硬件平台主要包括两部分,最小系统与扩展部分,先重点介绍最小系统,什么叫最小系 统呢?即让 Linux 操作系统运行起来所必须的器件所构成的系统,该系统 pcb 如下:

ARM 最小系统包括: 一片 at91rm9200 微处理器; 一片 4M NorFlash(2M*16)可完全固化 Linux 内核; 一片 32MB SDRAM(2×8M×16 位),可扩展为 64MB; 一片 64MB NAND Flash,可存储大量数据; 一个 9 针 D 型 RS-232C 串行接口,对应于 UART0,该 UART0 为全功能接口; 一个 RJ-45 10/100M 自适应以太网接口; 一片 5v 转 3.3v ,3.3v 转 1.8v 电源芯片(可外接); 各部分基本功能描述如下:(具体电路请查阅该系统的 protel 原理图) 串行接口电路用于AT91RM9200系统与其他应用系统的短距离双向串行通讯,以及终端控制 等; 复位电路可完成系统上电复位和在系统工作时用户按键复位;

电源电路为5V到3.3V,3.3V转1.8V的DC-DC转换器, 给AT91RM9200及其他需要电源的外围电 路供电; FLASH存储器可存放已调试好的用户应用程序、嵌入式操作系统或其他在系统掉电后需要 保存的用户数据等; SDRAM存储器作为系统运行时的主要区域,系统及用户数据、堆栈均位于SDRAM存储器中; 10M/100M以太网接口为系统提供以太网接入的物理通道,通过该接口,系统可以10M或 100Mbps的速率接入以太网; 系统总线扩展引出了数据总线、地址总线和必须的控制总线,便于用户根据自身的特定需 求,扩展外围电路。 现详细介绍各个子系统 1,主芯片 AT91RM9200 电路,下面是该子系统的原理图:

实际上,ARM 可作为一款高级单片机,所以要让单纯的 ARM 能工作(并不是 Linux 运行 起来) ,只需要电源,复位电路与晶振 3 部分和设置一些控制引脚,如图可证实这一点,图上有 一个引脚连在一跳线上,可接高或低电平,这主要决定 ARM 是从片外还是片内启动,它主要 用到 1.8v 与 3.3v 两种电源, 以及 18.432Mhz 与 32.768khz 两种晶振, 其余端口都外接其他器件, 后面会介绍。 AT91RM9200共有208只引脚,采用PQFP封装,这对于那些常使用8位/16位DIP封装微控制器 的读者来说,可能会觉得有点复杂,然而,尽管AT91RM9200引脚较多,但根据各自的功能,分 布很有规律。 首先,电源和接地引脚有近50根,再除去地址总线、数据总线和通用I/O口,以及其他的专 用模块如HDLC、UART、IIC、MAC等的接口,真正需要仔细研究的引脚数就不是很多了,但这些 引脚主要是控制信号,需要认真对待,对于它们,具体参考芯片手册。 在硬件系统的设计中,应当注意芯片引脚的类型,AT91RM9200(也包括其他的微处理器) 的引脚主要分为三类,即:输入(I)、输出(O)、输入/输出(I/O)。 输出类型的引脚主要用于AT91RM9200对外设的控制或通信,由AT91RM9200主动发出,这些 引脚的连接不会对AT91RM9200自身的运行有太大的影响。 输入/输出类型的引脚主要是AT91RM9200与外设的双向数据传输通道。 而某些输入类型的引脚,其电平信号的设置是AT91RM9200本身正常工作的前提,在系统设

计时必须小心处理。 2 Flash 存储器接口电路, Flash存储器是一种可在系统(In-System)进行电擦写,掉电后信息不丢失的存储器。它 具有低功耗、大容量、擦写速度快、可整片或分扇区在系统编程(烧写)、擦除等特点,并且 可由内部嵌入的算法完成对芯片的操作,因而在各种嵌入式系统中得到了广泛的应用。作为一 种非易失性存储器,Flash在系统中通常用于存放程序代码、常量表以及一些在系统掉电后需要 保存的用户数据等。常用的Flash为8位或16位的数据宽度,编程电压为单3.3V。主要的生产厂 商为ATMEL、AMD、HYUNDAI等,他们生产的同型器件一般具有相同的电气特性和封装形式,可通 用。 该平台主要用到两种类型,NorFlash 与 NandFlash,具体型号分别为 AT49BV322A 与 K9F1208U,原理图如下: NandFlash:

NorFlash

这两个电路图并不是很难,很容易看懂,先介绍这两种 flash 的特点与区别 Norflash: 优点: 标准的数据地址读取数据,并且两类总线分开,驱动程序方便编写,但硬件 线路相对复杂,它有一个最大的优势,就是稳定性好,适合放置内核以及文件系统,读取速度 快。 缺点: 存取容量小,价格贵 Nandflash:优点: 硬件结构简单,价格便宜,而且容量大,适合放置数据信息 缺点: 由于它采用分时复用的方式读取,硬件驱动编写较为复杂,且读取速度慢, 而且它的稳定性不是很好,一般不用它放置内核 对于该 ARM 平台, 我们可以采用两种系统启动方式, 一种是将内核放在 norflash 上, Linux 从 norflash 上启动,一种是将内核放在 nandflash 上,Linux 从该 flash 上启动,两种原理有所差 异,不过大部分是相同的。 先以该系统中使用的Flash存储器AT49BV322A为例,简要描述一下该Flash存储器的基本特 性: AT49BV322A的单片存储容量为2M*16位 (4M字节) 工作电压为2.65V~3.6V, , 采用48脚TSOP 封装或48脚FBGA封装,16位数据宽度,可以以8位(字节模式)或16位(字模式)数据宽度的方 式工作。 AT49BV322A仅需单3V电压即可完成在系统的编程与擦除操作,通过对其内部的命令寄存器 写入标准的命令序列,可对Flash进行编程(烧写)、整片擦除、按扇区擦除以及其他操作。 表 AT49BV322A的引脚信号描述 引 脚 类 描 述 型 A[19:0] I 地址总线。在字节模式下,DQ[15]/A[-1]用作21位字节地址的最低位。 DQ[15]/A[-1] DQ[14:0] BYTE CE OE# WE# I/O 三 态 I I I I 数据总线。在读写操作时提供8位或16位的数据宽度。在字节模式下, DQ[15]/A[-1]用作21位字节地址的最低位,而DQ[14:8]处于高阻状态。 模式选择。低电平选择字节模式,高电平选择字模式 片选信号,低电平有效。在对AT49BV322A进行读写操作时,该引脚必须 为低电平,当为高电平时,芯片处于高阻旁路状态 输出使能,低电平有效。在读操作时有效,写操作时无效。 写使能,低电平有效。在对AT49BV322A进行编程和擦除操作时,控制相 应的写命令。

RESET

硬件复位,低电平有效。对AT49BV322A进行硬件复位。当复位时, AT49BV322A立即终止正在进行的操作。 RY/BY O 就绪/忙 状态指示。用于指示写或擦除操作是否完成。当AT49BV322A正 在进行编程或擦除操作时,该引脚位低电平,操作完成时为高电平,此 时可读取内部的数据。 VCC -3.3V电源 VSS -接地 以上为一款常见的Flash存储器AT49BV322A的简介, 更具体的内容可参考AT49BV322A的用户 手册。其他类型的Flash存储器的特性与使用方法与之类似,用户可根据自己的实际需要选择不 同的器件下面,我们使用AT49BV322A来构建Flash存储系统。由于ARM微处理器的体系结构支持8 位/16位/32位的存储器系统,对应的可以构建8位的Flash存储器系统、16位的Flash存储器系统 或32位的Flash存储器系统。32位的存储器系统具有较高的性能,而16位的存储器系统则在成本 及功耗方面占有优势,而8位的存储器系统现在已经很少使用。在此,本系统使用的是16位存储 器系统。所以主要介绍16位Flash存储器系统的构建。 在大多数的系统中,选用一片16位的Flash存储器芯片(常见单片容量有1MB、2MB、4MB、 8MB等)构建16位的Flash存储系统已经足够,在此采用一片AT49BV322A构建16位的Flash存储器 系统,其存储容量为2MB。Flash存储器在系统中通常用于存放程序代码,系统上电或复位后从 此获取指令并开始执行,因此,应将存有程序代码的Flash存储器配置到FLASH Bank0,即将 AT91RM9200的NCS0/BFCS(Pin166)接至AT49BV322A的CE端。 AT49BV322A的RESET端接系统复位信号; OE端接AT91RM9200的NRD/NOE/CFOE(Pin170); WE端接AT91RM9200的NWR0/NWE/CFWE(Pin1171); BYTE端上拉,使AT49BV322A工作在字模式(16位数据宽度); RY/BY指示AT49BV322A编程或擦除操作的工作状态, 但其工作状态也可通过查询片内的相关 寄存器来判断,因此可将该引脚悬空; 地址总线[A19~A0]与AT91RM9200的地址总线[ADDR19~ADDR0]相连; 16位数据总线[DQ15~DQ0]与AT91RM9200的低16位数据总线[XDATA15~XDATA0] 对于K9F1208U的介绍,请大家自己查阅资料分析。 3 SDRAM接口电路

I

本系统内存容量占32M,它有独立的地址数据线H9200F包含32MB SDRAM,作为程序的运

行空间。由两片16位数据宽度的SDRAM存储器并联为32位数据宽度的SDRAM存储系统,并映 射到AT91RM9200的Chip Select 1。AT91RM9200微处理器内部的16KB的SRAM,通常被配置为堆 栈区以提高系统性能。 与Flash存储器相比较,SDRAM不具有掉电保持数据的特性,但其存取速度大大高于Flash 存储器,且具有读/写的属性,因此,SDRAM在系统中主要用作程序的运行空间,数据及堆栈区。 当系统启动时,CPU首先从复位地址0x0处读取启动代码,在完成系统的初始化后,程序代码一 般应调入SDRAM中运行, 以提高系统的运行速度, 同时, 系统及用户堆栈、 运行数据也都放在SDRAM 中。 SDRAM具有单位空间存储容量大和价格便宜的优点, 已广泛应用在各种嵌入式系统中。 SDRAM 的存储单元可以理解为一个电容,总是倾向于放电,为避免数据丢失,必须定时刷新(充电)。 因此,要在系统中使用SDRAM,就要求微处理器具有刷新控制逻辑,或在系统中另外加入刷新控 制逻辑电路。 目前常用的SDRAM为8位/16位的数据宽度,工作电压一般为3.3V。主要的生产厂商为 HYUNDAI、Winbond等。他们生产的同型器件一般具有相同的电气特性和封装形式,可通用。 以本系统中使用的HY57V641620为例,简要描述一下SDRAM的基本特性及使用方法: HY57V641620存储容量为4组×16M位(8M字节),工作电压为3.3V,常见封装为54脚TSOP, 兼容LVTTL接口,支持自动刷新(Auto-Refresh)和自刷新(Self-Refresh),16位数据宽度。 表5-3-2 HY57V641620引脚信号描述 引 脚 名称 描 述 CLK 时钟 芯片时钟输入。 CKE 时钟使能 片内时钟信号控制。 /CS 片选 禁止或使能除CLK、CKE和DQM外的所有输入信号。 BA0,BA1 A11~A0 组地址选择 地址总线 用于片内4个组的选择。 行地址:A11~A0,列地址:A7~A0,自动预充电标志:A10

/RAS, 行地址锁存 参照功能真值表,/RAS,/CAS和/WE定义相应的操作。 /CAS, 列地址锁存 /WE 写使能 LDQM,UDQM 数据I/O屏蔽 在读模式下控制输出缓冲;在写模式下屏蔽输入数据 DQ15~DQ0 数据总线 数据输入输出引脚 VDD/VSS 电源/地 内部电路及输入缓冲电源/地 VDDQ/VSSQ 电源/地 输出缓冲电源/地 NC 未连接 未连接 以上为一款常见的SDRAM HY57V641620的简介,更具体的内容可参考HY57V641620的用户手 册。其他类型SDRAM的特性与使用方法与之类似,用户可根据自己的实际需要选择不同的器件。 根据系统需求,可构建16位或32位的SDRAM存储器系统,但为充分发挥32位CPU的数据处理 能力,大多数系统采用32位的SDRAM存储器系统。 HY57V641620为16位数据宽度,单片容量为8MB,系统选用的两片HY57V641620并联构建32 位的SDRAM存储器系统,共16MB的SDRAM空间,可满足嵌入式操作系统及各种相对较复杂的算法 的运行要求。 与Flash存储器相比,SDRAM的控制信号较多,其连接电路也要相对复杂。 两片HY57V641620并联构建32位的SDRAM存储器系统,其中一片为高16位,另一片为低16位, 可将两片HY57V641620作为一个整体配置到DRAM/SDRAM Bank0~DRAM/SDRAM Bank3的任一位置, 一般配置到DRAM/SDRAM Bank0,即将AT91RM9200的nSDCS<0>(Pin167)接至两片HY57V641620 的/CS端。 两片HY57V641620的CLK端接AT91RM9200的SDCLK端(Pin174);

两片HY57V641620的CKE端接AT91RM9200的SDCKE端(Pin175); 两片HY57V641620的/RAS、/CAS、/WE端分别接AT91RM9200的SDRAS端(Pin176)、SDCAS端 (Pin177)、SDWE端(Pin178); 两片HY57V641620的A11~A0接AT91RM9200的地址总线ADDR<11>~ADDR<0>; 两片HY57V641620的BA1、BA0接AT91RM9200的地址总线ADDR<17>~ADDR<16>; 高16位片的DQ15~DQ0接AT91RM9200的数据总线的高16位XDATA<31>~XDATA<16>, 低16位片 的DQ15~DQ0接AT91RM9200的数据总线的低16位XDATA<15>~XDATA<0>; 高16位片的UDQM、LDQM分别接AT91RM9200的NWR3/NBS3/CFIOW,A1,低16位片的UDQM、LDQM 分别接AT91RM9200的NWR1/NBS1/CFIOR、A0。

4 10M/100M以太网接口电路

作为一款优秀的网络控制器,基于AT91RM9200的系统若没有以太网接口,其应用价值就 会大打折扣,因此,就整个系统而言,以太网接口电路应是必不可少的,但同时也是相对较复 杂的。 从硬件的角度看, 以太网接口电路主要由MAC控制器和物理层接口 (Physical Layer, PHY) 两大部分构成, 目前常见的以太网接口芯片, 如RTL8019、 RTL8029、 RTL8039、 CS8900、 DM9008 等,其内部结构也主要包含这两部分。 AT91RM9200内嵌一个以太网控制器,支持媒体独立接口(Media Independent Interface, MII)和带缓冲DMA接口(Buffered DMA Interface,BDI)。可在半双工或全双工模式下提供 10M/100Mbps的以太网接入。 因此,AT91RM9200内部实际上已包含了以太网MAC控制,但并未提供物理层接口,因此, 需外接一片物理层芯片以提供以太网的接入通道。 常用的单口10M/100Mbps高速以太网物理层接口器件主要有RTL8201、DM9161等,均提供 MII接口和传统7线制网络接口,可方便的与AT91RM9200接口。以太网物理层接口器件主要功 能一般包括:物理编码子层、物理媒体附件、双绞线物理媒体子层、10BASE-TX编码/解码器和 双绞线媒体访问单元等。 在该系统中,使用DM9161E作为以太网的物理层接口。

由于AT91RM9200片内已有带MII接口的MAC控制器,而DM9161E也提供了MII接口,各种 信号的定义也很明确, 因此DM9161E与AT91RM9200地连接比较简单.因此, 具体连接原理请查 阅芯片手册分析 5 串口接口电路

串口之所以作为最小系统的一部分,是因设备为烧写系统的时候最开始要通过串口来传送 数据,它也作为与工作机交互所必须的器件,作为终端,来对整个 ARM 系统进行操作。同时 它也可以作为数据传输。 几乎所有的微控制器、PC都提供串行接口,使用电子工业协会(EIA)推荐的RS-232-C标 准,这是一种很常用的串行数据传输总线标准。早期它被应用于计算机和终端通过电话线和 MODEM进行远距离的数据传输,随着微型计算机和微控制器的发展,不仅远距离,近距离也 采用该通信方式。在近距离通信系统中,不再使用电话线和MODEM,而直接进行端到端的连 接。 RS-232-C标准采用的接口是9芯或25芯的D型插头,以常用的9芯D型插头为例,各引脚定义如表 5-3-3所示: D型插头引脚信号描述 脚 名称 1 DCD 2 RXD 3 TXD 4 DTR 5 GND 6 DSR 7 RTS 8 CTS 9 RU



功能描述
数据载波检测 数据接收 数据发送 数据终端准备好 地 数据设备准备好 请求发送 清除发送 振铃指示

要完成最基本的串行通信功能,实际上只需要RXD、TXD和GND即可,但由于RS-232-C 标准所定义的高、低电平信号与AT91RM9200系统的LVTTL电路所定义的高、低电平信号完全 不同,LVTTL的标准逻辑“1”对应2V~3.3V电平,标准逻辑“0”对应0V~0.4V电平,而RS-232-C 标准采用负逻辑方式,标准逻辑“1”对应-5V~-15V电平,标准逻辑“0”对应+5V~+15V电平,显 然,两者间要进行通信必须经过信号电平的转换,目前常使用的电平转换电路为MAX3232,关 于MAX3232更具体的内容可参考MAX3232的用户手册。

6 电源部分

在该系统中,需要使用1.8V和3.3V的直流稳压电源,为简化系统电源电路的设计,要求整 个系统的输入电压为高质量的5V的直流稳压电源,然后利用转换器将5V转为3.3V和1.8 V。 系统 电源电路如上图所示。 7 复位电路 在系统中,复位电路主要完成系统的上电复位和系统在运行时用户的按键复位功能。复位 电路可由简单的RC电路构成,也可使用其他的相对较复杂,但功能更完善的电路。 本系统采用较简单的RC复位电路,经使用证明,其复位逻辑是可靠的。 该复位电路的工作原理如下:在系统上电时,通过电阻R1向电容C1充电,当C1两端的电压 未达到高电平的门限电压时,Reset端输出为低电平,系统处于复位状态;当C1两端的电压达到 高电平的门限电压时,Reset端输出为高电平,系统进入正常工作状态。 当用户按下按钮S1时, C1两端的电荷被泻放掉, Reset端输出为低电平, 系统进入复位状态, 再重复以上的充电过程,系统进入正常工作状态。 两级非门电路用于按钮去抖动和波形整形;nReset端的输出状态与Reset端相反,以用于高 电平复位的器件;通过调整R1和C1的参数,可调整复位状态的时间。

4.3本ARM系统开发平台的调试
通过上一节对AT91RM9200系统硬件组成的介绍,具有一定系统开发经验的读者就可以设计 开发自己的特定应用系统, 上节所介绍的内容实际上可理解为一个基于AT91RM9200的最小系统, 读者可根据自己的实际需要做适当的增减。 当系统设计制作完成时,必须经过仔细的调试,才能保证系统按照设计意图正常工作。尽 管系统的调试与个人对电路工作原理的理解和实际的电路调试经验有很大的关系,但一定的调 试方法也是必不可少的。掌握正确的调试方法可使调试工作变得容易,大大缩短系统的开发时 间,反之,可能会使整个系统的开发前功尽弃,以失败告终。 本节以单元电路为单位,并结合笔者自身在系统调试时所遇到的一些具有代表性的问题, 循序渐进的介绍整个系统的调试过程。在此,笔者建议:当用户的印制电路板制作完毕后,不 要急于焊接元器件,请首先对照原理图仔细检查印制电路板的连线,确保无误后方可焊接。同 时,尽可能的以各单元电路为单位,一个个焊接调试,以便在调试过程中遇到困难时缩小故障 范围,在系统上电后,应先检查电路工作有无异常,芯片在工作时有一定的发热是正常的,但 如果有芯片特别发烫,则一定有故障存在,需断电检查确认无误后方可继续通电调试。调试工 具一般需要示波器、万用表等。 在正式讲解调试电路之前,先提示一下在焊接芯片时所需注意的地方和技巧,贴片式元器 件的拆卸、焊接宜选用200~280℃调温式尖头烙铁。贴片式电阻器、电容器的基片大多采用陶 瓷材料制作,这种材料受碰撞易破裂,因此在拆卸、焊接时应掌握控温、预热、轻触等技巧。 控温是指焊接温度应控制在200~250℃左右。 预热指将待焊接的元件先放在100℃左右的环境里预热1~2分钟, 防止元件突然受热膨胀损

坏。 轻触是指操作时烙铁头应先对印制板的焊点或导带加热,尽量不要碰到元件。 另外还要控制每次焊接时间在3秒钟左右,焊接完毕后让电路板在常温下自然冷却。以上方 法和技巧同样适用于贴片式晶体二、三极管的焊接。 贴片式集成电路的引脚数量多、间距窄、硬度小,如果焊接温度不当,极易造成引脚焊锡 短路、虚焊或印制线路铜箔脱离印制板等故障。拆卸贴片式集成电路时,可将调温烙铁温度调 至260℃左右,用烙铁头配合吸锡器将集成电路引脚焊锡全部吸除后,用尖嘴镊子轻轻插入集成 电路底部,一边用烙铁加热,一边用镊子逐个轻轻提起集成电路引脚,使集成电路引脚逐渐与 印制板脱离。用镊子提起集成电路时一定要随烙铁加热的部位同步进行,防止操之过急将线路 板损坏。 换入新集成电路前要将原集成电路留下的焊锡全部清除,保证焊盘的平整清洁。再将待焊 集成电路脚位对准印制板相应焊点,焊接时用手轻压在集成电路表面,防止集成电路移动,另 一只手操作电烙铁蘸适量焊锡将集成电路四角的引脚与线路板焊接固定后,再次检查确认集成 电路型号与方向,正确后正式焊接,将烙铁温度调节在250℃左右,一只手持烙铁给集成电路引 脚加热,另一只手将焊锡丝送往加热引脚焊接,直至全部引脚加热焊接完毕,最后仔细检查和 排除引脚短路和虚焊,待焊点自然冷却后,用毛刷蘸无水酒精再次清洁线路板和焊点,防止遗 留焊渣。 检修模块电路板故障前,宜先用毛刷蘸无水酒精清理印制板,清除板上灰尘、焊渣等杂物, 并观察原电路板是否存在虚焊或焊渣短路等现象,以及早发现故障点,节省检修时间。

现在正式讲解如何调试电路,正如前面所说,在焊接调试时,以单元电路为单位,逐步进 行调试,以下面顺序逐步进行焊接调试。 1 电源及复位电路
电源电路和复位电路相对比较简单,按照原理图连接后应该就可以正常工作,此时电源电 路的输出为3.3V与1.8V,用万用表检验是否正常。 复位电路的RESET端在未按按钮时输出应为高电平(3.3V),按下按钮后变为低电平,按 钮松开后应恢复到高电平。 电源电路和复位电路是整个系统正常工作的基础,应首先保证他们的正常工作。

2 AT91RM9200及晶振电路

再进一步焊好AT91RM9200及外围基本电路及后(此前得焊好串口电路以供调 试观察用),在保证电源电路和复位电路正常工作的前提下,检验晶振是否正常, 然后可通过串口调试AT91RM9200, 给系统上电后,选择片内启动方式(通过将跳 线J5的2—3短接),可通过超级终端(后面会详细讲述)查看AT91RM9200是否已 正常工作,若AT91RM9200已正常工作,超级终端会出现CCCCCCCCC,此时
AT91RM9200片内ROM的程序已开始运行。若没出现,可能是在焊接过程中出现虚焊或短路的 情况,再次检查电路(用万用表检查),也可能是串口部分出现问题,若电路检查没问题,那 就直接换芯片再试。

3 SDRAM接口电路的调试
然后接着焊接和调试SDRAM接口电路部分,在系统的两类存储器中,SDRAM相对于FLASH存储 器控制信号较多,似乎调试应该困难一些,但由于SDRAM的所有刷新及控制信号均由AT91RM9200 片内的专门部件控制,无需用户干预,在AT91RM9200正常工作的前提下,只要连线无误,SDRAM 就应能正常工作, 反之, Flash存储器的编程、 擦除操作均需要用户编程控制, 且程序还应在SDRAM 中运行,因此,应先调试好SDRAM存储器系统,再进行Flash存储器系统的调试。

在进行存储器系统调试之前,用户必须深入了解AT91RM9200系统管理器关于存储器映射的 工作原理。基于AT91RM9200系统的最大可寻址空间为64MB,采用统一编址的方式,将系统的 SDRAM、SRAM、ROM、Flash、外部I/O以及片内的特殊功能寄存器和8K一体化SRAM均映射到该地 址空间。为便于使用与管理,AT91RM9200又将64MB的地址空间分为若干个组,分别由相应的特 殊功能寄存器进行控制,具体原理仍然到AT91RM9200芯片手册相关部分自己查阅。(建议这部 分原理了解即可) 在焊接好该接口电路后,通过超级终端将Uboot(即BIOS)烧入SDRAM,具体方法 在引导程序,内核与根文件系统的烧写一章中会详细介绍,若正常显示U-Boot的提示符,说明 SDRAM接口电路工作正常(不过此时掉电即丢失,一旦复位,需要重新烧写)。如果没有显示 或显示不正常,反复检查该电路焊接是否有问题,实在不行,再重焊一块芯片。

4 Flash接口电路的调试
Flash存储器的调试主要包括Flash存储器的编程(烧写)和擦除,与一般的存储器件不同, 用户只需对Flash存储器发出相应的命令序列, Flash 存储器通过内部嵌入的算法即可完成对芯 片的操作,由于不同厂商的Flash存储器在操作命令上可能会有一些细微的差别,Flash存储器 的编程与擦除工具一般不具有通用性,这也是为什么Flash接口电路相对较难调试的原因之一, 因此, 应在理解Flash存储器编程和擦除的工作原理的情况下, 根据不同型号器件对应的命令集, 编写相应的程序对其进行操作。 对于本实验平台, 我们可以通过将系统烧入FLASH后复位来检查其电路是否工作正常, 以本 系统NorFlash为例,当焊接好该电路后,将Uboot烧入FLASH,具体方法仍然在引导程序,内核 与根文件系统的烧写一章中会详细介绍,改变启动方式,复位后观察Uboot是否正常启动,若正 常启动,可初步认为该部分电路正常工作(但不一定) ,可通过后续烧入内核,根文件系统来进 一步验证该电路正常与否。若Uboot未正常启动,就仍然检查电路,分析原理,直到正常启动。

5 10M/100M以太网接口电路
以太网接口电路主要由MAC控制器和物理层接口(Physical Layer,PHY)两大部分构成, 而MAC控制器在AT91RM9200片内,需要用户作硬件调试的只是外接的物理层接口DM9161E。由于 MAC控制器的工作原理相对复杂,相应的特殊功能寄存器也比较多,在此不作详述,DM9161E和 AT91RM9200均有MII接口,对应引脚及功能定义明确,只要正确连接,一般都能正常工作。当 DM9161E正常工作在100Mbps状态时,其发送时钟引脚 ,接收时钟引脚均应有波形输出,同时, 对应的LED指示灯也能正确指示芯片的工作状态。对于本系统我们主要通过在Uboot下测试网络 是否正常来检验该接口电路是否正常,当电路焊接号后,插上网线,在超级终端Uboot环境下, 设置好IP,通过TFTP观察能否从服务器下载相关文件来检验,比如敲入tftp 21000000 ZImage, 具体仍然参考后面章节介绍。 至此,最小系统应该已经焊接完毕,可以将内核,根文件系统烧入,来进一步检验各子系 统特别是FLASH,网络部分是否工作正常。 在本节结束之前,对该系统的印刷电路板(PCB)设计中应注意的事项作一个简要的说明。 在系统中, AT91RM9200的片内工作频率上百MHz, 其以太网接口电路的工作率更高达100MHz以上, 因此,在印刷电路板的设计过程中,应该遵循一些高频电路的设计基本原则,否则会使系统工 作不稳定甚至不能正常工作。印刷电路板的设计人员应注意以下几个方面: — 注意电源的质量与分配。 — 同类型信号线应该成组、平行分布。 在设计印刷电路板时,能给各个单元电路提供高质量的电源,就会使系统的稳定性大幅度 的提高。但如何能提高电源的质量,常用的手段有以下几个: 1、 电源滤波 为提高系统的电源质量,消除低频噪声对系统的影响,一般应在电源进入印刷电路板的位 置和靠近各器件的电源引脚处加上滤波器,以消除电源的噪声,常用的方法是在这些位置加上

几十到几百微法的电容。 同时,在系统中除了要注意低频噪声的影响,还要注意元器件工作时产生的高频噪声,一 般的方法是在器件的电源和地之间加上0.1uF左右地电容,可以很好地滤出高频噪声的影响。 2、 电源分配 实际的工程应用和理论都证实,电源的分配对系统的稳定性有很大的影响,因此,在设计 印刷电路板时,要注意电源的分配问题。在印刷电路板上,电源的供给一般采用电源总线(双 面板)或电源层(多层板)的方式。电源总线由两条或多条较宽的线组成,由于受到电路板面 积的限制,一般不可能布得过宽,因此存在较大的直流电阻,但在双面板得设计中也只好采用 这种方式了,只是在布线的过程中,应尽量注意这个问题。在多层板的设计中,一般使用电源 层的方式给系统供电。该方式专门拿出一层作为电源层而不再在其上布信号线。由于电源层遍 及电路板的全面积,因此直流电阻非常的小,采用这种方式可有效的降低噪声,提高系统的稳 定性。 同类型信号线的分布 在各种微处理器的输入输出信号中,总有相当一部分是相同类型的,例如数据线、地址线。 对这些相同类型的信号线应该成组、平行分布,同时注意它们之间的长短差异不要太大,采用 这种布线方式,不但可以减少干扰,增加系统的稳定性,还可以使布线变得简单,印刷电路板 的外观更美观。 以本系统的印刷电路板设计为例,成组的信号线主要是数据线和地址线,可在元器件位置 确定后,首先完成他们的布线,尽可能做到成组、平行分布,同时应尽可能的短。然后在进行 各种控制信号的布线,最后处理电源和接地引脚。

五 Linux 内核的编译,裁剪和移植
交叉编译环境搭建以后,就需要对内核进行配置,裁剪,移植,编译,使之能 在我们的目标平台运行起来,所谓 Linux 移植就是把 Linux 操作系统针对具体的目标平台
做必要改写之后,安装到该目标平台使其正确的运行起来。这个概念目前在嵌入式开发领域讲 的比较多。其基本内容是:获取某一版本的 Linux 内核源码,根据我们的具体目标平台对这源 码进行必要的改写(主要是修改体系结构相关部分),然后添加一些外设的驱动,打造一款适 合于我们目标平台(可以是嵌入式便携设备也可以是其它体系结构的 PC 机)的新操作系统, 对该系统进行针对我们目标平台的交叉编译,生成一个内核映象文件,最后通过一些手段把该 映象文件烧写(安装)到我们目标平台中。而通常对 Linux 源码的改写工作难度较大,它要求 你不仅对 Linux 内核结构要非常熟悉,还要求你对目标平台的硬件结构要非常熟悉。同时还要 求你对相关版本的汇编语言较熟悉因为与体系结构相关的部分源码往往是用汇编写的。所以这 部分工作一般由目标平台提供商来完成。比如说针对目前嵌入式系统中最流行的 ARM 平台,它 的这部分工作就是由英国 ARM 公司的工程师完成的,我们所要做的就是从其网站上下载相关版 本 Linux 内核的补丁(Patch)。把它打到我们的 Linux 内核上,再进行交叉编译就行。

5.1 linux 内核源代码的目录分析
linux-2.6.x 的目录结构如下图所示:

Arch
与体系结构相关的代码全部放在这里,如下图所示,我们的实验设备中使用的是其中的arm 目录。

Documentation
这里存放着内核的所有开发文档,如图所示,其中的文件会随版本的演变发生变化,通过 阅读这里的文件是获得内核最新的开发资料的最好的地方。

Drivers
此目录包括所有的驱动程序,如下图所示,下面又建立了多个目录,分别存放各个分类的 驱动程序源代码。下面的截图drivers 目录文件列表。

Drivers/char
字符设备是drivers 目录中最为常用,也许是最为重要的目录,因为其中包含了大量与驱 动程序无关的代码。通用的tty 层在这里实现,console.c 定义了linux 终端类型,vt.c中定 义了虚拟控制台; lp.c 中实现了一个通用的并口打印机的驱动, 并保持设备无关性; kerboard.c 实现高级键盘处理,它导出handle_scancode 函数,以便于其他与平台相关的键盘驱动使用。 我们的大部分实验也是放在这个目录下。

Driver/bloc
其中存放所有的块设备驱动程序,也保存了一些设备无关的代码。目录中最重要的文件是 ll_rw_blk.c,它是一个底层块读写文件,blkpg.c 实现了块设备的分区和几何参数的通用 处理,它导出的公共函数为blk_ioctl,可以被其他块设备驱动程序使用。rd.c 实现了RAM 磁盘,nbd.c 实现了网络块设备,loop.c 实现了回环块设备。

Drives/ide
专门存放针对IDE 设备的驱动。

Drivers/scsi
存放SCSI 设备的驱动程序,当前的cd 刻录机、扫描仪、U 盘等设备都依赖这个SCSI 的通用设备。

Drivers/net
存放网络接口适配器的驱动程序,还包括一些线路规程的实现,但不实现实际的通信协议, 这部分在顶层目录的net 目录中实现。

Drivers/video
这里保存了所有的帧缓冲区视频设备的驱动程序,整个目录实现了一个单独的字符设备驱 动。/dev/fb 设备的入口点在fbmem.c 文件中,该文件注册主设备号并维护一个此设备的 清单,其中记录了哪一个帧缓冲区设备负责哪个次设备号。

Drivers/media
这里存放的代码主要是针对无线电和视频输入设备,比如目前流行的usb 摄像头。

fs
此目录下包括了大量的文件系统的源代码,如图5-5 所示,其中在嵌入式开发中要使用的 包括:devfs、cramfs、ext2、,jffs2、romfs、yaffs、vfat、nfs、proc 等

文件系统是Linux 中非常重要的子系统,这里实现了许多重要的系统调用,比如exec.c 文件中实现了execve 系统调用;用于文件访问的系统调用在open.c、read_write.c 等文件中

定义,select.c 实现了select 和poll 系统调用,pipe.c 和fifo.c 实现了管道和命名管道, mkdir、rmdir、rename、link、symlink、mknod 等系统调用在namei.c 中实现。文件系统的挂 装和卸载和用于临时根文件系统的initrd 在super.c 中实现。 Devices.c 中实现了字符设备和 块设备驱动程序的注册函数;file.c、inode.c 实现了管理文件和索引节点内部数据结构的组 织。Ioctl.c 实现ioctl 系统调用。

include
这里是内核的所有头文件存放的地方,如下图所示,其中的linux 目录是头文件最多 的地方,也是驱动程序经常要包含的目录。

init
linux 的main.c 程序,通过这个比较简单的程序,我们可以理解LINUX 的启动流程。

ipc
system V 的进程间通信的原语实现,包括信号量、共享内存。

kernel
这个目录下存放的是除网络、文件系统、内存管理之外的所有其他基础设施,从下面的文 件列表5.1.7 所示,我们大致可以看出,其中至少包括进程调度sched.c,进程建立fork.c,定 时器的管理timer.c,中断处理,信号处理等。

lib
包括一些通用支持函数,类似于标准C 的库函数。其中包括了最重要的vsprintf 函数的实 现,它是printk 和sprintf 函数的核心。还有将字符串转换为长整形数的simple_atol函数。 其文件列表如图所示。

mm
这个目录包含实现内存管理的代码,包括所有与内存管理相关的数据结构,如图5-9 所示, 其中我们在驱动中需要使用的kmalloc 和kfree 函数在slab.c 中实现,mmap 定义在mmap.c 中的do_mmap_pgoff 函数。 将文件映射到内存的实现在filemap.c 中, mprotect 在mprotect.c, remap 在remap.c 中实现;vmscan.c 中实现了kswapd 内核线程,它用于释放未使用和老化的

页面到交换空间,这个文件对系统的性能起着关键的影响。

net
这个目录包含了套接字抽象和网络协议的实现,如图5.1.10 所示,每一种协议都建立了一 个目录,我们可以看到有26 个目录,但是其中的core、bridge、ethernet、sunrpc、khttp不 是网络协议。我们使用最多的是ipv4、ipv6、802、ipx 等。Ipv4、ipv6 是ip 协议的第4 版本 和第6 版本。 Core 目录中实现了通用的网络功能: 设备处理、 防火墙、 组播、 别名等; ethernet 和bridge 实现特定的底层功能:以太网相关的辅助函数以及网桥功能。Sunrpc 中提供了支持 NFS 服务器的函数。

script
这个目录存放许多脚本,主要用于配置内核。

5.2 如何编译内核
(这里以 2.6.19 内核为例) 一、获得 linux kernel 源码及相应硬件的 内核补丁 patch 1.下载 2.6.19 内核源代码。

2.下载 for at91rm9200 patch(2.6.19 内核的补丁,适用于 at91rm9200 的 arm)。 http://maxim.org.za/at91_26.html 下载 2.6.19-at91.patch.gz(下载 gcc 3.4 编译器 放到/usr/local/arm 下,建议用 3.4 以上,否则会出错误) 二、解压文件并给内核源代码打补丁在根目录下使用命令: #cd /usr/local/arm/ 把上面两个文件拷贝到该目录下 #cp –rf linux-2.6.19.tar.gz /usr/local/arm/ 进入/usr/local/arm/中解压两内核 #tar xvzf linux-2.6.19.tar.gz 生成 linux-2.6.19 目录,进入 linux-2.6.19 目录下 #cd linux-2.6.19 把 2.6.19-at91.patch.gz 拷到 linux-2.6.19 目录内输入以下命令为 linux-2.6.19 内核打补丁 #zcat 2.6.19-at91.patch.gz|patch -p1 三、修改 Makefile 文件配置并编译内核 在 linux-2.6.19 目录内编辑 Makefile 文件,输入以下命令: #vi Makefile 查找到如下: ARCH ?= $(SUBARCH) CROSS_COMPILE?= 修改为: ARCH ?= arm CROSS_COMPILE ?= /usr/local/arm/3.4/bin/arm-linux主要是为内核指定架构平台和编译器,其中,gcc 3.4 编译器已位于/usr/local/arm/下。 四、进入 linux-2.6.19 目录中,然后在命令终端运行 #make menuconfig 进入内核配置菜单,如图所示:

具体如何配置见内核裁剪一节,当配置好后,保存后退出该界面,在linux-2.6.19目录下输 入以下命令: #make 后就生成了zImage文件。(编译时间很长,大概需要10分钟以上)最后 生成的内核映像文件zImageI 位于arch/arm/boot 目录。 另外,介绍几条相关命令:

make clean 这条命令是在正式编译你的内核前先把环境清理,保证没有不正确的.o文件存在。 make dep 这条命令是编译相关依赖软件 make zImage 这条命令就是最终的编译命令。有时你可以直接用make(2.6.x版本以上用)。

5.3 如何裁剪内核
Linux内核的裁剪与编译看上去是个挺简单的过程,只是对配置菜单的简单选择,但是内核 配置菜单本身结构庞大,内容复杂,具体如何选择却难住了不少人,因此熟悉与了解菜单的各 项含义就显得比较重要,我们现在就对其做一些必要介绍。 我们通过选择make menuconfig方式进行配置,在选择相应的配置时,有三种选择方式,它 们分别代表的含义如下: Y:将该功能编译进内核 N:不将该功能编译进内核 M:将该功能编译成可以在需要时动态插入到内核中的模块 当使用make menuconfig方式时, 需要使用空格键进行选取。 在每一个选项前都有一个括号, 有的是中括号,有的是尖括号,还有圆括号。用空格键选择是可以发现,中括号里要么是空, 要么是“*”,而尖括号可以是空、“*”和“M”这表示前者对应的项要么不要,要么编译进 内核里,后者则多一样选择,可以编译成模块。而圆括号的内容是要你在所提供的几个选项中 选择一项。 下面我们来看看具体配置菜单: Code maturity level options 代码成熟度选项 Prompt for development and/or incomplete code/drivers 显示尚在开发中或尚未完成的代码与驱动.除非你是测试人员或者开发者,否则请勿选择 General setup 常规设置 Local version - append to kernel release 在内核版本后面加上自定义的版本字符串(小于 64 字符),可以用"uname -a"命令看到 Automatically append version information to the version string 自动在版本字符串后面添加版本信息,编译时需要有 perl 以及 git 仓库支持 Support for paging of anonymous memory (swap) 使用交换分区或者交换文件来做为虚拟内存 System V IPC System V 进程间通信(IPC)支持,许多程序需要这个功能.必选,除非你知道自己在做什么 IPC Namespaces IPC 命名空间支持,不确定可以不选 POSIX Message Queues POSIX 消息队列,这是 POSIX IPC 中的一部分 BSD Process Accounting 将进程的统计信息写入文件的用户级系统调用,主要包括进程的创建时间/创建者/内存占用 等信息 BSD Process Accounting version 3 file format 使用新的第三版文件格式,可以包含每个进程的 PID 和其父进程的 PID,但是不兼容老版本 的文件格式 Export task/process statistics through netlink

通过 netlink 接口向用户空间导出任务/进程的统计信息,与 BSD Process Accounting 的不同 之处在于这些统计信息在整个任务/进程生存期都是可用的 Enable per-task delay accounting 在统计信息中包含进程等候系统资源(cpu,IO 同步,内存交换等)所花费的时间 UTS Namespaces UTS 名字空间支持,不确定可以不选 Auditing support 审计支持,某些内核模块(例如 SELinux)需要它,只有同时选择其子项才能对系统调用进行审 计 Enable system-call auditing support 支持对系统调用的审计 Kernel .config support 把内核的配置信息编译进内核中,以后可以通过 scripts/extract-ikconfig 脚本来提取这些信息 Enable access to .config through /proc/config.gz 允许通过/proc/config.gz 访问内核的配置信息 Cpuset support 只有含有大量 CPU(大于 16 个)的 SMP 系统或 NUMA(非一致内存访问)系统才需要它 Kernel->user space relay support (formerly relayfs) 在某些文件系统上(比如 debugfs)提供从内核空间向用户空间传递大量数据的接口 Initramfs source file(s) initrd 已经被 initramfs 取代,如果你不明白这是什么意思,请保持空白 Optimize for size (Look out for broken compilers!) 编译时优化内核尺寸(使用"-Os"而不是"-O2"参数编译),有时会产生错误的二进制代码 Enable extended accounting over taskstats 收集额外的进程统计信息并通过 taskstats 接口发送到用户空间 Configure standard kernel features (for small systems) 配置标准的内核特性(为小型系统) Enable 16-bit UID system calls 允许对 UID 系统调用进行过时的 16-bit 包装 Sysctl syscall support 不需要重启就能修改内核的某些参数和变量,如果你也选择了支持/proc,将能从/proc/sys 存 取可以影响内核行为的参数或变量 Load all symbols for debugging/kksymoops 装载所有的调试符号表信息,仅供调试时选择 Include all symbols in kallsyms 在 kallsyms 中包含内核知道的所有符号,内核将会增大 300K Do an extra kallsyms pass 除非你在 kallsyms 中发现了 bug 并需要报告这个 bug 才打开该选项 Support for hot-pluggable devices 支持热插拔设备,如 usb 与 pc 卡等,Udev 也需要它 Enable support for printk 允许内核向终端打印字符信息,在需要诊断内核为什么不能运行时选择 BUG() support 显示故障和失败条件(BUG 和 WARN),禁用它将可能导致隐含的错误被忽略 Enable ELF core dumps 内存转储支持,可以帮助调试 ELF 格式的程序 Enable full-sized data structures for core

在内核中使用全尺寸的数据结构.禁用它将使得某些内核的数据结构减小以节约内存,但是 将会降低性能 Enable futex support 快速用户空间互斥体可以使线程串行化以避免竞态条件,也提高了响应速度.禁用它将导致 内核不能正确的运行基于 glibc 的程序 Enable eventpoll support 支持事件轮循的系统调用 Use full shmem filesystem 完全使用 shmem 来代替 ramfs.shmem 是基于共享内存的文件系统(可能用到 swap),在启 用 TMPFS 后可以挂载为 tmpfs 供用户空间使用,它比简单的 ramfs 先进许多 Use full SLAB allocator 使用 SLAB 完全取代 SLOB 进行内存分配,SLAB 是一种优秀的内存分配管理器,推荐使用 Enable VM event counters for /proc/vmstat 允许在/proc/vmstat 中包含虚拟内存事件记数器 Loadable module support 可加载模块支持 Enable loadable module support 打开可加载模块支持,如果打开它则必须通过"make modules_install"把内核模块安装在 /lib/modules/中 Module unloading 允许卸载已经加载的模块 Forced module unloading 允许强制卸载正在使用中的模块(比较危险) Module versioning support 允许使用其他内核版本的模块(可能会出问题) Source checksum for all modules 为所有的模块校验源码,如果你不是自己编写内核模块就不需要它 Automatic kernel module loading 让内核通过运行 modprobe 来自动加载所需要的模块,比如可以自动解决模块的依赖关系 Block layer 块设备层 Enable the block layer 块设备支持,使用硬盘/USB/SCSI 设备者必选 Support for Large Block Devices 仅在使用大于 2TB 的块设备时需要 Support for tracing block io actions 块队列 IO 跟踪支持,它允许用户查看在一个块设备队列上发生的所有事件,可以通过 blktrace 程序获得磁盘当前的详细统计数据 Support for Large Single Files 仅在可能使用大于 2TB 的文件时需要 IO Schedulers IO 调度器 Anticipatory I/O scheduler 假设一个块设备只有一个物理查找磁头(例如一个单独的 SATA 硬盘),将多个随机的小写入 流合并成一个大写入流,用写入延时换取最大的写入吞吐量.适用于大多数环境,特别是写入较多 的环境(比如文件服务器) Deadline I/O scheduler

使用轮询的调度器,简洁小巧,提供了最小的读取延迟和尚佳的吞吐量,特别适合于读取较多 的环境(比如数据库) CFQ I/O scheduler 使用 QoS 策略为所有任务分配等量的带宽,避免进程被饿死并实现了较低的延迟,可以认为 是上述两种调度器的折中.适用于有大量进程的多用户系统 Default I/O scheduler 默认 IO 调度器 Processor type and features 中央处理器(CPU)类型及特性 Symmetric multi-processing support 对称多处理器支持,如果你有多个 CPU 或者使用的是多核 CPU 就选上.此时"Enhanced Real Time Clock Support"选项必须开启,"Advanced Power Management"选项必须关闭 Subarchitecture Type 处理器的子架构,大多数人都应当选择"PC-compatible" Processor family 处理器系列,请按照你实际使用的 CPU 选择 Generic x86 support 通用 x86 支持,如果你的 CPU 能够在上述"Processor family"中找到就别选 HPET Timer Support HPET 是替代 8254 芯片的新一代定时器,i686 及以上级别的主板都支持,可以安全的选上 Maximum number of CPUs 支持的最大 CPU 数,每增加一个内核将增加 8K 体积 SMT (Hyperthreading) scheduler support 支持 Intel 的超线程(HT)技术 Multi-core scheduler support 针对多核 CPU 进行调度策略优化 Preemption Model 内核抢占模式 No Forced Preemption (Server) 适合服务器环境的禁止内核抢占 Voluntary Kernel Preemption (Desktop) 适合普通桌面环境的自愿内核抢占 Preemptible Kernel (Low-Latency Desktop) 适合运行实时程序的主动内核抢占 Preempt The Big Kernel Lock 可以抢占大内核锁,应用于实时要求高的场合,不适合服务器环境 Machine Check Exception 让 CPU 检测到系统故障时通知内核,以便内核采取相应的措施(如过热关机等) Check for non-fatal errors on AMD Athlon/Duron / Intel Pentium 4 每 5 秒检测一次这些 cpu 的非致命错误并纠正它们,同时记入日志 check for P4 thermal throttling interrupt 当 P4 的 cpu 过热时显示一条警告消息 Enable VM86 support 虚拟 X86 支持,在 DOSEMU 下运行 16-bit 程序或 XFree86 通过 BIOS 初始化某些显卡的时 候才需要 Toshiba Laptop support Toshiba 笔记本模块支持 Dell laptop support Dell 笔记本模块支持

Enable X86 board specific fixups for reboot 修正某些旧 x86 主板的重起 bug,这种主板基本绝种了 /dev/cpu/microcode - Intel IA32 CPU microcode support 使用不随 Linux 内核发行的 IA32 微代码,你必需有 IA32 微代码二进制文件,仅对 Intel 的 CPU 有效 /dev/cpu/*/msr - Model-specific register support 在多 cpu 系统中让特权 CPU 访问 x86 的 MSR 寄存器 /dev/cpu/*/cpuid - CPU information support 能从/dev/cpu/x/cpuid 获得 CPU 的唯一标识符(CPUID) Firmware Drivers 固件驱动程序 BIOS Enhanced Disk Drive calls determine boot disk 有些 BIOS 支持从某块特定的硬盘启动(如果 BIOS 不支持则可能无法启动),目前大多数 BIOS 还不支持 BIOS update support for DELL systems via sysfs 仅适用于 DELL 机器 Dell Systems Management Base Driver 仅适用于 DELL 机器 High Memory Support 最高内存支持,总内存小于等于 1G 的选"off",大于 4G 的选"64G" Memory split 如果你不是绝对清楚自己在做什么,不要改动这个选项 Memory model 一般选"Flat Memory",其他选项涉及内存热插拔 64 bit Memory and IO resources 使用 64 位的内存和 IO 资源 Allocate 3rd-level pagetables from highmem 在内存很多(大于 4G)的机器上将用户空间的页表放到高位内存区,以节约宝贵的低端内存 Math emulation 数学协处理器仿真,486DX 以上的 cpu 就不要选它了 MTRR (Memory Type Range Register) support 打开它可以提升 PCI/AGP 总线上的显卡 2 倍以上的速度,并且可以修正某些 BIOS 错误 Boot from EFI support EFI 是一种可代替传统 BIOS 的技术(目前的 Grub/LILO 尚不能识别它),但是现在远未普及 Enable kernel irq balancing 让内核将 irq 中断平均分配给多个 CPU 以进行负载均衡,但是要配合 irqbanlance 守护进程 才行 Use register arguments 使用"-mregparm=3"参数编译内核,将前 3 个参数以寄存器方式进行参数调用,可以生成更 紧凑和高效的代码 Enable seccomp to safely compute untrusted bytecode 只有嵌入式系统可以不选 Timer frequency 内核时钟频率,桌面推荐"1000 HZ",服务器推荐"100 HZ"或"250 HZ" kexec system call 提供 kexec 系统调用,可以不必重启而切换到另一个内核 kernel crash dumps 被 kexec 启动后产生内核崩溃转储 Physical address where the kernel is loaded

内核加载的物理地址,除非你知道自己在做什么,否则不要修改.在提供 kexec 系统调用的情 况下可能要修改它 Support for hot-pluggable CPUs 对热插拔 CPU 提供支持 Compat VDSO support 如果 Glibc 版本大于等于 2.3.3 就不选,否则就选上 Power management options 电源管理选项 Power Management support 电源管理有 APM 和 ACPI 两种标准且不能同时使用.即使关闭该选项,X86 上运行的 Linux 也 会在空闲时发出 HLT 指令将 CPU 进入睡眠状态 Legacy Power Management API 传统的电源管理 API,比如软关机和系统休眠等接口 Power Management Debug Support 仅供调试使用 Driver model /sys/devices/.../power/state files 内核帮助文档反对使用该选项,即将被废除 ACPI (Advanced Configuration and Power Interface) Support 必须运行 acpid 守护程序 ACPI 才能起作用.ACPI 是为了取代 APM 而设计的,因此应该尽量 使用 ACPI 而不是 APM AC Adapter 如果你的系统可以在 AC 和电池之间转换就可以选 Battery 通过/proc/acpi/battery 向用户提供电池状态信息,用电池的笔记本可以选 Button 守护程序捕获 Power,Sleep,Lid 按钮事件,并根据/proc/acpi/event 做相应的动作,软件控制 的 poweroff 需要它 Video 仅对集成在主板上的显卡提供 ACPI2.0 支持,且不是所有集成显卡都支持 Generic Hotkey 统一的热键驱动,建议不选 Fan 允许通过用户层的程序来对系统风扇进行控制(开,关,查询状态),支持它的硬件并不多 Dock 支持由 ACPI 控制的集线器(docking stations) Processor 让 ACPI 处理空闲状态,并使用 ACPI C2 和 C3 处理器状态在空闲时节省电能,同时它还被 cpufreq 的"Performance-state drivers"选项所依赖 Thermal Zone 系统温度过高时可以利用 ACPI thermal zone 及时调整工作状态以避免你的 CPU 被烧毁 ASUS/Medion Laptop Extras ASUS 笔记本专用,以提供额外按钮的支持,用户可以通过/proc/acpi/asus 来打开或者关闭 LCD 的背光/调整亮度/定制 LED 的闪烁指示等功能 IBM ThinkPad Laptop Extras IBM ThinkPad 专用 Toshiba Laptop Extras Toshiba 笔记本专用 Disable ACPI for systems before Jan 1st this year

输入四位数的年份,在该年的 1 月 1 日前不使用 ACPI 的功能("0"表示一直使用) Debug Statements 详细的 ACPI 调试信息,不搞开发就别选 Power Management Timer Support 这个 Timer 在所有 ACPI 兼容的平台上都可用,且不会受 PM 功能的影响,建议总是启用它. 如果你在 kernel log 中看到了'many lost ticks'那就必须启用它 ACPI0004,PNP0A05 and PNP0A06 Container Driver 支持内存和 CPU 的热插拔 Smart Battery System 支持依赖于 I2C 的"智能电池".这种电池非常老旧且罕见,还与当前的 ACPI 标准兼容性差 APM (Advanced Power Management) BIOS Support APM 在 SMP 机器上必须关闭,一般来说当前的笔记本都支持 ACPI,所以应尽量关闭该该选项 Ignore USER SUSPEND 只有 NEC Versa M 系列的笔记本才需要选择这一项 Enable PM at boot time 系统启动时即启用 APM,选上这个选项能让系统自动的进行电源管理,但常常导致启动时死 机 Make CPU Idle calls when idle 系统空闲时调用空闲指令(halt),只有老式的 CPU 才需要选它,且对于 SMP 系统必须关闭 Enable console blanking using APM 在屏幕空白时关闭 LCD 背光,事实上对所有的笔记本都无效 RTC stores time in GMT 将硬件时钟应该设为格林威治时间,否则视为本地时间.建议你使用 GMT,这样你无须为时区 的改变而担心 Allow interrupts during APM BIOS calls 允许 APM 的 BIOS 调用时中断,IBM Thinkpad 的一些新机器需要这项.如果休眠时挂机(包括 睡下去就醒不来),可以试试它 Use real mode APM BIOS call to power off 此驱动为某些有 Bug 的 BIOS 准备,如果你的系统不能正常关机或关机时崩溃,可以试试它 CPU Frequency scaling 允许动态改变 CPU 主频,达到省电和降温的目的,必须同时启用下面的一种 governor 才行 Enable CPUfreq debugging 允许对 CPUfreq 进行调试 CPU frequency translation statistics 通过 sysfs 文件系统输出 CPU 频率变换的统计信息 CPU frequency translation statistics details 输出详细的 CPU 频率变换统计信息 Default CPUFreq governor 默认的 CPU 频率调节器 'performance' governor '性能'优先,静态的将频率设置为 cpu 支持的最高频率 'powersave' governor '节能'优先,静态的将频率设置为 cpu 支持的最低频率 'userspace' governor for userspace frequency scaling 既允许手动调整 cpu 频率,也允许用户空间的程序动态的调整 cpu 频率(需要额外的调频软 件,比如 cpufreqd) 'ondemand' cpufreq policy governor '立即响应',周期性的考察 CPU 负载并自动的动态调整 cpu 频率(不需要额外的调频软件), 适合台式机

'conservative' cpufreq governor '保守',和'ondemand'相似,但是频率的升降是渐变式的(幅度不会很大),更适合用于笔记本 /PDA/AMD64 环境 ACPI Processor P-States driver 将 ACPI2.0 的处理器性能状态报告给 CPUFreq processor drivers 以决定如何调整频率,该 选项依赖于 ACPI->Processor {省略的部分请按照自己实际使用的 CPU 选择} /proc/acpi/processor/../performance interface 内核帮助文档反对使用该选项,即将被废除 Relaxed speedstep capability checks 放松对系统的 speedstep 兼容性检查,仅在某些老旧的 Intel 系统上需要打开 Bus options (PCI, PCMCIA, EISA, MCA, ISA) 总线选项 PCI support PCI 支持,如果使用了 PCI 或 PCI Express 设备就必选 PCI access mode PCI 访问模式,强列建议选"Any"(系统将优先使用"MMConfig",然后使用"BIOS",最后使用 "Direct"检测 PCI 设备) PCI Express support PCI Express 支持(目前主要用于显卡和千兆网卡) PCI Express Hotplug driver 如果你的主板和设备都支持 PCI Express 热插拔就可以选上 Use polling mechanism for hot-plug events 对热插拔事件采用轮询机制,仅用于测试目的 Root Port Advanced Error Reporting support 由 PCI Express AER 驱动程序处理发送到 Root Port 的错误信息 Message Signaled Interrupts (MSI and MSI-X) PCI Express 支持两类中断:INTx 使用传统的 IRQ 中断,可以与现行的 PCI 总线的驱动程序 和操作系统兼容;MSI 则是通过 inbound Memory Write 触发和发送中断,更适合多 CPU 系统.可 以使用"pci=nomsi"内核引导参数关闭 MSI PCI Debugging 将 PCI 调试信息输出到系统日志里 Interrupts on hypertransport devices 允许本地的 hypertransport 设备使用中断 ISA support 现在基本上没有 ISA 的设备了,如果你有就选吧 MCA support 微通道总线,老旧的 IBM 的台式机和笔记本上可能会有这种总线 NatSemi SCx200 support 在使用 AMD Geode 处理器的机器上才可能有 PCCARD (PCMCIA/CardBus) support PCMCIA 卡(主要用于笔记本)支持 Enable PCCARD debugging 仅供调试 16-bit PCMCIA support 一些老的 PCMCIA 卡使用 16 位的 CardBus 32-bit CardBus support 当前的 PCMCIA 卡基本上都是 32 位的 CardBus

CardBus yenta-compatible bridge support 使用 PCMCIA 卡的基本上都需要选择这一项,子项请按照自己实际使用的 PCMCIA 卡选择 {省略的部分请按照自己实际使用的 PCMCIA 卡选择} PCI Hotplug Support PCI 热插拔支持,如果你有这样的设备就到子项中去选吧 Executable file formats 可执行文件格式 Kernel support for ELF binaries ELF 是开放平台下最常用的二进制文件格式,支持动态连接,支持不同的硬件平台.除非你知 道自己在做什么,否则必选 Kernel support for a.out and ECOFF binaries 早期 UNIX 系统的可执行文件格式,目前已经被 ELF 格式取代 Kernel support for MISC binaries 允许插入二进制的封装层到内核中,使用 Java,.NET,Python,Lisp 等语言编写的程序时需要 它 Networking 网络 Networking options 网络选项 Network packet debugging 在调试不合格的包时加上额外的附加信息,但在遇到 Dos 攻击时你可能会被日志淹没 Packet socket 这种 Socket 可以让应用程序(比如 tcpdump,iptables)直接与网络设备通讯,而不通过内核中 的其它中介协议 Packet socket: mmapped IO 让 Packet socket 驱动程序使用 IO 映射机制以使连接速度更快 Unix domain sockets 一种仅运行于本机上的效率高于 TCP/IP 的 Socket,简称 Unix socket.许多程序都使用它在操 作系统内部进行进程间通信(IPC),比如 X Window 和 syslog Transformation user configuration interface 为 IPsec(可在 ip 层加密)之类的工具提供 XFRM 用户配置接口支持 Transformation sub policy support XFRM 子策略支持,仅供开发者使用 PF_KEY sockets 用于可信任的密钥管理程序和操作系统内核内部的密钥管理进行通信,IPsec 依赖于它 TCP/IP networking TCP/IP 协议当然要选 IP: multicasting 群组广播,似乎与网格计算有关,仅在使用 MBONE 的时候才需要 IP: advanced router 高级路由,如果想做一个路由器就选吧 IP: policy routing 策略路由 IP: equal cost multipath 用于路由的基于目的地址的负载均衡 IP: verbose route monitoring 显示冗余的路由监控信息

IP: kernel level autoconfiguration 在内核启动时自动配置 ip 地址/路由表等,需要从网络启动的无盘工作站才需要这个东西 IP: tunneling IP 隧道,将一个 IP 报文封装在另一个 IP 报文内的技术 IP: GRE tunnels over IP 基于 IP 的 GRE(通用路由封装)隧道 IP: multicast routing 多重传播路由 IP: ARP daemon support 这东西尚处于试验阶段就已经被废弃了 IP: TCP syncookie support 抵抗 SYN flood 攻击的好东西,要启用它必须同时启用/proc 文件系统和"Sysctl support",然 后在系统启动并挂载了/proc 之后执行"echo 1 >/proc/sys/net/ipv4/tcp_syncookies"命令 IP: AH transformation IPsec 验证头(AH)实现了数据发送方的验证处理,可确保数据既对于未经验证的站点不可用 也不能在路由过程中更改 IP: ESP transformation IPsec 封闭安全负载(ESP)实现了发送方的验证处理和数据加密处理,用以确保数据不会被 拦截/查看或复制 IP: IPComp transformation IPComp(IP 静荷载压缩协议),用于支持 IPsec IP: IPsec transport mode IPsec 传输模式,常用于对等通信,用以提供内网安全.数据包经过了加密但 IP 头没有加密,因 此任何标准设备或软件都可查看和使用 IP 头 IP: IPsec tunnel mode IPsec 隧道模式,用于提供外网安全(包括虚拟专用网络).整个数据包(数据头和负载)都已经 过加密处理且分配有新的 ESP 头/IP 头和验证尾,从而能够隐藏受保护站点的拓扑结构 IP: IPsec BEET mode IPsec BEET 模式 INET: socket monitoring interface socket 监视接口,一些 Linux 本地工具(如:包含 ss 的 iproute2)需要使用它 TCP: advanced congestion control 高级拥塞控制,如果没有特殊需求(比如无线网络)就别选了,内核会自动将默认的拥塞控制 设为"Cubic"并将"Reno"作为候补 IP: Virtual Server Configuration IP 虚拟服务器允许你基于多台物理机器构建一台高性能的虚拟服务器,不玩集群就别选了 The IPv6 protocol 你要是需要 IPv6 就选吧 NetLabel subsystem support NetLabel 子系统为诸如 CIPSO 与 RIPSO 之类能够在分组信息上添加标签的协议提供支持, 如果你看不懂就别选了 Security Marking 对网络包进行安全标记,类似于 nfmark,但主要是为安全目的而设计,如果你不明白的话就别 选 Network packet filtering (replaces ipchains) Netfilter 可以对数据包进行过滤和修改,可以作为防火墙("packet filter"或"proxy-based")或 网关(NAT)或代理(proxy)或网桥使用.选中此选项后必须将"Fast switching"关闭,否则将前功尽 弃

Network packet filtering debugging 仅供开发者调试 Netfilter 使用 Bridged IP/ARP packets filtering 如果你希望使用一个针对桥接的防火墙就打开它 Core Netfilter Configuration 核心 Netfilter 配置(当包流过 Chain 时如果 match 某个规则那么将由该规则的 target 来处 理,否则将由同一个 Chain 中的下一个规则进行匹配,若不 match 所有规则那么最终将由该 Chain 的 policy 进行处理) Netfilter netlink interface 允许 Netfilter 在与用户空间通信时使用新的 netlink 接口.netlink Socket 是 Linux 用户态与 内核态交流的主要方法之一,且越来越被重视. Netfilter NFQUEUE over NFNETLINK interface 通过 NFNETLINK 接口对包进行排队 Netfilter LOG over NFNETLINK interface 通过 NFNETLINK 接口对包记录.该选项废弃了 ipt_ULOG 和 ebg_ulog 机制,并打算在将来废 弃基于 syslog 的 ipt_LOG 和 ip6t_LOG 模块 Layer 3 Independent Connection tracking 独立于第三层的链接跟踪,通过广义化的 ip_conntrack 支持其它非 IP 协议的第三层协议 Netfilter Xtables support 如果你打算使用 ip_tables,ip6_tables,arp_tables 之一就必须选上 "CLASSIFY" target support 允许为包设置优先级,一些排队规则(atm,cbq,dsmark,pfifo_fast,htb,prio)需要使用它 "CONNMARK" target support 类似于"MARK",但影响的是连接标记的值 "DSCP" target support 允许对 ip 包头部的 DSCP(Differentiated Services Codepoint)字段进行修改,该字段常用于 Qos "MARK" target support 允许对包进行标记(通常配合 ip 命令使用),这样就可以改变路由策略或者被其它子系统用来 改变其行为 "NFQUEUE" target Support 用于替代老旧的 QUEUE(iptables 内建的 target 之一),因为 NFQUEUE 能支持最多 65535 个 队列,而 QUEUE 只能支持一个 "NOTRACK" target support 允许规则指定哪些包不进入链接跟踪/NAT 子系统 "SECMARK" target support 允许对包进行安全标记,用于安全子系统 "CONNSECMARK" target support 针对链接进行安全标记,同时还会将连接上的标记还原到包上(如果链接中的包尚未进行安 全标记),通常与 SECMARK target 联合使用 "comment" match support 允许你在 iptables 规则集中加入注释 "connbytes" per-connection counter match support 允许针对单个连接内部每个方向(进/出)匹配已经传送的字节数/包数 "connmark" connection mark match support 允许针对每个会话匹配先前由"CONNMARK"设置的标记值 "conntrack" connection tracking match support 连接跟踪匹配,是"state"的超集,它允许额外的链接跟踪信息,在需要设置一些复杂的规则 (比如网关)时很有用

"DCCP" protocol match support DCCP 是打算取代 UDP 的新传输协议,它在 UDP 的基础上增加了流控和拥塞控制机制,面向 实时业务 "DSCP" match support 允许对 IP 包头的 DSCP 字段进行匹配 "ESP" match support 允许对 IPSec 包中的 ESP 头进行匹配,使用 IPsec 的话就选上吧 "helper" match support 加载特定协议的连接跟踪辅助模块,由该模块过滤所跟踪的连接类型的包,比如 ip_conntrack_ftp 模块 "length" match support 允许对包的长度进行匹配 "limit" match support 允许根据包的进出速率进行规则匹配,常和"LOG target"配合使用以抵抗某些 Dos 攻击 "mac" address match support 允许根据以太网的 MAC 进行匹配,常用于无线网络环境 "mark" match support 允许对先前由"MARK"标记的特定标记值进行匹配 IPsec "policy" match support 使用 IPsec 就选上吧 Multiple port match support 允许对 TCP 或 UDP 包同时匹配多个端口(通常情况下只能匹配一个端口) "physdev" match support 允许对到达的或将要离开的物理桥端口进行匹配 "pkttype" packet type match support 允许对封包目的地址类别(广播/群播/直播)进行匹配 "quota" match support 允许对总字节数的限额值进行匹配 "realm" match support 允许对 iptables 中的路由子系统中的 realm 值进行匹配 "sctp" protocol match support 流控制传输协议(SCTP),十年以后也许能够普及的东西 "state" match support 这是对包进行分类的有力工具,它允许利用连接跟踪信息对连接中处于特定状态的包进行 匹配 "statistic" match support 允许根据一个给定的百分率对包进行周期性的或随机性的匹配 "string" match support 允许根据包所承载的数据中包含的特定字符串进行匹配 "tcpmss" match support 允许根据 TCP SYN 包头中的 MSS(最大分段长度)选项的值进行匹配 IP: Netfilter Configuration 针对 IPv4 的 Netfilter 配置 Connection tracking (required for masq/NAT) 链接跟踪.可用于报文伪装或地址转换,也可用于增强包过滤能力 Connection tracking flow accounting 允许针对每个连接记录已经传送的字节/包数,常用于 connbytes match Connection mark tracking support

允许对连接进行标记,与针对单独的包进行标记的不同之处在于它是针对连接 的.CONNMARK target 和 connmark match 需要它的支持 Connection tracking security mark support 允许对连接进行安全标记,通常这些标记包(SECMARK)复制到其所属连接(CONNSECMARK), 再从连接复制到其关联的包(SECMARK) Connection tracking events 连接跟踪事件支持.如果启用这个选项,连接跟踪代码将提供一个 notifier 链,它可以被其它 内核代码用来获知连接跟踪状态的改变 Connection tracking netlink interface 支持基于 netlink 的用户空间接口 SCTP protocol connection tracking support SCTP 是 IP 网面向多媒体通信的新一代的流控制传输协议 FTP protocol support FTP 协议 IRC protocol support IRC 协议是一种用来实时聊天协议,用过 mIRC 的人应当不陌生 NetBIOS name service protocol support NetBIOS 名字服务协议 TFTP protocol support TFTP 是基于 UDP 的比 FTP 简单的文件传输协议 Amanda backup protocol support Amanda 备份协议 PPTP protocol support 点对点隧道协议(PPTP)是一种支持多协议虚拟专用网络的网络技术,ADSL 用户对它应该很 熟悉 H.323 protocol support ITU-T 提出的用于 IP 电话的协议 SIP protocol support IETE 提出的用于 IP 电话的协议 IP Userspace queueing via NETLINK 已废弃 IP tables support (required for filtering/masq/NAT) 要用 iptables 就肯定要选上 IP range match support 允许对 ip 地址的范围进行匹配 TOS match support 允许对 ip 包头的 TOS(Type Of Service)字段进行匹配 recent match support 可以创建一个或多个刚刚使用过的 ip 地址列表,然后根据这些列表进行匹配 ECN match support 允许对 TCP/IP 包头的 ECN(Explicit Congestion Notification)字段进行匹配.ECN 是一种显式 拥塞通知技术,它不但要求路由器支持而且要求端到端主机的支持,其基本思想是当路由器发生 早期拥塞时不是丢弃包而是尽量对包进行标记,接收方接到带有 ECN 提示的包时,通知发送方网 络即将发生拥塞,也就是它通过对包的标记提示 TCP 源即将发生拥塞,从而引发拥塞避免算法 AH match support 允许对 IPSec 包头的 AH 字段进行匹配 TTL match support 允许对 ip 包头的 TTL(生存期)字段进行匹配 Owner match support

允许对本地生成的包按照其宿主(user,group,process,session)进行匹配 address type match support 允许对地址类型(单播,本地,广播)进行匹配 hashlimit match support 是 limit 的升级,它基于你选择的 ip 地址与/或端口动态的创建以 limit 为桶(bucket)的哈希表. 它可以创建诸如"为每个特定的目标 IP 分配 10kpps"或"允许每个特定的源 IP 分配 500pps"之类 的规则 Packet filtering 定义 filter 表以允许对包进行过滤 REJECT target support 允许返回一个 ICMP 错误而不是简单的丢弃包 LOG target support 允许将符合条件的包头信息通过 syslog 进行记录 ULOG target support 透过 netlink socket 将符合条件的封包交给用户空间的 ulogd 守护进程.反对使用该选项,因 为它已经被 NETFILTER_NETLINK_LOG 代替 TCPMSS target support 允许修改 TCP 包头中的 MSS(最大分段长度)选项值 Full NAT 允许进行伪装/端口转发以及其它的 NAT 功能,仅在你需要使用 iptables 中的 nat 表时才需 要选择 Packet mangling 在 iptables 中启用 mangle 表以便对包进行各种修改,常用于改变包的路由 raw table support (required for NOTRACK/TRACE) 在 iptables 中添加一个'raw'表,该表在 netfilter 框架中非常靠前,并在 PREROUTING 和 OUTPUT 链上有钩子,从而可以对收到的数据包在连接跟踪前进行处理 ARP tables support ARP 表支持.只有在局域网中才有 ARP 欺骗问题,另外路由器也会遭到 ARP 欺骗 ARP packet filtering ARP 包过滤.对于进入和离开本地的 ARP 包定义一个 filter 表,在桥接的情况下还可以应用于 被转发 ARP 包 ARP payload mangling 允许对 ARP 包的荷载部分进行修改,比如修改源和目标物理地址 IPv6: Netfilter Configuration 针对 IPv6 的 Netfilter 配置,需要的话可以参考前面 IPv4 的 Netfilter 配置进行选择 DECnet: Netfilter Configuration 针对 DECnet 的 Netfilter 配置 Bridge: Netfilter Configuration 针对桥接的 Netfilter 配置 DCCP Configuration 数据报拥塞控制协议在 UDP 的基础上增加了流控和拥塞控制机制,使数据报协议能够更好 地用于流媒体业务的传输 SCTP Configuration 流控制传输协议是一种新兴的传输层协议.TCP 协议一次只能连接一个 IP 地址而在 SCTP 协 议一次可以连接多个 IP 地址且可以自动平衡网络负载,一旦某一个 IP 地址失效会自动将网络负 载转移到其他 IP 地址上 TIPC Configuration

透明内部进程间通信协议,以共享内存为基础实现任务和资源的调度,专门用于内部集群通 信 Asynchronous Transfer Mode (ATM) 异步传输模式(ATM)支持 802.1d Ethernet Bridging 802.1d 以太网桥 802.1Q VLAN Support 802.1Q 虚拟局域网 DECnet Support DECnet 是一种很生僻的协议 ANSI/IEEE 802.2 LLC type 2 Support 看不懂可以不选 The IPX protocol IPX 协议 Appletalk protocol support 与 Mac 机器通信的协议 CCITT X.25 Packet Layer 大约没人需要这东西 LAPB Data Link Driver 大约没人需要这东西 Acorn Econet/AUN protocols 一种被 Acorn 计算机使用的又老又慢的协议 WAN router 广域网路由 QoS and/or fair queueing 如果你需要 Qos 或公平队列就选吧 Network testing 网络测试,仅供调试使用 Amateur Radio support 业余无线电支持 IrDA (infrared) subsystem support 红外线支持,比如无线鼠标或无线键盘 Bluetooth subsystem support 蓝牙支持 Generic IEEE 802.11 Networking Stack 通用无线局域网(IEEE 802.11 系列协议)支持 Device Drivers 设备驱动程序 Generic Driver Options 驱动程序通用选项 Select only drivers that don't need compile-time external firmware 只显示那些不需要内核对外部设备的固件作 map 支持的驱动程序,除非你有某些怪异硬件, 否则请选上 Prevent firmware from being built 不编译固件.固件一般是随硬件的驱动程序提供的,仅在更新固件的时候才需要重新编译.建 议选上 Userspace firmware loading support

提供某些内核之外的模块需要的用户空间固件加载支持,在内核树之外编译的模块可能需 要它 Driver Core verbose debug messages 让驱动程序核心在系统日志中产生冗长的调试信息,仅供调试 Connector - unified userspace <-> kernelspace linker 统一的用户空间和内核空间连接器,工作在 netlink socket 协议的顶层.不确定可以不选 Report process events to userspace 向用户空间报告进程事件(fork,exec,id 变化(uid,gid,suid) Memory Technology Devices (MTD) 特殊的存储技术装置,如常用于数码相机或嵌入式系统的闪存卡 Parallel port support 并口支持(传统的打印机接口) Plug and Play support 即插即用支持,若未选则应当在 BIOS 中关闭"PnP OS".这里的选项与 PCI 设备无关 PnP Debug Messages 该选项仅供调试使用 ISA Plug and Play support ISA 设备即插即用支持 Plug and Play BIOS support Linux 使用"Plug and Play BIOS"规范 v1.0A(1994 年)中定义的 PNPBIOS 自动检测主板上的 资源和设备,但是其中的某些特性目前尚未实现,比如:事件通知/扩展坞(Docking Station)信息 /ISAPNP 服务.如果你希望由内核检测主板上的设备并为其分配资源(此时 BIOS 中的"PnP OS" 必须开启)可以选上,此外,PNPBIOS 还有助于防止主板上的设备与其他总线设备冲突.不过需要 注意的是 ACPI 将会逐渐取代 PNPBIOS(虽然目前两者可以共存),所以如果你的系统不使用 ISA 设备并且支持 ACPI,建议你不要选中该选项并将 BIOS 中的"PnP OS"关闭 Plug and Play BIOS /proc interface 该选项仅供调试使用 Plug and Play ACPI support 让 Linux 使用 PNPACPI 自动检测主板上内建的设备并为其分配资源(即使这些设备已被 BIOS 禁用),它有助于避免设备之间的资源(如中断)冲突 Block devices 块设备 Normal floppy disk support 通用软驱支持 XT hard disk support 古董级产品 Parallel port IDE device support 通过并口与计算机连接的 IDE 设备,比如某些老旧的外接光驱或硬盘之类 Compaq SMART2 support 基于 Compaq SMART2 控制器的磁盘阵列卡 Compaq Smart Array 5xxx support 基于 Compaq SMART 控制器的磁盘阵列卡 Mylex DAC960/DAC1100 PCI RAID Controller support 古董级产品 Micro Memory MM5415 Battery Backed RAM support 一种使用电池做后备电源的内存 Loopback device support Loopback 是指拿文件来模拟块设备,比如可以将一个 iso9660 镜像文件挂成一个文件系统

Cryptoloop Support 使用系统提供的加密 API 对 Loopback 设备加密,但不能用于日志型文件系统 Network block device support 让你的电脑成为网络块设备的客户端 Promise SATA SX8 support 基于 Promise 公司的 SATA SX8 控制器的 RAID 卡 Low Performance USB Block driver 它不是用来支持 U 盘的,不懂的就别选 RAM disk support 内存中的虚拟磁盘,大小固定(由下面的选项决定,也可给内核传递"ramdisk_size=参数"来 决定),它的功能和代码都比 shmem 简单许多 Default number of RAM disks 默认 RAM disk 的数量 Default RAM disk size (kbytes) 仅在你真正知道它的含义时才允许修改 Default RAM disk block size (bytes) 每一个 RAM disk 的默认块大小,设为 PAGE_SIZE 的值时效率最高 Initial RAM filesystem and RAM disk (initramfs/initrd) support 如果启动计算机所必须的模块都在内核里的话可以不选此项 Packet writing on CD/DVD media CD/DVD 刻录支持 Free buffers for data gathering 用于收集写入数据的缓冲区个数(每个占用 64Kb 内存),缓冲区越多性能越好 Enable write caching 为 CD-R/W 设备启用写入缓冲,目前这是一个比较危险的选项 ATA over Ethernet support 以太网 ATA 设备支持 Misc devices 杂项设备 ATA/ATAPI/MFM/RLL support 通常是 IDE 硬盘和 ATAPI 光驱.纯 SCSI 系统且不使用这些接口可以不选 Max IDE interfaces 最大 IDE 接口数,两个 IDE 插槽一般相当于 4 个接口 Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support EIDE 支持是当然要选的,否则 540MB 以上的硬盘都不认识而且不支持主从设备 Support for SATA (deprecated; conflicts with libata SATA driver) 反对使用,该选项与 libata SATA 驱动有冲突 Use old disk-only driver on primary interface 没人用这些古董了 Include IDE/ATA-2 DISK support ATA-2 支持,除非你的硬盘是古董,否则必选 Use multi-mode by default 如果不确定就别选,除非出现帮助中指出的错误 PCMCIA IDE support 通过 PCMCIA 卡与计算机连接的 IDE 设备,比如某些外置硬盘或光驱 Include IDE/ATAPI CDROM support 有 IDE 光驱的就选 Include IDE/ATAPI TAPE support 有 IDE 磁带的就选

Include IDE/ATAPI FLOPPY support 有 IDE 软驱的就选 SCSI emulation support SCSI 仿真,以前刻录光碟时需要,现在不需要了 IDE Taskfile Access 对介质进行直接的原始访问,它是一个复杂且有效的测试和校验硬件的方案,可以在驱动层 之下执行数据恢复工作 generic/default IDE chipset support 通用 IDE 芯片组支持 CMD640 chipset bugfix/support 586 以前的主板上常用,毛病多多 PNP EIDE support 外接的即插即用 EIDE 卡支持 PCI IDE chipset support 基于 PCI 总线的 IDE 芯片组支持,帮助 IDE 驱动自动检测和配置所有基于 PCI 的 IDE 接口 Sharing PCI IDE interrupts support 与其他 PCI 设备共享中断,一来可能冲突,二来降低性能,不选为妙 Boot off-board chipsets first support 不使用外接 IDE 控制器的就别选,使用外接 IDE 控制器的注意看帮助 Generic PCI IDE Chipset Support 通用的 PCI IDE 芯片组支持,如果你的芯片组在下面能找到就别选 OPTi 82C621 chipset enhanced support OPTi 82C621 EIDE 控制器 RZ1000 chipset bugfix/support 486/586 年代的玩艺 Generic PCI bus-master DMA support 通用的 PCI 总线控制器 DMA 支持,586 以上的系统都支持 Force enable legacy 2.0.X HOSTS to use DMA 历史遗留问题,别管它,不选 Use PCI DMA by default when available 默认启用 DMA,586 以上的系统都支持,建议选择 Enable DMA only for disks 只对硬盘启用 DMA,若你的光驱不支持 DMA 就选上 {此处省略的部分按照自己主板上实际使用的芯片组进行选择} Other IDE chipset support 其它 IDE 芯片组支持(多数需要在引导时指定特定的内核参数),如果你使用这样的芯片组就 按实际情况选择子项吧 IGNORE word93 Validation BITS ATA-4 和 ATA-5 规范中对于如何在 80 针的数据线上探测解释的不明确,导致了两种不同标 准的产品同时出现,这可能导致 ATA-66/100 降低为 ATA-33,若出现这个问题,可以打开这个选项 忽略这种不同,但是又有可能导致另外的问题 Old hard disk (MFM/RLL/IDE) driver 旧版本的 MFM/RLL/IDE 驱动,不建议使用 SCSI device support SCSI 设备 RAID Transport Class 用于 SCSI 设备的软件 RAID 支持,需要配合外部工具 SCSI device support 有任何 SCSI/SATA/USB/光纤/FireWire/IDE-SCSI 仿真设备之一就必须选上

legacy /proc/scsi/ support 一些老的刻录程序可能需要它 SCSI disk support SCSI 硬盘或 U 盘 SCSI tape support SCSI 磁带 SCSI OnStream SC-x0 tape support 另一种 SCSI 磁带 SCSI CDROM support SCSI CDROM Enable vendor-specific extensions 仅在古董级的 SCSI CDROM 设备上才需要 SCSI generic support 若有 SCSI 硬盘/CD-ROM/tape 之外的 SCSI 设备才需要选择 SCSI media changer support 一种 SCSI 备份设备 Probe all LUNs on each SCSI device 在每个 SCSI 设备上探测逻辑设备数.只在一个 SCSI 设备上有多个逻辑设备(模拟多个 SCSI 设备,比如多口读卡器)时才需要选它,一般的 SCSI 设备不需要 Verbose SCSI error reporting 以易读的方式报告 SCSI 错误,内核将会增大 12K SCSI logging facility 启用 SCSI 日志(默认并不开启,需要在挂载/proc 后执行 echo "scsi log token [level]" > /proc/scsi/scsi 命令才能打开日志),可用于跟踪和捕获 SCSI 设备的错误 SCSI Transports SCSI 接口类型,下面的子项可以全不选,内核中若有其他部分依赖它,会自动选上 Parallel SCSI (SPI) Transport Attributes 传统且常见的并行 SCSI(Ultra320/160 之类) FiberChannel Transport Attributes 光纤通道 iSCSI Transport Attributes iSCSI 是利用 TCP/IP 网络传送 SCSI 命令和数据的 I/O 技术 SAS Transport Attributes 串行 SCSI 传输属性支持(SAS 对于的关系 SPI 犹如 SATA 对于 ATA) SAS Domain Transport Attributes 为使用了 SAS Domain 的驱动程序提供帮助 Compile the SAS Domain Transport Attributes in debug mode 仅供调试使用 SCSI low-level drivers 底层 SCSI 驱动程序,按你实际使用的产品选择 iSCSI Initiator over TCP/IP 用于 iSCSI 在 TCP/IP 网络上传播的起动程序 {此处省略的部分按照自己实际使用的控制器进行选择,仅用一个例子解说子项} Adaptec AIC79xx U320 support 以基于 PCI-X 的 Adaptec Ultra 320 SCSI 控制器为例解说子项 Maximum number of TCQ commands per device 每个 SCSI 设备的标记指令队列的最大长度(上限 253).上限越高性能越好,但是对于 SCSI 设 备较多的系统来说可能造成内存分配失败.此值还可以通过 tag_info 内核引导参数指定 Initial bus reset delay in milli-seconds

初始总线 reset 之后的延时微秒数(默认 5000) Enable Read Streaming for All Targets 对所有的标记队列启用 Read Streaming(可以增强效能,但是在一些 Adaptec 早期的 U320 产品上有缺陷),此特性还可以通过 rd_strm 内核引导参数指定 Compile in Debugging Code 仅用于调试 Debug code enable mask (16383 for all debugging) 出错代码的掩码,0 表示禁止所有,16383 表示打开所有 Decode registers during diagnostics 将出错代码的解释内容编译进去,这样就不需要查看 aic7xxx.reg 中的出错代码表以确定出错 代码的含意了 PCMCIA SCSI adapter support 通过 PCMCIA 卡与计算机连接的 SCSI 设备 Serial ATA and Parallel ATA drivers SATA 与 PATA 设备 ATA device support SATA 或 PATA 接口的硬盘或光驱等设备 AHCI SATA support SATA 高级主机控制器接口.要使用 NCQ 功能就必须选中它,另外 BIOS 中的 SATA 工作模式 亦要选 AHCI 模式 Generic ATA support 基于新的 ATA 层的通用 ATA 控制器驱动,仅在你的芯片组在列表中找不到时才需要 {此处省略的部分按照自己主板上实际使用的芯片组进行选择} Old CD-ROM drivers (not SCSI, not IDE) 老旧的 CD-ROM 驱动,这种 CD-ROM 既不使用 SCSI 接口,也不使用 IDE 接口 Multi-device support (RAID and LVM) 多设备支持(RAID 和 LVM).RAID 和 LVM 的功能是使多个物理设备组建成一个单独的逻辑磁 盘 RAID support 软件 RAID(需要使用外部工具),若你有硬件 RAID 控制器,可以不选 Linear (append) mode 追加模式(简单的将一个分区追加在另一个分区之后) RAID-0 (striping) mode RAID-0(等量分割)模式 RAID-1 (mirroring) mode RAID-1(镜像)模式 RAID-10 (mirrored striping) mode RAID 0+1 模式 RAID-4/RAID-5/RAID-6 mode 这些模式比较复杂,一般不用 Support adding drives to a raid-5 array RAID-5 阵列可以通过添加额外的驱动器进行扩展(restriping),这个选项允许在线进行这样 的操作,同时要求 mdadm 的版本大于 2.4.1 Multipath I/O support 多路 IO 支持是指在服务器和存储设备之间使用冗余的物理路径组件创建"逻辑路径",如果 这些组件发生故障并造成路径失败,多路径逻辑将为 I/O 使用备用路径以使应用程序仍然可以访 问其数据 Faulty test module for MD

用于 MD(Multi-device)的缺陷测试模块 Device mapper support Device-mapper 是一个底层的卷管理器,不用 LVM 就别选了 Fusion MPT device support Fusion MPT 设备支持 IEEE 1394 (FireWire) support IEEE 1394(火线) I2O device support I2O(智能 IO)设备使用专门的 I/O 处理器负责中断处理/缓冲存取/数据传输等烦琐任务以减 少 CPU 占用,一般的主板上没这种东西 Network device support 网络设备 Network device support 网络设备支持,当然要选啦 Intermediate Functional Block support 这是一个中间层驱动,可以用来灵活的配置资源共享,看不懂的可以不选 Dummy net driver support 哑接口网络,使用 SLIP 或 PPP 传输协议(如 ADSL 用户)的需要它 Bonding driver support 将多个以太网通道绑定为一个,也就是两块网卡具有相同的 IP 地址并且聚合成一个逻辑链 路工作,可以用来实现负载均衡或硬件冗余 EQL (serial line load balancing) support 串行线路的负载均衡.如果有两个 MODEM 和两条电话线而且用 SLIP 或 PPP 协议,该选项可 以让您同时使用这两个 MODEM 以达到双倍速度(在网络的另一端也要有同样的设备) Universal TUN/TAP device driver support TUN/TAP 可以为用户空间提供包的接收和发送服务,比如可以用来虚拟一张网卡或点对点 通道 General Instruments Surfboard 1000 SURFboard 1000 插卡式 Cable Medem(ISA 接口),这玩意大概早就绝种了 ARCnet devices 一般人没有 ARCnet 类型的网卡 PHY device support 数据链路层芯片简称为 MAC 控制器,物理层芯片简称之为 PHY,通常的网卡把 MAC 和 PHY 的功能做到了一颗芯片中,但也有一些仅含 PHY 的"软网卡" Ethernet (10 or 100Mbit) 目前最广泛的 10/100M 网卡 Ethernet (1000 Mbit) 目前已成装机主流的 1000M 网卡 Ethernet (10000 Mbit) 万兆网卡无福消受啦 Token Ring devices 令牌环网设备 Wireless LAN (non-hamradio) 无线 LAN PCMCIA network device support PCMCIA 或 CardBus 网卡 Wan interfaces WAN 接口 ATM drivers

异步传输模式 FDDI driver support 光纤分布式数据接口 HIPPI driver support HIPPI(高性能并行接口)是一个在短距离内高速传送大量数据的点对点协议 PLIP (parallel port) support 将并口映射成网络设备,这样两台机器即使没有网卡也可以使用并口通过并行线传输 IP 数 据包 PPP (point-to-point protocol) support 点对点协议,PPP 已经基本取代 SLIP 了,用 ADSL 的可要仔细选择了 PPP multilink support 多重链路协议(RFC1990)允许你将多个线路(物理的或逻辑的)组合为一个 PPP 连接一充分 利用带宽,这不但需要 pppd 的支持,还需要 ISP 的支持 PPP filtering 允许对通过 PPP 接口的包进行过滤 PPP support for async serial ports 通过标准异步串口(COM1,COM2)使用 PPP,比如使用老式的外置 modem(非同步 modem 或 ISDN modem)上网 PPP support for sync tty ports 通过同步 tty 设备(比如 SyncLink 适配器)使用 PPP,常用于高速租用线路(比如 T1/E1) PPP Deflate compression 为 PPP 提供 Deflate(等价于 gzip 压缩算法)压缩算法支持,需要通信双方的支持才有效 PPP BSD-Compress compression 为 PPP 提供 BSD(等价于 LZW 压缩算法,没有 gzip 高效)压缩算法支持,需要通信双方的支持 才有效 PPP MPPE compression (encryption) 为 PPP 提供 MPPE 加密协议支持,它被用于微软的 P2P 隧道协议中 PPP over Ethernet 这就是 ADSL 用户最常见的 PPPoE 啦,也就是在以太网上跑的 PPP 协议 PPP over ATM 在 ATM 上跑的 PPP SLIP (serial line) support 一个在串行线上(例如电话线)传输 IP 数据报的 TCP/IP 协议.小猫一族的通讯协议,与宽带用 户无关 CSLIP compressed headers CSLIP 协议比 SLIP 快,它将 TCP/IP 头(而非数据)进行压缩传送,需要通信双方的支持才有效 Keepalive and linefill 让 SLIP 驱动支持 RELCOM linefill 和 keepalive 监视,这在信号质量比较差的模拟线路上是个 好主意 Six bit SLIP encapsulation 这种线路非常罕见,不要选它 Fibre Channel driver support 光纤通道 Traffic Shaper 流量整形,已废弃 Network console logging support 通过网络记录内核信息 Netpoll support for trapping incoming packets 不知道 Netpoll 是什么的可以不选

Netpoll traffic trapping 不知道 Netpoll 是什么的可以不选 ISDN subsystem 综合业务数字网(Integrated Service Digital Network) Telephony Support VoIP 支持 Input device support 输入设备 Generic input layer (needed for keyboard,mouse...) 通用输入层,要使用键盘鼠标的就必选 Support for memoryless force-feedback devices 游戏玩家使用的力反馈设备 Mouse interface 鼠标接口 Provide legacy /dev/psaux device 仍然支持作为传统的/dev/psaux 设备 Horizontal screen resolution 数字化转换器或图形输入板的水平分辩率 Vertical screen resolution 数字化转换器或图形输入板的垂直分辨率 Joystick interface 游戏杆 Touchscreen interface 触摸屏 Event interface 能够利用/dev/input/eventX 来存取输入设备的事件 Event debugging 该选项仅供调试 Keyboards 键盘驱动,一般选个 AT 键盘即可 Mouse 鼠标驱动,一般选个 PS/2 鼠标即可 Joysticks 游戏杆驱动 Touchscreens 触摸屏驱动 Miscellaneous devices 其他杂项驱动,一般选个 PC 喇叭即可 Hardware I/O ports 硬件 I/O 端口 Serial I/O support 使用 PS/2 键盘或鼠标的就必选 i8042 PC Keyboard controller PS/2 接口的键盘和鼠标 Serial port line discipline 串口键盘或鼠标 ct82c710 Aux port controller 一种德州仪器 TravelMate 笔记本上使用 QuickPort 接口的鼠标 Parallel port keyboard adapter

并口键盘或鼠标 PCI PS/2 keyboard and PS/2 mouse controller 接在移动式扩展坞(Docking station)上的键盘或鼠标 PS/2 driver library 为 PS/2 接口上的设备提供驱动(比如 PS/2 鼠标或标准 AT 键盘) Raw access to serio ports 不是 hacker 就别选了 Gameport support 就是早年"小霸王"游戏机上的那种手柄 Character devices 字符设备 Virtual terminal 虚拟终端.除非是嵌入式系统,否则必选 Support for console on virtual terminal 内核将一个虚拟终端用作系统控制台(将诸如模块错误/内核错误/启动信息之类的警告信 息发送到这里,通常是第一个虚拟终端).除非是嵌入式系统,否则必选 Support for binding and unbinding console drivers 虚拟终端是通过控制台驱动程序与物理终端相结合的,但在某些系统上可以使用多个控制 台驱动程序(如 framebuffer 控制台驱动程序),该选项使得你可以选择其中之一 Non-standard serial port support 非标准串口支持.这样的设备早就绝种了 Serial drivers 串口驱动.如果你有老式的串口鼠标或小猫之类的就选吧 Unix98 PTY support 伪终端(PTY)可以模拟一个终端,它由 slave(等价于一个物理终端)和 master(被一个诸如 xterms 之类的进程用来读写 slave 设备)两部分组成的软设备.使用 telnet 或 ssh 远程登录者必选 Legacy (BSD) PTY support 使用过时的 BSD 风格的/dev/ptyxx 作为 master,/dev/ttyxx 作为 slave,这个方案有一些安全 问题,建议不选 Parallel printer support 并口打印机 Support for console on line printer 允许将内核信息输出到并口,这样就可以打印出来 Support for user-space parallel port device drivers /dev/parport 设备支持,比如 deviceid 之类的程序需要使用它,大部分人可以关闭该选项 Texas Instruments parallel link cable support 德州仪器生产的一种使用并行电缆的图形计算器,如果你不知道这是什么设备就别选了 IPMI 可以利用 IPMI 远程监视服务器的物理特征(温度,电压,风扇,电源,机箱入侵),它是独立于 CPU,BIOS,OS 的,只要接通电源就可以实现对服务器的监控 IPMI top-level message handler IPMI 消息处理器,要启用 IPMI 远程监视这个就必选 Generate a panic event to all BMCs on a panic 当发生紧急情况(panic)时,IPMI 消息处理器将会向每一个已注册的底板管理控制器(BMC) 接口生成一个描述该 panic 的 IPMI 事件,这些事件可以引发日志记录/报警/重启/关机等动作 Generate OEM events containing the panic string 当发生紧急情况(panic)时,IPMI 消息处理器将会产生 OEM 类型的事件 Device interface for IPMI 为 IPMI 消息处理器提供一个 IOCTL 接口已便用户空间的进程也可以使用 IPMI

IPMI System Interface handler 向系统提供接口(KCS,SMIC),一般你用了 IPMI 就需要选上 IPMI Watchdog Timer 启用 IPMI Watchdog 定时器 IPMI Poweroff 允许 IPMI 消息处理器关闭机器 Watchdog Cards 能让系统在出现致命故障后自动重启,如果没有硬件 Watchdog,建议使用 Hangcheck timer 而不是软件 Watchdog Watchdog Timer Support 选中它并选中下面的一个 Driver 之后,再创建一个/dev/watchdog 节点即可拥有一只 Watchdog 了.更多信息请参考内核帮助 Disable watchdog shutdown on close 一旦 Watchdog 启动后就禁止将其停止 Software watchdog 软件 Watchdog,使用它不需要有任何硬件的支持,但是可靠性没有硬件 Watchdog 高 {此处省略的硬件 Watchdog 部分请按照自己主板实际使用的芯片(可能在南桥中)进行选择} Hardware Random Number Generator Core support 硬件随机数发生器核心支持 Intel HW Random Number Generator support Intel 芯片组的硬件随机数发生器 AMD HW Random Number Generator support AMD 芯片组的硬件随机数发生器 AMD Geode HW Random Number Generator support AMD Geode LX 的硬件随机数发生器 VIA HW Random Number Generator support VIA 芯片组的硬件随机数发生器 /dev/nvram support 直接存取主板上 CMOS 的接口,太危险了!建议别选 Enhanced Real Time Clock Support 启用该选项并创建/dev/rtc 文件后就可以通过/proc/driver/rtc 访问系统的硬件时钟(RTC), 众多功能依赖于它(如 SMP,IRQ 共享,定时器),建议选择 Double Talk PC internal speech card support 由 RC Systems 公司制造的一种语音合成器 Siemens R3964 line discipline 与使用西门子 R3964 协议的设备同步通信,除非你有一些诸如 PLC 之类的特殊设备,否则别 选 Applicom intelligent fieldbus card support Applicom international 公司生产的用于现场总线连接卡 Sony Vaio Programmable I/O Control Device support Sony VAIO 笔记本上的东西 Ftape, the floppy tape device driver 还使用磁带的就选吧 /dev/agpgart (AGP Support) AGP 总线支持,有 AGP 显卡的还必须从子项中选取符合自己显卡型号的驱动 Direct Rendering Manager DRI 允许应用程序以高效安全的方式直接访问图形处理,主要用于硬件 3D 加速.桌面用户建 议选择,同时还必须从子项中选取符合自己显卡型号的驱动 PCMCIA character devices

使用 PCMCIA 接口的字符设备,如果你有这种设备就到子项中去选吧 ACP Modem (Mwave) support IBM Thinkpad 上的一种软猫,古董产品 NatSemi SCx200 GPIO Support 松下的一种通用输入输出(GPIO)芯片,常用于嵌入式系统 NatSemi PC8736x GPIO Support 松下的一种通用输入输出(GPIO)芯片,常用于嵌入式系统 NatSemi Base GPIO Support 松下的一种通用输入输出(GPIO)芯片,常用于嵌入式系统 AMD CS5535/CS5536 GPIO 常用于 AMD Geode 的一种通用输入输出(GPIO)芯片,常用于嵌入式系统 RAW driver (/dev/raw/rawN) 已废弃 HPET - High Precision Event Timer 高精度事件定时器 Allow mmap of HPET 允许对 HPET 寄存器进行映射,建议选中 Hangcheck timer 宕机检测定时器周期性地检查系统任务调度程序以确定系统的运行状况,如果超过阈值,计 算机将重新启动.它通常可以比 Watchdog 更好地解决可用性和可靠性问题 TPM devices 基于硬件的"可信赖平台模块",与数字霸权管理是一路货,全不选 Telecom clock driver for MPBL0010 ATCA SBC 没见过这种硬件,不选 I2C support I2C 是 Philips 极力推动的微控制应用中使用的低速串行总线协议,可用于监控电压/风扇转 速/温度等.SMBus(系统管理总线)是 I2C 的子集.除硬件传感器外"Video For Linux"也需要该模块 的支持 I2C device interface I2C 设备接口,允许用户空间的程序通过/dev/i2c-*设备文件使用 I2C 总线 I2C Algorithms I2C 算法,可以全不选,若有其他部分依赖其子项时,会自动选上 I2C Hardware Bus support 按实际硬件情况选对应的子项即可 Miscellaneous I2C Chip support 其他不常见的产品,按需选择 I2C Core debugging messages 仅供调试 I2C Algorithm debugging messages 仅供调试 I2C Bus debugging messages 仅供调试 I2C Chip debugging messages 仅供调试 SPI support 串行外围接口(SPI)常用于微控制器(MCU)与外围设备(传感器,eeprom,flash,编码器,模数转 换器)之间的通信,比如 MMC 和 SD 卡就通常需要使用 SPI Dallas's 1-wire bus 一线总线

Hardware Monitoring support 当前主板大多都有一个监控硬件健康的设备用于监视温度/电压/风扇转速等,请按照自己主 板实际使用的芯片选择相应的子项.另外,该功能还需要 I2C 的支持 Multimedia devices 多媒体设备 Video For Linux 要使用音频/视频设备或 FM 收音卡的就必选,此功能还需要 I2C 的支持 Enable Video For Linux API 1 使用老旧的 V4L 第一版 API,反对使用 Enable Video For Linux API 1 compatible Layer 提供对第一版 V4L 的兼容,建议不选 Video Capture Adapters 视频捕获卡 Enable advanced debug functionality 该选项仅供调试 Autoselect pertinent encoders/decoders and other helper chips 为视频卡自动选择所需的编码和解码模块,建议选择 Virtual Video Driver 虚拟视频卡,仅供测试视频程序和调试 SAA5246A, SAA5281 Teletext processor 该选项仅对欧洲用户有意义,中国用户不需要 SAA5249 Teletext processor 该选项仅对欧洲用户有意义,中国用户不需要 {此处省略的硬件请按照自己实际使用的芯片进行选择} V4L USB devices 使用 USB 接口的视频卡,子项请按照自己实际使用的视频卡选择 Radio Adapters 音频卡,子项请按照自己实际使用的音频卡选择 Digital Video Broadcasting Devices 数字视频广播设备(DVB 卡或机顶盒),子项请按自己实际使用的硬件选择 DABUSB driver USB 接口的数字音频广播设备接收器 Graphics support 图形设备/显卡支持 Enable firmware EDID 允许访问 Video BIOS 中的扩展显示器识别数据(EDID),使用 Matrox 显卡的建议关闭,建议 桌面用户选择 Support for frame buffer devices 帧缓冲设备是为了让应用程序使用统一的接口操作显示设备而对硬件进行的抽象,建议桌 面用户选择 Enable Video Mode Handling Helpers 使用 GTF 和 EDID 来帮助处理显示模式,可以不选,若有其他选项依赖于它时,会自动选上 Enable Tile Blitting Support 可以不选,若有其他选项依赖于它时,会自动选上 VGA 16-color graphics support 16 色 VGA 显卡.如果你有这种古董就选吧 VESA VGA graphics support 符合 VESA 2.0 标准的显卡的通用驱动,如果显卡芯片在下面能够找到就可以不选 {此处省略的硬件请按照自己实际使用的显卡芯片进行选择}

Virtual Frame Buffer support 仅供调试使用 Console display driver support 控制台显示驱动 VGA text console 文本控制台,必选 Enable Scrollback Buffer in System RAM 在内存中开辟额外的屏幕缓冲区,这将允许你回滚屏幕 Scrollback Buffer Size (in KB) 在内存中开辟的额外屏幕缓冲区大小 Video mode selection support 允许在内核启动时使用"vga="选择文本模式,如果你希望一行能够显示更多字符的话可以 打开它 MDA text console (dual-headed) 如果你有古董级别的单色显卡并且作为第二块显卡使用以实现双头显示就选上吧 Framebuffer Console support 基于 framebuffer 的控制台驱动,服务器可以不选 Framebuffer Console Rotation 显示画面旋转,它可能大大降低显示速度,建议不选 Select compiled-in fonts 选择内建字体 VGA 8x8 font 高分辨率下的小字体 VGA 8x16 font 底分辨率下的大字体 {其它字体省略} Logo configuration 启动时显示 linux 的 logo(一幅企鹅图像),喜欢炫一下的就选吧 Backlight & LCD device support LCD 显示器支持,一般无需选择 Sound 声卡 Advanced Linux Sound Architecture 使用声卡者必选 Sequencer support 音序器支持(MIDI 必需),除非你确定不需要,否则请选上 Sequencer dummy client 除非你要同时连接到多个 MIDI 设备或应用程序,否则请不要选择 OSS Mixer API OSS 混音器 API 仿真,许多程序目前仍然需要使用它,建议选择 OSS PCM (digital audio) API OSS 数字录音(PCM)API 模拟,许多程序目前仍然需要使用它,建议选择 OSS PCM (digital audio) API - Include plugin system 建议不选 OSS Sequencer API OSS 音序器支持,许多程序目前仍然需要使用它,建议选择 RTC Timer support 为 ALSA 启用 RTC 定时器支持,建议选择 Use RTC as default sequencer timer

将 RTC 当作默认的时序脉冲发生器 Dynamic device file minor numbers 仅供拥有多个声卡的用户选择 Support old ALSA API 支持已被废弃的老版本 ALSA API Verbose procfs contents 仅供调试使用 Verbose printk 仅供调试使用 Debug 仅供调试使用 Generic devices 通用设备 Dummy (/dev/null) soundcard 仅供调试 Virtual MIDI soundcard 虚拟 MIDI 驱动,允许将使用原始 MIDI 设备的应用程序连接到音序器客户端,如果你不知道 MIDI 是什么就别选 {此处省略的硬件请按照自己实际使用的声卡芯片进行选择} PCI devices PCI 接口的声卡,请按实际使用的声卡选择子项 USB devices USB 接口的声卡,请按实际使用的声卡选择子项 PCMCIA devices PCMCIA 接口的声卡,请按实际使用的声卡选择子项 Open Sound System 反对使用 USB support USB 支持 Support for Host-side USB 主机端(Host-side)USB 支持.通用串行总线(USB)是一个串行总线子系统规范,它比传统的串 口速度更快并且特性更丰富(供电,热插拔,最多可接 127 个设备等),有望在将来一统 PC 外设接 口.USB 的"Host"(主机)被称为"根"(也可以理解为是主板上的 USB 控制器),外部设备被称为"叶子 ",而内部的节点则称为"hub"(集线器).基本上只要你想使用任何 USB 设备都必须选中此项.另外, 你还需要从下面选中至少一个"Host Controller Driver"(HCD),比如适用于 USB1.1 的"UHCI HCD support"或"OHCI HCD support",适用于 USB2.0 的"EHCI HCD (USB 2.0) support".如果你拿不 准的话把他们全部选中一般也不会出问题.如果你的系统有设备端的 USB 接口(也就是你的系统 可以作为"叶子"使用),请到"USB Gadget"中进行选择. USB verbose debug messages 仅供调试使用 USB device filesystem 在/proc/bus/usb 里列出当前连接的 usb 设备(mount -t usbfs none /proc/bus/usb),这样用 户空间的程序就可以直接访问这些 USB 设备,基本上你要使用 USB 设备的话就必须选中此项 Enforce USB bandwidth allocation 执行 usb 带宽分配限制,禁止打开占用 usb 总线带宽超过 90%的设备,关闭该选项可能会导 致某些设备无法正常工作 Dynamic USB minor allocation 除非你有超过 16 个同类型的 USB 设备,否则不要选择

USB selective suspend/resume and wakeup usb 设备的挂起和恢复,毛病多多且许多设备尚未支持它,建议不选 EHCI HCD (USB 2.0) support USB 2.0 支持(大多数 2002 年以后的主板都支持).如果你选中了此项,一般来说你还需要选 中 OHCI 或 UHCI 驱动 Full speed ISO transactions 由于 USB 2.0 支持低速(1.5Mbps)/全速(12Mbps)/高速(480Mbps)三种规格的外部设备,为 了将全/低速设备对高速设备可用带宽的影响减到最小,在 USB2.0 集线器中提供了一种事务转换 (Transaction Translator)机制,该机制支持在 Hub 连接的是全/低速设备的情况下,允许主控制器 与 Hub 之间以高速传输所有设备的数据,从而节省不必要的等待.如果你没有外置的 USB 集线器 就无需选择 Root Hub Transaction Translators 带有 USB 2.0 接口的主板上都有一个"根集线器"(Root Hub)以允许在无需额外购买 hub 的 情况下就可以提供多个 USB 插口,其中的某些产品还在其中集成了事务转换(Transaction Translator)功能,这样就不需要再额外使用一个兼容 OHCI 或 UHCI 的控制器来兼容 USB 1.1,即 使你不太清楚自己主板上的根集线器是否集成了事务转换功能也可以安全的选中此项 Improved Transaction Translator scheduling 如果你有一个高速 USB 2.0 hub 并且某些接在这个 hub 上的低速或全速设备不能正常工作 (显示'cannot submit datapipe: error -28'或'error -71'错误),可以考虑选上 ISP116X HCD support ISP1160/ISP1161 主机 USB 控制器,是符合 USB2.0 全速规范的单片主机控制器和设备控制 器,支持 OHCI 标准 OHCI HCD support 开放主机控制接口(OHCI)是主要针对嵌入式系统的 USB 1.1 主机控制器规范 UHCI HCD (most Intel and VIA) support 通用主机控制器接口(UHCI)是主要针对 PC 机的 USB 1.1 主机控制器规范.另外,EHCI 也可 能需要它 Elan U132 Adapter Host Controller 如果你有这种硬件就选吧 SL811HS HCD support 如果你有这种硬件就选吧 USB Bluetooth TTY support USB 蓝牙 TTY 设备支持 USB MIDI support USB MIDI 设备支持 USB Modem (CDC ACM) support USB 接口的猫或 ISDN 适配器 USB Printer support USB 打印机 USB Mass Storage support USB 存储设备(U 盘,USB 硬盘,USB 软盘,USB CD-ROM,USB 磁带,memory sticks,数码相机, 读卡器等等).该选项依赖于'SCSI device support',且大部分情况下还依赖于'SCSI disk support'(比如 U 盘或 USB 硬盘) USB Mass Storage verbose debug 仅供调试使用 {省略的部分请按照自己实际使用的硬件选择(事实上大部分人都没有这些设备,可以全不选)} The shared table of common (or usual) storage devices

该模块包含一张记录了常用 USB 存储设备及其驱动的表格,这样你无需重新编译模块即可 在切换这些设备时自动邦定对应的驱动(还需要对/etc/modprobe.conf 进行相应的设置).不确定 的建议不选 USB Human Interface Device (full HID) support USB 人机界面设备(鼠标/键盘/游戏杆/手写版等人操作计算机的设备),该驱动不能和"USB HID Boot Protocol drivers"同时使用 HID input layer support 如果你有 USB 接口的鼠标/键盘/游戏杆/手写板等输入设备就必选 Enable support for iBook/PowerBook special keys 苹果 iBooks/PowerBooks 键盘上的 Fn/Numlock 等功能键支持 Force feedback support 力反馈设备 /dev/hiddev raw HID device support 如果你有 USB 监控装置或不间断电源(UPS)之类的非输入设备就选上 USB HID Boot Protocol drivers 如果你有绝对的把握确信不为自己的键盘和鼠标使用通常的 HID 驱动,而要使用 Boot Protocol 模式的 HID 驱动(常见于嵌入式环境)就选吧 Aiptek 6000U/8000U tablet support 一种手写板 Wacom Intuos/Graphire tablet support 一种手写/绘图板 Acecad Flair tablet support 一种数控绘图板 KB Gear JamStudio tablet support 一种手写/绘图板 Griffin PowerMate and Contour Jog support 一种具有调节音量/滚动文本/视频快进快退等功能的产品 USB Touchscreen Driver USB 触摸屏驱动 Yealink usb-p1k voip phone 一种 VoIP 电话 X-Box gamepad support X-Box 游戏板 ATI / X10 USB RF remote control 一种 usb 远程控制设备 ATI / Philips USB RF remote control 一种 usb 远程控制设备 Keyspan DMR USB remote control 一种 usb 远程控制设备 Apple USB Touchpad support 苹果机上的触摸板 USB Mustek MDC800 Digital Camera support 一种数码相机 Microtek X6USB scanner support 一种扫描仪 USB Network Adapters USB 网络适配器,如果你有这种设备请按自己实际使用的硬件选择子项 USB Monitor usb 流量监控,一般没必要选它

USS720 parport driver 一种 USB 接口转并口的转换设备 USB Serial Converter support USB 接口转串口的转换设备 EMI 6|2m USB Audio interface support 一种 USB 音频设备 EMI 2|6 USB Audio interface support 一种 USB 音频设备 ADU devices from Ontrak Control Systems Ontrak Control Systems 公司的一种自动拨号设备 USB Auerswald ISDN support 一种 ISDN 设备 USB Diamond Rio500 support 一种 mp3 播放机 USB Lego Infrared Tower support 一种无线发射机 USB LCD driver support USB 液晶显示器 USB LED driver support USB 发光二极管 Cypress CY7C63xxx USB driver support 德国 AK Modul-Bus Computer GmbH 公司的一种产品,不知道是用来干什么的 Cypress USB thermometer driver support 一种温度计?? USB Phidgets drivers 来自 Phidgets 公司的各种 USB 产品 Siemens ID USB Mouse Fingerprint sensor support 西门子公司的一种指纹传感器 Elan PCMCIA CardBus Adapter USB Client Elan 公司的一种 USB 转 PCMCIA 的适配器 Apple Cinema Display support 苹果公司的一种 Cinema Display USB 2.0 SVGA dongle support (Net2280/SiS315) 一种软件狗 USB LD driver USB LD 驱动 PlayStation 2 Trance Vibrator driver support SONY 的 PS2 上面的"入迷振荡器"(类似于力反馈手柄) USB testing driver 测试中的驱动,别选 USB DSL modem support USB DSL 猫 USB Gadget Support 其他各种杂七杂八的 usb 小玩艺 MMC/SD Card support MMC/SD 卡支持 LED devices 发光二级管(LED)设备 InfiniBand support

InfiniBand 是一个通用的高性能 I/O 规范,它使得存储区域网中以更低的延时传输 I/O 消息 和集群通讯消息并且提供很好的伸缩性.用于 Linux 服务器集群系统 EDAC - error detection and reporting (RAS) 错误检测与纠正(EDAC)的目标是发现并报告甚至纠正在计算机系统中发生的错误,这些错 误是由 CPU 或芯片组报告的底层错误(内存错误/缓存错误/PCI 错误/温度过高,等等),建议选择. 如果这些代码报告了一个错误,请到 http://bluesmoke.sourceforge.net/和 http://buttersideup.com/edacwiki 查看更多信息 Debugging 仅供调试使用 Main Memory EDAC (Error Detection And Correction) reporting 一些系统能够检测和修正主内存中的错误,EDAC 能够报告这些信息(EDAC 自己检测到的或 者根据 ECC 得到的).EDAC 还会尽量检测这些错误发生在哪里以便于替换损坏的内存.建议选择 并按照你实际使用的芯片组选取子项 Error detecting method 错误检测方法,当前只有一个"Poll for errors"(错误轮询)可用 Real Time Clock 所有的 PC 机主板都包含一个电池动力的实时时钟芯片,以便在断电后仍然能够继续保持时 间,RTC 通常与 CMOS 集成在一起,因此 BIOS 可以从中读取当前时间 RTC class 通用 RTC 类支持,选中此项后你就可以在操作系统中使用一个或多个 RTC 设备(你还必须从 下面启用一个或多个 RTC 接口) Set system time from RTC on startup 系统启动时使用从指定的 RTC 设备中读取的时间来设定系统时间,通常这将有助于避免不 必要的文件系统检测程序(fsck)的运行,建议选择 The RTC to read the time from 指定具体从哪个 RTC 设备中读取时间 RTC debug support 仅供调试使用 sysfs 允许通过 sysfs 接口使用 RTC,允许多个 RTC 设备,也就是/sys/class/rtc/rtc0~N proc 允许通过 proc 接口使用 RTC,仅允许一个 RTC 设备,也就是/proc/driver/rtc dev 允许通过 dev 接口使用 RTC,允许多个 RTC 设备,也就是"udev"设置的/dev/rtc0~N,建议你 建立一个指向其中之一的软连接/dev/rtc,某些程序(比如 hwclock)需要使用/dev/rtc RTC UIE emulation on dev interface 如果底层 rtc 芯片驱动没有提供 RTC_UIE 就仿真一个 RTC_UIE.那些请求将产生每秒一次的 更新请求以用来同步[这个选项的意思我也搞不清楚究竟时啥意思,翻译的也可能有误] {此处省略的 RTC 驱动请按照自己实际使用的 RTC 芯片进行选择} DMA Engine support 从 Intel Bensley 双核服务器平台开始引入的数据移动加速(Data Movement Acceleration) 引擎,它将某些传输数据的操作从 CPU 转移到专用硬件,从而可以进行异步传输并减轻 CPU 负 载.Intel 已将此项技术变为开放的标准,将来应当会有更多的厂商支持 Network: TCP receive copy offload 通过在网络栈中利用 DMA 引擎来减少接收数据包时的 copy-to-user 操作以释放 CPU 资源, 这是 DMA 引擎目前最主要的用途 Intel I/OAT DMA support

Intel I/O 加速技术(Intel I/O Acceleration Technology)中的 DMA 支持,基于 Intel Bensley 的新一代服务器平台都支持它 File systems 文件系统 强烈建议在选择之前先看看各种文件系统的比较 Second extended fs support Ext2 文件系统是 Linux 的标准文件系统,擅长处理稀疏文件 Ext2 extended attributes Ext2 文件系统扩展属性(与 inode 关联的 name:value 对)支持 Ext2 POSIX Access Control Lists POSIX ACL(访问控制列表)支持,可以更精细的针对每个用户进行访问控制,需要外部库和程 序的支持 Ext2 Security Labels 安全标签允许选择使用不同的安全模型实现(如 SELinux)的访问控制模型,如果你没有使用 需要扩展属性的安全模型就别选 Ext2 execute in place support 程序在写入存储介质时就已经分配好运行时的地址,因此不需要载入内存即可在芯片内执 行,一般仅在嵌入式系统上才有这种设备 Ext3 journalling file system support Ext3 性能平庸,使用 journal 日志模式时数据完整性非常好(但怪异的是此时多线程并发读写 速度却最快) Ext3 extended attributes Ext3 文件系统扩展属性(与 inode 关联的 name:value 对)支持 Ext3 POSIX Access Control Lists POSIX ACL(访问控制列表)支持,可以更精细的针对每个用户进行访问控制,需要外部库和程 序的支持 Ext3 Security Labels 安全标签允许选择使用不同的安全模型实现(如 SELinux)的访问控制模型,如果你没有使用 需要扩展属性的安全模型就别选 Ext4dev/ext4 extended fs support 尚处于开发状态的 Ext4 JBD (ext3) debugging support 仅供开发者使用 JBD2 (ext4dev/ext4) debugging support 仅供开发者使用 Reiserfs support 性能几乎全面超越 Ext2(处理稀疏文件比 Ext2 慢),小文件(小于 4k)性能非常突出,创建和删 除文件速度最快,处理大量目录和文件(5k-20k)时仍然非常迅速.日志模式建议使用 Ordered,追 求极速可使用 Writeback 模式,追求安全可使用 Journal 模式.建议使用 noatime,notail 选项挂载 分区以提高速度和避免 bug.用于 NFS 和磁盘限额时需要额外的补丁 Enable reiserfs debug mode 启用 ReiserFS 调试模式,仅供开发者使用 Stats in /proc/fs/reiserfs 在/proc/fs/reiserfs 文件中显示 Reiserfs 文件系统的状态,仅供开发者使用 ReiserFS extended attributes ReiserFS 文件系统扩展属性(与 inode 关联的 name:value 对)支持 ReiserFS POSIX Access Control Lists

POSIX ACL(访问控制列表)支持,可以更精细的针对每个用户进行访问控制,需要外部库和程 序的支持 ReiserFS Security Labels 安全标签允许选择使用不同的安全模型实现(如 SELinux)的访问控制模型,如果你没有使用 需要扩展属性的安全模型就别选了 JFS filesystem support IBM 的 JFS 文件系统 XFS filesystem support 碎片最少,多线程并发读写最佳,大文件(>64k)性能最佳,创建和删除文件速度较慢.由于 XFS 在内存中缓存尽可能多的数据且仅当内存不足时才会将数据刷到磁盘,所以应当仅在确保电力 供应不会中断的情况下才使用 XFS Quota support XFS 的磁盘配额支持 Security Label support 扩展的安全标签支持.SElinux 之类的安全系统会使用到这样的扩展安全属性 POSIX ACL support POSIX ACL(访问控制列表)支持,可以更精细的针对每个用户进行访问控制,需要外部库和程 序的支持 Realtime support 实时子卷是专门存储文件数据的卷,可以允许将日志与数据分开在不同的磁盘上 GFS2 file system support 一种用于集群的文件系统 OCFS2 file system support 一种用于集群的文件系统 Minix fs support 老古董文件系统 ROM file system support 用于嵌入式系统的内存文件系统的支持 Inotify file change notification support 新式的文件系统的变化通知机制,简洁而强大,用于代替老旧的 Dnotify Inotify support for userspace 用户空间的 Inotify 支持 Quota support 磁盘配额支持,限制某个用户或者某组用户的磁盘占用空间,Ext2/Ext3/Reiserfs 都支持它 Old quota format support 老式的配额格式支持 Quota format v2 support 新的 v2 格式允许使用 32 位的 UID/GID Dnotify support 旧式的基于目录的文件变化的通知机制(新机制是 Inotify),目前仍然有一些程序依赖它 Kernel automounter support 内核自动加载远程文件系统(v3,就算选也不选这个旧的) Kernel automounter version 4 support (also supports v3) 新的(v4)的内核自动加载远程文件系统的支持,也支持 v3 Filesystem in Userspace support FUSE 允许在用户空间实现一个文件系统,如果你打算开发一个自己的文件系统或者使用一 个基于 FUSE 的文件系统就选吧 CD-ROM/DVD Filesystems CD-ROM/DVD 文件系统

ISO 9660 CDROM file system support CD-ROM 的标准文件系统 Microsoft Joliet CDROM extensions Microsoft 对 ISO 9660 文件系统的 Joliet 扩展,允许在文件名中使用 Unicode 字符,也允许长 文件名 Transparent decompression extension Linux 对 ISO 9660 文件系统的扩展,允许将数据透明的压缩存储在 CD 上 UDF file system support 某些新式 CD/DVD 上的文件系统,很少见 DOS/FAT/NT Filesystems DOS/Windows 的文件系统 MSDOS fs support 古老的 MSDOS 文件系统 VFAT (Windows-95) fs support 从 Win95 开始使用的 VFAT 文件系统 Default codepage for FAT 默认代码页 Default iocharset for FAT 默认字符集 NTFS file system support 从 WinNT 开始使用的 NTFS 文件系统 NTFS debugging support 仅供调试使用 NTFS write support NTFS 写入支持 Pseudo filesystems 伪文件系统 /proc file system support 显示系统状态的虚拟文件系统(irq 设置,内存使用,加载的设备驱动器,网络状态等),许多程 序依赖于它 /proc/kcore support 系统物理内存的映象 /proc/vmcore support 以 ELF 格式转储的已崩溃内核镜像,仅供调试使用 Sysctl support (/proc/sys) 显示各种不同的内核参数,并让 root 用户能交互地更改其中的某些内容 sysfs file system support 导出内核内部对象及其属性和对象之间的相互关系的文件系统,它把连接在系统上的设备 和总线以及驱动程序等组织成为一个分级的文件,内核启动时依靠它挂载根分区,禁用 sysfs 后必 须在内核引导参数中使用设备号指定根分区 Virtual memory file system support (former shm fs) tmpfs 文件系统(以前叫 shm[共享内存]文件系统)支持 Tmpfs POSIX Access Control Lists POSIX ACL(访问控制列表)支持,可以更精细的针对每个用户进行访问控制,需要外部库和程 序的支持 HugeTLB file system support 大多数现代计算机体系结构提供对多种内存页面大小的支持(比如 IA-32 结构支持 4K 和 4M(PAE 模式为 2M)两种页面).TLB(Translation Lookaside Buffer)是虚拟地址到物理地址的翻译 缓冲区,这种缓冲区在处理器上是很宝贵的,操作系统总是尝试将有限的 TLB 资源发挥到极致.特

别是能够轻松获得若干 G 内存的时候(>4G),这种优化就显得尤为关键.只有开启此选项之后才 能提供 hugepage 支持. Userspace-driven configuration filesystem configfs 是用户空间驱动的文件系统,提供与 sysfs 相反的功能 Miscellaneous filesystems 非主流的杂项文件系统 Network File Systems 网络文件系统 Partition Types 高级磁盘分区类型,不确定可以全不选 Native Language Support 本地语言支持.如果你仅仅使用几种主流的 Linux 文件系统(ext2/3/4,Reiserfs,JFS,XFS),就不需 要这个东西.但是如果你需要使用 FAT/NTFS 分区的话,就需要这个东西了. Base native language support 如果你启用了本地语言支持,那么这个必选 Default NLS Option 默认本地语言,建议使用 UTF-8 {此处省略的部分请按需选择,一般至少需要 CP437,ASCII,ISO-8859-1} Distributed Lock Manager 通用的分布式锁管理器,不明白就不选 Instrumentation Support 分析支持 Profiling support 对系统的活动进行分析,仅供内核开发者使用 Kprobes 仅供内核开发者使用 Kernel hacking 内核 hack 选项 Show timing information on printks 在 printk 的输出中包含时间信息,可以用来分析内核启动过程各步骤所用时间 Enable __must_check logic 在编译内核的过程中使用"必须检查"的逻辑,禁用它将不会显示某些警告信息 Magic SysRq key 不懂的千万别选 Enable unused/obsolete exported symbols 导出无用和废弃的符号,这将使内核不必要的增大 Kernel debugging 不是内核开发者的别选 Debug Filesystem 不是内核开发者的别选 Compile the kernel with frame unwind information 不是内核开发者的别选 Run 'make headers_check' when building vmlinux 在编译内核时运行'make headers_check'命令检查内核头文件,当你修改了与用户空间相关 的内核头文件后建议启用该选项 Linux Kernel Dump Test Tool Module

不是内核开发者的别选 Enable doublefault exception handler 允许捕获非常罕见的导致系统无警告重启的 doublefault 异常,对于调试非常重要 Security options 安全选项 这里的选项不明白的建议不要选,否则有可能弄巧成拙. Enable access key retention support 在内核中保留 authentication token 和 access key Enable the /proc/keys file by which keys may be viewed 允许有权限的进程通过/proc/keys 读取所有的 key Enable different security models 允许内核选择不同的安全模型,如果未选中则内核将使用默认的安全模型 Socket and Networking Security Hooks 允许安全模型通过 Security Hook 对 Socket 与 Networking 进行访问控制 XFRM (IPSec) Networking Security Hooks 启用 XFRM 安全 Hook Default Linux Capabilities 启用与"默认"Linux 的兼容性 Root Plug Support 一个简单的 Linux 安全模块,在特定的 USB 设备不存在时它简单的禁止一切 egid==0 的进 程运行 NSA SELinux Support 美国国家安全局(NSA)开发的安全增强 Linux(SELinux),你还需要进行策略配置(checkpolicy) 并且对文件系统进行标记(setfiles) NSA SELinux boot parameter 添加一个内核引导参数以允许在引导时使用'selinux=0'禁用 SELinux 或'selinux=1'启用 SELinux NSA SELinux boot parameter default value 上述参数的默认值 NSA SELinux runtime disable 允许在运行时禁用 SELinux NSA SELinux Development Support SELinux 开发支持 NSA SELinux AVC Statistics 搜集存取向量(access vector)缓冲区的统计信息并在/selinux/avc/cache_stats 中显示出来. 这些信息可以用 avcstat 之类的工具查看 NSA SELinux checkreqprot default value checkreqprot 标志的默认值 NSA SELinux enable new secmark network controls by default 默认启用新的基于安全标记(secmark)的网络 NSA SELinux maximum supported policy format version 允许将支持的最高策略格式版本设置为一个特定的数值 NSA SELinux maximum supported policy format version value 支持的最高策略格式版本的数值 Cryptographic options 加密选项 Cryptographic API

提供核心的加密 API 支持.这里的加密算法被广泛的应用于驱动程序通信协议等机制中.子 选项可以全不选,内核中若有其他部分依赖它,会自动选上 Cryptographic algorithm manager 创建加密模版实例,必须要选 HMAC support 为 IPSec 所必须,可为 PPPoE 提供压缩支持 Null algorithms NULL 加密算法(什么也不做),用于 IPsec 协议的封装安全载荷模块(ESP) MD4 digest algorithm 老旧的摘要算法,已经过时 MD5 digest algorithm 主流摘要算法,128 位(已被中国山东大学王小云攻破,可以快速找到碰撞) SHA1 digest algorithm 主流摘要算法,160 位(已被中国山东大学王小云攻破,可以快速找到碰撞),速度与 MD5 相当 SHA256 digest algorithm 更好的摘要算法,256 位,速度较 SHA1 稍慢 SHA384 and SHA512 digest algorithms 更好的摘要算法,384/512 位,速度大约只有 SHA1 的 40-50% Whirlpool digest algorithms 最安全的摘要算法,512 位,已被列入 ISO 标准,目前最新版本为 3.0(2003 年发布) Tiger digest algorithms 号称最快的摘要算法,192 位,专门为 64 位 CPU 进行了优化 ECB support 电子密码本,最简单的加密方法 CBC support 密码块链,IPSec 需要使用它 DES and Triple DES EDE cipher algorithms 老迈的(DES)和尚佳的(Triple DES)对称加密算法 Blowfish cipher algorithm 又老又慢的对称加密算法 Twofish cipher algorithm 很强的对称加密算法,使用较广 Twofish cipher algorithms (i586) 很强的对称加密算法,使用较广(针对 i586 的版本) Serpent cipher algorithm 很强的对称加密算法 AES cipher algorithms 最佳的对称加密算法(Rijndael),128/192/256 位,强度最高,快速且节省内存 AES cipher algorithms (i586) 最佳的对称加密算法(Rijndael),128/192/256 位,强度最高,快速且节省内存(针对 i586 的版 本) CAST5 (CAST-128) cipher algorithm 对称加密算法 CAST6 (CAST-256) cipher algorithm 对称加密算法 TEA, XTEA and XETA cipher algorithms 较弱的对称加密算法 ARC4 cipher algorithm 脆弱的流对称加密算法

Khazad cipher algorithm 对称加密算法 Anubis cipher algorithm 对称加密算法 Deflate compression algorithm 压缩算法,当在 IPSec 中使用 IPCOMP 协议时才需要 Michael MIC keyed digest algorithm 摘要算法,仅仅用于校验 iSCSI 设备传输的数据,因为算法本身比较脆弱 CRC32c CRC algorithm 摘要算法,可用于校验 iSCSI 设备传输的数据 Testing module 快速且丑陋的测试模块 Hardware crypto devices 仅有 VIA C7 系列处理器支持硬件加密(VIA PadLock 高级加密引擎) Library routines 库子程序 仅有那些不包含在内核原码中的第三方内核模块才可能需要,可以全不选,内核中若有其他 部分依赖它,会自动选上 CRC-CCITT functions 传送 8-bit 字符,欧洲标准 CRC16 functions 传送 8-bit 字符,美国标准 CRC32 functions 用于点对点的同步数据传输中,传输网络数据包所必须的 CRC32c (Castagnoli, et al) Cyclic Redundancy-Check 用于点对点的同步数据传输中,比如 iSCSI 设备 Load an Alternate Configuration File 读入一个外部配置文件 Save Configuration to an Alternate File 将配置保存到一个外部文件 (以上配置供参考,对于2.6.12的内核配置可参考2.6.19内核配置)

配置移植内核过程中会遇到到主要问题:
打过补丁内核编译过如果再次打补丁可能会破坏源代码,在自己配置的内核运行后常会出 现内核恐慌的问题,即不能正常启动。 如:Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(1,0) 是因为未选中 General setup 中的 Initial RAM filesystem and RAM disk (initramfs/initrd) support 选项,RAM Disk 是由 boot loader 在正常的启动之前加载的作为根目录的文件系统,它通常 是用于加载“真正的”根目录所需的模块。也就是说系统加载文件系统之前要把内存作为一个 块设备加载以便加载真正的的文件需要的模块。 Warning: unable to open an initial console. Ramdisk 文件系统与内核版本支持方面有问题, 这个也是控制台 console 的问题,inux-2.6.13 l
以后的内核都支持 devfs,而之后版本的内核就把 devfs 这块去掉了,虽然还能在内核源码中找

到对应的源码,你也可以把它加进内核,但是也不是太好用。2.6.13 后的版本改为支持 udev 了。 因此如果你是 linux-2.6.13 版本以下的内核, 编译的时候在 Pseudo filesystems 添加 dev filesystem surpport 选项,也就是添加 devfs 的支持,如果 linux-2.6.13 之后的版本,你就看 看你的 rootfs 下有没有/dev/console 这个文件,没有的话,自己做一个就可以 Couldn't get file descriptor for socket /dev/log:Address family not supported by protocol 在 Networking options 里面。用 syslogd 需要 Unix domain sockets


6.1文件系统的介绍和组成

文件系统的制作

文件系统按物理位置可以分为本地文件系统LFS(Local File System)和网络文件系统 NFS(Network File System)。本地文件系统的组件要求目标系统要有大的FLASH或者DOC (Disk On Chip), 将在主机系统组织好的文件系统拷贝到目标系统上去,一般的做法都是用 NFS文件系统启动嵌入Linux,然后将组织好的文件系统拷贝到目标系统。NFS文件系统对目标系 统的记忆MEMORY没有多大的要求,但需要主机系统的配合,工作方式就是常见的服务器/客户机 模型, 主机系统作为服务器, 目标系统为客户机。 采用NFS文件系统要求内核要支持BOOTP或DHCP, TFTP和NFS,编译内核时要将这些功能选上去。 (关于文件系统内容,制作方法的详细介绍请参 考《构建嵌入式 linux 系统》一书) 文件系统是基于被划分的存储设备上的逻辑上单位上的一种定义文件的命名、存储、组织 及取出的方法。如果一个Linux没有根文件系统,它是不能被正确的启动的。因此,我们需要 为Linux创建根文件系统,我们将其创建在FLASH上。 Linux的根文件系统可能包括如下目录(或更多的目录) : (1)/bin (binary):包含着所有的标准命令和应用程序; (2)/dev (device):包含外设的文件接口,在Linux下,文件和设备采用同种地方法访问 的,系统上的每个设备都在/dev里有一个对应的设备文件; (3) (etcetera): /etc 这个目录包含着系统设置文件和其他的系统文件, 例如/etc/fstab(file system table)记录了启动时要mount 的filesystem; (4)/home:存放用户主目录; (5)/lib(library):存放系统最基本的库文件; (6)/mnt:用户临时挂载文件系统的地方; (7)/proc:linux提供的一个虚拟系统,系统启动时在内存中产生,用户可以直接通过 访问这些文件来获得系统信息; (8)/root:超级用户主目录; (9)/sbin:这个目录存放着系统管理程序,如fsck、mount等; (10)/tmp(temporary):存放不同的程序执行时产生的临时文件; (11)/usr(user):存放用户应用程序和文件。 采用BusyBox是缩小根文件系统的好办法,因为其中提供了系统的许多基本指令但是其体 积很小。本章也主要介绍利用BusyBox来制作根文件系统。 现在再简要介绍几种主要的文件系统类型: 1 cramfs 在根文件系统中,为保护系统的基本设置不被更改,可以采用cramfs格式,它是一种只读 的闪存文件系统。制作cramfs文件系统的方法为:建立一个目录,将需要放到文件系统的文件 copy到这个目录,运行"mkcramfs 目录名 image名"就可以生成一个cramfs文件系统的image文 件。例如如果目录名为rootfs,则正确的命令为: mkcramfs rootfs rootfs.ramfs 我们使用下面的命令可以mount生成的rootfs.ramfs文件,并查看其中的内容: mount -o loop -t cramfs rootfs.ramfs /mount/point 此地址可以下载mkcramfs工具:http://sourceforge.net/projects/cramfs/。 2 jfss2 对于cramfs闪存文件系统, 如果没有ramfs的支持则只能读, 而采用jfss2 The Journalling Flash ( File System version 2)文件系统则可以直接在闪存中读、写数据。jfss2 是一个日志结构 (log-structured)的文件系统,包含数据和原数据(meta-data)的节点在闪存上顺序地存储。jfss2记 录了每个擦 写块的擦写次数,当闪存上各个擦写块的擦写次数的差距超过某个预定的阀值,开 始进行磨损平衡的调整。调整的策略是,在垃圾回收时将擦写次数小的擦写块上的 数据迁移到

擦写次数大的擦写块上以达到磨损平衡的目的。 与mkcramfs类似,同样有一个mkfs.jffs2工具可以将一个目录制作为jffs2文件系统。假设把 /bin目录制作为jffs2文件系统,需要运行的命令为: mkfs.jffs2 -d /bin -o jffs2.img 3 yaffs yaffs 是一种专门为嵌入式系统中常用的闪存设备设计的一种可读写的文件系统,它比jffs2 文件系统具有更快的启动速度,对闪存使用寿命有更好的保护机制。为使Linux支持yaffs文件系 统,我们需要将其对应的驱动加入到内核中 fs/yaffs/,并修改内核配置文件。使用我们使用 mkyaffs工具可以将NAND FLASH中的分区格式化为yaffs格式(如/bin/mkyaffs /dev/mtdblock/0 命令可以将第1个MTD块设备分区格式化为yaffs) ,而使用mkyaffsimage(类似于mkcramfs、 mkfs.jffs2)则可以将某目录生成为yaffs文件系统镜像。 嵌入式Linux还可以使用NFS(网络文件系统)通过以太网 挂接根文件系统,这是一种经 常用来作为调试使用的文件系统启动方式。通过网络挂接的根文件系统,可以在主机上生成 ARM 交叉编译版本的目标文件或二进制可执行文件,然后就可以直接装载或执行它,而不用 频繁地写入flash。 在建立文件系统时,要根据自己的需要选取所要的命令和库,如果你的目标系统的文件系 统载体(FLASH或者DOC)不够大,那就要好好裁减一下了。

6.2 链接库和命令集的制作
首先建立rootf文件夹,作为文件系统的根目录,在此

相关文章:
arm-linux-gcc的命令参数介绍.txt
arm-linux-gcc的命令参数介绍 - 我们需要编译出运行在ARM平台上的代码,所使用的交叉编译器为 arm-linux-gcc。下面将arm-linux-gcc编译工具的一些常用命令参数...
ARM开发教程之ARM Linux系统移植步骤_图文.ppt
ARM开发教程之ARM Linux系统移植步骤 - 文档介绍了ARM开发教程之ARM简介,Linux简介,系统的制作移植建立交叉编译环境,引导程序,内核,修改内核,内核的配置编译,根文件...
arm-linux-gcc用法.doc
arm-linux-gcc用法 - arm-linux-gcc 用法 wangw
一篇比较好的学习嵌入式ARM+linux的文章.doc
一篇比较好的学习嵌入式ARM+linux的文章 - 一篇比较好的学习嵌入式 ARM+linux 的文章 2009-07-22 22:57:36| 分类: 默认分类|举报|字号 订阅 发表于 2...
arm-linux-gcc下载与安装.txt
arm-linux-gcc下载与安装 - 在RHEL 5平台上安装配置arm-linux-gcc 2011-02-23 19:35:40| 分类: 嵌入式开发环境 | 标签: |字号大中小...
ARM和LINUX的关系.txt
ARMLINUX的关系 - 最佳答案 1,ARMLINUX什么关系? ARM是一种MCU的架构,Linux是一种操作系统,ARM不是为Linux而设计,Linux也不是为ARM而设计,只是L...
操作笔记----安装arm-linux-gcc.pdf
在 linux 平台上安装好的基础上,开始配置 arm-linux-gcc,使其正常工作 一,安装前准备 1,下载并安装 arm-linux-gcc arm-linux-gcc-4.2.1 的版本在 http://...
如何使用开发板(ARM+Linux)_图文.pdf
如何使用开发板(ARM+Linux) - 如何使用开发板(综述) 2beanet
arm-linux安装.txt
arm-linux安装 - ubuntu下解压 1.将arm-2009q3.ta
PWM在ARM_Linux中的原理和蜂鸣器驱动实例开发.doc
PWM在ARM_Linux中的原理和蜂鸣器驱动实例开发 - PWM 在 ARM Linux 中的原理和蜂鸣器驱动实例开发 一、开发环境 ? ? ? 主机:VMWare--Fedora 9 开...
ARM-LINUX交叉编译环境建立.pdf
ARM-LINUX交叉编译环境建立 - 文件名称:arm-linux-gcc创建
在ARM-Linux平台上移植SQLite.doc
ARM-Linux平台上移植SQLite - 本文将简要介绍如何在ARM-Linux平台上移植SQLite嵌入式数据库。SQLite是一个采用C语言开发的嵌入式数据库引擎。SQLite的最新版...
嵌入式linux web服务器boa的移植方法arm开发板linux嵌入式web服务....doc
嵌入式 linux web 服务器 boa 的移植方法/arm 开发板 linux 嵌入式 web 服务器 boa 今天自己在开发板上移植了 boa 服务器。参考资料是李驹光、郑耿大侠在恒颐...
安装arm-linux-gcc-3.4.1交叉编译环境.doc
安装arm-linux-gcc-3.4.1交叉编译环境 - 五一假期回来后的第一
20140409-ARM板GDB工具的配置用与应.doc
/home/lzs/workspace/gdb/gdb-7.4#./configure --target=arm-hismall-linux --prefix=/opt/crosstool/arm-gdb root@ly-VirtualBox:/home/lzs/workspace/gdb...
基于ARM和linux的开发_图文.ppt
基于ARMlinux的开发 湘潭大学邓清勇 2016/5/27 提纲 基于ARMLinux的开发 1 Linux简介 2 3 Linux开发过程 Linux开发环境建立 4 Linux内核移植 5 6 Linux...
Linux 3.x内核下ARM架构_图文.pdf
Linux 3.x内核下ARM架构_互联网_IT/计算机_专业资料。Linux 3.x内核下ARM架构 新技术变革 Barry Song <baohua@kernel.org> 2013?ARM开发者大会 1 Agenda §?...
为S3C2410建立arm-linux交叉编译环境_gcc-4.1.1-glibc-2.3.2.doc
为S3C2410 建立 arm-linux 交叉编译环境 gcc-4.1.1-g
基于ARM和linux的开发._图文.ppt
基于ARMlinux的开发. - 基于ARMlinux的开发 湘潭大学邓清勇 2017/10/10 提纲 基于ARMLinux的开发 1 Linux简介 2 3 Linux开发...
arm-linux-gcc.pdf
arm-linux-gcc - 我们需要编译出运行在 ARM 平台上的代码,所使用的交叉编译器为 arm-linux-gcc。下面将 arm-linux-gcc 编译工具的一些常用命令参数介绍给...
更多相关标签: