"Linux典藏大系"自2010年陆续出版以来,因其内容丰富、讲解细腻、通俗易懂和实用性强等特色而深受广大读者的喜爱,长期位居同类图书销售排行榜的前列,累计销量近10万册。丛书中部分图书荣获51CTO读书频道"最受读者喜爱的原创IT技术图书奖",还有多种图书的中文繁体字版权输出到了中国台湾地区出版发行。丛书中的多个品种被国内几十所培训机构和大中专院校选为教材。丛书的出版还得到了国内Linux领域最知名的技术社区ChinaUnix的大力支持。读者在ChinaUnix社区的论坛上与社区中的Linux爱好者进行了广泛的交流,取得了良好的学习效果。2014年2月"Linux典藏大系"全新升级版(第2版)正式出版,第2版图书迎合了Linux技术的发展,全部采用当前流行和稳定的Linux发行版或者相关工具,是Linux爱好者学习Linux的好帮手。
Linux系统移植(第2版)》是获得了大量读者好评的"Linux典藏大系"中的《Linux系统移植》的第2版。《Linux系统移植(第2版)》由浅入深,、系统地介绍了Linux系统移植的各方面知识。书中的每个章节都有相应的实例编译或移植过程,每个移植实例都具有代表性,在实际应用和开发中有很高的参考价值。另外,《Linux系统移植(第2版)》赠送17.5小时多媒体教学视频及书中涉及的实例源程序,便于读者高效、直观地学习。
Linux系统移植(第2版)》分为4篇。第1篇简单介绍了Linux内核和嵌入式Linux系统开发环境搭建;第2篇介绍了一个最基本的嵌入式系统的组成部分、Bootloader移植、内核移植和文件系统移植;第3篇介绍了LCD、触摸屏、USB、网卡、音频、SD卡、NandFlash等流行的设备驱动移植过程;第4篇从嵌入式产品角度出发,介绍了GUI、Qtopia、嵌入式数据库BerkeleyDB和SQLite、嵌入式Web服务器BOA和Thttpd、JVM虚拟机的移植及目前流行的VoIP技术和相关协议。
Linux系统移植(第2版)》适合嵌入式Linux系统入门人员、Linux系统开发和移植、系统分析师等相关人员阅读,也适合作为大中专院校相关专业的实验教材使用。
国内一本Linux系统移植图书,ChinaUnix社区力荐!通过15个典型案例,深入剖析Linux系统移植的方法 赠送17.5小时高清语音视频讲解,赠送教学PPT
内容新颖:书中的开发环境、编译工具和软件都是当前流行的稳定版本
内容:涵盖Linux内核、文件系统、驱动及数据库等各种系统的移植
循序渐进:遵循原理分析,代码分析,编译,测试,移植的学习顺序
讲解详细:所有编译过程都附有编译命令,并对复杂的命令给出了详细说明
技巧性强:穿插了大量的经验和技巧,并对容易出错的地方给出了专门的提示
注重实战:通过典型案例,让读者深入体验Linux系统移植的方法和全过程
Linux精品图书推荐(请点丛书链接查看)
ARM嵌入式Linux系统开发详解(第2版)》
Linux网络编程(第2版)》
Linux环境C程序设计(第2版)》
Linux C程序设计王者归来》
零点起飞学Linux C编程》
Linux驱动开发入门与实战(第2版)》
Linux典藏大系(套装全2册):Linux从入门到精通+Shell从入门到精通》
Linux典藏大系(套装全4册):Linux从入门到精通+Linux系统管理与网络管理+Linux服务器架设指南+Shell从入门到精通》
刘刚,嵌入式软件工程师。毕业于广东工业大学,获得了计算机专业硕士学位。毕业后长期从事嵌入式Linux领域的研发工作。现任职于某知名通信公司,从事嵌入式通信领域的开发工作。对嵌入式Linux技术有浓厚的兴趣,对公司的产品研发起到了很大的推动作用。曾经参与了接入网设备的开发和TD上网卡驱动开发及移植等项目。
赵剑川,嵌入式软件工程师。毕业于广东工业大学,获得了自动化专业硕士学位。毕业后一直从事嵌入式Linux领域的驱动开发工作。先后任职于两家知名的通信设备制造公司,从事嵌入式软件开发。参与了公司多项大型项目的研发工作,积累了丰富的开发经验。目前致力于WLAN领域的研发工作。
第1篇 系统移植基础篇
第1章 Linux内核介绍
1.1 系统调用接口
1.1.1 Linux系统调用
1.1.2 用户编程接口
1.1.3 系统调用与服务例程的对应关系
1.1.4 系统调用过程
1.1.5 系统调用传递的参数
1.2 进程管理
1.2.1 进程
1.2.2 进程描述符
1.2.3 进程状态
1.2.4 进程调度
1.2.5 进程地址空间 第1篇 系统移植基础篇
第1章 Linux内核介绍
1.1 系统调用接口
1.1.1 Linux系统调用
1.1.2 用户编程接口
1.1.3 系统调用与服务例程的对应关系
1.1.4 系统调用过程
1.1.5 系统调用传递的参数
1.2 进程管理
1.2.1 进程
1.2.2 进程描述符
1.2.3 进程状态
1.2.4 进程调度
1.2.5 进程地址空间
1.3 内存管理
1.3.1 内存管理技术
1.3.2 内存区管理
1.3.3 内核中获取内存的几种方式
1.4 虚拟文件系统
1.4.1 虚拟文件系统作用
1.4.2 文件系统的注册
1.4.3 文件系统的安装和卸载
1.5 设备驱动程序
1.5.1 字符设备驱动程序
1.5.2 块设备驱动程序
1.5.3 网络设备驱动程序
1.5.4 内存与1/0操作
1.6 小结
第2章 嵌入式Linux开发环境搭建
2.1 虚拟机及Linux安装
2.1.1 虚拟机的安装
2.1.2 虚拟机和主机通信设置
2.1.3 虚拟机与主机共享文件
2.1.4 虚拟机与主机文件传输
2.2 交叉编译工具
2.2.1 交叉编译工具安装
2.2.2 交叉编译器测试
2.3 超级终端和Minicom
2.3.1 超级终端软件的安装
2.3.2 配置Minicom
2.3.3 配置SecureCRT
2.4 内核、文件系统加载工具
2.4.1 烧写Bootloader
2.4.2 内核和文件系统下载
2.4.3 应用程序和文件传输
2.5 在开发中使用网络文件系统(NFS)
2.5.1 虚拟机设置
2.5.2 虚拟机的IP地址设置
2.5.3 验证网络连接
2.5.4 设置共享目录
2.5.5 启动NFS服务
2.5.6 修改共享配置后
2.5.7 挂载NFS
2.5.8 双网卡挂载NFS
2.6 小结
第2篇 系统移植技术篇
第3章 Bootloader移植
3.1 Bootloader介绍
3.1.1 Bootloader与嵌入式Linux系统的关系
3.1.2 Bootloader基本概念
3.1.3 Bootloader启动过程
3.2 Bootloader之U-Boot
3.2.1 U-Boot优点
3.2.2 U-Boot的主要功能
3.2.3 U-Boot目录结构
3.2.4 U-Boot的编译
3.3 小结
第4章 Linux内核裁剪与移植
4.1 Linux内核结构
4.1.1 内核的主要组成部分
4.1.2 内核源码目录介绍
4.2 内核配置选项
4.2.1一般选项
4.2.2 内核模块加载方式支持选项
4.2.3 系统调用、类型、特性、启动相关选项
4.2.4 网络协议支持相关选项
4.2.5 设备驱动支持相关选项
4.2.6 文件系统类型支持相关选项
4.2.7 安全相关选项
4.2.8 其他选项
4.3 内核裁剪及编译
4.3.1 安装内核源代码
4.3.2 检查编译环境设置
4.3.3 配置内核
4.3.4 编译内核
4.4 内核升级
4.4.1 准备升级内核文件
4.4.2 移植过程
4.5 小结
第5章 嵌入式文件系统制作
5.1 文件系统选择
5.1.1 Flash硬件方案比较
5.1.2 嵌入式文件系统的分层结构
5.2 基于Flash的文件系统
5.2.1 JFFS文件系统(Journalling Flash File System)
5.2.2 YAFFS文件系统(Yet Another Flash File System)
5.2.3 Cramfs文件系统(Compressed ROM File System)
5.2.4 Romfs文件系统(ROM File System)
5.3 基于RAM的文件系统
5.4 文件系统的制作
5.4.1 制作Ramdisk文件系统
5.4.2 制作YAFFS2文件系统
5.4.3 制作JFFS2文件系统
5.4.4 其他文件系统制作
5.5 小结
第3篇 系统移植与驱动篇
第6章 LCD驱动移植
6.1 认识LCD相关硬件原理
6.1.1 LCD概述
6.1.2 LCD控制器
6.1.3 LCD控制器方块图
6.1.4 LCD控制器操作
6.1.5 LCD控制寄存器
6.2 LCD参数设置
6.3 内核LCD驱动机制
6.3.1 FrameBuffer概述
6.3.2 FrameBuffer 设备驱动的结构
6.4 Linux 2.6.32的LCD驱动源码分析
6.4.1 LCD驱动开发的主要工作
6.4.2 s3c2410fb_init()函数分析
6.4.3 s3c2410fb_probe()函数分析
6.4.4 s3c2410fb_remove()函数分析
6.5 移植内核中的LCD驱动
6.5.1 LCD硬件电路图
6.5.2 修改LCD源码
6.5.3 配置内核
6.6 小结
第7章 触摸屏驱动移植
7.1 触摸屏概述
7.1.1 触摸屏工作原理
7.1.2 触摸屏的主要类型
7.2 S3C2440 ADC接口使用
7.2.1 S3C2440触摸屏接口概述
7.2.2 S3C2440触摸屏接口操作
7.3 2.6内核触摸屏驱动源码分析(s3c2410_ts.c源码分析)
7.4 Linux内核输入子系统介绍
7.4.1 Input子系统概述
7.4.2 输入设备结构体
7.4.3 输入链路的创建过程
7.4.4 使用Input子系统
7.4.5 编写输入设备驱动需要完成的工作
7.5 触摸屏驱动移植和内核编译
7.5.1 修改初始化源码
7.5.2 修改硬件驱动源码s3c2440_ts.c
7.5.3 修改Kconfig和Makefile
7.5.4 配置编译内核
7.5.5 触摸屏测试程序设计
7.6 小结
第8章 USB设备驱动移植
8.1 USB协议
8.1.1 USB协议的系统主要组成部分
8.1.2 总线物理拓扑结构
8.1.3 USB设备、配置、接口、端点
8.1.4 USB设备状态
8.1.5 USB枚举过程
8.1.6 USB请求块(URB)
8.2 USB主机驱动
8.2.1 USB主机驱动结构和功能
8.2.2 主机控制器驱动(usb_hcd)
8.2.3 OHCI主机控制器驱动
8.2.4 S3C24XX OHCI主机控制器驱动实例
8.3 USB设备驱动
8.3.1 USB骨架程序分析
8.3.2 USB驱动移植的时钟设置
8.4 USB鼠标键盘驱动
8.4.1 USB鼠标驱动代码分析
8.4.2 USB键盘驱动代码分析
8.4.3 内核中添加USB鼠标键盘驱动
8.5 U盘驱动
8.5.1 内核配置
8.5.2 移植和测试
8.6 小结
第9章 网卡驱动程序移植
9.1 以太网概述
9.1.1 以太网连接
9.1.2 以太网技术概述
9.1.3 以太网的帧结构
9.2 网络设备驱动程序体系结构
9.2.1 嵌入式Linux网络驱动程序介绍
9.2.2 Linux网络设备驱动的体系结构
9.2.3 网络设备驱动程序编写方法
9.2.4 网络设备驱动程序应用实例
9.3 net_device 数据结构
9.3.1 全局信息
9.3.2 硬件信息
9.3.3 接口信息
9.3.4 设备方法
9.3.5 公用成员
9.4 DM9000网卡概述
9.4.1 DM9000网卡总体介绍
9.4.2 DM9000网卡的特点
9.4.3 内部寄存器
9.4.4 功能描述
9.5 DM9000网卡驱动程序移植
9.5.1 DM9000网卡连接
9.5.2 驱动分析--硬件的数据结构
9.5.3 驱动分析--数据读写函数
9.5.4 驱动分析--重置网卡
9.5.5 驱动分析--初始化网卡
9.5.6 驱动分析--打开和关闭网卡
9.5.7 驱动分析--数据包的发送与接收
9.5.8 DM9000网卡驱动程序移植
9.6 小结
第10章 音频设备驱动程序移植
10.1 音频设备接口
10.2 Linux音频设备驱动--OSS驱动框架
10.3 Linux音频设备驱动--ALSA驱动框架
10.4 音频设备应用程序编写
10.5 音频设备驱动移植
10.6 音频播放程序madplay的移植
10.7 小结
第11章 SD卡驱动移植
11.1 SD卡简介
11.2 SD卡驱动程序分析
11.3 SD卡移植步骤
11.4 小结
第12章 NandFlash驱动移植
12.1 NandFlash介绍
12.2 NandFlash驱动介绍
12.3 NandFlash驱动移植
12.4 小结
第4篇 系统移植高级篇
第13章 MiniGUI与移植
13.1 MiniGUI在上位机中的安装
13.2 MiniGUI的交叉编译和移植
13.3 小结
第14章 Qt开发与Qtopia移植
14.1 Qt安装与编程
14.2 Qtopia Core在X86平台上的安装和应用
14.3 Qtopia Core在嵌入式Linux上的移植
14.4 小结
第15章 嵌入式数据库Berkeley DB移植
15.1 数据库的基本概念
15.2 Berkeley DB数据库安装
15.3 使用Berkeley DB数据库
15.4 移植Berkeley DB数据库
15.5 小结
第16章 嵌入式数据库SQLite移植
16.1 SQLite支持的SQL语句
16.2 SQLite数据库编译、安装和使用
16.3 移植SQLite
16.4 移植SQLite数据库
16.5 小结
第17章 嵌入式Web服务器BOA移植
17.1 BOA介绍
17.2 BOA编译和HTML页面测试
17.3 CGI脚本测试
17.4 BOA交叉编译与移植
17.5 BOA与SQLite结合
17.6 小结
第18章 嵌入式Web服务器Thttpd移植
18.1 Thttpd介绍
18.2 Thttpd编译和HTML页面测试
18.3 CGI脚本测试
18.4 Thttpd交叉编译与移植
18.5 Thttpd与嵌入式数据库结合
18.6 小结
第19章 JVM及其移植
19.1 JVM介绍
19.2 类装载
19.3 垃圾回收
19.4 解析器
19.5 Java编程浅析
19.6 KVM执行过程
19.7 PC机安装JVM
19.8 KVM移植和测试
19.9 小结
第20章 VoIP技术与Linphone编译
20.1 VoIP介绍
20.2 oSIP协议概述
20.3 oSIP状态机
20.4 oSIP解析器
20.5 oSIP事务层
20.6 SIP建立会话的过程
20.7 RTP协议
20.8 Linphone编译与测试
20.9 Linphone交叉编译
20.10 小结
前言]
随着各种芯片技术的发展,各种嵌入式产品也如雨后春笋一般地出现了。目前,嵌入式产品应用领域涉及移动通信、汽车、医疗、家电等很多领域。而且,如今的嵌入式硬件的速度和容量越来越接近于PC,因此在这些嵌入式产品上运行操作系统就成为了可能。一直以来,很多企业花费了巨大成本研发了大量运行在PC上的软件产品。如果将这些的软件应用在嵌入式系统中,将会成为快速开发嵌入式系统,降低嵌入式产品开发成本,提高软件稳定性和安全性的重要途径。
目前,国内图书市场上专门介绍Linux系统移植的图书只有笔者2011年初出版的《Linux系统移植》一书。该书也是获得了大量读者好评的"Linux典藏大系"中的一个分册,出版后填补了该领域的空白。随着时间的推移和技术的发展,这本书已经逐渐不能适应读者的需求,因此笔者对这本书进行了升级和改版,便有了这本书的第2版。
本书在第1版的基础上进行了全新改版,升级了操作系统版本和Linux内核版本,并将编程环境和各种开发工具升级到了当前近期版本,也对第1版书中的一些疏漏进行了修订,对书中的一些实例和代码进行了重新表述,使得本书更加易读。相信升级后的图书易读性更强。
本书是笔者从事嵌入式开发的经验总结,希望能给目前从事嵌入式研发和学习的读者提供最有效的帮助,能使读者的嵌入式系统最快地运行起来,使读者在最短的时间内成功移植开源软件。
本书使用的源代码均为开源代码,读者可以从对应的官方网站获得。本书对于源码的重要部分进行了详细的分析,建议读者在阅读时对应源码进行阅读效果会更好。
关于"Linux典藏大系"
"Linux典藏大系"是清华大学出版社自2010年1月以来陆续推出的一个图书系列,截止2012年,已经出版了10余个品种。该系列图书涵盖了Linux技术的方方面面,可以满足各个层次和各个领域的读者学习Linux技术的需求。该系列图书自出版以来获得了广大读者的好评,已经成为了Linux图书市场上最耀眼的明星品牌之一。其销量在同类图书中也名列前茅,其中一些图书还获得了"51CTO读书频道"颁发的"最受读者喜爱的原创IT技术图书奖"。该系列图书在出版过程中也得到了国内Linux领域最知名的技术社区ChinaUnix(简称CU)的大力支持和帮助,读者在CU社区中就图书的内容与活跃在CU社区中的Linux技术爱好者进行广泛交流,取得了良好的学习效果。
关于本书第2版
本书第1版出版后深受读者好评,并被ChinaUNIX技术社区所推荐。但是随着技术的发展,本书第1版内容已经无法满足读者的学习需求。应广大读者的要求,我们结合Linux系统移植的近期技术推出了本书的第2版。相比第1版,第2版图书在内容上的变化主要体现在以下几个方面:
(1)操作系统版本由Fedora 6升级为Fedora 19。
(2)系统移植内核版本统一升级为2.6.32。
(3)编译工具GCC版本升级到4.4.3。
(4)MiniGUI、Qt、Berkeley DB、SQLite、Linphone等均升级为近期版本。
(5)将一些表达不的地方表述得更加。
本书特色
1.内容、选材具有特点
本书介绍了最小系统的引导程序移植、内核移植、文件系统移植、各种驱动移植等内容。另外,本书还专门介绍了嵌入式数据库、嵌入式GUI、嵌入式Web服务器、嵌入式JVM、VoIP技术等内容。对于数据库、GUI、Web服务器分别选择了两种进行介绍,读者可以从性能上进行对比,然后应用在自己的项目中。
2.内容由浅入深、循序渐进,可操作性强
本书按照由浅入深、循序渐进的梯度安排内容,适合各个层次的读者阅读。书中每章内容都遵循原理分析?代码、分析?编译?测试?移植的学习顺序,具有较强的可操作性。
3.编译过程详细
本书的编译过程都附有详细的编译命令,对于复杂的命令均给出了说明,方便读者实际操作。读者可以边阅读本书,边动手进行实验。
4.贯穿了大量的编译技巧,可迅速提升移植水平
本书在讲解编译过程时贯穿了大量的编译技巧,并针对移植过程中的编译错误介绍了如何发现错误的源头,同时给出了解决方法。这有利于读者解决类似的编译问题,提升系统移植的水平。
5.提供多媒体教学视频和源文件
本书赠送17.5小时多媒体教学视频和实例源文件,便于读者高效、直观地学习。这些学习资料需要读者按照封底的提示自行下载。
本书内容概述
本书注重实践,包含了丰富的移植实例,这些实例各具特点,从基础的系统组成到设备驱动,再到高级应用,适合各个层面的读者学习和研究。本书中的实例是笔者根据实际项目中嵌入式产品的功能需求,专门选择的具有代表性的开源软件进行移植,包含了常见的嵌入式产品的最小系统组成部分移植,同时选择了应用比较多的数据库、Web服务器、GUI等进行移植。笔者通过亲自体会,在每次编译和移植过程中详细说明移植的细节,对移植过程中遇到的问题也给出了解决方法。本书还介绍了VoIP技术,并结合源码分析了VoIP的实现,同时还介绍了VoIP的详细编译过程。本书共20章,分为4篇。简单介绍如下。
第1篇 系统移植基础篇(第1~2章)
本篇介绍了系统移植的基础。首先对Linux内核进行了简单介绍,然后介绍了系统移植环境的搭建。通过对本篇内容的学习,读者可以对Linux系统有初步认识,能掌握嵌入式Linux开发工具的使用,能正确搭建开发平台,能够制作编译好的嵌入式系统。
第2篇 系统移植技术篇(第3~5章)
本篇介绍了一个最基本的嵌入式系统的组成部分、Bootloader、内核和文件系统的移植。学习完本篇内容后,读者能够动手独立编译和移植一个基本的嵌入式系统。
第3篇 系统移植驱动篇(第6~12章)
本篇介绍了各种驱动的移植,包括LCD、触摸屏、USB、网卡、音频、SD卡、NandFlash等流行的设备驱动的移植过程。通过对本篇内容的学习,读者对嵌入式Linux驱动移植将会有一定的认识,可以基本掌握驱动的移植步骤,能完成简单的驱动移植。
第4篇 系统移植高级篇(第13~20章)
本篇从嵌入式产品的角度出发,介绍了系统移植中各种类型的高层软件移植,包括GUI、数据库、Web服务器、虚拟机的移植,还介绍了目前流行的VoIP技术,并结合源码介绍了VoIP相关协议和编译方法。通过学习本篇内容,读者可以掌握很多移植技巧,能够将这些实例应用到自己的项目中。
书摘]
第3 章 Bootloader 移植
Bootloader 是在嵌入式系统运行之前运行的一段程序。运行Bootloader 程序可以初始化硬件设备,建立内存空间的映射图,从而将系统的软硬件环境调整到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。本章主要介绍两种常见的Bootloader 及其移植过程。
3.1 Bootloader 介绍
体系结构不同的CPU 都有不同的Bootloader,有些Bootloader 支持多种不同类型体系结构的处理器,如U-boot。通常,Bootloader 不但依赖于CPU 的体系结构,而且依赖于特定的嵌入式板设备的配置,即对于两块不同的嵌入式板而言,即使它们是基于同一种CPU
而构建的,要运行在一块开发板上的Bootloader 程序能够运行在另一块开发板上,通常需要修改Bootloader 的源程序以适应不同的开发板。
3.1.1 Bootloader 与嵌入式Linux 系统的关系
从软件的角度可将嵌入式Linux 系统划分成4 个层次,4 个层次由低层到高层分别如下所述。
引导加载程序:包括固化在固件中(firmware)的boot 代码(可选)和Bootloader两大部分。
内核:给具体类型开发板定制的内核及控制内核引导系统的参数。
文件系统:包括根文件系统和建立于FLASH 内存设备上的文件系统。
用户应用程序:用户的应用程序,包括GUI、Web 服务器、数据库、网络协议栈等。
3.1.2 Bootloader 基本概念
Bootloader 是在操作系统内核运行前执行的一段小程序,类似在启动Windows 系统前运行的BIOS 程序。通过这段小程序,完成了对必要硬件设备的初始化,创建内核需要的信息并将这些信息通过相关机制传递给内核,从而将系统的软硬件环境带到一个合适的状态,最终调用操作系统内核,起到引导和加载内核的作用。第3 章 Bootloader 移植
1.Bootloader的安装媒介
系统每次加电或复位后,CPU 都会固定从预先设定的地址上取指令。基于CPU 构建的嵌入式系统通常都有某种类型的固态存储设备(比如ROM、EEPROM 或FLASH 等)被映射到这个预先设定的地址上。一个同时安装有Bootloader、内核的启动参数、内核映像和根文件系统映像的固态存
储设备的典型空间分配结构图,如图3.1 所示。
图3.1 固态存储设备的典型空间分配结构图
2.Bootloader启动过程分类
Bootloader 启动过程分为单阶段和多阶段两种。相对单阶段Bootloader 而言,多阶段Bootloader 的功能更加复杂,可移植性更加优越。从固态存储设备上启动Bootloader 一般可分为两个阶段的启动过程,即stage 1 和stage 2。
3.Bootloader的操作模式
绝大部分Bootloader 均包含两种不同类型的操作模式,即启动加载模式和下载模式。
启动加载模式:这种模式也称为"自主"模式。即Bootloader 从目标机上的某个固态存储设备上将操作系统加载到RAM 中运行,整个过程并没有用户的介入。启动加载模式为Bootloader 的正常工作模式,因此在嵌入式产品时,Bootloader只能工作在该模式下。
下载模式:这种模式下,目标机上的Bootloader 将通过串口连接、网络连接或USB连接等通信手段从主机(Host)下载文件,如下载内核映像文件和文件系统映像文件等。从主机下载的文件通常首先被Bootloader 保存到目标板的ROM 中,然后再被Bootloader 写到目标板上的FLASH 类固态存储设备中。Bootloader 的这种模式通常在及时次安装内核与根文件系统时被使用,或者在系统更新时使用。Bootloader 工作在下载模式时,通常都会提供一个命令行接口给它的终端用户,以供用户通过命令行控制Bootloader 的工作。
3.1.3 Bootloader 启动过程
Bootloader 的启动过程分为stage1 和stage2 两个阶段,通常stage1 是用汇编语言完成,而stage2 则用C 语言来实现,以便于在stage2 阶段实现更加复杂的功能和取得更好的代码可读性及可移植性。下面介绍两个阶段分别完成的不同工作。
1.stage1完成的工作
(1)基本的硬件初始化包括以下工作:
屏蔽所有中断。为中断提供服务通常是操作系统设备驱动程序的责任,因此在Bootloader 的启动全过程中可以不必响应任何中断。屏蔽中断可以通过写 CPU 的中断屏蔽寄存器或状态寄存器(比如 ARM 的 CPSR 寄存器)来完成。
设置CPU 速度和时钟频率。
初始化RAM。包括正确设置系统内存控制器的功能寄存器,以及各内存库控制寄存器等。
初始化LED。典型地,通过GPIO 来驱动LED,其目的是检查当前系统的状态是OK 还是ERROR。如果板子上没有LED,那么也可以通过初始化UART 向串口打印Bootloader 的Logo 字符信息来完成这一点。
关闭CPU 内部指令和数据cache 灯。
(2)准备RAM 空间加载stage2。为了获得更快的执行速度,通常把stage2 加载到RAM 空间中来执行,所以必须准备好一段可用的RAM 空间范围用来加载Bootloader 的stage2。
(3)复制stage2 到RAM 中。执行复制时要确定两类地址:及时,stage2 的可执行映像在固态存储设备的存放起始地址和终止地址;第二,RAM 空间的起始地址。
(4)设置堆栈指针sp。设置堆栈指针是为执行C 语言代码做准备。在设置堆栈指针sp之前,也可以关闭LED 灯,以提示用户我们准备跳转到stage2。
(5)跳转到stage2 的C 入口点。在ARM 处理器中,实现跳转的方法是通过修改PC寄存器为合适的地址。
2.stage2完成的工作
(1)使用汇编语言跳转到main()入口函数。用汇编语言写一段trampoline 小程序,并将这段trampoline 小程序作为stage2 可执行映像的执行入口点。然后在trampoline 汇编小程序中用CPU 跳转指令跳入main()函数中去执行;而当main()函数返回时,CPU 执行路径再次回到trampoline 程序。这种方法的思想是:用这段trampoline 小程序作为main()函数的外部包裹(external wrapper)。
(2)初始化本阶段要使用到的硬件设备。初始化至少一个串口,以便和终端用户进行I/O 输出信息、初始化计时器等。
(3)检测系统的内存映射。所谓内存映射是指在整个4GB 物理地址空间中,有哪些地址范围被分配用来寻址系统的RAM 单元。
(4)加载内核映像文件和根文件系统映像文件。包括规划内存分配布局和从Flash 上复制数据。规划内存分配布局包括内核映像所占用的内存范围和根文件系统所占用的内存范围。
(5)设置内核的启动参数。在将内核映像和根文件系统映像复制到RAM 空间中后,就可以准备启动Linux 内核了。在调用内核之前,应该做一步准备工作,即设置Linux 内核的启动参数。
这个商品不错~
书有点脏了。注重整洁啊。
很不错,性价比高。。。
hao
快递员很贴心!!!
书很不错 好好看看那了
经典书籍
书不错,学习中
感觉打折的商品就是拿剩货来卖啊,书的封面很多磨过的划痕,还很多灰尘,一看就是卖不出的剩书。
好
整体感觉不错,性价比很高,纸质好
感觉输的质量很不错,内容也可以
书还可以,备着,还没有看。
整体感觉一般,物流还是比较快的
还不错
很好,不过现在太忙有时间再研究。
不错、如果提供视频光盘就好了
好
好货又便宜
整体感觉不错
内容一般吧,大部分内容都是按照天嵌2440开发板的用户手册搬过来的,只讲步骤,没有原理。
不过写的通俗易懂,特别是最后几个章节,操作步骤非常详细!
是帮同学买的,具体好坏就不知道啦,反正他说不错的
整书通篇都是简单的介绍,看完本书,你是绝对不会系统移植的,买那么多书当中,这本是相当坑的
嵌入式linux,熟悉底层,不错的入门参考,值得拥有!
从哪里拿来的箱底货,书皮磨损特别严重,都不如地摊货,破东西
很实用的教材,我最近在学习嵌入式linux,买来看看,感觉很不错
自学linux差不多一年了,由于没人带,一直在盲目摸索着,这本书在移植方面给了我帮助