第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 参考文献
|