嵌入式Linux初级实验s3c2410.doc_第1页
嵌入式Linux初级实验s3c2410.doc_第2页
嵌入式Linux初级实验s3c2410.doc_第3页
嵌入式Linux初级实验s3c2410.doc_第4页
嵌入式Linux初级实验s3c2410.doc_第5页
已阅读5页,还剩307页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式 Linux 初级实验教程 1 前言前言 背景 随着计算机技术 微处理器技术 电子技术 通信技术 集成电路技术的发展 嵌入 式系统已成为计算机技术和计算机应用领域的一个重要组成部分 嵌入式产品在人们的日 常生活中也扮演着越来越重要的角色 近年来 Linux 在嵌入式领域的成功应用引起了广泛的兴趣和热烈的回应 越来越多 的开发者开始学习和研究嵌入式 Linux 系统 但是嵌入式 Linux 的入门却不简单 进行嵌 入式 Linux 的开发需要具备完善的知识结构 不仅要了解嵌入式设备相关的硬件知识 比 如常用嵌入式处理器的体系结构 接口技术等 还需要一定的 Linux 操作系统基础 目前针对嵌入式 Linux 开发的书籍相当多 也不乏经典 然而大多数书中介绍的实例 依赖平台却又脱离平台 使得其可操作性反而不强 互联网的发展使得共享的网络资源琳 琅满目 面对这么多的书籍 资料 刚入门的开发者们往往无可是从 本书面向那些想要在未来或者目前的计划中使用 Linux 的有一定经验的嵌入式系统设 计者 以及想要熟悉嵌入式 Linux 系统开发工具和技术但没有经验的嵌入式系统开发者 以现在嵌入式领域使用相当广泛的 ARM 处理器为开发平台 在一个具体的 S3C2410 开发 板上 从开发平台介绍 开发环境搭建 Linux 系统移植 到最终成功运行一个应用实例 带领读者一步一步掌握嵌入式 Linux 的开发过程 本书的作者具有多年的嵌入式开发经验 了解嵌入式 Linux 的开发过程 又熟悉 ARM 的体系结构及底层硬件接口电路 特别地 笔者在编写本书之前针对 S3C2410 做过很多的 实例开发 解决了不少在开发过程中遇到的问题 也积累了很多自己的体会 因此笔者希 望借助本书与大家分享这些经验与体会 目的只是为了让大家在嵌入式 Linux 这条路上少 栽几个跟斗 少拐几个弯 为了让本书更加贴近初学者 笔者根据自己的经验 精心设计了一系列的实验范例 并选定了一个具体的开发平台 深圳旋级力通有限公司的 Super ARM 实验教学平台 书 中所有实验范例的开发都在该平台上完成 之所以选择 Super ARM 平台 是因为该平台的 处理器及其接口电路等都很具有代表性 笔者专门安排了一章来介绍这个平台 只是为了 让读者在充分了解平台的基础上更好地理解书中的实例 这样当读者面对其他平台的时候 更能够举一反三 另外 本书的所有实验范例都经过多位初学者的再三验证 这足以证明 本书实例的可操作性 预备知识 本书编写依赖三个假定 假定读者已经具备一定的 Linux 基础 包括 Linux 的安装 一些基本命令的使用以及在 PC 的 Linux 环境下用 C 或者 C 开发简单的应用程序 假定 读者对 ARM 的体系结构有所了解 包括 ARM 处理器的工作原理和接口技术 如 I O 中断 与异常机制等 同时对设备驱动程序的开发以及嵌入式图形界面的开发有一定认识 假定 读者有一定硬件电路基础 能看懂一些简单的接口电路 如 LED 数码管等 本书内容及组织方式 本书分为 4 篇 共 17 章 组织如下 第一篇 开发环境篇 嵌入式 Linux 初级实验教程 2 本篇包括第 1 章到第 4 章 介绍如何搭建嵌入式开发的软硬件环境 第 1 章 概述 本章主要介绍在嵌入式 Linux 开发过程中会涉及到的一些基本概念 基础知识等 第 2 章 开发平台介绍 本章主要介绍本书实例使用的 Super ARM 实验教学平台 使读者对开发平台的硬件资 源有一定的了解 第 3 章 ADS 开发环境搭建 本章主要讲解 ADS 开发环境的安装过程 并结合一个简单实例介绍其使用方法 为后 续开发中 BootLoader 移植做好准备 第 4 章 嵌入式 Linux 开发环境搭建 本章介绍主机 Linux 开发环境的安装 包括系统的安装 相关开发工具的配置等 第二篇 系统移植篇 本篇包括第 5 章到第 7 章 介绍 Linux 系统的移植过程 第 5 章 BootLoader 移植 本章主要介绍 BootLoader 的一些基础知识以及 U Boot 的详细移植过程 第 6 章 内核移植 本章主要介绍 Linux 内核的编译 配置及安装过程 第 7 章 文件系统移植 本章主要讲解根文件系统的制作 移植和访问以及 NFS 文件系统的挂载 第三篇 基础实验篇 本篇包括第 8 章到第 14 章 主要介绍一些简单硬件的驱动程序编写 移植及测试 第 8 章 Linux 设备驱动概述 本章主要介绍 Linux 设备驱动的相关概念 包括设备驱动的作用 分类及特点 以及 驱动模块的加载与卸载等 第 9 章 LED 实例 本章结合 LED 驱动实例介绍简单字符设备驱动的程序结构 并编写简单的应用程序对 设备驱动进行测试 通过本章 读者可以了解开发驱动程序的大致流程 为以后学习其他 设备驱动程序的开发打下基础 第 10 章 按键中断实例 本章介绍 S3C2410 的中断机制及嵌入式 Linux 中断驱动程序的结构 通过按键驱动实 例的开发 带领大家一步一步实现该驱动程序的设计与测试过程 第 11 章 数码管实例 本章主要介绍数码管驱动的开发过程 通过本章 读者可以了解数码管的显示原理及 其驱动程序的设计方法 嵌入式 Linux 初级实验教程 3 第 12 章 矩阵键盘实例 本章主要介绍键盘驱动的开发及测试 通过本章 读者可以了解键盘扫描的原理 从 而为自己的系统添加键盘设备驱动程序 第 13 章 LCD 实例 本章主要介绍 LCD 显示设备的工作原理以及在 Linux 中移植 LCD 设备驱动的过程 第 14 章 触摸屏实例 本章主要介绍触摸屏的工作原理 以及在 Linux 中移植触摸屏输入设备驱动的过程 第四篇 图形应用篇 本篇包括第 15 章到第 17 章 主要介绍 QT Embeded 的安装和编译 并通过开发一个 简单的 QT 实例 使学生逐步了解嵌入式图形界面编程 最后完成本书的一个综合实例 第 15 章 嵌入式 QT 环境搭建 本章首先对嵌入式 GUI 编程做个简单介绍 然后在宿主机上完成 QT Embeded 开发环 境的搭建 第 16 章 嵌入式 QT 之 HelloWorld 本章指导学生编写一个最简单的 QT 程序 在一个主窗口中添加一个按钮 点击该按 钮会弹出一个对话框 让该程序分别运行在桌面 PC 和实验箱上 第 17 章 综合实例 作为本书的最后一章 本章结合基础实验篇中的一些实例 用 QT Embedded 编写一个 简单图片浏览程序 该程序具有如下功能 1 能读取文件系统系统所有目录下的图片 在实验箱的 LCD 屏幕上显示出来 2 具有单张查看和循环播放两种模式 3 在循环播放模式下 可以通过实验箱的数码管显示播放时间间隔 以秒为单位 4 在单张查看模式下可以通过点击触摸屏切换到下一张 上一张 附件 为方便读者更高效地理解并完成本书的实例 笔者为部分章节提供了相关的源代码 工程文件以及参考资料等 以附件的形式发布在随书光盘中 作者 本书第一篇由徐成 谭曼琼 徐署华 刘豪和朱雪庆编写 第二篇由徐成 谭曼琼和 朱雪庆编写 第三篇由谭曼琼编写 第四篇由谭曼琼 朱雪庆和邱金波编写 全书由谭曼 琼整理和统稿 最后由李仁发教授主审 徐成教授是多年从事嵌入式系统教学的老师 有非常丰富的嵌入式系统开发和教学经 验 徐署华 刘豪 谭曼琼等作者也从事嵌入式开发和教学多年 本书是所有作者教学与 开发经验的积累和总结 本书的所有内容和实例都经过作者的仔细编排与验证 这里要特别感谢刘冬 张嵎桐 嵌入式 Linux 初级实验教程 4 张泰忠 曾娟丽等人的无私帮助 他们本着认真负责的态度对本书的内容 特别是实例部 分进行了验证 并提出了宝贵的意见 尽管我们再三校对 但书中肯定还存在错误和不足 恳请读者批评指正 您宝贵的意见和建议是我们的期待 也是我们继续前进的动力 我们 的联系方式 xu cheng heima251210490 嵌入式 Linux 初级实验教程 1 目目 录录 第一篇第一篇 开发环境篇开发环境篇 第第 1 章章 概述概述 2 1 1 基本概念 2 1 1 1 嵌入式 Linux 2 1 1 2 ARM 处理器 3 1 1 3 宿主机和目标机 5 1 1 4 交叉编译 7 1 1 5 内核 9 1 1 6 根文件系统 9 1 1 7 系统引导程序 BootLoader 10 1 2 嵌入式 LINUX开发过程简介 11 第第 2 章章 开发平台介绍开发平台介绍 13 2 1 SUPER ARM 整体结构及资源 13 2 1 1 Super ARM 整体结构 13 2 1 2 Super ARM 教学系统主要资源 14 2 2 SUPER ARM 各模块简介 16 2 2 1 底板 16 2 2 2 主板 17 2 2 3 核心板 19 2 2 4 LCD 模块 20 2 2 5 JTAG 仿真器 ProbeICE 20 2 2 6 连接电缆及配件 21 第第 3 章章 ADS 开发环境搭建开发环境搭建 22 3 1 搭建硬件开发环境 22 3 1 1 Super ARM 供电线路连接 22 3 1 2 JTAG 连接 23 3 2 搭建软件开发环境 23 3 2 1 ProbeICE ARM 服务器配置 23 3 2 2 ProbeICE ARM 仿真器配置 26 3 3 新建工程及仿真调试 29 3 3 1 新建工程 29 3 3 2 编译及连接 34 3 3 3 仿真调试 34 第第 4 章章 嵌入式嵌入式 LINUX 开发环境搭建开发环境搭建 37 4 1 安装 LINUX操作系统 37 嵌入式 Linux 初级实验教程 2 4 1 1 在 Windows 中安装虚拟机 37 4 1 3 在虚拟机上安装 Ubuntu 40 4 2 宿主机 LINUX系统中基本环境的配置与安装 43 4 2 1 网络配置 43 4 2 2 更新 Linux 操作系统 45 4 2 3 安装一些相关工具和程序库 45 4 2 4 实际项目工作空间目录的安排 45 4 2 5 配置 Linux 下的 minicom 46 4 2 6 配置 Linux 下的 TFTP 服务器 52 4 3 在主机 LINUX系统中建立交叉编译环境 53 4 3 1 准备工具链软件 53 4 3 2 建立交叉编译工具链 53 第二篇第二篇 系统移植篇系统移植篇 第第 5 章章 BOOTLOADER 移植移植 58 5 1 系统引导程序基础 58 5 1 1 Boot Loader 的安装媒介 Installation Medium 58 5 1 2 BootLoader 工作模式 59 5 1 3 BootLoader 的启动过程 59 5 1 4 BootLoader 与宿主机之间进行文件传输所用的通信设备及协议 61 5 1 5 几种常用的 Boot Loader 61 5 2 移植 U BOOT 63 5 2 1 U Boot 源码结构 63 5 2 2 U Boot 移植过程详解 64 5 2 3 烧写 U Boot 74 5 3 U BOOT使用 74 5 3 1 U Boot 命令 75 5 3 2 U Boot 命令使用实例 76 5 3 3 U Boot 引导内核 79 5 4 U BOOT 的环境变量 80 5 4 1 查看环境变量 80 5 4 2 设置环境变量 81 5 4 3 保存环境变量 82 第第 6 章章 LINUX 内核移植内核移植 83 6 1 选择 LINUX内核 83 6 2 LINUX内核移植前准备 84 6 2 1 Linux 内核源码 85 6 2 2 内核配置及方法 86 6 2 3 图形化内核配置选项 87 6 2 4 构建内核映像 88 6 2 5 构建模块 89 6 2 6 安装内核及内核模块 89 6 3 LINUX内核移植实例 90 嵌入式 Linux 初级实验教程 3 6 3 1 配置编译内核的过程 90 6 3 2 从 NandFlash 引导内核 93 6 3 3 网络引导内核 94 第第 7 章章 根文件系统移植根文件系统移植 96 7 1 文件系统概述 96 7 1 1 文件系统 96 7 1 2 根文件系统 98 7 2 制作根文件系统 99 7 2 1 Busybox 工具 99 7 2 2 根文件系统制作实例 100 7 3 配置 NFS 服务 107 7 3 1 NFS 文件系统简介 107 7 3 2 在 Linux 下配置 NFS 服务器 109 7 4 目标机挂载 NFS 根文件系统 112 7 4 1 移植网卡驱动 113 7 4 2 挂载 NFS 根文件系统 115 7 5 HELLO WORLD测试程序 119 7 6 文件系统移植 120 7 6 1 配置内核命令行参数 121 7 6 2 制作 cramfs 文件系统 121 7 6 3 将根文件系统烧写到 NandFlash 122 第三篇第三篇 基础实验篇基础实验篇 第第 8 章章 LINUX 设备驱动概述设备驱动概述 125 8 1 设备驱动的角色 125 8 2 设备驱动和操作系统 126 8 2 1 无操作系统时的设备驱动 126 8 2 2 有操作系统时的设备驱动 128 8 3 LINUX设备驱动 129 8 3 1 Linux 设备的分类及特点 129 8 3 2 不同设备的驱动设计概述 130 8 3 3 Linux 设备文件的创建 133 8 3 4 Linux 驱动程序的加载和卸载 134 8 3 5 学习 Linux 驱动程序的基础及方法 135 第第 9 章章 LED 实例实例 136 9 1 字符设备驱动程序的结构 136 9 1 1 常用的头文件 136 9 1 2 主次设备号 137 9 1 3 cdev 结构体 137 9 1 4 分配和释放设备号 139 9 1 5 File operation 结构体 139 嵌入式 Linux 初级实验教程 4 9 1 6 字符设备驱动程序一般结构 141 9 2 LED 设备驱动实例 143 9 2 1 实验目的 143 9 2 2 实验原理 143 9 2 3 实验任务 145 9 2 4 实验步骤 145 第第 10 章章 按键中断实例按键中断实例 153 10 1 S3C2410 中断机制 153 10 1 1 中断向量表 153 10 1 2 中断控制器 154 10 2 嵌入式 LINUX中断处理程序架构 160 10 2 1 Linux 中断处理程序的上半部与下半部机制 160 10 2 2 Linux 中断编程 160 10 3 按键中断驱动实例 163 10 3 1 实验目的 163 10 3 2 实验原理 163 10 3 3 实验任务 164 10 3 4 实验步骤 164 第第 11 章章 数码管实例数码管实例 172 11 1 数码管显示原理 172 11 1 1 数码管简介 172 11 1 2 数码管显示原理 173 11 1 3 数码管驱动电路设计 174 11 2 数码管设备驱动实例 176 11 2 1 实验目的 177 11 2 2 实验原理 177 11 2 3 实验任务 178 11 2 4 实验步骤 178 第第 12 章章 4 4 矩阵键盘实例矩阵键盘实例 189 12 1 键盘接口概述 189 12 1 1 键盘的分类 189 12 1 2 键盘的扫描 190 12 1 3 键盘的防抖 191 12 1 4 键盘的缓冲算法 191 12 2 4 4 键盘驱动实例 192 12 2 1 实验目的 192 12 2 2 实验原理 192 12 2 3 实验任务 194 12 2 4 实验步骤 195 第第 13 章章 LCD 驱动实例驱动实例 209 13 1 LCD 的硬件原理 209 嵌入式 Linux 初级实验教程 5 13 1 1 LCD 的显像原理 209 13 1 2 LCD 的分类 210 13 1 3 TFT LCD 的工作时序及参数设置 210 13 2 S3C2410 的 LCD 控制器及 IO 配置 213 13 2 1 LCD 控制器 214 13 2 2 LCD 控制器的寄存器设置 214 13 2 3 S3C2410 的 LCD 接口及配置 217 13 3 基于帧缓冲 FRAMEBUFFER 的 LCD 驱动分析 218 13 3 1 FrameBuffer 设备驱动分析 218 13 3 2 基于 FrameBuffer 的 LCD 驱动分析 223 13 3 3 FrameBuffer 驱动与 LCD 驱动之间的关系 230 13 4 LCD 驱动移植实例 231 13 4 1 实验目的 231 13 4 2 实验原理 231 13 4 3 实验任务 231 13 4 4 实验步骤 231 第第 14 章章 触摸屏实例触摸屏实例 235 14 1 触摸屏的硬件原理 235 14 2 S3C2410 的触摸屏控制 236 14 2 1 S3C2410 的 ADC 及触摸屏接口原理 236 14 2 2 S3C2410 的 ADC 和触摸屏接口模式 238 14 2 3 S3C2410 的 ADC 及触摸屏控制寄存器 239 14 2 4 S3C2410 的触摸屏中断控制 240 14 3 LINUX输入子系统 241 14 3 1 Input 子系统架构 241 14 3 2 Input 子系统数据结构 241 14 3 3 Input 设备驱动编写 242 14 3 4 Input 设备驱动范例 243 14 4 触摸屏驱动移植实例 243 14 4 1 实验目的 243 14 4 2 实验原理 244 14 4 3 实验任务 250 14 4 4 实验步骤 250 第四篇第四篇 图形应用篇图形应用篇 第第 15 章章 嵌入式嵌入式 QT 环境搭建环境搭建 255 15 1 嵌入式 GUI 简介 255 15 1 1 MiniGUI 256 15 1 2 OpenGUI 257 15 1 3 Qt Embedded 257 15 2 QT 开发环境搭建 259 15 2 1 Ubuntu 下安装 QT 开发环境 259 15 2 2 Qt Assistant 260 嵌入式 Linux 初级实验教程 6 15 2 3 Qt Designer 262 15 2 4 QDevelop 262 15 3 QT EMBEDDED 环境的安装 264 15 3 1 安装 tslib 264 15 3 2 安装 Qt Embedded 265 15 3 3 环境配置及触摸屏校准 267 第第 16 章章 嵌入式嵌入式 QT 之之 HELLOWORLD 269 16 1 QT E 信号与插槽机制 269 16 1 1 信号和插槽机制 269 16 1 2 信号和插槽机制的实现 270 16 2 HELLOWORLD 实例 273 16 2 1 实验目的 273 16 2 2 实验任务 273 16 2 3 实验步骤 274 第第 17 章章 综合实例综合实例 281 17 1 实验目的 281 17 2 实验任务 281 17 3 实验步骤 282 参考文献参考文献 296 嵌入式 Linux 初级实验教程 1 第一篇 开发环境篇 本篇内容 概述 开发平台介绍 ADS 开发环境搭建 嵌入式 Linux 开发环境搭建 本篇目标 了解嵌入式 Linux 开发过程中会涉及到的一些基本概念 了解本书实例所使用的硬件开发平台 熟悉 ADS 开发环境的安装过程及使用方法 掌握主机 LINUX 开发环境中虚拟机的安装方法及相关开发工具详细配置过程 本篇实例 实例一 ADS 相关开发工具的安装及使用 实例二 虚拟机上 Linux 工作站的安装及配置 实例三 Minicom 及 TFTP 的安装配置 实例四 交叉编译工具链的制作 嵌入式 Linux 初级实验教程 2 第 1 章 概述 好的 开始吧 本书的目的就是带领读者你完成一个任务 在一块空的嵌入式开发板上移植一个基 于 Linux 的应用程序实例 在进行我们的嵌入式 Linux 开发过程之前 也许你心中正在问 嵌入式 Linux 这究竟是一个怎样的世界 从这一刻开始 让我们一起步入这个世界 吧 当你已经拿到本书的出版物的时候 不管你是未过门的还是刚入门的 我想你一定是 对 嵌入式 Linux 感兴趣的 所以假定你已经知道什么是嵌入式系统了 套用现在流行 的定义 嵌入式系统是以应用为中心 以计算机技术为基础 软硬件可裁剪 对功能 可 靠性 成本 功耗 体积等有严格要求的专用计算机系统 而且我们几乎天天在跟嵌入式 设备打交道 别不承认 你有几天离开过你的手机 你一个人听歌或者听英语的时候是不 是要 Mp3 呢 还有 我们的公交车上 银行里几乎都存在嵌入式设备 同样 我也认为你 已经知道 Linux 是什么了 甚至还在自己的 PC 上安装过 Linux 进行过 Linux 的开发 在 此 我就不多费口舌介绍 什么是 Linux 了 至于 什么是嵌入式 Linux 恐怕很多读 者都想得到答案 笔者在接下来的基本概念中将做简单介绍 本章接下来向大家介绍嵌入式 Linux 开发中的一些基本概念 以及嵌入式 Linux 的开 发过程 让读者对在开发过程中遇到的一些术语不至于感到陌生 同时也对嵌入式 Linux 的开发有个大致的了解 当然 你读完这一章之后对于某些概念 可能还是不甚理解 不 妨先把疑问留下 相信随着开发过程的深入 你一定会得到答案的 到时候再回过头来阅 读这些概念 便会明了了 1 1 基本概念 1 1 1 嵌入式 Linux 嵌入式 Linux Embedded Linux 是指对标准 Linux 经过小型化裁剪处理之后 能够 固化在容量只有几 KB 或者几 MB 字节的存储器芯片 如 Flash 或者单片机中 是适合于 特定嵌入式应用场合的专用 Linux 操作系统 嵌入式 Linux 同 Linux 一样 具有低成本 高性能 支持多种硬件平台和良好的网络 支持等优点 另外 嵌入式 Linux 为了更好地适应嵌入式领域的开发 还在 Linux 基础上 做了不少改进 例举部分如下 1 改善的内核结构 整个 Linux 内核是一个单独的 非常大的程序 这种整体式结构虽然能够使系统的各 个部分直接沟通 提高系统响应速度 但与嵌入式系统存储容量小 资源有限的特点不符 合 因此 嵌入式系统中经常采用的是一种称为微内核的体系结构 即内核本身只提供一 些最基本的操作系统功能 如任务调度 内存管理 中断处理等 而类似于文件系统和网 络协议等附加功能则运行在用户空间中 并且可以根据实际需要进行裁剪 这样就大大减 小了内核的体积 便于维护和移植 2 提高的系统实时性 由于现有的 Linux 是一个通用的操作系统 虽然它也采用了许多技术来加快系统的运 行和响应速度 但从本质上来说并不是一个嵌入式实时操作系统 因此 利用 Linux 作为 底层操作系统 在其上进行实时化改造 从而构建出一个具有实时处理能力的嵌入式系统 如 RT Linux 已经成功地应用于航天飞机的空间数据采集 科学仪器测控和电影特技图像 嵌入式 Linux 初级实验教程 3 处理等各种领域 嵌入式 Linux 同 Linux 一样 也有众多的版本 主要有以下这些 版本简单介绍 uCLinux 开放源码的嵌入式 Linux 的典范之作 它主要是针对目标处理器没有存储 管理单元 MMU 其运行稳定 具有良好的移植性和优秀的网络功能 对 各种文件系统有完备的支持 并提供标准丰富的 API RT Linux 由美国墨西哥理工学院开发的嵌入式 Linux 硬实时操作系统 它已有广泛 的应用 Embedix 根据嵌入式应用系统的特点重新设计的 Linux 发行版本 它提供了超过 25 种的 Linux 系统服务 包括 Web 服务器等 此外还推出了 Embedix 的 开发调试工具包 基于图形界面的浏览器等 可以说 Embedix 是一种完 整的嵌入式 Linux 解决方案 XLinux 采用了 超字元集 专利技术 使 Linux 内核不仅能与标准字符集相容 还涵盖了 12 个国家和地区的字符集 因此 XLinux 在推广 Linux 的国际 应用方面有独特的优势 PoketLinux 它可以提供跨操作系统并且构造统一的 标准化的和开放的信息通信基 础结构 在此结构上实现端到端方案的完整平台 红旗嵌入式 Linux 由北京中科院红旗软件公司推出的嵌入式 Linux 它是国内做得较好的一 款嵌入式操作系统 目前 中科院计算机研究所自行开发的开放源码的 嵌入式操作系统 Easy Embedded OS EEOS 也已经开始进入实用阶 段 表 1 1 1 嵌入式 Linux 的主要版本 表 1 1 1 所列出的嵌入式 Linux 的不同版本分别是针对不同的需要在内核等方面加入了 特定的机制而定制的 在很多嵌入式 Linux 应用中 开发者一般在标准发行版 Linux 内核 的基础上直接为自己的硬件平台定制裁剪嵌入式 Linux 系统 正如上面所说 在 嵌入式开发 的语境中 嵌入式 Linux 通常指一个针对特定硬件 设备的完整的系统 而在 嵌入式 Linux 厂商 的语境中 嵌入式 Linux 用于表示以嵌 入式系统为需求对象的发行套件 如 嵌入式 Linux 发行套件 指的是为嵌入式系统与开 发工具量身定制的软件套件 以便建立一个完整的系统 嵌入式 Linux 发行套件所提供的 开发工具可能包括 交叉编译器 调试器 引导映像生成器等等 你可能对这些概念感到 陌生 笔者将在开发中陆续介绍 1 1 2 ARM 处理器 1 ARM 简介 ARM Advanced RISC Machines 既可以认为是一个公司的名字 也可以认为是对 一类微处理器的通称 还可以认为是一种技术的名字 ARM 公司主要出售芯片设计技术的授权 目前 采用 ARM 技术知识产权 IP 核的 微处理器 即我们通常所说的 ARM 处理器 已遍及工业控制 消费类电子产品 通信系 嵌入式 Linux 初级实验教程 4 统 网络系统 无线系统等各类产品市场 基于 ARM 技术的微处理器应用占据 32 位 RIS C 微处理器 75 以上的市场份额 ARM 公司是专门从事基于 RISC 技术芯片设计开发的公司 作为知识产权供应商 它 本身不直接从事芯片生产 靠转让设计许可 由合作公司生产各具特色的芯片 世界各大 半导体生产商从 ARM 公司购买其设计的 ARM 处理器核 根据各自不同的应用领域 加入 适当的外围电路 从而形成自己的 ARM 处理器芯片进入市场 目前 全世界有几十家大 半导体公司都使用 ARM 公司的授权 因此既使得 ARM 技术获得更多的第三方工具 制造 软件的支持 又使整个系统成本降低 从而使产品更容易进入市场被消费者所接受 更 具有竞争力 2 ARM 处理器的应用领域及特点 到目前为止 ARM 处理器及技术的应用几乎已经深入到各个领域 并会在将来取得更 加广泛的应用 工业控制领域 作为 32 位的 RISC 架构 基于 ARM 核的微控制器芯片不但占据 了高端微控制器市场的大部分份额 同时也逐渐向低端微控制器应用领域扩展 ARM 微控制器的低功耗 高性价比 向传统的 8 位 16 位微控制器提出了挑战 无线通信领域 目前已有 85 以上的无线通信设备采用了 ARM 技术 ARM 以其 高性能和低成本的特点 在该领域的地位日益巩固 网络应用 随着宽带技术的推广 采用 ARM 技术的 ADSL 芯片正逐步获得竞争 优势 此外 ARM 在语音及视频处理上进行了优化 并获得广泛支持 也对 DSP 的应用领域提出了挑战 消费类电子产品 ARM 技术在目前流行的数字音频播放器 数字机顶盒和游戏机 中得到广泛采用 ARM 处理器一般具有如下特点 体积小 低功耗 低成本 高性能 支持 Thumb 16 位 ARM 32 位 双指令集 能很好地兼容 8 位 16 位器件 大量使用寄存器 指令执行速度更快 大多数数据操作都在寄存器中完成 寻址方式灵活简单 执行效率高 指令长度固定 3 ARM 处理器系列 下面所列的是 ARM 处理器的几个系列 以及其他厂商基于 ARM 体系结构的处理器 这些处理器除了具有 ARM 体系结构的共同特点以外 每一个系列的 ARM 处理器都有各自 的特点和应用领域 ARM7 系列 ARM9 系列 ARM9E 系列 ARM10E 系列 SecurCore 系列 Intel 的 Xscale Intel 的 StrongARM 其中 ARM7 ARM9 ARM9E 和 ARM10 为 4 个通用处理器系列 每一个系列提供 一套相对独特的性能来满足不同应用领域的需求 如 SecurCore 系列专门为安全要求较高 嵌入式 Linux 初级实验教程 5 的应用而设计 下面详细介绍 ARM7 处理器及 ARM9 处理器的特点 ARM7 处理器 ARM7 系列微处理器为低功耗的 32 位 RISC 处理器 最适合用于对价位和功耗要求较 高的消费类应用 ARM7 微处理器系列具有如下特点 具有嵌入式 ICE RT 逻辑 调试开发方便 极低的功耗 适合对功耗要求较高的应用 如便携式产品 能够提供 0 9MIPS MHz 的三级流水线结构 代码密度高并兼容 16 位的 Thumb 指令集 对操作系统的支持广泛 包括 Windows CE Linux Palm OS 等 指令系统与 ARM9 系列 ARM9E 系列和 ARM10E 系列兼容 便于用户的产 品升级换代 主频最高可达 130MIPS 高速的运算处理能力能胜任绝大多数的复杂应用 ARM7 系列微处理器包括如下几种类型的核 ARM7TDMI ARM7TDMI S ARM720T ARM7EJ 其中 ARM7TMDI 是目前使用最广泛的 32 位嵌入式 RISC 处理 器 属低端 ARM 处理器核 TDMI 的基本含义为 T 支持 16 位压缩指令集 Thumb D 支持片上 Debug M 内嵌硬件乘法器 Multiplier I 嵌入式 ICE 支持片上断点和调试点 ARM9 处理器 ARM9 系列微处理器在高性能和低功耗特性方面提供最佳的性能 具有以下特点 5 级整数流水线 指令执行效率更高 提供 1 1MIPS MHz 的哈佛结构 支持 32 位 ARM 指令集和 16 位 Thumb 指令集 支持 32 位的高速 AMBA 总线接口 全性能的 MMU 支持 Windows CE Linux Palm OS 等多种主流嵌入式操 作系统 MPU 支持实时操作系统 支持数据 Cache 和指令 Cache 具有更高的指令和数据处理能力 ARM9 系列微处理器包含 ARM920T ARM922T 和 ARM940T 三种类型 以适用于不 同的应用场合 本书的开发平台上使用的处理器就是 ARM920T 1 1 3 宿主机和目标机 宿主机其实就是我们的开发主机 大多数时候指的就是我们日常使用的 PC 机 我们 在宿主机上进行应用程序的开发 而目标机就是我们的开发板 也叫做目标板 它为应用 程序提供运行环境 在开发过程中 宿主机与目标机必须进行信息交互 如在调试过程中 宿主机要向目 标机发送调试控制命令 目标机则需要向宿主机返回调试状态信息 开发完成后 宿主机 需要将代码下载到目标机上 为了实现信息交互 宿主机与目标机之间必须存在物理的连 接 连接方式依交互方式的不同而改变 主要包括 JTAG 连接 串口连接 网络连接 USB 连接 嵌入式 Linux 初级实验教程 6 1 JTAG 连接 JTAG 主要用来实现程序的下载以及仿真 在嵌入式 Linux 开发中也用来移植 BootLoader 它一般通过 USB 或者并口将宿主机与目标机连接在一起 针对本书中使用的 Super ARM 平台的 JTAG 连接方式将在第三章中描述 这里先不讲述 2 串口连接 串口在调试过程中占有重要地位 它与串口调试工具 如 Windows 下的超级终端和 Linux 下的 minicom 相结合便组成一个调试控制台 该控制台可以获取用户从键盘输入的 控制命令 并显示出来 然后将控制命令通过串口传送到目标机上 同时 该控制台还可 以通过串口获取目标机返回的调试信息 也将其显示出来 供用户查看 当然你也可以用 串口来传输文件 但是速度太慢了 不推荐使用 串口有 9 针和 25 针两种 现在的 PC 机上一般只有 9 针的串口 而嵌入式开发中通常 也都使用 9 针串口进行通信 所谓 9 针串口就是指串口有 9 个引脚 对应 9 根信号线 如 下表 引脚号功能描述字母代号 1数据载波检测DCD 2接收数据RXD 3发送数据TXD 4数据终端准备DTR 5信号地GND 6数据设备准备好DSR 7请求发送RTS 8清除发送CTS 9振铃指示DELL 表 1 1 2 9 针串口信号引脚列表 不过 在实际通信过程中这 9 根信号线并不都需要 通常只要将 RXD TXD GND 这 3 个信号连接起来就足够了 这也就是我们常说的串口的三线制接法 至于信号之 间具体是怎么连接的 那是硬件工程师的事情 当然这个很简单 有兴趣的也可以去了解 一下 而我们现在需要做的就是找到 Super ARM 实验箱中的串口线缆 将它的一端插座 实验箱的串口 1 上 另一端插在 PC 机上就可以了 3 网络连接 网络 现在已经成为我们生活中相当重要的一部分 其优点自不必多说 在嵌入式系统中涉及到的大批量数据传输 如视频 图像等都是通过网络实现 而在 嵌入式的开发过程中 也常常将宿主机和目标机组建成一个网络 方便宿主机和目标机之 间的文件传输 比如 在宿主机上运行 TFTP 服务器 可以将内核和文件系统烧写到目标 嵌入式 Linux 初级实验教程 7 机的 Flash 存储器中 也可以在宿主机上启动 NFS 网络文件系统 服务 挂载一个网络 文件系统 方便目标机访问宿主机的数据 网络的连接需要完成以下几项工作 以 PC Super ARM 为例 首先 用网络交叉线 Super ARM 实验箱有提供 直接将 PC 机和 Super ARM 相连 或者用两根网络直连线 平常用的网线 和一个交换机 一根将 PC 和交换机连接 一根 将 Super ARM 和交换机连接 这样就完成了宿主机和目标机的物理连接 然后 需要配置宿主机和目标机的 IP 子网掩码和默认网关 使宿主机和目标机在同一 网段 4 USB 连接 USB 接口支持热插拔 即插即用 而且传输速度快 这些优点使得 USB 无处不见 无论 PC 机还是嵌入式设备 几乎都留有 USB 接口 USB 现在有两个规范 一个是 USB1 1 一个是 USB2 0 前者最高传输率是 12Mbps 后者最高达到 480Mbps USB 也广泛应用在嵌入式开发中 如很多厂商提供的仿真器使用的是 USB 接口 嵌 入式系统通过挂载 USB 接口的可移动存储设备 访问设备中的数据 1 1 4 交叉编译 1 为什么需要交叉编译 当我们需要从源代码编译出一个能运行在 ARM 架构上的程序的时候 可以有两种方 法 第一种是像平常一样 使用相同架构机器上的编译器 编译出运行在同一架构上的程 序 在嵌入式系统领域 这是较难实现的 嵌入式系统是专用的计算机系统 它对系统的 成本 功耗 体积等有严格的要求 因此大部分嵌入式设备都没有鼠标 键盘 显示器 大容量硬盘等外设 这些硬件的特殊性决定了嵌入式系统往往没有足够的硬件资源支持安 装发行版的 Linux 运行相应的开发工具和调试工具 所以 通常嵌入式系统的软件开发 采用一种交叉编译的方式 2 什么是交叉编译 什么是交叉编译呢 简单地来说 交叉编译就是在一个平台上 如 PC 生成另一个平 台上 如 ARM 可运行代码的编译技术 在嵌入式开发中 由于宿主机和目标机的处理器 架构一般不相同 宿主机 如 PC 为 Intel 处理器 而目标机 如 Super ARM 实验箱 为 三星 S3c2410 处理器 因此在宿主机上可以运行的代码却不一定能在目标机上运行 要解 决这个问题 就需要在宿主机上生成目标机上运行的代码 也叫做目标代码 这一过程就 是嵌入式系统中的交叉编译 3 什么是交叉编译工具链 要完成程序编译并生成可执行代码 都要经过一系列的处理 这一系列处理包括 预 编译 高级语言编译 汇编 连接及重定位 这些处理过程需要一系列的编译链接工具和 相关的库 包括 gcc 编译器 ld 连接器 gas 解释器 ar 打包器 还包括 C 程序库 glibc 以 及 gdb 调试器 这些工具的集合组成了一套编译工具链 一般的情况下 工具链的运行环境和它产生的目标代码的环境是一致的 例如在 VC 中编译一个程序 工具链在 x86 平台上运行 编译产生的也是运行在 x86 平台上的目标代 码 但实际上 工具链编译产生的目标代码的运行平台可以与工具链本身运行的环境不一 致 这种工具链 称为交叉工具链 cross compiler tool chain 使用这种工具链的编译过程 对应地被称为交叉编译 cross compile 理论上来说 交叉工具链可以用在任何两种异构的 系统中 例如 可以构建出 PowerPC ARM 工具链 Sun Sparc x86 工具链等等 在基于 ARM 的嵌入式系统开发中 一般会使用 x86 架构的计算机系统作为宿主机 故最为常用的 是 x86 ARM 交叉工具链 嵌入式 Linux 初级实验教程 8 宿主机上安装了发行版的 Linux 它包含了一整套完整的工具链 这套工具链在嵌入 式开发中又称为本地工具链 在嵌入式 Linux 开发中 拥有一套完善的工具链也相当重要 这套工具链被称为交叉编译工具链 交叉编译工具链的每个工具名字都加了一个前缀 用 来区别本地的工具链 例如 arm linux gcc arm linux ar 等 除了体系结构相关的编译选 项以外 它的使用方法与宿主机上的 gcc 相同 所以 Linux 编程技术对于嵌入式 Linux 同 样适用 4 工具链相关软件 目前市场上存在着各种各样不用的 x86 ARM 交叉工具链 常用的交叉工具链有开发 和商业两种类型 商业类型的有 ARM 公司自家在 RVDS 开发工具中整合的 armcc 有 Microsoft 在 Platform Builder 中的 armv4I 编译器等 一般来说 这些由商业公司提供的工 具链 都不会附有工具链相关的源代码和制作方法 灵活性不足 并且它们一般都与整套 开发系统捆绑销售使用 成本较高 开放类型的典型代表是 GNU 工具链 目前已经能支 持 x86 PowerPC ARM 等处理器 为了更好的理解这种技术和降低成本 获得更好的灵 活性 市场上有不少的公司使用国际开源组织 GNU 开发的工具链来作为他们的产品开发 工具 Linux 软件从一开始就使用 GNU 的工具链 这些 GNU 的工具和软件都是开放源码的 可以免费下载源码编译 但是并不能以为任何一个版本拿来都能用 各种软件包存在版本 匹 配问题 并且不同版本都有一些补丁 GNU 的工具链软件源码包可以从 GNU 网站 http www gnu org 下载 这个站点有很 多 GNU 软件 其中 Linux 使用的工具链软件是 binutils gcc glibc 和 gdb 通过这些软 件包 可以生成 gcc g ar as ld 等编译链接工具 还可以生成 glibc 库和 gdb 调试 器 下面简单介绍一下这些工具链软件 binutils 是二进制程序处理工具 包括连接器 汇编器等目标程序处理的工具 gcc GNU Compiler Collection 是编译器 不但能够支持 C C 语言的编译 而 且能够支持 Fortran Java Ada 等编程语言 不过 一般不需要配置其他语言的 选项 也可以避免编译其他语言功能而导致的错误 对于 C C 语言的完整支持 需要支持 glibc 库 glibc 是应用程序编程的函数库软件包 可以编译生成静态库和共享库 完整的 gcc 需要支持 glibc gdb 是调试工具 可以读取可执行程序中的符号表 对程序进行源码调试 5 如何构建交叉编译工具链 理论上讲 要构建出一个交叉工具链 需要解决三个问题 一是这个工具链必须是可 以运行在宿主机平台上的 二是需要更换一个与目标平台对应的汇编器 使得工具链能产 生对应的目标代码 三是要更换一套与目标平台对应的二进制库 使得工具链在连接时能 找到正确的二进制库 解决了这三个问题 交叉编译工具链也就建立起来了 但是 建立交叉编译工具链是一个微妙而又相当复杂的过程 它需要你了解工具链软 件的版本 补丁 为各种架构调整各种工具链组件等难懂的知识 这些知识不仅分散在许 多地方 并因软件的版本而有所不同 一个刚入门 或甚至是已有些经验 的嵌入式 Linux 系统建构者当然无法独自应付 如果不想自己经历复杂繁琐的编译过程 那么最简单的方法就是直接从网上下载已经 制作好的可用的交叉编译工具链 如 cross 2 95 3 这个工具链可以在 ftp ftp arm linux org uk pub armlinux toolchain 站点获得 当然 如果你真的很勇敢或者刚好你手上有许多空闲的时间 而且你渴望学习交叉工 嵌入式 Linux 初级实验教程 9 具链构建程序的整个细节 我强烈建议自己手动构建交叉编译工具链 你可以参考 Cross Linux From Scratch 项目 http trac cross lfs org 的做法 这种手动制作的方法就是要指 导大家从选定各个软件的版本 下载这些软件版本的源码包和补丁开始 到编译各个软件 包 一步一步地编译出自己的交叉编译器 决定采用这种方法之前 你还是做好心理准备 Dan Kegel Crosstool 的主要作者 对 手动建构交叉工具链 所做的描述 构建一个 交叉工具链供嵌入式系统开发使用是一个令人恐惧的景象 需要钢铁般的意志 需要几天 如果不是几个星期 的功夫 需要具备许多的 Unix 和 GNU 知识 虽然你绝对能够手动完成工具链的构建 但笔者还是推荐使用 crosstool 工具自动完成 交叉工具链的构建 关于 crosstool 工具以及如何利用该工具构建交叉编译工具链 在本章 后续内容中 将详细介绍 其中用到的软件和版本组合都是经过预先测试的 它们是能够 替特定的架构产生可用工具链的已知组合 这让刚入门的嵌入式 Linux 系统开发者 或许 就是你 能够轻易构建出可用的工具链 而不需要变成了解各种工具链软件版本状态的专 家 1 1 5 内核 内核 kernel 是所有 Linux 系统的主要软件组件 它的责任是管理目标系统中的硬 件 以免系统上各种软件组件之间为了使用硬件资源而一团混乱 基本上 可以说内核是 一个资源中介 由

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论