1、 嵌入式 Linux 初级实验教程 1 前言背景随着计算机技术、微处理器技术、电子技术、通信技术、集成电路技术的发展,嵌入式系统已成为计算机技术和计算机应用领域的一个重要组成部分,嵌入式产品在人们的日常生活中也扮演着越来越重要的角色。近年来,Linux 在嵌入式领域的成功应用引起了广泛的兴趣和热烈的回应,越来越多的开发者开始学习和研究嵌入式 Linux 系统。但是嵌入式 Linux 的入门却不简单,进行嵌入式 Linux 的开发需要具备完善的知识结构,不仅要了解嵌入式设备相关的硬件知识,比如常用嵌入式处理器的体系结构,接口技术等,还需要一定的 Linux 操作系统基础。目前针对嵌入式 Linu
2、x 开发的书籍相当多,也不乏经典。然而大多数书中介绍的实例依赖平台却又脱离平台,使得其可操作性反而不强;互联网的发展使得共享的网络资源琳琅满目,面对这么多的书籍,资料,刚入门的开发者们往往无可是从。本书面向那些想要在未来或者目前的计划中使用 Linux 的有一定经验的嵌入式系统设计者,以及想要熟悉嵌入式 Linux 系统开发工具和技术但没有经验的嵌入式系统开发者,以现在嵌入式领域使用相当广泛的 ARM 处理器为开发平台,在一个具体的 S3C2410 开发板上,从开发平台介绍,开发环境搭建,Linux 系统移植,到最终成功运行一个应用实例,带领读者一步一步掌握嵌入式 Linux 的开发过程。本书
3、的作者具有多年的嵌入式开发经验,了解嵌入式 Linux 的开发过程,又熟悉 ARM的体系结构及底层硬件接口电路。特别地,笔者在编写本书之前针对 S3C2410 做过很多的实例开发,解决了不少在开发过程中遇到的问题,也积累了很多自己的体会,因此笔者希望借助本书与大家分享这些经验与体会,目的只是为了让大家在嵌入式 Linux 这条路上少栽几个跟斗,少拐几个弯。为了让本书更加贴近初学者,笔者根据自己的经验,精心设计了一系列的实验范例,并选定了一个具体的开发平台深圳旋级力通有限公司的 Super-ARM 实验教学平台。书中所有实验范例的开发都在该平台上完成。之所以选择 Super-ARM 平台,是因为
4、该平台的处理器及其接口电路等都很具有代表性。笔者专门安排了一章来介绍这个平台,只是为了让读者在充分了解平台的基础上更好地理解书中的实例,这样当读者面对其他平台的时候更能够举一反三。另外,本书的所有实验范例都经过多位初学者的再三验证,这足以证明本书实例的可操作性。预备知识本书编写依赖三个假定,假定读者已经具备一定的 Linux 基础,包括 Linux 的安装,一些基本命令的使用以及在 PC 的 Linux 环境下用 C 或者 C+开发简单的应用程序;假定读者对 ARM 的体系结构有所了解,包括 ARM 处理器的工作原理和接口技术,如 I/O,中断与异常机制等,同时对设备驱动程序的开发以及嵌入式图
5、形界面的开发有一定认识。假定读者有一定硬件电路基础,能看懂一些简单的接口电路,如 LED,数码管等。本书内容及组织方式本书分为 4 篇,共 17 章,组织如下:第一篇:开发环境篇嵌入式 Linux 初级实验教程 2 本篇包括第 1 章到第 4 章,介绍如何搭建嵌入式开发的软硬件环境。第 1 章:概述本章主要介绍在嵌入式 Linux 开发过程中会涉及到的一些基本概念,基础知识等。第 2 章:开发平台介绍本章主要介绍本书实例使用的 Super-ARM 实验教学平台,使读者对开发平台的硬件资源有一定的了解。第 3 章:ADS 开发环境搭建本章主要讲解 ADS 开发环境的安装过程,并结合一个简单实例介
6、绍其使用方法,为后续开发中 BootLoader 移植做好准备。第 4 章:嵌入式 Linux 开发环境搭建本章介绍主机 Linux 开发环境的安装,包括系统的安装,相关开发工具的配置等。第二篇:系统移植篇本篇包括第 5 章到第 7 章,介绍 Linux 系统的移植过程。第 5 章:BootLoader 移植本章主要介绍 BootLoader 的一些基础知识以及 U-Boot 的详细移植过程。第 6 章:内核移植本章主要介绍 Linux 内核的编译,配置及安装过程。第 7 章:文件系统移植本章主要讲解根文件系统的制作、移植和访问以及 NFS 文件系统的挂载。第三篇:基础实验篇本篇包括第 8 章
7、到第 14 章,主要介绍一些简单硬件的驱动程序编写、移植及测试。第 8 章:Linux 设备驱动概述本章主要介绍 Linux 设备驱动的相关概念,包括设备驱动的作用、分类及特点,以及驱动模块的加载与卸载等。第 9 章:LED 实例本章结合 LED 驱动实例介绍简单字符设备驱动的程序结构,并编写简单的应用程序对设备驱动进行测试,通过本章,读者可以了解开发驱动程序的大致流程,为以后学习其他设备驱动程序的开发打下基础。第 10 章:按键中断实例本章介绍 S3C2410 的中断机制及嵌入式 Linux 中断驱动程序的结构。通过按键驱动实例的开发,带领大家一步一步实现该驱动程序的设计与测试过程。第 11
8、 章: 数码管实例本章主要介绍数码管驱动的开发过程。通过本章,读者可以了解数码管的显示原理及其驱动程序的设计方法。嵌入式 Linux 初级实验教程 3 第 12 章:矩阵键盘实例本章主要介绍键盘驱动的开发及测试。通过本章,读者可以了解键盘扫描的原理,从而为自己的系统添加键盘设备驱动程序。第 13 章:LCD 实例本章主要介绍 LCD 显示设备的工作原理以及在 Linux 中移植 LCD 设备驱动的过程。第 14 章:触摸屏实例本章主要介绍触摸屏的工作原理,以及在 Linux 中移植触摸屏输入设备驱动的过程。第四篇:图形应用篇本篇包括第 15 章到第 17 章,主要介绍 QT/Embeded 的
9、安装和编译,并通过开发一个简单的 QT 实例,使学生逐步了解嵌入式图形界面编程。最后完成本书的一个综合实例第 15 章:嵌入式 QT 环境搭建本章首先对嵌入式 GUI 编程做个简单介绍,然后在宿主机上完成 QT/Embeded 开发环境的搭建。第 16 章:嵌入式 QT 之 HelloWorld本章指导学生编写一个最简单的 QT 程序:在一个主窗口中添加一个按钮,点击该按钮会弹出一个对话框,让该程序分别运行在桌面 PC 和实验箱上。第 17 章:综合实例作为本书的最后一章,本章结合基础实验篇中的一些实例,用 QT/Embedded 编写一个简单图片浏览程序。该程序具有如下功能:(1)能读取文件
10、系统系统所有目录下的图片,在实验箱的 LCD 屏幕上显示出来。(2)具有单张查看和循环播放两种模式。(3)在循环播放模式下,可以通过实验箱的数码管显示播放时间间隔(以秒为单位) 。(4)在单张查看模式下可以通过点击触摸屏切换到下一张,上一张。附件为方便读者更高效地理解并完成本书的实例,笔者为部分章节提供了相关的源代码,工程文件以及参考资料等。以附件的形式发布在随书光盘中。作者本书第一篇由徐成,谭曼琼,徐署华,刘豪和朱雪庆编写,第二篇由徐成,谭曼琼和朱雪庆编写,第三篇由谭曼琼编写,第四篇由谭曼琼,朱雪庆和邱金波编写。全书由谭曼琼整理和统稿。最后由李仁发教授主审。徐成教授是多年从事嵌入式系统教学的
11、老师,有非常丰富的嵌入式系统开发和教学经验,徐署华、刘豪、谭曼琼等作者也从事嵌入式开发和教学多年,本书是所有作者教学与开发经验的积累和总结。本书的所有内容和实例都经过作者的仔细编排与验证。这里要特别感谢刘冬,张嵎桐,嵌入式 Linux 初级实验教程 4 张泰忠,曾娟丽等人的无私帮助,他们本着认真负责的态度对本书的内容,特别是实例部分进行了验证,并提出了宝贵的意见。尽管我们再三校对,但书中肯定还存在错误和不足,恳请读者批评指正。您宝贵的意见和建议是我们的期待,也是我们继续前进的动力。我们的联系方式:xu_, 。嵌入式 Linux 初级实验教程 1 目 录第一篇 开发环境篇第 1 章 概述 .2
12、1.1 基本概念 .21.1.1 嵌入式 Linux.21.1.2 ARM 处理器 .31.1.3 宿主机和目标机 .51.1.4 交叉编译 .71.1.5 内核 .91.1.6 根文件系统 .91.1.7 系统引导程序(BootLoader ) .101.2 嵌入式 LINUX 开发过程简介 .11第 2 章 开发平台介绍 .132.1 SUPER-ARM 整体结构及资源 .132.1.1 Super-ARM 整体结构 .132.1.2 Super-ARM 教学系统主要资源 .142.2 SUPER-ARM 各模块简介 .162.2.1 底板 .162.2.2 主板 .172.2.3 核心板
13、 .192.2.4 LCD 模块 .202.2.5 JTAG 仿真器 ProbeICE.202.2.6 连接电缆及配件 .21第 3 章 ADS 开发环境搭建 .223.1 搭建硬件开发环境 .223.1.1 Super-ARM 供电线路连接 .223.1.2 JTAG 连接 .233.2 搭建软件开发环境 .233.2.1 ProbeICE-ARM 服务器配置 .233.2.2 ProbeICE-ARM 仿真器配置 .263.3 新建工程及仿真调试 .293.3.1 新建工程 .293.3.2 编译及连接 .343.3.3 仿真调试 .34第 4 章 嵌入式 LINUX 开发环境搭建 .37
14、4.1 安装 LINUX 操作系统 .37嵌入式 Linux 初级实验教程 2 4.1.1 在 Windows 中安装虚拟机 .374.1.3 在虚拟机上安装 Ubuntu.404.2 宿主机 LINUX 系统中基本环境的配置与安装 .434.2.1 网络配置 .434.2.2 更新 Linux 操作系统 .454.2.3 安装一些相关工具和程序库 .454.2.4 实际项目工作空间目录的安排 .454.2.5 配置 Linux 下的 minicom.464.2.6 配置 Linux 下的 TFTP 服务器 .524.3 在主机 LINUX 系统中建立交叉编译环境 .534.3.1 准备工具链
15、软件 .534.3.2 建立交叉编译工具链 .53第二篇 系统移植篇第 5 章 BOOTLOADER 移植 .585.1 系统引导程序基础 .585.1.1 Boot Loader 的安装媒介( Installation Medium) .585.1.2 BootLoader 工作模式 .595.1.3 BootLoader 的启动过程 .595.1.4 BootLoader 与宿主机之间进行文件传输所用的通信设备及协议 .615.1.5 几种常用的 Boot Loader .615.2 移植 U-BOOT.635.2.1 U-Boot 源码结构 .635.2.2 U-Boot 移植过程详解
16、.645.2.3 烧写 U-Boot.745.3 U-BOOT 使用 .745.3.1 U-Boot 命令 .755.3.2 U-Boot 命令使用实例 .765.3.3 U-Boot 引导内核 .795.4 U-BOOT 的环境变量 .805.4.1 查看环境变量 .805.4.2 设置环境变量 .815.4.3 保存环境变量 .82第 6 章 LINUX 内核移植 .836.1 选择 LINUX 内核 .836.2 LINUX 内核移植前准备 .846.2.1 Linux 内核源码 .856.2.2 内核配置及方法 .866.2.3 图形化内核配置选项 .876.2.4 构建内核映像 .8
17、86.2.5 构建模块 .896.2.6 安装内核及内核模块 .896.3 LINUX 内核移植实例 .90嵌入式 Linux 初级实验教程 3 6.3.1 配置编译内核的过程 .906.3.2 从 NandFlash 引导内核 .936.3.3 网络引导内核 .94第 7 章 根文件系统移植 .967.1 文件系统概述 .967.1.1 文件系统 .967.1.2 根文件系统 .987.2 制作根文件系统 .997.2.1 Busybox 工具 .997.2.2 根文件系统制作实例 .1007.3 配置 NFS 服务 .1077.3.1 NFS 文件系统简介 .1077.3.2 在 Linux 下配置 NFS 服务器 .1097.4 目标机挂载 NFS 根文件系统 .1127.4.1 移植网卡驱动 .1137.4.2 挂载 NFS 根文件系统 .1157.5 HELLO WORLD 测试程序 .1197.6 文件系统移植 .1207.6.1 配置内核命令行参数 .