您好,  [请登录] [QQ登录]  [支付宝登录[免费注册]

商品分类

分享到: 百度搜藏 搜狐微博 新浪微博 腾讯微博 QQ收藏 人人网 Facebook Twitter

基于MPC850上的嵌入式Linux实现

发布日期:2011-06-01

    过细先容了将Linux-2.4.4版本的内核移植到基于MPC850的嵌入式开辟板上的细致实现和关键技能。
  These papers introduce the implement and key techniques for transplanting Linux-2.4.4 kernel to MPC850 development board.
 
    MPC850是一种多用途的通讯微处理惩罚处罚器,其内部集成了一个PowerPCRISC内核和CPM通讯处理惩罚处罚模块,具有较高的性价比和通讯及网络处理惩罚处罚本领,可用于种种通讯及控制体系中。Linux作为一种强大的开放式利用体系,依附其开放的源代码,高效、稳固、可裁剪的内核等诸多长处,被越来越多地应用于嵌入式体系当中。本文过细先容了将Linux-2.4.4版内核移植到MPC850 Rpxlite board上的细致实现。

  
  1 创建交错编译器
  
    在对内核举行移植之前,须要交错编译器来编译内核和应用步调。这里交错编译是指在主机平台上天生目标机平台上可实行的代码。由于目标机上的硬件资源的限定,不大概在目标机上编译大型步调,以是必须在主机平台上布局一个交错编译器来编译Linux内核。图1形貌了在主机平台上交错编译应用步调到目标机上实行的全进程:用户在主机上编写完成应用步调后,通过摆设在主机上的交错编译器举行编译、连接形成在目标机上可以实行的二进制目标文件,然后通过以太网口、串口将目标文件下载到目标机的内存中实行,着末目标机把步调实行的结果返回到主机的控制表面上。
  
    交错编译器由一应用于编译、汇编和链接内核及应用步调的组件构成。这些组件包括:
  (1)Binutils:用于利用二进制文件的实用东西集。他包括ar,as,objcopy,objdump等。
    (2)Gcc:C编译器,可以编译C,C++等步调。 
    (3)Glibc:Glibc是全部用户应用步调都连接到的C库。

  

   相应源码包可以在ftp://ftp.gnu.org/pub/gnu/上下载,布局交错编译器须要依次实行:configure,make,make install。此中configure比较巨大,此中涉及到的很多开关选项须要分外过细,make和make install可不带恣意参数。在开头创建交错编译器之前须要明白几个告急的配置选项:
  ①host主机平台。
  ②target目标平台。
  ③perfix摆设位置。
    ④xxx-xxxx-xxxxx平台形貌,完备格局是CPU-制造厂商-利用体系。
  假设利用的主机平台是x86,利用体系为Linux,目标板是基于MPC850的嵌入式开辟板,交错编译器的摆设位置是/usr/bcng。可以按以下步调来布局交错编译器(make和make install省略):

    1.1 载源码包
  binutils-2.10.1gcc-2.95.2gcc-core-2.95.2glibc-2.1.3Linux-2.4.4

    1.2 布局binutils
./configure-target=powerpc-linux-prefix=/usr/bcng
  编译完成后,在/usr/bcng/bin目次下将天生交错汇编器和连接器以及一些实用东西。着末应在环境变量PATH中增长路径:PATH=/usr/bcng/bin:$PATH。

    1.3 创建bootstrap gcc
  天生交错汇编器(crossassembler)和交错连接器(crosslinker)之后,如今须要布局一个交错编译器。要是只想编译内核,则只需创建一个bootstrap gcc即可。但要是还想编译其他利用共享库的应用步调就必须布局一个glibc,并重构一个完备的gcc。重构gcc起紧张build一个bootstrap gcc,然后用他来天生重构完备gcc所需的头文件和共享库,着末重构完备的gcc。过细:应利用gcc-core源码包来创建bootstrap gcc。
./configure-target=powerpc-linux-with-newlib-
without-headers-prefix=/usr/bcng

    1.4 交错编译Linux内核
  用bootstrap gcc交错编译Linux-2.4.4内核,形成布局gcc所需的目标特定头文件的版本信息(version.h)及标记连接。在Linux-2.4.4根目次下的Makefile文件中输出如下环境变量:
  ARCH:=ppc
  CROSS_COMPILE:=powerpc-linux
  依次实行make menuconfig,make dep,make clean,make zImage来编译Linux内核,编译完成后将在./include/linux目次下形成version.h文件。

    1.5 交错编译Glibc
  交错编译Glibc形成布局完备gcc所需的库。在编译Glibc时要分外过细MPC850不支持浮点运算并且CPUCache不是源码中默认的32 B而是16 B,以是在编译之前,应该对源码举行修改或是下载patch。
在/usr/bcng/powerpc-linux/include下创建2个标记连接asm,linux分别指向linux-2.2.4/include/asm和linux目次。
输出如下环境变量:
  

    完成上述变乱后,就可以配置并交错编译Glibc了。在配置时应当过细:要是利用Linux为目标板的利用体系,则应该打开-enable-add-ons=linuxthreads(须要下载glibe-linuxthreads-2.2.4源码包)选项开关以使glibc库支持Linux多线程。
  

    1.6 重新布局完备的gcc
  编译完Glibc后,就可以利用天生的头文件和库回过头重新布局完备的gcc了。
  

    以上步调完成后,就可以用本身的交错编译东西来编译内核及应用步调了。要是还须要调试器的话,可以下载gdb和gdbserver源码编译天生gdb调试器。

   
2 裁剪Linux内核
  Linux内核的可裁剪性使我们可以大概方便地将内核通过修改、裁剪、编译移植到一个嵌入式体系中。这里以Linux-2.4.4为例(可从从www.kernel.org下载源码)先容怎样对内核举行裁剪和修改,嵌入到MPC850 Rpxliteboard上。

    2.1 内核启动序次
  对Linux内核举行移植,必须对内核的布局及其启动进程有所相识。从内核的布局上看,分为特定于体系布局的部分和与体系布局无关的部分。在内核源码树下,Linux把特定于体系布局的代码放在arch目次下,而所需的头文件放在include目次下。比喻arch/ppc目次下便是特定于PowerPC体系布局的代码。
  内核启动时总是特定于体系布局的部分起首实行,设置硬件寄存器、配置内存映射、实行特定于体系布局的初始化,然后将控制转给内核中与体系布局无关的部分,内核启动流程如图2所示。

  


    (1)CPU复位后,调用存储在ROM中的初始化代码完成对片上配置的须要初始化。
  (2)Bootloader把内核解压到RAM中的指定位置,之后从内核入口地点处调用内核初始化步调(arch/ppc/kernel/head_8xx.S)并转达内核启动参数。
  (3)内核得到体系控制权后,完成特定于体系布局的初始化如:设置克制向量,MMU,BSS等,接着跳转到start_kernel()(init/main.c)开始举行与体系布局无关的内核初始化变乱。
  (3)start_kernel()起首完成对硬件干系部分的初始化,然后初始化定时器、克制、控制表面以及内核内部数据布局(VFS,IPC…)等,着末创建一个init线程。
  (4)init()函数(init/main.c)对配置举行初始化后,挂入root文件体系,着末实行体系调用exec("/sbin/init")创建第一个用户进程。

    2.2 裁剪内核


    固然可以根据本身的须要和硬件配置环境,增长对网络、NFS等的支持。内核配置完成后,menuconfig将在include/linux/下天生autoconf.h宏定义文件,如许就可以根据该文件的定义来交错编译内核了。

    2.3 修改内核源文件
  完成内核配置后,还须要对内核源码中与特定于硬件和体系布局的部分举行修改,通常须要修改如下几方面的代码:
  (1)与体系布局及硬件干系的代码(arch/ppc,include/asm/ppc)。
  (2)内存映射地点。
  (3)配置驱动(/driver、arch/ppc/8xx_io)。修改内核代码时,应过细几点:
  (1)内存映射基地点IMAP_ADDR(include/asmppc/rpxlite.h)应该和bootloader中的定义值雷同。
  (2)内核启动步调的入口地点应和bootloader中定义雷同。
  (3)bootloader转达给内核启动步调的参数地点及序次应该雷同。
  (4)根据SMCs和以太网口的配置,修改arch/ppc/8xx_io/uart.c和enet.c。

    2.4 交错编译内核
  在源码树根目次下的Makefile文件中,输出如下环境变量:

    修改完成后,依次利用make clean,dep,zImage天生压缩内核映像文件vmlinux.gz。

  
  3 root文件体系
  在Linux内核启动后,内核须要挂入一个文件体系作为其root文件体系。在嵌入式体系中通常采取Ramdisk(initrd)和NFS作为Linux的root文件体系。要是利用Ramdisk,则须要制作一个压缩文件体系映像文件。要是利用NFS,就须要在主机上输出包括文件体系的目次。这里扼要先容一下Linux文件体系的底子布局以及怎样制作压缩文件体系映像。

    3.1 Linux文件体系的底子布局
  文件体系必须包括支持完备Linux体系的全部东西,因此他至少应包括:底子文件体系布局,至少含有目次/dev,/proc,/bin,/etc,/lib,/usr;最底子的应用步调,如sh,ls,cp,mv等;最低限度的配置文件,如rc(体系启动脚本),inittab(包括启动进程参数),fstab(要登录的文件体系)等;配置:/dev/console,/dev/ttyS*,/dev/tty*等;底子步调运行所需的函数库。

    3.2 制作压缩文件体系映像
  (1)创建linuxfs目次将所需的文件体系的目次和文件copy到内里。
  (2)dd if=/dev/zero of=ramdisk bs=1k count=6144,创建一个6144 k大小的空文件。
  (3)losetup/dev/loop0 ramdisk,将该文件绑定到一个loopback配置上,形成一个假造盘。
  (4)mke2fs-m 0/dev/loop0,在该假造盘上创建ext2文件体系。
  (5)mount-o loop/dev/loop0/mnt/loop,把假造盘挂到/mnt/loop目次。
  (6)把linuxfs下的文件和目次copy到/mnt/loop目次下,然后卸下这个挂接点。
  着末,用gzip对ramdisk文件举行压缩后,就形成了Linux所需的文件体系的压缩文件。

 
   4 PPCBOOT
  有了Linux内核和文件体系,如今须要一个Bootloader来初始化MPC850 CPU和周边硬件并引导利用体系。PPCBOOT是一种与Linux精密连合的嵌入式Power PCBootloader具有强大的结果、便捷的利用和精夫君机界面。PPCBOOT紧张完成对体系硬件资源(CPU,SDRAM,通讯接口等)的初始化,下载并启动Linux内核。这里以PPCBOOT1.1.6为例先容怎样利用PPCBOOT来引导内核:
  (1)在主机办事器上配置并打开TFTPServer。
  (2)利用PPCBOOT的mkimage东西将内核和文件体系压缩文件转换成PPCBOOT可辨认的映像文件。
  (3)在PPCBOOTShell提示符下设置主机和目标板的IP及内核启动参数等,环境变量如下:

    bootargs是PPCBOOT转达给内核启动的参数,这里表现利用ramdisk作为内核的root文件体系。要是将bootargs设置为:

    则表现利用NFS要领将主机192.168.0.108上的目次/home/bcng/export作为输出的文件体系,挂入到内核作为其root文件体系。
  在体系开辟阶段,通常须要频繁修改文件体系中的文件,利用NFS作为root文件体系好坏常方便的。选择NFS就必须在配置内核时设置对网络及NFS的支持,并且还要在主机办事器上打开NFSServer,在/etc/exports文件中输出与nfsroot变量雷同的目次作为NFS文件体系目次。
  (4)用tftp下载并引导内核。
  要是能过在控制表面终端上看到Linux内核启动的打印信息,着末出现Shell的下令提示符,那就阐发内核已告成移植到MPC850上了。

   
5 结 语
  本文所先容的基于MPC850的嵌入式Linux内核的移植进程,是笔者所办变乱的总结,供读者参考。移植进程并不是千遍划一的,有大概会遇到很多新的标题,这就恳求根据实际环境细致标题细致阐发。根据出现标题标位置认真阐发缘故因由重复修改调试,从而实现内核的告成移植。

    
参考文献

    [1]Motorola Inc.MPC850 family user′s manual.2001.1. 
    [2]Wolfgang Denk.DENXPPCBoot and Linux guide(TQM8xxL).http://www.denx.de/doc/TQM8xxL/2002.11.2. 
    [3]Boas Betzle.Linux for PowerPC Embedded syst ems HOWTO.http://penguinppc.org/embedded-/howto/PowerPC-Embedded-HOWTO.html2001.8.21.