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= --exec-prefix=

make

make install

4、复制头文件到编译器安装目录

cp -rf <2.6 kernel>/linux-2.6.x/include /bfin-elf

cp -rf <2.6 kernel>/lib/libc/include /bfin-elf

5、创建输出路径

PATH=/bin:$PATH

6、编译GCC

make disclean

./configure --target-bfin-elf --prefix= --exec-prefix=

make

make install

7、编译Elf2flt

make distclean

./configure --target=bfin-elf --with-libbfd=/bfd/libbfd.a

--with-libiberty=/lib/libiberty.a

--with-bfd-include-dir=/bfd

--with-inutils-include-dir=/include

--prefix= --exec-prefix=

mak

emake install

至此交叉编译环境建立

接下来要移植U-BOOT引导程序,类似于PC机的BIOS,负责把内核映像从FLASH拷贝到SDRAM,然后把执行权交给内核。

首先应该将U-BOOT程序烧到目标板FLASH中,在此需要Visual DSP++在裸板上调试、烧写

具体步骤为:

1、从Blackfin网站下载为BF533移植的U-BOOThttp://blackfin.uclinux.org/frs/?group_id=20&release_id=110

经过简单的移植,U-BOOT也可以很容易的在BF561上跑起来

2、编译得到RAM版U-BOOT(u-boot.dxe),和ROM版U-BOOT(u-boot.bin)

2.1 U-BOOT编译:

make clean

make mrproper

make ezkit561_config

2.2编译ROM版的U-BOOT

make clean

make all

2.3 编译RAM版的U-BOOT

make clean

make u-boot.ram

3、用串口线将开发板同PC机相连,同时把仿真器接到开发板的JTAG口

4、系统上电,启动Visual DSP调试环境z手工配置SDRAM寄存器

EBIU_SDGCTL:0x91998

DEBIU_SDBCTL:0x13

EBIU_SDRRC:0x74A

5、下载u-boot.dxez修改PC指针,将其指向RAM版U-BOOT的入口地址,0x1000000。

6、启动超级终端作为开发板的控制台(115200 8N1)运行U-BOOT程序,在超级终端进行调试

7、下载ROM版U-BOOT并烧写到FLASH中

BOOT> loadb 1000000

BOOT>fl 20000000 1000000 20000

8、重启后即可执行FLASH上烧好的U-BOOT引导代码。

内核镜像的调试与烧写

在uClinux-dist目录下执行make命令将完成全部的编译工作,编译完成后在uClinux-dist/images目录下将生成linux.bin和zImage.bin

linux.bin是包含根文件系统的linux二进制代码;

zImage.bin是将linux.bin压缩后做成的可用于u-boot解压的压缩文件,因为开发板上FLASH大小有限,为了节省空间,因而使用压缩的内核代码。

两种方式调试内核:

1、同U-BOOT一样使用仿真器调试;

通过JTAG我们可以控制flash芯片上所有管脚,这样可以通过向JTAG接口输入相应的指令和数据,用软件的方法在flash芯片的数据、地址和控制总线上产生出Flash器件的读写操作时序,将uClinux的内核映像文件烧写到Flash中

2.通过tftp将内核下载到SDRAM,然后再从SDRAM写到FLASH中

首先需要建立一个tftp服务器,为了简便,可以直接在windows下建这个服务器,然后把内核和文件系统映像放在服务器的目录下,烧写的过程也就是从服务器上把内容写到Flash指定位置

过程为:

利用U-BOOT调试,将内核下载到SDRAM中直接运行

BOOT> tftp 0x1000 linux.bin

BOOT> go 1000

内核烧写:

BOOT> tftp 0x1000 zImage //内核从0x1000处开始存放

BOOT> fl 0x20040000 0x1000 0x100000

重启后如果没有用户输入,U-BOOT将自动引导内核启动。

上面的步骤实现了将U-BOOT和uclinux镜像烧写到flash中

u-boot实现uClinux自举的顺序如下:(u-boot和uClinux的压缩映像都预先驻留在FLASH中.)

Linux程序下载到板子上,uclinux系统移植到bf561板子上过程相关推荐

  1. 将linux内核烧进arm板,ARM开发板上uClinux内核移植

    <ARM开发板上uClinux内核移植>由会员分享,可在线阅读,更多相关<ARM开发板上uClinux内核移植(19页珍藏版)>请在人人文库网上搜索. 1.纷傲掌秀悸篷益哑檀扬 ...

  2. 嵌入式linux程序加密,基于嵌入式操作系统uClinux实现网络安全加密系统的设计

    金融安全支付系统是专门针对金融领域应用需求,实现小型化.便捷.安全的自助交易的软硬件平台,能够为多种应用提供高速安全服务,解决目前交易信息在传输过程中存在的各种安全问题,实现金融信息的安全交易.基于该 ...

  3. linux运行qsql,在Linux中下载安装q:直接在CSV或TSV文件上运行SQL queries

    本文将介绍在Linux中下载安装q,它是一款命令行工具,用途是直接在CSV或TSV文件上运行SQL queries,当然在其他表格文本文件上也是可以直接执行类似SQL的查询.q支持Mac.Linux和 ...

  4. a9 linux 程序下载,金山发布WPS for Linux A9下载

    3月22日消息,金山今日晚间发布了WPS for Linux A9下载,新增了跨程序带格式复制粘贴.表格新增百万行列等八大功能. 新增8大功能: 1.实现众人关注的跨程序带格式复制粘贴功能: 2.表格 ...

  5. debian linux iso下载工具,debian 8.7系统下载

    Debian GNU/Linux 8.7操作系统和大家见面了,在9.0版本未开放下载前,这应该是目前最新好用的版本了,Debian Jessie 8这个系列的发行版不仅免费,而且稳定,是linux操作 ...

  6. xp运行linux软件下载,为你演示xp系统利用U盘直接运行Linux软件 的解决方案

    有很多网友在使用电脑的过程总难免会遇到xp系统利用U盘直接运行Linux软件 的情况.即便很容易处理,还是有朋友不知道xp系统利用U盘直接运行Linux软件 到底如何处理.即便很容易处理,还是有朋友不 ...

  7. a9 linux 程序下载,WPS for Linux A9 发布下载 新增八大功能

    WPS for Linux A9 发布下载 新增八大功能 2013-03-25 09:21:22  来源:官方论坛 扫码可以: 1.在手机上浏览 2.分享给微信好友或朋友圈 摘要: WPS for L ...

  8. STM32之 ESP8266 WIFI 模块驱动代码-可以通过互联网实现数据远程传输(程序稳定,清晰明了非常容易移植到51单片机上)

    成品展示部分 :(ESP8266只是其中一个小部分而已) 实物图: 基于互联网的农业大棚环境监控系统设计 电路图: 农业大棚环境监控设计电路图(彩色)  调试部分:ESP8266 WIFI 模块串口调 ...

  9. php 文件上传系统,php需登录文件上传管理系统

    代码如下 $admin_pw="admin";//管理密码 $uploaddir="upload";//上传目录 session_start(); if($_G ...

最新文章

  1. python加密库_python基于pyDes库实现des加密的方法
  2. C++ stack容器
  3. Win10如何查看我们的电池健康
  4. No CurrentSessionContext configured ------Hibernate
  5. c盘扩展卷是灰色的_技术丨电脑C盘装太满?这几招轻松释放空间
  6. 【UVA - 227】Puzzle (模拟,水题)
  7. PostgreSQL 插入、删除、更新、事务
  8. Xcode6 创建静态库
  9. 3.3 其他因素3.3.1 Fork子进程
  10. 【iOS】Scale Fill、Aspect Fit 和 Aspect Fill 的区别(Content Mode)
  11. 三菱FX系列PLC编程口通讯协议实例
  12. 使用ESP8266/ESP8285做一个WIFI中继(WiFi信号放大器)
  13. python之window下安装python2版的pyv8库 (window install python2 pyv8)
  14. 视频教程-【国内首套H3C V7交换机实战课程-2】以太网端口和链路聚合配置与管理-H3C认证
  15. Python计算离散序列的自相关函数
  16. 当我们在谈论高并发的时候究竟在谈什么?
  17. MIST浏览器不能连接私有链
  18. 2021年G3锅炉水处理考试内容及G3锅炉水处理模拟试题
  19. redis开启rdb和aof后文件正确恢复
  20. 信息学奥赛初赛题目讲解(2)

热门文章

  1. Filter 过滤器拦截路径配置
  2. linux-wifi设置静态IP
  3. 故障转移之starwind共享存储篇
  4. 算法鲁棒性的3个概念
  5. 网络运维基础知识梳理
  6. .netcore-线程池饿死问题分析(CPU空闲,并发量大时请求超时)
  7. 计算从2000年1月1日至今有多少个周一
  8. [转载] 查找光猫超级管理员密码方法
  9. 信息回传(backhaul)的信息率限制, 带宽分配限制
  10. 关于用js实现的日历记事功能