Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4842278
  • 博文数量: 930
  • 博客积分: 12070
  • 博客等级: 上将
  • 技术积分: 11448
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-15 16:57
文章分类

全部博文(930)

文章存档

2011年(60)

2010年(220)

2009年(371)

2008年(279)

分类: LINUX

2009-02-17 16:08:40

PowerPC是早期Motorola和IBM联合为Apple的MAC机开发的CPU芯片,商标权同时属于IBM和Motorola,并成为他们 的主导成品.IBM主要的PowerPC产品有PowerPC604s(深蓝内部的CPU), PowerPC750,PowerPCG3(1.1GHz).Motorola主要有MC和MPC系列.尽管他们产品不一样,但都采用PowerPC的内 核.这些产品大都用在嵌入式系统中.

我们这里要介绍的,主要是针对IBM在xilinx平台上推出的PowerPC嵌入式内核。本文所写的内容,基本上都是用于XUP大学计划开发板 的,但是其中很多步骤都是通用的,你完全可以在Xilinx ML-403开发板或者其他相应板子上参考这些步骤,它们之间最大的区别就是创建SystemACE时的命令行不同,在相应的部分会具体讲解。应该说不管 什么平台,整个流程都遵从于:

Kernel preparation —》 isntall BSP —》 Build hardware platform —》 Memory test —》 Build kernel image —》 Download

本文假设读者对linux环境下ISE,EDK等工具的操作已经熟悉,并对在XUP开发板上定制基本硬件系统已经熟悉,因此不再详细涉及这方面的问 题。本文作者直接使用linux作为开发环境,因此文章中也不会涉及交叉编译环境的创建,如果你是windows用户,请自行参考网上有关的文章;如果你所使用的操作系统是linux,但对开发环境的建立不熟悉,可以参考我之前写的这篇文章;如果你对硬件系统的定制还不算熟悉,请将问题针对到某一个模块,然后留言询问。

整个文章比较长,从目前已经写了的内容来看,可能要分三个部分发布。这里是第一部分。

基本系统信息

软件:ISE和EDK都是9.1,没有sp,操作系统是ubuntu 7.04;硬件:XUP开发板,usb下载线;基本系统组成:

300MHz PPC
opb_sysace
opb_ethernet (无DMA)
DDR memory controller
opb_uart_16550
plb_bram_if_cntrl(bram选择最大容量)

所有部件都要有中断支持。按照上面的基本要求把系统构建起来,OS先选择standalone,跑一个基本程序看一看。只有确认基本系统正常之后,才可以知道以后移植系统时遇到的毛病是否是硬件原因。

在EDK中创建BSP

首先,打开软件平台设置的选项,按照下列步骤执行:

1. 将PPC_405_0的OS设置为linux_mvl31,我这里的版本是1.01.c
2. 进入Library/OS选项,其中,MEM_SIZE设置成你所用平台上内存的容量,比如是256MB就设置成0×10000000,依此类推。 PLB_CLOCK_FREQ_HZ是你PLB总线的频率,XUP是100MHz,也就是100000000,其他类型开发板自行修改。 TARGET_DIR是你用于存放BSP的路径,注意,路径千万不能有空格。
3. 添加硬件,在connected_periphs里面,不过一般点进去之后就都已经帮你自动添加好了。
4. 执行libgen。

如果一切顺利,就可以生成相应的bsp了。如果在这个过程中出现了什么问题,都可以去EDK安装目录下的sw/ThirdParty/bsp/linux_mvl31_v1_00_a/data/目录去看看相应的tcl文件,它们是用来实际执行BSP操作的命令。

到这里,你就已经有了可工作的bit流文件以及为Linux准备的BSP文件了。但有趣的是,我发现BSP的作用很小,所有edk9.1生成的文 件,你所需要的可能就只有xparameters.h 和 xparameters_ml403.h真正有用,其它文件作用很少,如果你下载的Linux源代码是montavista的东西,甚至连这两个文件都不 用了。当然,如果使用的电路板是自定制的,像xparameters_ml403.h就会有不同的macro定义,因此这两个是一定要覆盖默认的内核目录 下的同名文件的。出于保险,最后还是使用上这个BSP就行了。

创建用于ppc的交叉编译环境

通常,程序是在一台计算机上编译,然后再分布到将要使用的其他计算机上。当主机系统(运行编译器的系统)和目标系统(产生的程序将在其上运行的系 统)不兼容时,该过程就叫做交叉编译。建立一个交叉编译工具链是一个相当复杂的过程,如果你不想自己经历复杂的编译过程,网上有一些编译好的可用的交叉编 译工具链可以下载。在这里,我们直接通过现成的脚本来建立ppc的交叉编译环境,如果你对自己编译建立这个环境感兴趣,可以自行参考文章如何为嵌入式开发建立交叉编译环境

考虑到绝大多数人使用的都是x86电脑,因此,建立适宜于ppc的交叉编译环境就是必要的。首先,到来 下载crosstoll的安装包。下载完后解压缩,进入文件夹,你就能看见很多类似于demo-arch.sh这种形式的脚本。每一种arch,对应的自 然就是一种硬件平台,而我们这里要使用的,就是demo-powerpc-405.sh。如果你对这套工具感兴趣,可以参阅其。这里,笔者只根据自己的开发环境来进行讲解。

在使用之前,需要先对脚本编辑一下。打开demo-powerpc-405.sh,TARBALLS_DIR是相关下载资源的存放地,因为在安装交 叉编译环境之前,需要从网上下载glibc,gcc等的源代码包。RESULT_TOP的值是安装后的目录,自行根据需要修改。另外找到这句话:

eval `cat powerpc-405.dat gcc-4.1.0-glibc-2.3.6.dat` sh all.sh –notest
ls

将其中的gcc-4.1.0-glibc-2.3.6.dat修改为适合你平台的dat文件。可以先看看文件夹里面有哪些dat文件,gcc-4.1.0表示gcc的版本,glibc-2.3.6表示glibc的版本,这些版本号都要和你实际机器上的版本号相对应。

如果不准备修改目录,就在/opt目录下自己建一个crosstool目录,并将其权限改为可写,最后执行脚本:

sudo mkdir /opt/crosstool
sudo chown $USER /opt/crosstool
sh demo-powerpc-405.sh

之后,脚本就会根据你所修改的选项,去网上找相应版本的gcc,gdb,glibc,内核等,下载并编译安装。具体所消耗的时间是和你的网速息息相 关的。如果你所在的网络速度很慢,建议你还是不要尝试了,换个网络再测试吧。或者你可以看看脚本中TARBALLS_DIR目录的值,然后自行下载所需要 的各种工具以及内核的源码包,并自己放到这个目录下,再执行sh demo-powerpc-405.sh即可。唯一需要注意的就是,你自己下载的环境工具源码包的版本需要和demo-powerpc-405.sh里面 指定的版本一致。

所有需要的资源下载完毕之后,并不是就直接执行demo-powerpc-405.sh了,因为直接执行的话可能出现一些问题,所以在之前要先做一些准备步骤:

1. 先unset LD_LIBRARY_PATH,至于为什么,笔者猜测是由于 LD_LIBRARY_PATH 环境变量通常都是由安装程序修改为包括相关库所在的目录,估计是编译环境时不能受已有库的影响,要在编译过程中临时给LD_LIBRARY_PATH 一个值,编译完成之后再改回来。

2. 安装语法分析程序生成器bison/flex,执行

apt-get install bison flex

即可。

3. 将/bin/sh的连接对象从dash改为bash,这是由于我选择的glibc-2.3.6和dash有bug冲突。就算你不是用的glibc-2.3.6,也建议修改。先用

ls -la /bin/sh

看看你的sh链接到底是什么。如果是dash,就要通过

sudo ln -sf /bin/bash /bin/sh

来更改。

进行以上步骤后,再执行demo-powerpc-405.sh ,编译过程就应该比较顺利了。当然这个用时也是比较长的,具体时间取决于机器配置,强烈建议吃个饭,打打球,然后再回来看看~。

环境构建完成之后,该环境下的工具列表如下:

别忘了在PATH变量中增添路径,就是${prefix}/bin,这样你就可以直接使用这些工具了。

阅读(2459) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~