打印

PowerPC平台Linux的移植(一)

[复制链接]
1690|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
星星之火红|  楼主 | 2012-11-5 21:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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用户,请自行参考网上有关cygwin的**;如果你所使用的操作系统是linux,但对开发环境的建立不熟悉,可以参考我之前写的linux下eda工具安装这篇**;如果你对硬件系统的定制还不算熟悉,请将问题针对到某一个模块,然后留言询问。
整个**比较长,从目前已经写了的内容来看,可能要分三个部分发布。这里是第一部分。

相关帖子

沙发
星星之火红|  楼主 | 2012-11-5 21:57 | 只看该作者
基本系统信息
软件: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就行了。

使用特权

评论回复
板凳
星星之火红|  楼主 | 2012-11-5 21:57 | 只看该作者
创建用于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


使用特权

评论回复
地板
星星之火红|  楼主 | 2012-11-5 21:57 | 只看该作者
之后,脚本就会根据你所修改的选项,去网上找相应版本的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,这样你就可以直接使用这些工具了。

使用特权

评论回复
5
xiao6666| | 2012-11-5 22:13 | 只看该作者
不错的东西。

使用特权

评论回复
6
GoldSunMonkey| | 2012-11-5 22:34 | 只看该作者
需要的朋友,多问问题哦。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

101

主题

1782

帖子

22

粉丝