uclinux系统移植到bf561板子上过程学习1

uclinux系统移植
主要工作包括:
1、选择处理器对应的交叉编译器(交叉编译器,运行于通用机上,目的为了编译出能够在特定平台上运行的软件)
2、选择并修改bootloader
3、修改链接文件,定位各个数据段
4、定义系统定时器、控制台
5、编写中断的控制函数
6、定义根文件系统
7、编写其他系统设备驱动
一、开发环境的建立
开发环境包括获取源代码,建立交叉编译环境,建立目标机与主机之间的调试环境。详细一点来说包括
1、开发模式与交叉编译
2、编译工具
3、U-BOOT引导代码
4、linux内核
5、lib库
6、应用程序及根文件系统
开发模式为程序在宿主机上被编译,然后下载到目标机上运行;目标机上的终端通常被重定向到串口,在宿主机上输出(注意宿主机上要运行linux系统);


交叉编译:在某个主机平台上(比如PC上)用交叉编译器编译出可在其他平台上(比如ARM上)运行的代码的过程。
要进行交叉编译,我们需要在主机平台上安装对应的交叉编译工具链(cross compilation tool chain),然后用这个交叉编译工具链编译我们的源代码,最终生成可在目标平台上运行的代码。交叉编译工具链由一套用于编译、汇编和链接内核及应用程序的组件组成,通过编译可以使uClinux内核和应用程序在目标设备上运行。
GNU计划已经开发出的软件包括了一个功能强大的文字编辑器Emacs,C语言编译器GCC,以及大部分UNIX系统的程序库和工具
编译uClinux一般使用GNU开发套件作为交叉编译器工具链,它包括一系列的开发和调试工具,其中包括预处理、编译、汇编和链接4个互相关联的步骤,每一步骤都有相关工具完成,主要工具有:

GCC: 是GNU编译器的前端程序,负责完成预处理和编译过程,生成以.o为后缀的目标文件
AS: 是GNU编译器的汇编器(Assembler),负责把.S或.s为后缀的汇编文件编译成以.o为后缀的目标文件
LD: 是GNU编译器的连结器(Linker),负责把目标文件和库文件连结起来,重定位它们的数据,把所有的符号连结起来;
连接器是将所有编译器和汇编器的输出文件连接成一个二进制映象的工具,二进制映象有很多种不同格式,而Flat、AOUT、COFF、PE和ELF是最常见的几种。链接器输出文件都会出现三个区域,Text(或者Code),Data和BSS区。Text(或者Code)区是只读的代码区。Data区是可读可写的数据区,举例来说,你在程序定义了一个变量并给它赋值5,那么这个“5”就被存储在Data区。而BSS区则是可读可写且没有初始化的数据区。它存储着未赋任何值的数组。注意,BSS区是一个虚拟的区域它不存在于二进制映像中,但当二进制映像被加载后,它就存在于内存中了

GNU Binutils是二进制工具集合,主要包括了上面提到的GNU汇编器和链接器
elf2flt:
elf[exectivelinkedfile]:一种为Linux系统所采用的通用文件格式,支持动态链接和重定位。flat:扁平格式。elf文件有很大的头文件,flat格式对文件头和一些段信息做了简化,可执行程序小,适于嵌入式系统。elf2flt就是将elf格式转换为flt格式

在blackfin平台上建立交叉编译环境需要的工具有:
GCC; Binutils; elf2flt
还需要uclinux内核源码。可以从从blackfin网站下载这些编译器的源代码和内核源码
编译环境建立具体过程为:
1、从blackfin网站下载编译器的源代码
cvs -z9 -d:pserver:anonymous@cvs.blackfin.uclinux.org:/cvsroot/gcc3 binutils
cvs -z9 -d:pserver:anonymous@cvs.blackfin.uclinux.org:/cvsroot/gcc3 elf2flt
cvs -z9 -d:pserver:anonymous@cvs.blackfin.uclinux.org:/cvsroot/gcc3 gcc
2、从“http://blackfin.uclinux.org/frs/?group_id=17”下载内核源代码
3、编译Binutils:
make distclean
./configure --target=bfin-elf --prefix=<output_dir> --exec-prefix=<output_dir>
make
make install
4、复制头文件到编译器安装目录
cp -rf <2.6 kernel>/linux-2.6.x/include <output_dir>/bfin-elf
cp -rf <2.6 kernel>/lib/libc/include <output_dir>/bfin-elf
5、创建输出路径
PATH=<output_dir>/bin:$PATH
6、编译GCC
make disclean
./configure --target-bfin-elf --prefix=<output_dir> --exec-prefix=<output_dir>
make
make install
7、编译Elf2flt
make distclean
./configure --target=bfin-elf --with-libbfd=<binutils_dir>/bfd/libbfd.a
--with-libiberty=<output_dir>/lib/libiberty.a
--with-bfd-include-dir=<binutils_dir>/bfd
--with-inutils-include-dir=<binutils_dir>/include
--prefix=<ourput_dir> --exec-prefix=<output_dir>
mak
emake install
至此交叉编译环境建立

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值