« Web性能优化 - 好书介绍 | Main | Yasukuni Shrine - 日本“死亡文化”:靖国神社 »
May 29, 2005
基于PowerPC的嵌入式Linux - 好书介绍
在读大学的时候,我曾非常热衷于嵌入式,还在自己的机器及实验室的机器摆弄了一个仿真环境,跑起了Uclinux和另一个针对Motorola M68K的仿真环境。由于时间久远,现在都忘记是叫什么了,只记得当时艰苦奋斗了几个星期,终于让仿真器跑起来,垮平台编译成功,并将ROM“烧”(其实应该说是download到仿真环境里吧)到仿“硬件”里,看着嵌入Linux启动的信息,到最后显示的提示符,真的是激动不已!
那个小Linux系统还只能实现十多个基本的系统命令,啥也不能干,但也足够玩好久了。但最可惜的是当时一来缺钱,没钱买硬件开发板,没钱买任何实验的东西,二来没什么好的参考资料,虽然英文的一堆,但是都不系统,要自己吃力的摸索,加之嵌入这一块只是业余小小爱好,忙着做毕业的东西,后来就荒废了,甚为可惜。

前两天在书店除了看到介绍过的《Web性能优化》一书外,还无意看到一本我能让我有所注意的嵌入Linux的书--《基于PowerPC的嵌入式Linux》,由北航出版社出版的。这本书引起我注意的地方,并不是高深的技术,而是详尽而平实的内容,按步就班的讲述了一些基本原理,实验环境的建立,移植,以及方方面面的东西。并不是一般嵌入式书籍将内容一堆砌,啥也没说清楚就结束的感觉。一个比较深刻的印象就是实用,从初学者的角度来评价,就是经过模仿书本里的东西,成功率稍高。
基于PowerPC的嵌入式Linux一书简介
本书详细地介绍了如何打造一个完整的嵌入式Linux,主要内容包括: Bootloader定制、Linux内核定制、Linux Rootfs定制、Linux守护进程定制、Linux设备驱动编程、Linux编程、实时Linux扩展等。同时本书结合PowerPC芯片,介绍了PowerPC芯片的基本结构、配置引导以及开发方法。本书的特点是注重实用,每篇内容都有具体的实例供参考。读者阅读了本书后,能够快速地在嵌入式PowerPC平台上运行起嵌入式Linux操作系统,开始系统的设计和研发。本书可供PowerPC和嵌入式Linux研究、开发及应用技术人员参考,也可作为高等院校计算机专业及Linux领域的师生的教学参考书。
前言(经删节)
自1991年Linux操作系统发表以来的10年间,Linux操作系统以令人惊异的速度迅速在服务器和桌面系统中获得了成功。它已经被业界认为是未来最有前途的操作系统之一。并且,在嵌入式领域,由于Linux操作系统具有开放源代码、良好的可移植性、丰富的代码资源以及异常的健壮,使得它获得越来越多的关注。据近日Gartner Dataquest和Electronic Engineering TimesAsia联合进行的调查报告,大约有32 %的工程师选择了VxWorks,21.4 %的工程师使用Linux操作系统。在未来,大约有34 %的工程师打算使用VxWorks,而29 %的工程师打算使用Linux。PowerPC是Motorola、 IBM和Apple公司联合开发的CPU芯片,如今由于PowerPC良好的架构、优秀的性能以及稳定的兼容性,使得PowerPC在各个领域都获得了广泛的运用。Motorola公司的PowerPC处理器早已广为人知,其在全世界通信处理器市场上处于无可争议的领袖地位。迄今为止,它已经向全球350多家客户销出了1亿多只通信处理器,并赢得了5000多项设计合同,其中大部分归功于它的PowerQUICC处理器系列。Gartner Dataquest在2002年5月公布的一份报告中说,Motorola公司在通信处理器集成电路市场上的占有率排名第一,占据74.7 %的市场份额。不仅仅是在通信领域,PowerPC在服务器和桌面领域也取得了巨大的成功,IBM使用PowerPC604s组建巨型计算机(例如深蓝),Apple公司使用G3、G4组建个人多媒体电脑。
PowerPC是Linux较早支持的芯片之一,Linux对PowerPC有成熟、优秀的支持。Linux不仅已经在IBM的S390服务器及Apple公司的Macintosh个人电脑上运行多年,而且在嵌入式PowerPC芯片(Motorola和IBM公司都有嵌入式PowerPC产品)也已经有了成功的案例。虽然目前关于如何在嵌入式PowerPC平台上运行Linux的资料不少,但是都不成系统,并且非常简单。本书是一本介绍如何在嵌入式PowerPC平台上运行Linux的所有必需知识的集合,并且结合实例讲解如何使用Linux开发一个完整的产品。通过阅读本书,读者将有能力运用嵌入式PowerPC平台开发一个完整的系统。
本书的特色如果用一句话来概括本书的特色,那么这句话应该比较贴切:在PowerPC开发板上把Linux运行起来,《基于PowerPC的嵌入式Linux》是一本完全实例化的书籍,它Step by Step地指导读者在PowerPC开发板上运行Linux,并且实现一个二层交换机的开发实例。
《基于PowerPC的嵌入式Linux》的目的是让读者能够:了解PowerPC的基本结构和MPC8xx的常用知识;在PowerPC开发板上运行Linux系统;了解Linux引导的知识;了解inetd守护进程的知识,将ftpd服务器、telnetd服务器、www服务器移植到PowerPC开发板中来;了解编写Linux模块的知识;了解编写Linux 设备驱动的知识;了解如何定制一个实时Linux的知识;了解建立一个完整的嵌入式产品的知识。
作者曾经阅读过许多嵌入式系统开发的书籍,它们有许多是非常优秀的,而且很有实际参考价值。然而,由于嵌入式系统的多样性,这些作者的硬件环境和开发工具读者可能没有,大多数作者在书籍的代码和实例也不一定适合读者的需要,或者说在读者的硬件开发板上无法运行和调试。特别是当读者寻找Linux在嵌入式系统中的运用时,目前大部分相关书籍还是概念型且没有具体实例,在看完这些书籍以后,读者依然无法在其硬件开发板上运行Linux。
本书将不一样,它是一本Step by Step的实例化编程的书籍,几乎涉及了Linux所有的重要知识,并且有许多代码和实例能让读者充分了解如何从零开始,将PowerPC版本的Linux移植到自己的PowerPC开发板中去。
.......
在编写本书之前,作者以前一直很好奇: Linux是如何引导和启动的?那些神秘的/etc、/sbin和/var目录是起什么作用的?Linux的配置文件是如何组织的?网络守护进程是怎么回事?在阅读了这本书后,读者将一清二楚。
本书所有的内容都将结合实例,而且光盘中带有源代码,所以本书几乎涵盖了所有嵌入式Linux所需要了解的内容。
......
读者可以学到什么
如果读者是一位嵌入式系统的软件开发人员,或者是一位硬件开发人员,或者是一位产品管理者,正在准备关注嵌入式Linux在自己的系统中的应用,那么《基于PowerPC的嵌入式Linux》将是一本很好的开发实例的书籍。
如果读者是一位产品管理者,将可以了解:
Linux的简介,它的优缺点(当然,部分也许是作者的偏见)。
Linux在嵌入式系统中应用的优缺点。例如,在产品上市时间、产品开发的难度及系统的稳定性等方面与商业RTOS开发套件的比较。
如果读者是一位产品开发人员,将可以了解:
Motorola公司的PowerQUICC处理器;
如何创建一个PowerPC交叉编译和调试开发环境;
如何为PowerPC产品定制Linux引导程序PPCBoot;
如何定制PowerPC版本的Linux内核以适合自己的开发板;
如何创建一个小型的Root文件系统;
如何在PowerPC系统上引导Linux内核和系统;
如何定制实时嵌入式Linux内核;
如何在嵌入式Linux上编制网络设备驱动程序。
......
致谢
我的同事们张月亭、金叶、蔺杰和沙明也参加了本书的编写,在此对他们表示衷心的感谢。
作者
2003年10月
目录
第1章 目标产品和开发简介 1.1 二层交换机简介1 1.2 硬件系统简介2 1.3 软件系统简介2 1.4 嵌入式Linux系统开发简介3 1.4.1 主开发机/开发目标和交叉编译3 1.4.2 用户交互4 1.4.3 Linux Image结构布局5 1.5 开发流程6 第2章 Linux系统简介 2.1 Linux系统的特点8 2.2 什么是嵌入式系统10 2.3 Linux嵌入式系统简介和可行性分析11 2.3.1 引导内核的Bootloader12 2.3.2 Linux内核12 2.4 实时Linux系统14 2.4.1 MontaVista Linux和TimeSys Linux16 2.4.2 RTLinux16 2.4.3 RTAI17 第3章 PowerPC处理器 3.1 Motorola公司的PowerQUICC通信处理器18 3.1.1 MPC8xx19 3.1.2 MPC826021 3.2 MPC850芯片简介24 3.2.1 概述24 3.2.2 MPC850 功能列表24 3.2.3 主要模块简介27 3.3 MPC850配置和复位34 3.3.1 系统接口模块SIU34 3.3.2 系统配置和保护34 3.3.3 SIU编程35 3.3.4 复位39 3.4 存储控制器44 3.4.1 基本结构44 3.4.2 GPCM和UPM片选编程机制相同之处46 3.4.3 基地址寄存器BRx48 3.4.4 配置寄存器ORx50 3.4.5 存储器状态寄存器MSTAT52 3.4.6 控制器A/B模式寄存器MxMR53 3.4.7 存储器命令寄存器MCR54 3.4.8 存储器数据寄存器MDR55 3.4.9 存储器地址寄存器MAR56 3.4.10 存储器周期时钟预分频寄存器MPTPR56 3.5 外部中断异常57 3.5.1 中断机制58 3.5.2 中断优先级58 3.5.3 中断处理流程59 3.5.4 SIU中断登记寄存器SIPEND60 3.5.5 SIU中断掩膜寄存器SIMASK60 3.5.6 SIU中断触发形式寄存器SIEL61 3.5.7 SIU中断向量寄存器SIVEC62 3.6 MPC850通信处理器CPM62 3.6.1 功能63 3.6.2 通信处理器CP64 3.7 GE850EH开发板79 3.7.1 GE850EH开发板功能简介79 3.7.2 硬复位配置字80 3.7.3 内部寄存器起始地址81 3.7.4 GE850EH的时钟81 3.7.5 Flash ROM82 3.7.6 SDRAM83 3.7.7 BM8024 二层交换芯片84 3.7.8 以太网口84 3.7.9 UART串行口85 第4章 嵌入式Linux开发工具ELDK 4.1 ELDK简介86 4.2 安装ELDK88 4.3 删除ELDK89 4.4 配置使用ELDK89 4.5 从零开始编译ELDK90 4.6 其他交叉编译环境90 4.7 GNU 系列编译工具简介91 4.7.1 GCC91 4.7.2 ld93 4.7.3 ldd93 4.7.4 nm93 4.7.5 ar93 第5章 移植PPCBoot到GE850EH板 5.1 PPCBoot简介94 5.2 获得源代码95 5.3 解开源代码95 5.4 PPCBoot源代码简介95 5.5 配置编译PPCBoot98 5.6 移植PPCBoot到GE850EH开发板中去98 5.6.1 了解GE850EH开发板99 5.6.2 建立自己的移植目录和文件100 5.6.3 修改Makefile文件101 5.6.4 修改ppcboot/include/configs/ge850eh.h 文件101 5.6.5 修改ppcboot/board/GE850EH/config.mk 文件110 5.6.6 修改ppcboot/board/GE850EH/ge850eh.c 文件111 5.6.7 修改ppcboot/board/GE850EH/flash.c 文件115 5.6.8 修改ppcboot/include/commproc.h 文件116 5.7 编译PPCBoot117 5.8 安装、运行PPCBoot到GE850EH开发板上去117 5.8.1 使用BMD/JTAG调试工具安装PPCBoot117 5.8.2 使用已有的安装Bootloader的程序安装PPCBoot119 5.8.3 使用已在GE850EH板上运行的PPCBoot安装PPCBoot120 第6章 在GE850EH开发板上运行Linux 6.1 获得Linux内核源代码121 6.2 Linux内核简介121 6.2.1 Linux 引导121 6.2.2 RAMDISK和Initrd122 6.2.3 MTD122 6.2.4 JFFS2文件系统123 6.3 配置编译Linux内核123 6.4 将Linux内核移植到GE850EH开发板中去124 6.4.1 确认linux/Makefile文件124 6.4.2 修改/linux/arch/ppc/configs/ge850eh_defconfig文件125 6.4.3 修改/linux/arch/ppc/config.in文件133 6.4.4 增加/linux/include/asmppc/ge850eh.h 文件133 6.4.5 修改/linux/include/asmppc/processor.h文件134 6.4.6 修改/linux/include/asmppc/mpc8xx.h文件134 6.4.7 修改/linux/arch/ppc/8xx_io/commproc.h文件134 6.4.8 增加/linux/drivers/mtd/maps/ge850eh.c文件135 6.4.9 修改/linux/drivers/mtd/maps/Makefile文件136 6.4.10 修改/linux/drivers/mtd/maps/Config.in文件136 6.4.11 修改/linux/drivers/char/flash_config.c文件136 6.5 编译Linux kernel for GE850EH137 6.6 从GE850EH开发板上引导Linux内核137 6.6.1 基本的环境变量137 6.6.2 从Flash 引导Linux内核137 6.6.3 环境变量和Linux内核引导参数141 6.6.4 网络bootp引导Linux内核142 6.6.5 bootp命令143 6.6.6 bootargs引导变量144 6.6.7 bootm命令144 6.6.8 引导一个完整的Linux系统145 6.6.9 Flash中的Rootfs146 6.6.10 网络NFS的Rootfs146 第7章 Rootfs和RAMDISK 7.1 千变万化的RAMDISK150 7.1.1 一个C库150 7.1.2 一个用户交互的Shell151 7.1.3 一个工具集151 7.1.4 一个Telnet服务器151 7.1.5 一个FTP服务器151 7.2 创建不使用Busybox的RAMDISK152 7.2.1 建立RAMDISK Image文件152 7.2.2 给RAMDISK建立文件系统152 7.2.3 建立必需的Linux目录153 7.2.4 /dev目录153 7.2.5 /lib目录156 7.2.6 NSS157 7.2.7 /etc目录158 7.2.8 /bin和/sbin目录160 7.2.9 生成最后的RAMDISK Image文件161 7.2.10 减小体积161 7.3 基于glibc的Busybox161 7.3.1 获得Busybox的源代码162 7.3.2 配置Busybox162 7.3.3 编译Busybox165 7.4 创建使用Busybox和glibc的RAMDISK166 7.5 测试制作的RAMDISK167 第8章 inetd 和 telnetd、ftpd、httpd网络进程 8.1 inetd网络守护进程171 8.1.1 获得inetd的源代码172 8.1.2 给inetd源代码打patch173 8.1.3 编译inetd173 8.2 login守护进程173 8.3 telnetd守护进程174 8.4 ftpd守护进程175 8.5 boa webserver175 8.6 insmod rmmod176 8.7 安装inetd、login、insmodtelnetd、ftpd、boa webserver进程177 第9章 Linux字符设备驱动——LED驱动实例 9.1 Linux设备驱动概述180 9.2 Linux Module183 9.2.1 一个Linux Module例子(Intel 版本)183 9.2.2 PowerPC版本的Module例子185 9.2.3 Linux Module的机制185 9.2.4 Module和Application的区别186 9.3 主设备号和次设备号190 9.4 file_operations数据结构191 9.5 GE850EH开发板LED字符设备驱动(PowerPC版本)193 9.5.1 GE850EH LED硬件配置193 9.5.2 源代码分析194 9.5.3 编译LED设备驱动195 9.5.4 测试LED设备驱动196 9.5.5 GE850EH开发板LED设备驱动程序源代码197 9.5.6 LED模块Makefile文件205 9.6 I/O端口205 9.6.1 申请/释放I/O区域206 9.6.2 避免编译器优化I/O访问206 9.6.3 I/O端口大小207 9.7 优化问题207 第10章 二层交换芯片BM8024设备驱动 10.1 BM8024简介208 10.2 功能列表208 10.3 BM8024交换机制和设备驱动209 10.4 Linux网络设备驱动编程210 10.4.1 Linux网络设备驱动的结构211 10.4.2 初始化212 10.4.3 发送和接收213 10.4.4 网络接口数据结构struct net_device213 10.5 BM8024接收/发送以太网包和MPC850218 10.5.1 接收以太网包219 10.5.2 发送以太网包219 10.6 BM8024 I/O存储器220 10.6.1 ioremap()220 10.6.2 配置BRx/ORx222 10.7 BM8024中断223 10.7.1 interrupt操作223 10.7.2 BM8024中断操作224 10.7.3 BM8024中断处理函数和tasklet224 10.8 延时225 10.9 BM8024内存操作226 10.10 BM8024网络设备驱动源代码分析226 10.10.1 Module_init()函数226 10.10.2 bm8024_init()函数227 10.10.3 bm8024_open()函数228 10.10.4 bm8024_interrupt()中断处理函数229 10.10.5 bm8024_do_tasklet()函数229 10.10.6 bm8024_rx()函数230 10.10.7 bm8024_tx()函数231 10.10.8 bm8024_hw_tx()函数231 10.10.9 BM8024网络设备驱动源代码231 第11章 嵌入式Linux 编程 11.1 task queues和kernel timer版本的LED驱动程序232 11.1.1 task queue232 11.1.2 使用tq_scheduler的LED Module234 11.1.3 kernel timer239 11.1.4 使用kernel timer的 LED Module239 11.2 semaphore243 11.3 Application直接访问BM8024寄存器244 11.3.1 HAL BM8024存储器模块246 11.3.2 HAL BM8024存储器模块源代码247 11.3.3 HAL BM8024寄存器API源代码255 第12章 实时Linux扩展——RTAI 12.1 RTAI模块259 12.1.1 rtai模块259 12.1.2 rtai_sched模块259 12.1.3 rtai_shm模块260 12.1.4 rtai_fifos模块260 12.1.5 LXRT模块260 12.2 在GE850EH开发板上安装RTAI260 12.2.1 获取Linux内核源代码260 12.2.2 获取24.1.8版本的RTAI源代码261 12.2.3 给Linux内核源代码加上RTAI的patch261 12.2.4 定制此Linux内核261 12.2.5 定制及编译RTAI模块261 12.2.6 安装及测试RTAI262 12.3 RTAI版本的LED例子264 12.4 常用RTAI API函数266 附录ARTAI常用API函数 A.1 task函数(rtai_sched.o模块) 267 A.2 timer函数(rtai_sched.o模块)274 A.3 semaphore函数(rtai_sched.o模块)276 A.4 task间通信函数(rtai_sched.o模块)280 A.5 远程函数调用(RPC)函数(rtai_sched.o模块)282 A.6 mailbox函数(rtai_sched.o模块)283 A.7 rtai.o模块提供的API函数285 A.8 rtai_shm.o提供的API函数289 A.9 rtai_fifo.o提供的API函数290 附录BCVS使用简介 B.1 简介294 B.2 安装CVS服务器294 B.3 使用CVS客户端298 B.4 一些小技巧304 附录CGNU通用公共许可证(GPL) 附录D附带光盘的使用方法 D.1 内容简介311 D.2 使用方法312 参考文献
推荐几个有关嵌入式系统的网站:
Linuxdevices.com
Embedded Linux
UcLinux
Uclinux developer forum
Posted by hzqbbc at May 29, 2005 11:49 PM
Comments
我本来打算买这本书的,但是很多的内容实在很头痛最终放弃了
现在不好做linux环境所以最后还是不了了之了
Posted by: hao at June 8, 2005 03:47 PM