ppc82xx开发板使用说明书 -...

64
PPC82××评估板 密级 版本 总页数 PPC82xx 开发板使用说明书 文件代号 V1.0.1 文档作者: 郑刚 王建民 日期: 审核: 日期: 批准: 日期: 北京智联科信息股份有限公司 版权所有 不得复制 北京智联科信息股份有限公司 版权所有

Upload: dokhue

Post on 15-Jul-2018

266 views

Category:

Documents


0 download

TRANSCRIPT

PPC82××评估板

密级

版本

总页数

PPC82xx 开发板使用说明书

文件代号

V1.0.1

文档作者: 郑刚 王建民 日期:

审核: 日期:

批准: 日期:

北京智联科信息股份有限公司

版权所有 不得复制

北京智联科信息股份有限公司 版权所有

修订记录

日期 修订版本 描述 作者

2006-11-23 V1.0.1 增加硬件部分的详细说明 王建民

2

目 录

目 录 ................................................................................................................................................3 第一章 产 品 简 介.................................................................................................................5 第二章 快速上手指南.....................................................................................................................9

1.1 WINDOWS 环境 ...............................................................................................................9 2.2.REDHAT LINUX 环境.................................................................................................13

2.2.1 安装软件...............................................................................................................13 2.2.2 编译开发板的LINUX 内核映像文件uImgae 和ramdisk...................................13

第三章 软 件 系 统.....................................................................................................................15 3.1 使用说明..........................................................................................................................16

3.1.1 建立宿主机开发环境...........................................................................................16 3.2 内核编译..........................................................................................................................41 3.3 制作文件系统..................................................................................................................42 3.4 固化的uboot.....................................................................................................................44 3.5 嵌入式Linux的分区管理-MTD技术 ...........................................................................45

第四章 软件应用开发...................................................................................................................46 4.1 开发模式..........................................................................................................................46 4.2 如何创建编译自己的应用..............................................................................................46 4.3 加入应用程序的文件系统编译......................................................................................48 4.4 如何移植软件..................................................................................................................49 4.5 关于驱动开发..................................................................................................................49

4.5.1 用于读写硬件和绝对地址 ...................................................................................49 4.5.2 设备驱动...............................................................................................................52

第五章 硬件系统...........................................................................................................................53 5.1 硬件系统的设计特点......................................................................................................53 5.2 核心板框图......................................................................................................................54 5.3 扩展板框图......................................................................................................................55 5.4 MPC8280 系统框图 .........................................................................................................56 5.5 各部分构成......................................................................................................................56 5.6 片选...................................................................................................................................57 5.7 中断...................................................................................................................................57 5.8 GPIO .................................................................................................................................57 5.9 4 个 8 字型LED发光管 ....................................................................................................58 5.10 以太网FCC1、FCC2、FCC3 .......................................................................................59 5.11 接口管脚说明................................................................................................................59 5.12 系统工作频率的配置.....................................................................................................61

第六章 机械结构特性...................................................................................................................62 6.1 核心板..............................................................................................................................62 6.2 扩展板..............................................................................................................................62

第七章 核心板使用注意事项.......................................................................................................63 第八章 开发板使用注意事项.......................................................................................................64

3

第九章 联系我们...........................................................................................................................64

4

第一章 产 品 简 介

智联科 PPC82×× 套件是一套完整的基于摩托罗拉 MPC82×× 处理器的嵌入式开

发平台。PPC82×× 集成 PowerPC 处理器适用于那些对成本、空间、功耗和性能都有很高

要求的应用领域。该器件有较高的集成度,从而降低了系统的组成开销。高集成度的结果是

简化了电路板的设计,降低了功耗和加快了开发调试时间。这种低成本多用途的集成处理器

的设计目标是使用 PCI 接口的网络基础结构、电讯和其它嵌入式应用。它可用于路由器、

接线器、网络存储应用和图像显示系统。智联科 PPC82×× 套件由核心板和底板(外设板

或称基本板)组成,核心板上集成摩托罗拉 PPC82×× 处理器,128M 的 SDRAM 以及 8M 的 FLASH,可扩展 NAND FLASH,为用户的软件研发提供了足够的空间。底板上则提供非

常丰富的外设接口:三个 10M/100M 以太网接口、一个四线 RS-232 串口(COM1)等。核心

板和底板配合即构成一个最小的完整应用系统。系统具有体积小、耗电低、处理能力强、网

络功能强大等特点,能够装载和运行嵌入式 Linux 操作系统。用户可以在这个系统平台上

进行自主软件开发,并对 PPC82×× 进行测试和评估,也可在保持核心板不变的情况下,

针对具体的应用通过对底板的更改来实现定制自己的应用系统。PPC82×× 套件中提供底

板硬件电路图及硬件设计文档,极大的方便了用户进行硬件扩展开发。智联科 PPC82×× 套件提供完备的嵌入式 LINUX 开发环境及丰富的开发调测工具软件。

对于 PPC82××系列处理器,PPC8260/8270/8280 管脚具有兼容性,功能也大致相同,

本开发套件目前主要使用 PPC8270 处理器,该处理器具有以下特点: 603e core with 16K inst and 16K data caches 64-bit 60x bus, 32-bit PCI bus 128K ROM, 32K IRAM, 32K DPRAM Three FCCs for 10/100 Ethernet 128 HDLC channels, 4 TDMs 4 SCCs, 2 SMCs, SPI, I2C Memory controller built from SDRAM, UPM, GPCM machines New features -- USB, RMII Performance

333 MHz CPU, 250 MHz CPM, 83 MHz bus 450 MHz CPU, 300 MHz CPM, 100 MHz bus Less than 2W @ full performance, 1.5V

Technology HIP7AP, 3.3V I/O, 1.5V Core 480 TBGA, 37.5x37.5mm, 1.27mm ball pitch

总的来说,智联科 PPC82xx 套件的主要特点如下: 系统采用核心板+扩展板的方式。很适合您做您自己的系统 同时备有 ATX 和圆孔双脚电源输入,可以根据自己的需要连接系统。 核心板单电源输入,简化您的设计 核心系统高度集成,系统资源允许客户灵活配置。

5

开发套件详细配置如下: CPU MPC8270

SDRAM K4S561632 x4(128Mbyte)

BOOT FLASH AM29LV640(8MByte)

Nand FLASH 兼容三星的 K9F 系列的 FLASH

CPU JTAG 口 核心板集成

串口 3 个 SMC1、SMC2、SCC1

(SMC1 扩展板和核心板都有输出接

口) 以太网口 3 个 FCC1、FCC2、FCC3

可编程发光二极管 6 个

可编程发光数码二极管 1 个

系统外部中断输入 4 个

外部系统复位输入 1 个

外部实时时钟 系统掉电,时钟不丢失

核心板电源 单一 5V 电源

开发系统电源 外部 5V/3A 输入或者 ATX 电源

(注意:这两个电源不能同时插入使用)

BOOTLOADER U-BOOT

操作系统 Motavista Linux 2.4.18

DENX Linux 2.4.18

开发工具 全套的设计开发工具,包括开发主机

的操作系统安装盘 驱动软件 提供所有接口的驱动程序源代码

核心板尺寸 123mm x 86mm

扩展板尺寸 178mm x 134mm 具体附件:

MPC8270 扩展板一块 MPC8270 核心板一块 DB9 串口连接线 5V/3A 系统直流电源变压器一个 系统开发资料光盘 1 张(内含板子的详细设计开发操作说明)

开发套件外观图片如下:

6

核心板图片如下:

附件图片如下:

7

赠送附件:

嵌入式开发资料光盘 4 张 (内有本公司多年积攒的多种嵌入式资料,源代码,原

理图以及 PCB 图) RedHat Linux90 操作系统安装光盘 3 张

软件支持: bootloader for MPC8270 的源代码 linux 的操作系统源代码,内含板子的各种驱动源代码 各种测试程序源代码 有关的基于 Linux 开发的文档 核心板的 pdf 版本以及 ProtelDXP2004 版本的原理图,以及原理图,PCB 的库 扩展板的 pdf 版本以及 ProtelDXP2004 版本的原理图,原理图库文件,PCB 图库

文件,PCB 图 套件简单检测: 用户拿到套件后,打开包装,用串口线将串口 1 与一台 WINDOWS PC 机的串口 1 连

接起来 ,在“开始”->“程序”->“附件”->“通讯”中打开超级终端,选择 COM1,波特率 9600,无硬件流控。然后将 5V 直流电源接到板子上,这时在超级终端便可看到板

子上 uboot 的引导信息及嵌入的 Linux 操作系统的启动信息打印出来,并最终进入提示符

状态。这是检测套件软硬件工作是否正常的最为简捷的方法。若套件工作不正常,请立即与

智联科公司联系:010-62233778 或 13683665548 或者 13811399616,智联科公司将立即给您

更换产品。 【注意】串口线不能带电拔插!

8

第二章 快速上手指南

在本章中您可以对开发板有个初步的认识,了解一些基本的功能。本节介绍到的开发板

接口可参考第一章中开发板接口图片。

1.1 WINDOWS 环境

在WIN98/2000/XP 中都有一个超级终端的应用程序。如果您的系统为WIN98 没有安装超

级终端,可以到控制面板添加/删除程序中安装。我们在WIN2000 环境下介绍超级终端。打

开开始/程序/附件/通讯/超级终端。

进入超级终端,

输入连接的名称,您可以输入名称为 MPC8250 即可按确定进入下一步,

9

设置串口每秒位数 9600,数据位 8,奇偶校验无,停止位 1,数据流控无。确定进入超

级终端。下一步将板子的串口 1 用我们提供串口线与 PC 机的串口 1 接上。接通板子的电

源。在超级终端中会打印出板子的启动信息,看到 LINUX 的命令提示符。

10

看到“login”提示符后(图片中“eth0:status…”为以太网连接提示语句,为正常打

印信息),键入“root”用户登陆,缺省密码为空,在命令提示符下键入 ls(回车),可以看

到板子的配置文件目录(比如设备,常用 LINUX 命令等)。

使用“ifconfig”命令可以查看板卡当前网络配置,ppc82××开发板提供了三个网口供

用户使用,分别为 eth0(FCC0)、eth1(FCC1)、eth2(FCC2),用户可以使用“ifconfig eth× IPADDR”对网口进行配置,配置过程如下:

root@(none):/# ifconfig eth0192.168.0.107 root@(none):/# ifconfig eth1 192.168.1.107

11

root@(none):/# ifconfig eth2 192.168.2.107 注意,应将不同的网口配置在不同的网段上,否则系统无法判断当前使用那个网口进行

网络通信,或者默认使用某一个网口。用户主机和板卡网络连接如下图所示:

用户也可以使用交叉网线直接连接 PC 主机和板卡。 根据用户连接板卡的某个网口 IP 地址配置,将 PC 主机的 IP 地址设置为与对应板卡网

口 IP 地址为一个网段的 IP 地址后,用户可以使用“ping”命令测试网络连接情况,如设置

板子的 eth1 网口 IP 地址为 192.168.1.107。将 PC 机的 IP 地址设为同一个网段地址

192.168.1.103。在超级终端中键入命令: ping 192.168.1.103 ping 通后结果如图所示:

看到上面所示的信息,表明网络是畅通的,否则请检查网络连接情况。 网络连通后,用户可以使用“telnet”命令从 PC 主机远程登陆板卡系统,进行操作。

12

2.2.REDHAT LINUX 环境

2.2.1 安装软件

进入 PC 的 REDHAT LINUX 操作系统将我们附带的光盘插入 CDROM,然后执行以下

命令: mount /dev/cdrom /mnt/cdrom cd /mnt/cdrom 进入 CDROM 所在目录,执行安装程序: ./inst 敲入 y,回车。

2.2.2 编译开发板的 LINUX 内核映像文件 uImgae 和

ramdisk

安装完提供的光盘后,进入 LINUX 内核目录,编译内核映像文件 uImage,键入如下

命令: cd /PPC8270/usr/src/linux make uImage 编译完成后显示编译信息。 如果第一次编译,先键入如下命令 make dep 后再编译。 生成的 LINUX 内核映像文件 uImage 自动拷贝到/tftpbootboot 目录下,用 date 命令查

看当前时间,ls 命令查看 uImage 的文件信息。比较当前时间和文件生成时间确定是否为最

新生成的内核映像文件。依次键入: date ls -la /tftpbootboot/uImage 编 ramdisk 文件,先解压缩/PPC8270/usr/src/ramdisk/ramdisk.image.gz 文件(建议先做

一个备份), cd /PPC8270/usr/src/ramdisk tar zxf ramdisk.image.gz 再把 ramdisk.image 文件 mount 到 test 文件夹中: mkdir test(如果没有 test 文件夹就先建立一个) mount –o loop ramdisk.image test 然后把程序放到 test 中 bin 文件夹,如把编译好的程序 hello 放到 bin 文件夹中: cp /PPC8270/usr/src/application/hello/hello /PPC8270/usr/src/ramdisk/test/bin 再把 test 目录 umount: umount test 执行./image.sh 会自动生成 ramdisk.img 并拷贝到/tftpbootboot 目录下,请按照上面说明

的方法确认/tftpbootboot 目录下生成的 ramdisk.img 为最新的镜像文件。 当生成 uImage 和 ramdisk 镜像文件后可以从 uboot 下到板卡 sdram 中,使用 ram 启动

13

的方式测试你新系统。由于以上都是测试性质,建议你保存好原始版本,并且在以下测试不

要烧写到 flash。而且如果你没有打开 tftpboot 服务,请先看后面对 tftpboot 服务的设置。 先在一个登录界面上启动 minicom (设置串口速率为 9600,8N1,硬件流控关闭)在

minicom 下进到 uboot (由于 uboot 设置进入 uboot 后在启动 flash 中的 Linux 系统和文件

系统时会有 3 秒钟倒计时等待,可键入任何按键,中断启动过程,进入 uboot),可以通过

tftpboot 800000 uImage 命令下载/tftpboot/uImage 到内存地址 800000,通过 tftpboot a00000 ramdisk.img 命令下载/tftpboot/ramdisk.img 到 a00000。如果你在调试程序时,可以不用烧写

进 flash,直接从 ram 启动,启动 Linux 用 bootm 800000 a00000 命令启动(前一地址为内核

镜像地址,后一地址为文件系统镜像地址)。 在调试确认后,可以将文件系统和内核镜像文件烧写入 flash 中,具体命令如下: tftpboot 800000 uImage erase 0xfff40000 0xffffffff cp.b 0x800000 0xfff400000 SIZE tftpboot a00000 uImage erase 0xff810000 0xffcfffff cp.b 0x800000 0xff810000 SIZE 其中 SIZE 为内核镜像文件大小,在下载后 uboot 会以十六进制形式打印出该文件的大

小,可在 tftpboot 命令结束后记录该数值。 可以使用 printenv/setenv/saveenv 命令修改 uboot 的环境参量,具体命令使用方法可以参

考光盘 doc 目录中的《DENX PPCBoot and Linux Guide》。 快速入门指南向您介绍了开发板的最基本的使用方法。对您的开发和应用都是很有帮助

的。在后面的章节中,我们详细的向您介绍了使用和开发的具体方法

14

第三章 软 件 系 统

智联科 PPC82××开发板为一台采用 MOTOROLA PPC8270 处理器、提供以太网接口、

RS232 接口、安装有 LINUX 操作系统的开发系统,其功用相当于一台装有 REDHAT LINUX,装有网卡和串口的 PC 机。

对于智联科PPC8270,它提供的所有软件(操作系统和应用软件)都固化在板上两片

FLASH 内,就相当于PC 机的硬盘。FLASH 上的内容可通过烧写工具来更新升级。用户

可为开发应用程序或更改其上的操作系统工作方式(因为操作系统是开放源代码的),和在

PC 上开发应用唯一的不同之处在于它要采用一种交叉编译的开发模式,即为智联科

PPC8270 开发应用,不能直接在智联科PPC8270 板子上编辑、编译和调试,而必须把这些

工作寄宿到另一台PC 机上去完成。详细介绍请参见后面章节。

随着微处理器的产生,价格低廉、结构小巧的CPU 和外设连接提供了稳定可靠的硬件

架构,那么限制嵌入式系统发展的瓶颈就突出表现在了软件方面。尽管从八十年代末开始,

陆续出现了一些嵌入式操作系统,比较著名的有Vxwork、pSOS、Neculeus 和Windows CE。但这些专用操作系统都是商业化产品,其高昂的价格使许多低端产品的小公司望而却步;而

且,源代码封闭性也大大限制了开发者的积极性。另外,结合国内实情,当前国家对自主操

作系统的大力支持,也为源码开放的LINUX 的推广提供的广阔的发展前景。还有,对上层

应用开发者而言,嵌入式系统需要的是一套高度简练、界面友善、质量可靠、应用广泛、易

开发、多任务,并且价格低廉的操作系统。在不久的将来,从冰箱到收音机都会内置处理器。

因为Linux 的开放性,许多人认为Linux 非常适合多数Internet 设备。他们认为Linux 可以

支持不同的设备,支持不同的配置。Linux 对厂商不偏不倚而且成本极低,能够很快成为用

于各种设备的操作系统。如今,业界已经达成共识:即嵌入式Linux 是大势所趋,其巨大的

市场潜力与酝酿的无限商机必然会吸引众多的厂商进入这一领域。嵌入式操作系统主要有

Palm OS,Windows CE,EPOC,LinuxCE,QNX,ECOS,LYNX,高端嵌入式系统要求许多高级

的功能,如图形用户界面和网络支持。很多高端RTOS 供应商已经提供了这些功能,但其价

格也很高端,一般人难以接受。微软的Windows CE 也有此类功能,却不具备大多数嵌入式

系统要求的实时性能,而且难以移植,也曾经有人想以DOS 为基础用单独的第三方工具拼凑

一个系统,但这种努力将是白费。现在需要的是一个便宜、成熟并且提供高端嵌入式系统所

15

必须特性的操作系统,嵌入式Linux 操作系统以价格低廉、功能强大又易于移植而正在被广

泛采用,成为新兴的力量,所以,众多商家纷纷转向了嵌入式LINUX。LINUX 为嵌入操作系

统提供了一个极有吸引力的选择,它是个和Unix相似、以核心为基础的、完全内存保护、多

任务多进程的操作系统。支持广泛的计算机硬件,包括MOTOROLA,X86,Alpha,Sparc,MIPS,

PPC,ARM,NEC 等现有的大部分芯片。软件源码全部公开,任何人可以修改并在GNU 通用公

共许可证(GNU General Public License)下发行,这样,开发人员可以对操作系统进行定制,

再也不必担心像MS WINDOWS 操作系统中“后门”的威胁。同时由于有GPL 的控制,大家开发

的东西大都相互兼容,不会走向分裂之路。Linux 用户遇到问题时可以通过Internet 向网

上成千上万的Linux 开发者请教,这使最困难的问题也有办法解决。Linux带有Unix 用户熟

悉的完善的开发工具,几乎所有的Unix 系统的应用软件都已移植到了Linux 上。Linux 还

提供了强大的网络功能,有多种可选择窗口管理器(X windows)。其强大的语言编译器gcc、

g++等也可以很容易得到。不但成熟完善、而且使用方便。

嵌入式系统选择 linux 的原因: 可应用于多种硬件平台。Linux 已经被移植到多种硬件平台,这对受开销、时间

限制的研究与开发项目是很有吸引力的。原型可以在标准平台上开发然后移植到

具体的硬件上,加快了软件与硬件的开发过程。 Linux 可以随意地配置不需要任何的许可证或商家的合作关系。唯一的限制是开

发者必须做出对 Linux 社区有益的改动。 它是免费的,源代码可以得到。这是最吸引人的。毫无疑问,这会节省大量的开

发费用。 内核直接提供网络支持,而不必象其他操作系统要外挂 TCP/IP 协议包 Linux 的

高度模块化使添加部件非常容易。 Linux 在台式机上的成功,也保证了 Linux 在嵌入式系统中的辉煌前景。

Linux 是一种很受欢迎的操作系统,它与 UNIX 系统兼容,开放源代码。它原本被设

计为桌面系统,现在广泛应用于服务器领域。而更大的影响在于它正逐渐的应用于嵌入式系

统领域。 LINUX 是一个自由开放的世界,在 LINUX(无论 PC 还是嵌入式系统)上进行软件开

发都可以在广袤的网络资源中获取帮助。下面是 linux forPOWERPC 开发常用的两个资源站

点: www.PPC8270.org ;lists.PPC8270.org.

3.1 使用说明

3.1.1 建立宿主机开发环境

绝大多数的 Linux 软件开发都是以 native 方式进行的, 即本机(HOST)开发、调试,

本机运行的方式。这种方式通常不适合于嵌入式系统的软件开发,因为对于嵌入式系统的开

发,没有足够的资源在本机(即板子上系统)运行开发工具和调试工具。通常的嵌入式系统

的软件开发采用一种交叉编译调试的方式。交叉编译调试环境建立在宿主机(即一台 PC 机)

上,对应的开发板叫做目标板。通常情况下,我们还需要一个调试器用于跟踪调试板卡运行

情况或者烧写板卡启动代码,整个调试环境如图所示:

16

主机系统中的网卡 1 和目标系统直接相连,用于内核镜像的下载,NFS 的共享等操作, 串口连接用于接收目标系统的调试打印信息和向目标系统发送命令。在这里,我的主机系统 的网卡 2 连接到了一个 JTAG 调试器,然后再通过 JTAG 接口连接到了目标系统。JTAG 调试器建议采用了瑞士 Abatron 公司的 BDI2000,该调试器可以进行源码级调试,也可以进

行汇编代码调试,同时该调试器也支持 FLASH 的在线编程。 如果主机只有一块网卡,同样可以实现上面描述的试验环境。 开发时使用宿主机上的交叉编译、汇编及连接工具形成可执行的二进制代码,(这种可

执行代码并不能在宿主机上执行,而只能在目标板上执行。)然后把可执行文件下载到目标

机上运行。调试时的方法很多,可以使用串口,以太网口等,具体使用哪种调试方法可以根

据目标机处理器所提供的支持作出选择。宿主机和目标板的处理器一般都不相同,宿主机为

INTEL 处理器, 而目标板如智联科 PPC8270 为 MOTOROLA PowerPC 8270,GNU 编译

器提供这样的功能,在编译编译器时可以选择开发所需的宿主机和目标机从而建立开发环

境。所以在进行嵌入式开发前第一步的工作就是要安装一台装有指定操作系统的 PC 机作宿

主开发机,对于嵌入式 LINUX,宿主机上的操作系统一般要求为 REDHAT LINUX,在此,

推荐使用 REDHAT 9.0 作为本套开发系统的宿主机 PC 操作系统。嵌入式开发通常要求宿

主机配置有网络,支持 NFS(为交叉开发时 mount 所用),支持 FTP 服务器(供板卡下载

程序),支持 TFTP 服务器(为下载烧写所用)等等。然后要在宿主机上建立交叉编译调试

的开发环境。环境的建立需要许多的软件模块协同工作,这将是一个比较繁杂的工作,但现

在已完全由套件中光盘的安装而自动完成了,整个安装过程如下。 安装 RedHat9.0 系统: 下面逐步介绍常用的安装步骤: l 在一台 PC 上安装 LINUX,建议 RedHat9.0。建议选择 Custom 定制安装,在选择软

件 Package 时选择最后一项:everything,即完全安装。 注意:在安装过程中,安装程序会提示用户设置 Linux 防火墙,为了防止 Linux 限制登

陆和访问的用户,建议将关闭 Linux 防火墙(设置为 No firewall)。 2 配置好网络,TFTP 服务和 FTP(Enable Running)。网络配置主要是要安装好以太网

卡,对于一般常见的 RTL8139 网卡,REDHAT9.0 可以自动识别并自动安装好,完全不要

用户参与,因此建议使用该网卡。然后配置宿主机 IP: ifconfig eth0 192.168.1.107 建立 TFTP 服务器: 在 RedHat9.0 完全安装模式下,编辑“/etc/xinetd.d/tftp”文件,将 disable 项设置为 no,如下:

17

service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /tftpboot disable = no per_source = 11 cps = 100 2 flags = IPv4 }

按照同样的方法,可以编辑“/etc/xinetd.d/telnet”或者“/etc/xinetd.d/rsh”文件,打开服

务器的远程登陆服务,便于在独自主机上远程登陆服务器进行操作。 以超级用户在终端上运行 setup,在[system service]里面钩上 tftp,然后重起 xinetd 服务:

/etc/init.d/xinet.d restart 或 service xinet.d restart

即可。注意,根目录下面必须要有 tftpboot 这个目录,如果没有可以手动建一个。 建立 FTP 服务器: 在 RedHat9.0 完全安装模式下,编辑“/etc/vsftpd.ftpusers 和 /etc/vsftpd.user_list”文件,

将最后一行的“nobody”删除,以“/etc/vsftpd.ftpusers”为例,如下: # Users that are not allowed to login via ftp root bin daemon adm lp sync shutdown halt mail news uucp operator games 以 root 身份运行: service vsftpd restart

建立交叉编译环境: 将附带的光盘插入 CDROM,然后执行以下命令:

mount /dev/cdrom /mnt 若系统不识别/dev/cdrom 的话,可以用如下命令,假设 CDROM 为从盘,即为/dev/hdb,

则: mount –t iso9660 /dev/hdb /mnt

18

cd /mnt 进入 mount 后的目录, ./inst 执行安装程序,敲入 y,回车。

注意:用户只需按下 y 回车即可完成全部安装。执行完毕后,会在根目录下生成工作

目录:/PPC8270 /PPC8270/usr/src/ramdisk:ramdisk 代码; /PPC8270/usr/src/application/:应用程序源代码; /PPC8270/usr/src/tarballs/:工具、编译器、库函数和 LINUX /PPC8270/usr/src/ linux-2.4.20_mvl31:LINUX 内核源代码; /opt/:LINUX 内核编译及转换工具。 /PPC8270/usr/src/ u-boot-1.1.1:uboot 代码

PPC8270 板子启动后的目录结构: root@(none):/# ls bin dev home lost+found myapp proc sbin usr boot etc lib mnt opt root tmp var 它完全与/PPC8270/usr/src/ramdisk 目录中的 root.ext2 映射后的映像文件中的内容一致。

(详细内容在后续章节关于加入应用程序的内核编译中介绍)。其中/bin/目录用于存放可执

行程序。/dev/是存放所有设备文件的目录。 【注意】

进入 uboot 后会倒计时 3 秒供用户选择是否直接启动 Linux,键入任意键后就不启动

Linux 而直接在 uboot 下,不键入任何键,就直接启动 Linux。 这个时候,重新登陆,使该配置文件生效,开发编译环境的设置就完成了。 编译 一个文件测试一下: ppc_82xx-gcc -o hello_world hello_world.c 如编译没有问题,我们用 file 命令看一下 hello_world 文件的类型: hello_world: ELF 32-bit MSB executable, PowerPC or cisco 4500, version 1 (SYSV),for GNU/Linux 2.2.5, dynamically linked (uses shared libs), not stripped 的确生成了 PowerPC 上可以运行的目标文件, 目前为止,用于 linux 移植的开发编译环境已经完全做好了。 建立调试环境: PPC82××系列处理器可采用 JTAG 口进行调试,JTAG 调试器建议采用了瑞士 Abatron 公司的 BDI2000,该调试器可以进行源码级调试,也可以进行汇编代码调试,同时该调试器

也支持 FLASH 的在线编程。关于该调试器信息在此不做过多讲述,下面给出 BDI2000 的配置文件 8270.cfg: ; bdiGDB Configuration File For NPW755 (MPC755 + MPC8250) System ; Shen Rong <[email protected]> ; [INIT] ; init core register WREG MSR 0x00003002 ;MSR -- ME, RI,FP ;WREG MSR 0x00001002 ;MSR -- FP, RI

19

; ; Chip select ; ; FLASH (16bit 8MB) WM32 0x00010100 0xFF801001 ;BR0 WM32 0x00010104 0xFF800Cf6 ;OR0 WM32 0x00010004 0xFFFFFF03 ;SYPCR WM32 0x00010024 0x00008000 ;BCR WM32 0x00010000 0x4224C000 ;SIUMCR WM16 0x0001000E 0x556C ;SWSR WM16 0x0001000E 0xAA39 ;SWSR >> should be confirmed WM32 0x000101a8 0xF0000000 ;change immr WM32 0xF0010110 0x00000041 ;BR2 WM32 0xF0010114 0xF8002AC0 ;OR2 ; SDRAM init(SDRAM machine) ; WM16 0xF0010184 0x2000 ;MPTPR WM8 0xF001019C 0x32 ;PSRT WM32 0xF0010190 0x832DA46E ;PSDMR1 -- normal opt, disable refresh WM32 0xF0010190 0xAB2DA46E ;PSDMR2 -- precharge WM8 0x00000000 0xFF ;MEM1 -- a write following the precharge WM32 0xF0010190 0x8B2DA46E ;PSDMR3 -- CBR refresh WM8 0x00000000 0xFF ;MEM2 WM8 0x00000001 0xFF ;MEM3 WM8 0x00000002 0xFF ;MEM4 WM8 0x00000003 0xFF ;MEM5 WM8 0x00000004 0xFF ;MEM6 WM8 0x00000005 0xFF ;MEM7 WM8 0x00000006 0xFF ;MEM8 WM8 0x00000007 0xFF ;MEM9 WM32 0xF0010190 0x9B2DA46E ;PSDMR4 -- mode register write WM8 0x00000110 0xFF ;MEM10 -- mode value WM32 0xF0010190 0xDB2DA46E ;PSDMR5 -- enable auto refresh WM32 0xF0010190 0xC32DA46E ;PSDMR6 -- normal opt, auto refresh enabled ; SDRAM init end ;

20

WM32 0x0 0x11223344 WM32 0x4 0x55667788 [TARGET] CPUTYPE 8260 ;the CPU type (603EV,750,8240,8260) JTAGCLOCK 0 ;use 16 MHz JTAG clock ;WORKSPACE 0x800000 ;workspace for fast download and cache flush BDIMODE AGENT ;the BDI working mode (LOADONLY | AGENT | GATEWAY) BREAKMODE SOFT ;SOFT or HARD, HARD uses PPC hardware breakpoint ;MMU XLAT ;translate effective to physical address ;PTBASE 0x000000f0 ;here is the pointer to the page table pointers ;DCACHE FLUSH ;VECTOR CATCH ;catch unhandled exceptions ;MEMDELAY 2000 ;additional memory access delay ;PARITY ON ;enable data parity generation POWERUP 200 WAKEUP 200 [HOST] IP 192.168.2.100 FILE E:\bdi2000\powerpc\ppcboot.bin FORMAT BIN LOAD MANUAL ;load code MANUAL or AUTO after reset DEBUGPORT 2001 [FLASH] CHIPTYPE AM29BX16 ;Flash type AMD29LV640 CHIPSIZE 0x800000 ;The size of one flash chip in bytes: 8M(e.g. AM29F010 = 0x20000) BUSWIDTH 16 ;The width of the flash memory bus in bits (8 | 16 | 32 | 64) FILE 8250_head.bin FORMAT BIN 0xFFE00000 ;ERASE 0XFE000000 BLOCK ERASE 0XFFE00000 BLOCK WORKSPACE 0x800000 ;workspace in target RAM for fast download [REGS] DMM1 0x00000000 FILE reg8260.def

21

其中,reg8260.def 为 PPC82××系列的寄存器定义文件,其内容如下: ;Register definition for MPC8260 ;=============================== ; ; name: user defined name of the register ; type: the type of the register ; GPR general purpose register ; SPR special purpose register ; MM memory mapped register ; DMMx direct memory mapped register with offset ; x = 1..4 ; the base is defined in the configuration file ; e.g. DMM1 0x02200000 ; addr: the number, adddress or offset of the register ; size the size of the register (8,16 or 32) ; ;name type addr size ;------------------------------------------- ; sp GPR 1 ; xer SPR 1 lr SPR 8 ctr SPR 9 dsisr SPR 18 dar SPR 19 dec SPR 22 sdr1 SPR 25 srr0 SPR 26 srr1 SPR 27 ; tbl SPR 268 tbu SPR 269 sprg0 SPR 272 sprg1 SPR 273 sprg2 SPR 274 sprg3 SPR 275 ear SPR 282 pvr SPR 287 ; ibat0u SPR 528 ibat0l SPR 529 ibat1u SPR 530 ibat1l SPR 531

22

ibat2u SPR 532 ibat2l SPR 533 ibat3u SPR 534 ibat3l SPR 535 ; dbat0u SPR 536 dbat0l SPR 537 dbat1u SPR 538 dbat1l SPR 539 dbat2u SPR 540 dbat2l SPR 541 dbat3u SPR 542 dbat3l SPR 543 ; dmiss SPR 976 dcmp SPR 977 imiss SPR 980 icmp SPR 981 rpa SPR 982 ; hid0 SPR 1008 hid1 SPR 1009 hid2 SPR 1011 ; ; ; DMM1 must be set to the internal memory base address ; ; General SIU siumcr DMM1 0x10000 32 sypcr DMM1 0x10004 32 swsr DMM1 0x1000e 16 bcr DMM1 0x10024 32 ppc_acr DMM1 0x10028 8 ppc_alrh DMM1 0x1002c 32 ppc_alrl DMM1 0x10030 32 lcl_acr DMM1 0x10034 8 lcl_alrh DMM1 0x10038 32 lcl_alrl DMM1 0x1003c 32 tescr1 DMM1 0x10040 32 l_tescr1 DMM1 0x10048 32 l_tescr2 DMM1 0x1004c 32 pdtea DMM1 0x10050 32 pdtem DMM1 0x10054 ; bdiGDB Configuration File For NPW755 (MPC755 + MPC8250) System

23

; Shen Rong <[email protected]> ; [INIT] ; init core register WREG MSR 0x00003002 ;MSR -- ME, RI,FP ;WREG MSR 0x00001002 ;MSR -- FP, RI ; ; Chip select ; ; FLASH (16bit 8MB) WM32 0x00010100 0xFF801001 ;BR0 WM32 0x00010104 0xFF800Cf6 ;OR0 WM32 0x00010004 0xFFFFFF03 ;SYPCR WM32 0x00010024 0x00008000 ;BCR WM32 0x00010000 0x4224C000 ;SIUMCR WM16 0x0001000E 0x556C ;SWSR WM16 0x0001000E 0xAA39 ;SWSR >> should be confirmed WM32 0x000101a8 0xF0000000 ;change immr WM32 0xF0010110 0x00000041 ;BR2 WM32 0xF0010114 0xF8002AC0 ;OR2 ; ; SDRAM init(SDRAM machine) ; WM16 0xF0010184 0x2000 ;MPTPR WM8 0xF001019C 0x32 ;PSRT WM32 0xF0010190 0x832DA46E ;PSDMR1 -- normal opt, disable refresh WM32 0xF0010190 0xAB2DA46E ;PSDMR2 -- precharge WM8 0x00000000 0xFF ;MEM1 -- a write following the precharge WM32 0xF0010190 0x8B2DA46E ;PSDMR3 -- CBR refresh WM8 0x00000000 0xFF ;MEM2 WM8 0x00000001 0xFF ;MEM3 WM8 0x00000002 0xFF ;MEM4 WM8 0x00000003 0xFF ;MEM5 WM8 0x00000004 0xFF ;MEM6 WM8 0x00000005 0xFF ;MEM7

24

WM8 0x00000006 0xFF ;MEM8 WM8 0x00000007 0xFF ;MEM9 WM32 0xF0010190 0x9B2DA46E ;PSDMR4 -- mode register write WM8 0x00000110 0xFF ;MEM10 -- mode value WM32 0xF0010190 0xDB2DA46E ;PSDMR5 -- enable auto refresh WM32 0xF0010190 0xC32DA46E ;PSDMR6 -- normal opt, auto refresh enabled ; SDRAM init end ; WM32 0x0 0x11223344 WM32 0x4 0x55667788 [TARGET] CPUTYPE 8260 ;the CPU type (603EV,750,8240,8260) JTAGCLOCK 0 ;use 16 MHz JTAG clock ;WORKSPACE 0x800000 ;workspace for fast download and cache flush BDIMODE AGENT ;the BDI working mode (LOADONLY | AGENT | GATEWAY) BREAKMODE SOFT ;SOFT or HARD, HARD uses PPC hardware breakpoint ;MMU XLAT ;translate effective to physical address ;PTBASE 0x000000f0 ;here is the pointer to the page table pointers ;DCACHE FLUSH ;VECTOR CATCH ;catch unhandled exceptions ;MEMDELAY 2000 ;additional memory access delay ;PARITY ON ;enable data parity generation POWERUP 200 WAKEUP 200 [HOST] IP 192.168.2.100 FILE E:\bdi2000\powerpc\ppcboot.bin FORMAT BIN LOAD MANUAL ;load code MANUAL or AUTO after reset DEBUGPORT 2001 [FLASH] CHIPTYPE AM29BX16 ;Flash type AMD29LV640 CHIPSIZE 0x800000 ;The size of one flash chip in bytes: 8M(e.g. AM29F010 = 0x20000) BUSWIDTH 16 ;The width of the flash memory bus in bits (8 | 16 | 32 | 64)

25

FILE 8250_head.bin FORMAT BIN 0xFFE00000 ;ERASE 0XFE000000 BLOCK ERASE 0XFFE00000 BLOCK WORKSPACE 0x800000 ;workspace in target RAM for fast download [REGS] DMM1 0x00000000 FILE reg8260.def8 ldtea DMM1 0x10058 32 ldtem DMM1 0x1005c 8 ; ; Memory Controller br0 DMM1 0x10100 32 or0 DMM1 0x10104 32 br1 DMM1 0x10108 32 or1 DMM1 0x1010c 32 br2 DMM1 0x10110 32 or2 DMM1 0x10114 32 br3 DMM1 0x10118 32 or3 DMM1 0x1011c 32 br4 DMM1 0x10120 32 or4 DMM1 0x10124 32 br5 DMM1 0x10128 32 or5 DMM1 0x1012c 32 br6 DMM1 0x10130 32 or6 DMM1 0x10134 32 br7 DMM1 0x10138 32 or7 DMM1 0x1013c 32 br8 DMM1 0x10140 32 or8 DMM1 0x10144 32 br9 DMM1 0x10148 32 or9 DMM1 0x1014c 32 br10 DMM1 0x10150 32 or10 DMM1 0x10154 32 br11 DMM1 0x10158 32 or11 DMM1 0x1015c 32 mar DMM1 0x10168 32 mamr DMM1 0x10170 32 mbmr DMM1 0x10174 32 mcmr DMM1 0x10178 32 mptpr DMM1 0x10184 16 mdr DMM1 0x10188 32

26

psdmr DMM1 0x10190 32 lsdmr DMM1 0x10194 ; bdiGDB Configuration File For NPW755 (MPC755 + MPC8250) System ; Shen Rong <[email protected]> ; [INIT] ; init core register WREG MSR 0x00003002 ;MSR -- ME, RI,FP ;WREG MSR 0x00001002 ;MSR -- FP, RI ; ; Chip select ; ; FLASH (16bit 8MB) WM32 0x00010100 0xFF801001 ;BR0 WM32 0x00010104 0xFF800Cf6 ;OR0 WM32 0x00010004 0xFFFFFF03 ;SYPCR WM32 0x00010024 0x00008000 ;BCR WM32 0x00010000 0x4224C000 ;SIUMCR WM16 0x0001000E 0x556C ;SWSR WM16 0x0001000E 0xAA39 ;SWSR >> should be confirmed WM32 0x000101a8 0xF0000000 ;change immr WM32 0xF0010110 0x00000041 ;BR2 WM32 0xF0010114 0xF8002AC0 ;OR2 ; ; SDRAM init(SDRAM machine) ; WM16 0xF0010184 0x2000 ;MPTPR WM8 0xF001019C 0x32 ;PSRT WM32 0xF0010190 0x832DA46E ;PSDMR1 -- normal opt, disable refresh WM32 0xF0010190 0xAB2DA46E ;PSDMR2 -- precharge WM8 0x00000000 0xFF ;MEM1 -- a write following the precharge WM32 0xF0010190 0x8B2DA46E ;PSDMR3 -- CBR refresh WM8 0x00000000 0xFF ;MEM2 WM8 0x00000001 0xFF ;MEM3 WM8 0x00000002 0xFF ;MEM4

27

WM8 0x00000003 0xFF ;MEM5 WM8 0x00000004 0xFF ;MEM6 WM8 0x00000005 0xFF ;MEM7 WM8 0x00000006 0xFF ;MEM8 WM8 0x00000007 0xFF ;MEM9 WM32 0xF0010190 0x9B2DA46E ;PSDMR4 -- mode register write WM8 0x00000110 0xFF ;MEM10 -- mode value WM32 0xF0010190 0xDB2DA46E ;PSDMR5 -- enable auto refresh WM32 0xF0010190 0xC32DA46E ;PSDMR6 -- normal opt, auto refresh enabled ; SDRAM init end ; WM32 0x0 0x11223344 WM32 0x4 0x55667788 [TARGET] CPUTYPE 8260 ;the CPU type (603EV,750,8240,8260) JTAGCLOCK 0 ;use 16 MHz JTAG clock ;WORKSPACE 0x800000 ;workspace for fast download and cache flush BDIMODE AGENT ;the BDI working mode (LOADONLY | AGENT | GATEWAY) BREAKMODE SOFT ;SOFT or HARD, HARD uses PPC hardware breakpoint ;MMU XLAT ;translate effective to physical address ;PTBASE 0x000000f0 ;here is the pointer to the page table pointers ;DCACHE FLUSH ;VECTOR CATCH ;catch unhandled exceptions ;MEMDELAY 2000 ;additional memory access delay ;PARITY ON ;enable data parity generation POWERUP 200 WAKEUP 200 [HOST] IP 192.168.2.100 FILE E:\bdi2000\powerpc\ppcboot.bin FORMAT BIN LOAD MANUAL ;load code MANUAL or AUTO after reset DEBUGPORT 2001 [FLASH]

28

CHIPTYPE AM29BX16 ;Flash type AMD29LV640 CHIPSIZE 0x800000 ;The size of one flash chip in bytes: 8M(e.g. AM29F010 = 0x20000) BUSWIDTH 16 ;The width of the flash memory bus in bits (8 | 16 | 32 | 64) FILE 8250_head.bin FORMAT BIN 0xFFE00000 ;ERASE 0XFE000000 BLOCK ERASE 0XFFE00000 BLOCK WORKSPACE 0x800000 ;workspace in target RAM for fast download [REGS] DMM1 0x00000000 FILE reg8260.def 32 purt DMM1 0x10198 8 psrt DMM1 0x1019c 8 lurt DMM1 0x101a0 8 lsrt DMM1 0x101a4 8 immr DMM1 0x101a8 32 ; ; System Integration Timers tmcntsc DMM1 0x10220 16 tmcnt DMM1 0x10224 32 tmcntal DMM1 0x1022c 32 piscr DMM1 0x10240 16 pitc DMM1 0x10244 32 pitr DMM1 0x10248 32 ; ; Interrupt Controller sicr DMM1 0x10c00 16 sivec DMM1 0x10c04 32 sipnr_h DMM1 0x10c08 32 sipnr_l DMM1 0x10c0c 32 siprr DMM1 0x10c10 32 scprr_h DMM1 0x10c14 32 scprr_l DMM1 0x10c18 32 simr_h DMM1 0x10c1c 32 simr_l DMM1 0x10c20 32 siexr DMM1 0x10c24 32 ; ; Clocks and Reset sccr DMM1 0x10c80 32 scmr DMM1 0x10c88 32 rsr DMM1 0x10c90 32 rmr DMM1 0x10c94 32

29

; ; Input/Output Port pdira DMM1 0x10d00 32 ppara DMM1 0x10d04 32 psora DMM1 0x10d08 32 podra DMM1 0x10d0c 32 pdata DMM1 0x10d10 32 pdirb DMM1 0x10d20 32 pparb DMM1 0x10d24 32 psorb DMM1 0x10d28 32 podrb DMM1 0x10d2c 32 pdatb DMM1 0x10d30 32 pdirc DMM1 0x10d40 32 pparc DMM1 0x10d44 32 psorc DMM1 0x10d48 ; bdiGDB Configuration File For NPW755 (MPC755 + MPC8250) System ; Shen Rong <[email protected]> ; [INIT] ; init core register WREG MSR 0x00003002 ;MSR -- ME, RI,FP ;WREG MSR 0x00001002 ;MSR -- FP, RI ; ; Chip select ; ; FLASH (16bit 8MB) WM32 0x00010100 0xFF801001 ;BR0 WM32 0x00010104 0xFF800Cf6 ;OR0 WM32 0x00010004 0xFFFFFF03 ;SYPCR WM32 0x00010024 0x00008000 ;BCR WM32 0x00010000 0x4224C000 ;SIUMCR WM16 0x0001000E 0x556C ;SWSR WM16 0x0001000E 0xAA39 ;SWSR >> should be confirmed WM32 0x000101a8 0xF0000000 ;change immr WM32 0xF0010110 0x00000041 ;BR2 WM32 0xF0010114 0xF8002AC0 ;OR2

30

; ; SDRAM init(SDRAM machine) ; WM16 0xF0010184 0x2000 ;MPTPR WM8 0xF001019C 0x32 ;PSRT WM32 0xF0010190 0x832DA46E ;PSDMR1 -- normal opt, disable refresh WM32 0xF0010190 0xAB2DA46E ;PSDMR2 -- precharge WM8 0x00000000 0xFF ;MEM1 -- a write following the precharge WM32 0xF0010190 0x8B2DA46E ;PSDMR3 -- CBR refresh WM8 0x00000000 0xFF ;MEM2 WM8 0x00000001 0xFF ;MEM3 WM8 0x00000002 0xFF ;MEM4 WM8 0x00000003 0xFF ;MEM5 WM8 0x00000004 0xFF ;MEM6 WM8 0x00000005 0xFF ;MEM7 WM8 0x00000006 0xFF ;MEM8 WM8 0x00000007 0xFF ;MEM9 WM32 0xF0010190 0x9B2DA46E ;PSDMR4 -- mode register write WM8 0x00000110 0xFF ;MEM10 -- mode value WM32 0xF0010190 0xDB2DA46E ;PSDMR5 -- enable auto refresh WM32 0xF0010190 0xC32DA46E ;PSDMR6 -- normal opt, auto refresh enabled ; SDRAM init end ; WM32 0x0 0x11223344 WM32 0x4 0x55667788 [TARGET] CPUTYPE 8260 ;the CPU type (603EV,750,8240,8260) JTAGCLOCK 0 ;use 16 MHz JTAG clock ;WORKSPACE 0x800000 ;workspace for fast download and cache flush BDIMODE AGENT ;the BDI working mode (LOADONLY | AGENT | GATEWAY) BREAKMODE SOFT ;SOFT or HARD, HARD uses PPC hardware breakpoint ;MMU XLAT ;translate effective to physical address ;PTBASE 0x000000f0 ;here is the pointer to the page table pointers ;DCACHE FLUSH ;VECTOR CATCH ;catch unhandled exceptions ;MEMDELAY 2000 ;additional memory access delay ;PARITY ON ;enable data parity generation

31

POWERUP 200 WAKEUP 200 [HOST] IP 192.168.2.100 FILE E:\bdi2000\powerpc\ppcboot.bin FORMAT BIN LOAD MANUAL ;load code MANUAL or AUTO after reset DEBUGPORT 2001 [FLASH] CHIPTYPE AM29BX16 ;Flash type AMD29LV640 CHIPSIZE 0x800000 ;The size of one flash chip in bytes: 8M(e.g. AM29F010 = 0x20000) BUSWIDTH 16 ;The width of the flash memory bus in bits (8 | 16 | 32 | 64) FILE 8250_head.bin FORMAT BIN 0xFFE00000 ;ERASE 0XFE000000 BLOCK ERASE 0XFFE00000 BLOCK WORKSPACE 0x800000 ;workspace in target RAM for fast download [REGS] DMM1 0x00000000 FILE reg8260.def 32 podrc DMM1 0x10d4c 32 pdatc DMM1 0x10d50 32 pdird DMM1 0x10d60 32 ppard DMM1 0x10d64 32 psord DMM1 0x10d68 32 podrd DMM1 0x10d6c 32 pdatd DMM1 0x10d70 32 ; ; CPM Timers tgcr1 DMM1 0x10d80 8 tgcr2 DMM1 0x10d84 8 tmr1 DMM1 0x10d90 16 tmr2 DMM1 0x10d92 16 trr1 DMM1 0x10d94 16 trr2 DMM1 0x10d96 16 tcr1 DMM1 0x10d98 16 tcr2 DMM1 0x10d9a 16 tcn1 DMM1 0x10d9c 16

32

tcn2 DMM1 0x10d9e 16 tmr3 DMM1 0x10da0 16 tmr4 DMM1 0x10da2 16 trr3 DMM1 0x10da4 16 trr4 DMM1 0x10da6 16 tcr3 DMM1 0x10da8 16 tcr4 DMM1 0x10daa 16 tcn3 DMM1 0x10dac 16 tcn4 DMM1 0x10dae 16 ter1 DMM1 0x10db0 16 ter2 DMM1 0x10db2 16 ter3 DMM1 0x10db4 16 ter4 DMM1 0x10db6 16 ; ; SDMA-General sdsr DMM1 0x11018 8 sdmr DMM1 0x1101c 8 ; ; IDMA idsr1 DMM1 0x11020 8 idmr1 DMM1 0x11024 8 idsr2 DMM1 0x11028 8 idmr2 DMM1 0x1102c 8 idsr3 DMM1 0x11030 8 idmr3 DMM1 0x11034 ; bdiGDB Configuration File For NPW755 (MPC755 + MPC8250) System ; Shen Rong <[email protected]> ; [INIT] ; init core register WREG MSR 0x00003002 ;MSR -- ME, RI,FP ;WREG MSR 0x00001002 ;MSR -- FP, RI ; ; Chip select ; ; FLASH (16bit 8MB) WM32 0x00010100 0xFF801001 ;BR0 WM32 0x00010104 0xFF800Cf6 ;OR0 WM32 0x00010004 0xFFFFFF03 ;SYPCR WM32 0x00010024 0x00008000 ;BCR WM32 0x00010000 0x4224C000 ;SIUMCR

33

WM16 0x0001000E 0x556C ;SWSR WM16 0x0001000E 0xAA39 ;SWSR >> should be confirmed WM32 0x000101a8 0xF0000000 ;change immr WM32 0xF0010110 0x00000041 ;BR2 WM32 0xF0010114 0xF8002AC0 ;OR2 ; ; SDRAM init(SDRAM machine) ; WM16 0xF0010184 0x2000 ;MPTPR WM8 0xF001019C 0x32 ;PSRT WM32 0xF0010190 0x832DA46E ;PSDMR1 -- normal opt, disable refresh WM32 0xF0010190 0xAB2DA46E ;PSDMR2 -- precharge WM8 0x00000000 0xFF ;MEM1 -- a write following the precharge WM32 0xF0010190 0x8B2DA46E ;PSDMR3 -- CBR refresh WM8 0x00000000 0xFF ;MEM2 WM8 0x00000001 0xFF ;MEM3 WM8 0x00000002 0xFF ;MEM4 WM8 0x00000003 0xFF ;MEM5 WM8 0x00000004 0xFF ;MEM6 WM8 0x00000005 0xFF ;MEM7 WM8 0x00000006 0xFF ;MEM8 WM8 0x00000007 0xFF ;MEM9 WM32 0xF0010190 0x9B2DA46E ;PSDMR4 -- mode register write WM8 0x00000110 0xFF ;MEM10 -- mode value WM32 0xF0010190 0xDB2DA46E ;PSDMR5 -- enable auto refresh WM32 0xF0010190 0xC32DA46E ;PSDMR6 -- normal opt, auto refresh enabled ; SDRAM init end ; WM32 0x0 0x11223344 WM32 0x4 0x55667788 [TARGET] CPUTYPE 8260 ;the CPU type (603EV,750,8240,8260)

34

JTAGCLOCK 0 ;use 16 MHz JTAG clock ;WORKSPACE 0x800000 ;workspace for fast download and cache flush BDIMODE AGENT ;the BDI working mode (LOADONLY | AGENT | GATEWAY) BREAKMODE SOFT ;SOFT or HARD, HARD uses PPC hardware breakpoint ;MMU XLAT ;translate effective to physical address ;PTBASE 0x000000f0 ;here is the pointer to the page table pointers ;DCACHE FLUSH ;VECTOR CATCH ;catch unhandled exceptions ;MEMDELAY 2000 ;additional memory access delay ;PARITY ON ;enable data parity generation POWERUP 200 WAKEUP 200 [HOST] IP 192.168.2.100 FILE E:\bdi2000\powerpc\ppcboot.bin FORMAT BIN LOAD MANUAL ;load code MANUAL or AUTO after reset DEBUGPORT 2001 [FLASH] CHIPTYPE AM29BX16 ;Flash type AMD29LV640 CHIPSIZE 0x800000 ;The size of one flash chip in bytes: 8M(e.g. AM29F010 = 0x20000) BUSWIDTH 16 ;The width of the flash memory bus in bits (8 | 16 | 32 | 64) FILE 8250_head.bin FORMAT BIN 0xFFE00000 ;ERASE 0XFE000000 BLOCK ERASE 0XFFE00000 BLOCK WORKSPACE 0x800000 ;workspace in target RAM for fast download [REGS] DMM1 0x00000000 FILE reg8260.def 8 idsr4 DMM1 0x11038 8 idmr4 DMM1 0x1103c 8 ; ; FCC1 gfmr1 DMM1 0x11300 32 fpsmr1 DMM1 0x11304 32 ftodr1 DMM1 0x11308 16 fdsr1 DMM1 0x1130c 16

35

fcce1 DMM1 0x11310 32 fccm1 DMM1 0x11314 32 fccs1 DMM1 0x11318 8 ftirr1_phy0 DMM1 0x1131c 8 ftirr1_phy1 DMM1 0x1131d 8 ftirr1_phy2 DMM1 0x1131e 8 ftirr1_phy3 DMM1 0x1131f 8 ; ; FCC2 gfmr2 DMM1 0x11320 32 fpsmr2 DMM1 0x11324 32 ftodr2 DMM1 0x11328 16 fdsr2 DMM1 0x1132c 16 fcce2 DMM1 0x11330 32 fccm2 DMM1 0x11334 32 fccs2 DMM1 0x11338 8 ftirr2_phy0 DMM1 0x1133c 8 ftirr2_phy1 DMM1 0x1133d 8 ftirr2_phy2 DMM1 0x1133e 8 ftirr2_phy3 DMM1 0x1133f 8 ; ; FCC3 gfmr3 DMM1 0x11340 32 fpsmr3 DMM1 0x11344 32 ftodr3 DMM1 0x11348 16 fdsr3 DMM1 0x1134c 16 fcce3 DMM1 0x11350 32 fccm3 DMM1 0x11354 32 fccs3 DMM1 0x11358 8 ; ; BRGs 5-8 brgc5 DMM1 0x115f0 32 brgc6 DMM1 0x115f4 32 brgc7 DMM1 0x115f8 32 brgc8 DMM1 0x115fc 32 ; ; I2C i2mod DMM1 0x11860 8 i2add DMM1 0x11864 8 i2brg DMM1 0x11868 8 i2com DMM1 0x1186c 8 i2cer DMM1 0x11870 8 i2cmr DMM1 0x11874 8 ;

36

; Communication Processor cpcr DMM1 0x119c0 32 rccr DMM1 0x119c4 32 rter DMM1 0x119d6 16 rtmr DMM1 0x119da 16 rtscr DMM1 0x119dc 16 rtsr DMM1 0x119e0 32 ; ; BRGs 1-4 brgc1 DMM1 0x119f0 32 brgc2 DMM1 0x119f4 32 brgc3 DMM1 0x119f8 32 brgc4 DMM1 0x119fc 32 ; ; SCC1 gsmr_l1 DMM1 0x11a00 32 gsmr_h1 DMM1 0x11a04 32 psmr1 DMM1 0x11a08 16 todr1 DMM1 0x11a0c 16 dsr1 DMM1 0x11a0e 16 scce1 DMM1 0x11a10 16 sccm1 DMM1 0x11a14 16 sccs1 DMM1 0x11a17 8 ; ; SCC2 gsmr_l2 DMM1 0x11a20 32 gsmr_h2 DMM1 0x11a24 32 psmr2 DMM1 0x11a28 16 todr2 DMM1 0x11a2c 16 dsr2 DMM1 0x11a2e 16 scce2 DMM1 0x11a30 16 sccm2 DMM1 0x11a34 16 sccs2 DMM1 0x11a37 8 ; ; SCC3 gsmr_l3 DMM1 0x11a40 32 gsmr_h3 DMM1 0x11a44 32 psmr3 DMM1 0x11a48 16 todr3 DMM1 0x11a4c 16 dsr3 DMM1 0x11a4e 16 scce3 DMM1 0x11a50 16 sccm3 DMM1 0x11a54 16 sccs3 DMM1 0x11a57 8 ;

37

; SCC4 gsmr_l4 DMM1 0x11a60 32 gsmr_h4 DMM1 0x11a64 32 psmr4 DMM1 0x11a68 16 todr4 DMM1 0x11a6c 16 dsr4 DMM1 0x11a6e 16 scce4 DMM1 0x11a70 16 sccm4 DMM1 0x11a74 16 sccs4 DMM1 0x11a77 8 ; ; SMC1 smcmr1 DMM1 0x11a82 16 smce1 DMM1 0x11a86 8 smcm1 DMM1 0x11a8a 8 ; ; SMC2 smcmr2 DMM1 0x11a92 16 smce2 DMM1 0x11a96 8 smcm2 DMM1 0x11a9a 8 ; ; SPI spmode DMM1 0x11aa0 16 spie DMM1 0x11aa6 8 spim DMM1 0x11aaa 8 spcom DMM1 0x11aad 8 ; ; CPM Mux cmxsi1cr DMM1 0x11b00 8 cmxsi2cr DMM1 0x11b02 8 cmxfcr DMM1 0x11b04 32 cmxscr DMM1 0x11b08 32 cmxsmr DMM1 0x11b0c 8 cmxuar DMM1 0x11b0e 16 ; ; SI1 Registers si1amr DMM1 0x11b20 16 si1bmr DMM1 0x11b22 16 si1cmr DMM1 0x11b24 16 si1dmr DMM1 0x11b26 16 si1gmr DMM1 0x11b28 8 si1cmdr DMM1 0x11b2a 8 si1str DMM1 0x11b2c 8 si1rsr DMM1 0x11b2e 16 ;

38

; MCC1 Registers mcce1 DMM1 0x11b30 16 mccm1 DMM1 0x11b34 16 mccf1 DMM1 0x11b38 8 ;; bdiGDB Configuration File For NPW755 (MPC755 + MPC8250) System ; Shen Rong <[email protected]> ; [INIT] ; init core register WREG MSR 0x00003002 ;MSR -- ME, RI,FP ;WREG MSR 0x00001002 ;MSR -- FP, RI ; ; Chip select ; ; FLASH (16bit 8MB) WM32 0x00010100 0xFF801001 ;BR0 WM32 0x00010104 0xFF800Cf6 ;OR0 WM32 0x00010004 0xFFFFFF03 ;SYPCR WM32 0x00010024 0x00008000 ;BCR WM32 0x00010000 0x4224C000 ;SIUMCR WM16 0x0001000E 0x556C ;SWSR WM16 0x0001000E 0xAA39 ;SWSR >> should be confirmed WM32 0x000101a8 0xF0000000 ;change immr WM32 0xF0010110 0x00000041 ;BR2 WM32 0xF0010114 0xF8002AC0 ;OR2 ; ; SDRAM init(SDRAM machine) ; WM16 0xF0010184 0x2000 ;MPTPR WM8 0xF001019C 0x32 ;PSRT WM32 0xF0010190 0x832DA46E ;PSDMR1 -- normal opt, disable refresh WM32 0xF0010190 0xAB2DA46E ;PSDMR2 -- precharge WM8 0x00000000 0xFF ;MEM1 -- a write following the precharge WM32 0xF0010190 0x8B2DA46E ;PSDMR3 -- CBR refresh WM8 0x00000000 0xFF ;MEM2

39

WM8 0x00000001 0xFF ;MEM3 WM8 0x00000002 0xFF ;MEM4 WM8 0x00000003 0xFF ;MEM5 WM8 0x00000004 0xFF ;MEM6 WM8 0x00000005 0xFF ;MEM7 WM8 0x00000006 0xFF ;MEM8 WM8 0x00000007 0xFF ;MEM9 WM32 0xF0010190 0x9B2DA46E ;PSDMR4 -- mode register write WM8 0x00000110 0xFF ;MEM10 -- mode value WM32 0xF0010190 0xDB2DA46E ;PSDMR5 -- enable auto refresh WM32 0xF0010190 0xC32DA46E ;PSDMR6 -- normal opt, auto refresh enabled ; SDRAM init end ; WM32 0x0 0x11223344 WM32 0x4 0x55667788 [TARGET] CPUTYPE 8260 ;the CPU type (603EV,750,8240,8260) JTAGCLOCK 0 ;use 16 MHz JTAG clock ;WORKSPACE 0x800000 ;workspace for fast download and cache flush BDIMODE AGENT ;the BDI working mode (LOADONLY | AGENT | GATEWAY) BREAKMODE SOFT ;SOFT or HARD, HARD uses PPC hardware breakpoint ;MMU XLAT ;translate effective to physical address ;PTBASE 0x000000f0 ;here is the pointer to the page table pointers ;DCACHE FLUSH ;VECTOR CATCH ;catch unhandled exceptions ;MEMDELAY 2000 ;additional memory access delay ;PARITY ON ;enable data parity generation POWERUP 200 WAKEUP 200 [HOST] IP 192.168.2.100 FILE E:\bdi2000\powerpc\ppcboot.bin FORMAT BIN LOAD MANUAL ;load code MANUAL or AUTO after reset DEBUGPORT 2001

40

[FLASH] CHIPTYPE AM29BX16 ;Flash type AMD29LV640 CHIPSIZE 0x800000 ;The size of one flash chip in bytes: 8M(e.g. AM29F010 = 0x20000) BUSWIDTH 16 ;The width of the flash memory bus in bits (8 | 16 | 32 | 64) FILE 8250_head.bin FORMAT BIN 0xFFE00000 ;ERASE 0XFE000000 BLOCK ERASE 0XFFE00000 BLOCK WORKSPACE 0x800000 ;workspace in target RAM for fast download [REGS] DMM1 0x00000000 FILE reg8260.def ; SI2 Registers si2amr DMM1 0x11b40 16 si2bmr DMM1 0x11b42 16 si2cmr DMM1 0x11b44 16 si2dmr DMM1 0x11b46 16 si2gmr DMM1 0x11b48 8 si2cmdr DMM1 0x11b4a 8 si2str DMM1 0x11b4c 8 si2rsr DMM1 0x11b4e 16 ; ; MCC2 Registers mcce2 DMM1 0x11b50 16 mccm2 DMM1 0x11b54 16 mccf2 DMM1 0x11b58 8 ; BDI2000 调试器使用 telnet 远程登陆进行控制,具体操作方法可以参考 BDI2000 调试器

用户说明文档。

3.2 内核编译

嵌入式 LINUX 内核及设备驱动全部源代码(光盘安装后建立完备的开发环境)。在/ PPC8270/usr/src/ linux-2.4.20_mvl31 目录下执行编译命令可对 LINUX 内核进行配置。具体

操作步骤如下: a) make mrproper:清除先前配置 b) make pegasus_config:使用基于支智联科公司 PPC82××开发板设置好的配置文件

作为内核配置文件,用户也可以使用 make menuconfig 或者 make xconfig 对内核

进行裁减,配置自己的内核 c) make dep:生成依赖 d) make uImage:生成可用 uboot 引导的内核镜像文件

41

在对内核进行编译裁减的时候,可以自己重新配置,在做好配置并调试成功后,可以将 PPC8270/usr/src/ linux-2.4.20_mvl31 目录下的.config 文件拷贝到 arch/ppc/configs/下,定义一

个配置模板文件,作为以后编译的内核定义模板。 生成的内核镜像文件 uImage 位于 PPC8270/usr/src/ linux-2.4.20_mvl31 目录下的

arch/ppc/boot/images/,可以 copy 到/tftpboot 目录下下载到目标系统上运行,也可以直接烧

录到 FLASH 中启动。 用户在配置好 Linux 内核后,可以使用“make dep;make uImage &>log”命令的方式重

定向到一个 log 文件中,然后 vi log 就可细细品尝整个的编译过程的细节了。

3.3 制作文件系统

Linux 的根文件系统是 Linux 启动后挂接的第一个文件系统,即目录名为/的文件系统,

它可以通过启动参数中的 root 配置项来指定,如: root=/dev/nfs:指定网络文件系统为根文件系统。 root=/dev/mtdblock/1:指定第二个 mtd 块设备为根文件系统。 root=/dev/ram:指定 Ramdisk 为根文件系统,这是大多数嵌入式设备根文件系统的

实现方式 根文件系统的文件格式可以有多种,常见的有 ext2、ext3,jffs,jffs2,romfs(uCLinux),cramfs,以及 nfs 等,其中 ext2 和 ext3 为 Linux 广泛采用的文件系统,可读可写,但由于体

积较大,一般不适合在 FLASH 系统上直接应用(要使用 ext2/ext3 文件系统,可以采用

Ramdisk 的方式);jffs 与 jffs2 为日志文件系统,可读可写,并且具有快速恢复的特点,是

FLASH 文件系统的首选;romfs 与 cramfs 均为只读的文件系统,体积较小,其中 cramfs 更是采用压缩的方式,进一步缩小了体积,如果无写入的需求,可以考虑采用;nfs 是网络文

件系统的简称,网络中有一台 nfs 服务器方可正常运行。 无论那种文件系统,在进行 Linux 内核配置时必须加上相应的文件系统支持才可正常挂

接。 在嵌入式 Linux 的开发中,我们可以选取任意一种 FLASH 文件系统作为根文件系统,

但由于运行在 FLASH 中的原因,文件的存取相当耗费时间,极大的降低了 Linux 的运行效

率。因此,在实际应用中,我们经常采用一种运行在 Ram 中的文件系统作为根文件系统,

这就是 Ramdisk。 Ramdisk 其实并不是一种新的文件系统格式,它只是 FLASH 文件系统的一份内存拷贝,

即它的文件格式还是 FLASH 文件系统中的一种。它的工作原理就是让 U-Boot 在引导 Linux内核之前,先将 FLASH 中的文件系统镜像(通常是压缩过的并且经 mkimage 处理之后的)解压缩到 Ram 中,成为 Ramdisk 文件系统,此时的 Ramdisk 具有 FLASH 中的文件系统的一

切属性(包括格式,大小),并且是可读可写的(Ram)。其读写速度要远远高于 FLASH 文

件系统。 但它的缺点也很明显:Ramdisk 毕竟是在 Ram 中运行的,所有的数据在掉电之后都不

能保存下来,并且也不能“写回”到 FLASH 中去。所以在某种意义上说,Ramdisk 仍然只

是一种“只读”的文件系统。 要想使用 Ramdisk 文件系统,必须满足以下条件:

a) 在 Linux 内核配置中,选择 Ramdisk 支持和 initrd 支持: 这点需要在配置 Linux 内核时候加入相关选项和正确设置 ramdisk 的大小,如

PPC8270 开发板内核编译中,需要在【Block Device】中设置下列选项:

42

从图中,可以看到,智联科的 PPC82××开发板使用了 10Mbytes 大小的 ramdisk作为板卡运行的文件系统空间,并打开了内核对 ramdisk 文件系统作为初始文件系统的

支持。 b) 在 Linux 内核配置中,正确设置 Ramdisk 的大小,必须足以容纳解压缩之后的

FLASH 文件系统的大小。 c) 正确设置 U-Boot 环境变量 initrd_high 的值,此值为 Ramdisk 的结束地址,通过它

和 Ramdisk 的大小,我们可以定位 Ramdisk 在 内存中的位置此值一定要在

Linux 所管理的内存范围之内,在 U-Boot 文档中,建议此值设置为被 Linux 所管理

那部分内存的最高端。例如,我们传递给 Linux 的参数为 mem=48m,那么 initrd_high应该被设置为 0x3000000。但是在实际应用中,我们发现只要此值设定在 Linux 管

理的内存范围之内,Ramdisk 都可以正常工作,当然,不能够小到不能容纳 FLASH文件系统的地步。

d) 正确传递 bootm 参数,如:bootm 0xfff40000 0xff810000,其中前一个参数为 Linux Kernel Image 的位置,后一个为 RootFS Image 的位置。两个 Image 均位于 FLASH中。

智联科 PPC82××系列开发板使用的是 MontaVista Linux 操作系统,它为我们提供了

一个很全的目标文件系统,包含了几乎所有的应用程序,脚本文件,库支撑文件,编译环境

等。但是体积也大的不可接受,在 100 兆以上,这样的文件系统显然需要裁剪才能够放进

FLASH 中。裁剪的方法通常有: 1) 手工裁剪。依靠经验挑出合适的应用程序,启动脚本和支持库等,将体积缩小到一

个可以接受的程度。这需要对 Linux 启动所需要的必要文件,应用程序所需要的库

文件非常了解,对库文件之间的依赖关系也要很清楚,对于一般人来说几乎是不可

能的。 2) 使用第三方已经裁剪好的文件系统镜像。这种方式最省力,而且也省时间,在已经

裁剪好的镜像基础之上,添加自己需要的文件也很容易(方法后面会讲到)。但缺

陷也很明显,找一个适合自己开发板的镜像并不容易。 3) 使用专门的裁减工具。这种方式是比较好的方式,可以定制属于自己的文件系统镜

像,并且几乎不用花时间在寻找应用程序与库之间的依赖关系上。MontaVista 就为

我们提供了一个这样的工具:Devrocket,它是 MontaVista Linux 的集成开发环境,

界面美观,上手容易,可以用于 kernel 镜像和文件系统镜像的开发。但 Bug 较多,

需要打补丁。 使用下面的命令可以生成一个大约 10M Bytes 大小的 ext2 文件系统: dd if=/dev/zero of=./root bs=11264k count=1 2>/dev/null mke2fs -F -m0 ./root tune2fs -c 0 ./root

此时已经生成了一个名为 root 的文件,大小为 10M Byte,此文件是一个具有文件系统

43

格式的镜像文件,文件系统为 ext2。将此文件 mount 到某个目录后就可以向其中加入我们所

需要的目录和文件内容,或者说,已经剪裁好的文件系统内容。如 PPC82××系列开发板的

文件系统目录结构如下:

做好文件系统目录及文件后,可以使用下面的命令将该文件系统文件制作成可供 uboot启动和 Linux 系统可挂接的文件系统镜像:

a) mkdir /mnt/ext2 b) mkdir /mnt/root c) mount -o loop /ppc8270/usr/src/ramdisk/root.ext2 /mnt/ext2 d) mount -o loop /ppc8270/usr/src/ramdisk/root /mnt/root e) cd /mnt/ext2 f) tar -cf /tmp/root.tar ./* g) cd /mnt/root h) rm -rf * i) tar -xf /tmp/root.tar j) cd /ppc8270/usr/src/ramdisk/ k) umount /mnt/root l) umount /mnt/ext2 m) gzip -9 root n) /ppc8270/usr/src/u-boot-1.1.1/tools/mkimage -A ppc -O Linux -T

/ppc8270/usr/src/ramdisk/ramdisk -C gzip -n ‘Pegasus ramdisk image' -d root.gz /ppc8270/usr/src/ramdisk/ramdisk.img

注意:第 n 步骤中的 mkimage 命令是 uboot 直带的文件系统头标志设置命令,用于将制

作好的文件系统做成可供 uboot 引导的文件系统镜像。在实际使用中,需要使用绝对路径指

明该命令的位置。 智联科的 PPC82××系列开发板光盘中,已经为用户写好了用户编译文件系统的脚本文

件,用户只需要在文件系统镜像 mount 后添加自己的应用程序或者脚本文件,然后执行: ./image.sh 如果用户改变了文件系统或者 uboot 代码的路径,只需要相应的改写该脚本即可。

3.4 固化的 uboot

PPC8270 开发板在售出时已烧写了 uboot,且处于 FLASH 写保护状态,可以不用再烧

写,否则无法复原,只能通过 JTAG 编程器重新烧录入 FLASH 中,uboot 镜像在 FLASH 的

高端地址(0xfff00000)。用户可以通过移植好的 uboot 直接烧写用户升级修改过的 LINUX 内核。(烧制 LINUX 内核部分将在 3.1.6 节烧制嵌入式 LINUX 系统中介绍),宿主机端需要

开通 TFTP 服务。开通宿主机(RedHat9.0 LINUX 系统)上的 TFTP 服务操作已经在前面章

节中介绍,用户可以参考。如果用户使用 Windows 系统作为服务器,可以使用光盘 tools 目录中的 tftpd32 程序开通 tftp 服务。 Uboot 的作用主要是烧些编译好的文件系统和 Linux 内核镜像,具体烧写的方法用户可

以参考 uboot 帮助文档,用户可以在光盘中的 doc 目录中找到相应文档。智联科 PPC8270开发板 FLASH 空间分配如下图所示:

44

3.5 嵌入式 Linux 的分区管理-MTD 技术

MTD 的全称是 Memory Technology Device,类似与 PC 机的分区表管理机制,它用于管

理 FLASH 上的多个文件系统。如果要在 FLASH 上建立一个以上的文件系统,无论是同一

格式的文件系统还是不同格式的文件系统,都需要 MTD 来进行管理和配置。 用 MTD 建立文件系统的一个典型的定义方式是: .name = “RootFS”; .offset = 1024 << 10; .len = 1024 << 10; .mask = fs_writable; 通过以上定义,在 FLASH 偏移为 1M Byte 的位置建立了一个大小为 1M Byte 的文件系

统,文件系统的名字为 RootFS,并且是只读的。相应的,我们应该把一个 RootFS 的文件系

统镜像放置在 FLASH 的这个位置,如果这个位置没有相应的镜像,MTD 会自动把这段区

域初始化为一个文件格式为 JFFS2 的文件系统。 在 MTD 的管理之下的文件系统对应/dev/mtdblock/0,1,2…,可以通过将启动参数的 root

配置项设置成为/dev/mtdblock/n,来达到将第 n+1 个 MTD 管理的文件系统作为 RootFS 的目

的。 智 联 科 PPC8270 开 发 板 的 MTD 分 区 是 通 过 添 加

/ppc8270/usr/src/linux-2.4.20_mvl31/drivers/mtd/maps/pegasus_partition.c 文件,并加入该文件

的 Linux 内核配置项实现的。该文件的主要分区内容如下:

45

static struct mtd_partition partition_info[] = { { .name = "initrd(ext2)", .size = 5056 << 10, /* 5MB - 16KB */ .offset = 64<<10, .mask_flags = MTD_WRITEABLE, }, { .name = "driver(jffs2)", .size = 2048 << 10, /* 2MB */ .offset = 5120 << 10, }, { .name = "uboot,env,linux", .size = 1024 << 10, /* 1MB */ .offset = 7168 << 10, .mask_flags = MTD_WRITEABLE, } }; 其中 FLASH 起始位置的 16K 空间用于存放 HRCW。

第四章 软件应用开发

4.1 开发模式

在进行开发前,有必要先阐述一下宿主机和目标板的概念。宿主机是一台运行 LINUX 的 PC 机,目标板即智联科 PPC8270 开发板。应用程序的开发有两种模式:

1. 先在宿主机(Intel CPU)上调试通过后,再移植到目标板(PPC8270)上。移植的

工作包括两个方面:函数库的问题。在程序移植时可能会有函数未定义的问题。对于这种问

题,一般要求开发者自己编制这些要用到却又未定义的函数。 2. 交叉编译开发模式,建议采用该模式。将宿主机和目标板通过串口相连,在宿主 PC

机上运行 minicom 作为目标板的显示终端,使用交叉编译工具直接编译应用程序,通过 ftp将编译好的程序下载到板卡 jffs2 文件系统之上,直接在目标板上调试应用。

4.2 如何创建编译自己的应用

代码编写前应多阅读一下类似的应用程序的代码或从网上查找相关代码下载后阅读。函

数调用可参见《UNIX 环境高级编程》(见附录 B),因为书中所述为 UNIX 环境开发,但

基本类似,具体应用到 LINUX 时请使用 man 查看帮助。在程序移植时可能会有函数未定

义的问题。对于这种问题,一般要求开发者自己编制这些要用到却又未定义的函数。 Makefile 可以从/PPC8270/usr/src/application/ 下某个目录中的 Makefile 作为样本,稍做

46

改动即可使用。 如/PPC8270/usr/src/application/hello 目录下的 Makefile: GCC_FLAGS = -Wstrict-prototypes -Wpointer-arith -Wcast-align -Wcast-qual\ -Wtraditional\ -Wshadow\ -Wconversion\ -Waggregate-return\ -Wmissing-prototypes\ -Wnested-externs\ -Wall # Add -DNO_DAEMON if you do not want the server to fork upon launch # Add -lefence to LDFLAGS to link with ElectricFence # Add -pg to CFLAGS and LDFLAGS to get profiling output with gcc/gprof LDFLAGS = LIBS = CFLAGS = -g -O2 -Wall -I. # Change these if necessary YACC = bison -y LEX = flex CC = ppc_82xx-gcc CPP = ppc_82xx-g++ SOURCES = hello.c OBJS = hello.o #${SOURCES:.c=.o} .PHONY: clean mrclean distclean depend all dist hello: ${OBJS} ${CC} -o $@ hello.o ${LDFLAGS} ${LIBS} clean: rm -f ${OBJS} distclean: mrclean mrclean: clean rm -f

用户只需修改 Makefile 的几处 put 内容为 hello 的部分即可,内容见下: SOURCES = hello.c

47

OBJS = hello.o hello: ${OBJS} ${CC} -o $@ hello.o ${LDFLAGS} ${LIBS}

其他部分可以不做修改。然后执行 make,在目录 hello 目录下生成可执行文件 hello,最后将生成的可执行文件加入 LINUX 文件系统中去,重新编译内核并烧写 FLASH。用户

也可以将生成的目标文件通过 FTP 下载到板卡 jffs2 文件系统对应分区中(对于智联科

PPC8270,该分区为/dev/mtdblock/1,文件系统中的/etc/rc.d/rc.local 脚本中,使用命令将该

设备映射到了板卡目录中的/myapp 目录)。

4.3 加入应用程序的文件系统编译

编译好应用程序后,用户可以直接将编译好的目标文件加入到文件系统中,作为文件系

统的一部分在系统启动后调用执行,在目录/PPC8270/usr/src/ramdisk/目录中,有 root.ext2 文

件,该文件是制作好的文件系统文件,除了 4.2 节介绍中的将目标文件下载到板卡运行的方

法外,用户还可以通过向该文件中添加编译好的目标文件来添加自己的应用。 具体操作方法如下: 建立一个新的目录,如 ramdisk: cd /PPC8270/usr/src/ramdisk/ramdisk mkdir ramdisk 将 root.ext2 文件系统 mount 到新建目录 ramdisk 中: mount –o loop root.ext2 ramdisk/ cd ramdisk/ ls 查看目录中的内容如下: bin etc linux mnt sbin usr dev lib lost+found proc tmp 它完全就是 LINUX 的文件系统(与目标板启动后的文件系统完全一致);此时用户可

以加入自己的应用程序;下面举例说明将上一节生成的 hello 加入到文件系统: cd /ramdisk mkdir application (新建目录名可以自己定义) cd application mkdir hello cd hello cp /PPC8270/usr/src/application/hello/hello . (拷贝 hello 到 hello 目录下,此时生成的可

执行文件 hello 在/目录下,用户可自己指定自己的应用程序路径) cd /PPC8270/usr/src/ramdisk umount ramdisk ./image.sh 重新制作文件系统镜像后,在烧写入 FLASH 或在内存中运行即可, 启动目标板: #ls application bin etc linuxrc mnt sbin usr dev lib lost+found proc tmp map 文件系统中出现了 application 目录 cd application cd hello 在 hello 目录中出现了可执行文件 hello;运行文件:

48

./hello

4.4 如何移植软件

在 LINUX 这个开放的世界里,从网上下载相关软件并移植到给定的平台上将是一种常

见的工作模式。由于 ppclinux 和 PC LINUX 例如 REDHAT 等 LINUX 系统都是 FOR MMU 处理器平台的,所用的 libc 库都是 glibc,通用的链接方式都是.so 的动态链接方式,从网

上下载的应用软件都是 FOR PC LINUX,例如都再 REDHAT 上测试通过的,所以将网上下

载的应用软件移植到 ppclinux 上是一件非常容易的事情,唯一要注意的就是两点: 1. 熟悉软件搜索的方法,即知道从哪里下载软件,例如 microwin 的下载地址、boa 的

下载地址等; 2. 下载后只需更改一下应用程序的 Makefile 即可,一般的就是 CC 编译器从标准的

PC 上的 gcc 更改为我们所用的交叉编译器 ppc_82xx-**,对应的其它用到的工具

也要修改一下,例如编译 iptables 除了用到 gcc 编译器外,还要用到一些自己的 C 库的编译,所以就要用到 ar 工具,所以在 Makefile 中也要单独更改,如下示:

KERNEL_DIR=/PPC8270/usr/src/linux-2.4.20_mvl31 CC = ppc_82xx-gcc AR = ppc_82xx-ar

4.5 关于驱动开发

4.5.1 用于读写硬件和绝对地址

鉴于 linux 在启动后启用了 MMU,进入保护模式,所以应用程序都不能直接读写外设

IO 等地址,一般的,这时就要借助于驱动来进入内核态完成这个工作,因为在内核态中可

调用 ioremap 来访问这些物理地址,因此,读写外设 IO 时就要分两步实现,一步是为之在

内核中写个驱动,还有就是要写个上层应用程序。 举例说明: 我们要读 PC8 这个 IO 口线,根据命令行输入 0,1 来设置或清除该 IO

端口。选择 2 则退出该程序。程序包括应用程序(write_gpio.c)和驱动程序(gpio_test.c) 两部分。

1)将驱动程序部分拷入 linux/driver/char/目录中。修改 linux/driver/char/中的 Makefile 文件,编入该驱动。obj-y += mem.o tty_io.o n_tty.o tty_ioctl.o raw.o pty.o misc.o random.o ppcflash.o gpio_test.o

2)在 ramdisk 的 dev 目录中添加一个 gpiotest 设备,具体命令如下: mknod gpiotest c 220 0 3)编译应用程序,即可执行。 下面是驱动部分的代码:

/* driver/char/gpio_test.c * * This file provide IO reading and writing from user space. * Pls create some device file in diretory /dev/gpiotest whose major is 220.

49

* This driver support 0-255 devices. In user space user can read and write * IO through open and ioctl function provided by glibc. * */ #include <linux/fs.h> #include <linux/iobuf.h> #include <linux/major.h> #include <linux/blkdev.h> #include <linux/capability.h> #include <linux/smp_lock.h> #include <asm/uaccess.h> #include "gpio_test.h" #include <asm/io.h> #include <linux/vmalloc.h> #define dprintk(x...) #define IOPORT_MAJOR 220 typedef char ioport_device_t; static ioport_device_t gpio_devices[256];

int gpio_open(struct inode *, struct file *); int gpio_release(struct inode *, struct file *); int gpio_ctl_ioctl(struct inode *, struct file *, unsigned int, unsigned long); static struct file_operations gpio_fops = { open: gpio_open, release: gpio_release,

}; static struct file_operations gpio_ctl_fops = {

ioctl: gpio_ctl_ioctl, open: gpio_open, release: gpio_release,

}; int __init gpio_init(void) {

int i; register_chrdev(IOPORT_MAJOR, "gpiotest", &gpio_ctl_fops); return 0;

} __initcall(gpio_init); /* * Open/close code for raw IO. */ int gpio_open(struct inode *inode, struct file *filp) {

int minor; minor = MINOR(inode->i_rdev);

50

/* if (ioport_devices[minor].io_lock) { printk("Device is busy\n"); return -1;

}*/ *(volatile unsigned short*)(0xfff00000+0x962)&=~0x0080; *(volatile unsigned short*)(0xfff00000+0x960)|=0x0080; gpio_devices[minor]++; return 0;

} //__ioremap int gpio_release(struct inode *inode, struct file *filp) {

int minor; minor = MINOR(inode->i_rdev); if (gpio_devices[minor])

gpio_devices[minor]--; *(volatile unsigned short*)(0xfff00000+0x960)&=~0x0080; *(volatile unsigned short*)(0xfff00000+0x962)|=0x0080; return 0;

} /* * Deal with ioctls against the raw-device control interface, to bind * and unbind other raw devices. */ int gpio_ctl_ioctl(struct inode *inode,struct file *flip,unsigned int command,unsigned long arg) {

int err = 0; int minor = MINOR(inode->i_rdev); switch (command) {

case IOWRITE: *(volatile unsigned short*)(0xfff00000+0x966)&=~0x0080; return 0;

case IOCLEAR: *(volatile unsigned short*)(0xfff00000+0x966)|=0x0080; return 0;

default: err = -EINVAL;

} return err;

} 下面是应用部分的代码:

#define DEVICE_PPCFLASH "/dev/gpiotest" int main() {

51

int fd; int val=-1; if((fd=open(DEVICE_PPCFLASH,O_RDONLY | O_NONBLOCK))<0) {

perror("can not open device"); exit(1);

} while(1){

printf("0:set ,1:clear,2: quit :"); scanf("%d",&val); if(val==0)

ioctl(fd,IOWRITE,0); else if(val==1)

ioctl(fd,IOCLEAR,0); else if(val==2){

close(fd); return 0; } else{

printf("val is %d\n",val); continue;

} } return 0;

}

4.5.2 设备驱动

用户可以在 linux 系统中加入一个新的设备驱动程序,设备驱动程序的加载方式有两

种: 第一,编译到内核,在 linux 内核启动时加载驱动程序; 第二,编译为模块,在 linux 启动后用 insmod 或 modprobe 来加载,用 rmmod 来卸载。 在 linux 目录下有一个“.config”的文件,该文件里说明模块加载的方式,宏名的值是

“y”的为编译到内核,值是“m”的为模块加载方式;在 linux/include/linux/autoconf.h 文件中保存了所有配置的宏的设置值。在实际应用时各种接口的驱动程序通常已经存在,已经

存在的驱动程序在框架结构上是正确的,甚至是接口设备芯片的完好驱动,而且已经存在的

驱动程序都是经过考证的,所以若在我们自己的板子上加上相应接口的驱动,如果此类接口

设备的驱动程序已经存在,那最好就是对原有驱动程序进行相应的修改。

52

第五章 硬件系统

5.1 硬件系统的设计特点

1. 系统整体采用核心板+扩展板的方式,便于客户的系统设计以及产品后期的设备维护和

修理,降低售后服务的维修成本。 2. 系统整体采用的核心板,集成了系统的最小系统,将最大的系统扩展功能留给了扩展板,

便于客户复用系统资源,可以使用同样的核心板,设计客户自己不同的产品。 3. 核心板采用 5V 单一电源供电,只要提供 5V 电源即可运行起来最小系统,对扩展板的

开发要求,几乎没有任何的要求。 4. 核心板已经集成了系统 JTAG 接口和设备监控串口,监控串口已经经过串口变压,可以

直接与开发主机的串口连接,可以单独调试和运行,可以单独作为一个独立的系统运行,

方便了产品研发阶段的设备调试。 5. 核心板系统在不需要重新投板的情况下,全面兼容 MPC82xx 的 Motorola 公司的

PowerQuicII 的系列通信处理器。 6. 板载频率跳线,客户可以自己根据实际需要调节 CPU 的工作频率 7. 扩展板外部电源输入,同时支持普通单一 5V 电源输入和 ATX 电源输入,单一电源开关

控制。注意:两个电源不能同时连接到开发板上,否则,会造成系统永久损伤。 8. 系统所有的接口种类,扩展板都做了相关的硬件链接,便于测试各种接口的功能。

53

5.2 核心板框图

54

5.3 扩展板框图

55

5.4 MPC8280 系统框图

5.5 各部分构成

Flash 部分: 板上集成的 Flash 支持 Nor Flash 和 Nand Flash。都挂接在系统的 60x 总线上。系统集成

的 Nor Flash 使用 AMD 公司的 AM29LV064 的 8MB Flash,对 AMD 更小容量的 Flash 向下

兼容。位宽:16bit;Nand Flash 是可选器件,PCB 板已经预留了他的位置。这个兼容 Samsung公司的 K9Fxx08 系列的 Nand Flash,位宽:8bit. SDRAM 内存部分: 系统集成 4 片 32MB 的 SDRAM,每一片位宽 16bit,总共 64bit 的位宽与 MPC8280 的

60x 总线相连。最高频率:133MHz 复位模块: 系统采用 Mixim 公司的专用复位芯片 MAX708 对系统进行复位,同时相应来自核心板

和扩展板的复位输入,并对扩展板输出复位信号 时钟驱动模块: 将系统 66MHz 的时钟,同时输送给 CPU、SDRAM 和扩展板,便于系统使用

56

串口变压模块: 为了方便对核心板的调试和监控,系统集成 SMC1 的串口变压输出。该串口可以与开

发主机进行连接,该串口已经通过核心板对外接口连接到了扩展板,扩展板可以将该变压后

的监控串口通过 DB9 接口,将信号送到开发主机,而不需要通过串口转接线。 RTC 时钟模块: MPC8280 系统没有内置 RTC 控制器,系统要实现关机时钟不丢失,必须使用外置 RTC芯片。系统使用 DS1307RTC 芯片,与 CPU 之间通过 IIC 接口连接。CPU 端的 SCL 信号和

SDA 信号分别通过 GPIO PA22 和 PA23 通过驱动程序控制 GPIO 来实现 IIC 的时序。

5.6 片选

CS0:BootFlash 基地址:0xFF800000 大小: 8MB CS1:Nand Flash(可选) 基地址: 大小:根据实际安装的 Nand Flash 容量定 CS2:SDRAM 基地址:0x00000000 大小: 128MB CS9:扩展板 8 字 LED 基地址:0xE0000000 大小: 16Byte

5.7 中断

扩展板外部连接 4 个输入中断按键,分别标识为:J7、J8、J9、J10 对应的 CPU 中断分别为: J7->EINT1 J8->EINT2 J9->EINT3 J10->EINT4

5.8 GPIO

系统扩展板连接的 6 个 LED 发光二极管,均采用 CPU 的 GPIO 控制,CPU 的 GPIO 每一个

管脚控制一个 LED 发光二极管。只要将对应的 GPIO 输出低电平,LED 就会亮起来 GPIO 控制 LED 发光二极管,采用电源灌入式驱动发光二极管。鉴于系统 CPU 驱动能

力的考虑,不建议客户使用的时候,直接使用 CPU 的 GPIO 驱动 LED,可以通过驱动芯片

来驱动一下。 具体连接如下:

57

DS13——》PA0 DS14——》PA1 DS15——》PA2 DS16——》PA3 DS17——》PA4 DS18——》PA5

5.9 4 个 8 字型 LED 发光管

4 个 8 字型的 LED 发光管,使用同一个 CS 信号,就是 CPU 的 CS9 信号。他们的系统基地

址是:0xE0000000。 LED 的连接,支持 3.3V 电源和 5V 电源选择,通过焊装不同的电阻来控制。如果焊接 R84,没有焊接 R85,系统使用 5V 电源控制 LED;如果焊接 R85,没有焊接 R84,系统使用 3.3V电源控制 LED 控制方法如下: 采用 MD[23..20]4bit 连接一个 74LS373 锁存器输出来区分让 4 个 LED 中的哪几个亮起

来。输出 0 信号,灯就提供了电源。锁存器的使能锁存使能通过一个非门与 CPU 的 CS9 连

接。之所以使用了一个非门,是因为锁存器的使能信号为高点平有效而 CPU 的 CS 信号为

低电平有效。 LED 的管脚连接图如下:

58

5.10 以太网 FCC1、FCC2、FCC3

系统扩展板外接的三个以太网口,分别和 CPU 的 FCC1、FCC2、FCC3 连接。关于三个王

口的 MII 时钟信号和控制信号 MDIO、MDCLK、MDINT 的连接如下: 以太网口 1: MII TX 时钟信号:PC22 MII RX 时钟信号:PC23 MDIO:PA7 MDCLK:PA6 MDINT:PC11 以太网口 2: MII TX 时钟信号:PC18 MII RX 时钟信号:PC19 MDIO:PA11 MDCLK:PA10 MDINT:PC12 以太网口 3: MII TX 时钟信号:PC16 MII RX 时钟信号:PC17 MDIO:PA12 MDCLK:PA13 MDINT:PC13

5.11 接口管脚说明

P1 接口:

59

P2 接口:

60

5.12 系统工作频率的配置

系统允许通过不同的电阻搭配,硬件配合系统硬件复位字配置 CPU 的工作频率。配置电阻

位置如下:

硬件复位字配置 CPU 时钟的详细说明,请见 MPC8280 文档 MPC8280EC.pdf 的第 7.1

章节。 当前烧写的硬件复位字是:0x08843242,那么,时钟配置字的高 4bit 就是:0B0010,

那么,允许配置的 CPU 频率如下表所示,如果不能够满足您的要求,请参见 MPC8280EC.pdf文档修改硬件复位字的 Bit[28..31]。

61

第六章 机械结构特性

6.1 核心板

122.6mm x 85.6mm

6.2 扩展板

177.7mm x 133.4mm

62

第七章 核心板使用注意事项

1. VCC5 电压最大范围:4.3V—18V,建议使用的范围:4.7V—5.5V 2. 5V 电源在提供给核心板的时候,在接插件上需要经过 220uF 和 0.1uF 电容的滤

波,每一组电源输入至少需要一个 0.1uF 的电容 3. LocalBus 信号在扩展板上,最好使用 16245 芯片驱动一下,而且,驱动芯片要

放置的尽量靠近接插件。 4. 核心板接口同时提供信号 SMC1RXD (PD8)和 SMC1TXD (PD9),COM_T 和信

号 COM_R,分别是系统监控串口的收发信号,所不同的是,电平不同,COM_T和 COM_R 信号是经过电平转换已经是 RS232 电平了,而 SMC1RXD 和

SMC1TXD 是 TTL 电平,请注意。其核心板的连接原理如下图所示。如果只是

需要监控系统,可以直接将信号 COM_T 和 COM_R 对外连接即可,因为他们

已经经过变压了。

63

5. 复位输入信号/RESET_IN 为输入信号,核心板内部连接上拉电阻,外部不需要

上拉电阻也可正常工作,只需要外部连接一个复位开关接地即可。连接如下图

所示

6. 注意核心板的硬件结构尺寸。

第八章 开发板使用注意事项

以下事项请开发者仔细阅读,出现类似问题,开发板不在保修范围以内。 1. 严禁同时将 ATX 电源和圆脚电源同时插入系统 2. 严禁带点插拔串口接口,容易烧毁系统串口。 3. 系统的网口是 PC 端的,也就是说,如果与 HUB 相连,直接使用网线即可;如

果与 PC 机相连,需要使用交叉线。

第九章 联系我们

网站:http://wjmlink.51.netQQ:19244397 526084604MSN:[email protected][email protected]电话:13811399616 王先生 13683665548 郑先生

64