搜档网
当前位置:搜档网 › 安装交叉编译环境和编译U-BOOT

安装交叉编译环境和编译U-BOOT

安装交叉编译环境和编译U-BOOT
安装交叉编译环境和编译U-BOOT

安装交叉编译环境和编译U-BOOT

新手第一次安装编译,按照LINUX书籍介绍的步骤和网上的帖子,一步步做,最后都失败。对我们新手来说找原因很困难,最后将网上搜到的帖子进行汇总,发现有些帖子或书籍没有把步骤写全,最后我按自己的步骤把搜集的资料整理一下和大家分享。

最初在Cygwin下调试,毕竟初学对Linux环境不熟悉,结果不能安装交叉编译环境,即使是用超级用户root也不成功。不得不安装个虚拟机进行试验。按书籍手工制作交叉编译环境也失败,原因到是编译glibc这步失败,找不到原因以后再试,只有先下个编译好的交叉编译环境用。

所用工具:

cross-3.0.tar.bz2

u-boot-1.1.6

环境:Fedora-13-i386 虚拟机7.1

Cross-3.0安装步骤:

一、首先将虚拟机共享文件夹功能开启。方法是关机,在VM菜单里面选择安装VMware tools 然后进入系统,cd /mnt/cdrom进入到光驱的目录下,使用ls可以看到这两个文件。VMwareTools-5.5.0-18463.i368.rpm

和VMwareTools-5.5.0-18463.tar.gz

第1步:cp VMwareTools-5.5.0-18463.tar.gz /tmp,把这个文件拷贝到tmp下

第2步:cd /tmp进入临时目录,ls 查看刚才的文件是否在这个目录下。

第3步:tar zxvf VMwareTools-5.5.0-18463.tar.gz 解压这个文件

第4步:使用第二步命令,进入tmp目录下的vmware-tools-distrib目录

第5步:./vmware-install.pl 执行这个文件,出现提示就回车。安装结束后重启

最后:打开VMware->工具栏—>虚拟机->选择设置->选项共享文件夹

点添加,按提示来添加一个windows下的文件夹。在/mnt/hgfs下就是你在windows 下共享的文件夹了。

二、在WINDOWS下将下载的cross-3.0.tar.bz2拷贝到共享目录。

三、在fedoral下输入su命令更换到root用户,如果不知道密码可用sudo passwd root 设置新密码。在linux的/usr/local目录下建立一个arm文件夹(因为cross-3.0.tar.bz2里面没有arm这个目录要自己建),将cross-3.0.tar.bz2解压到usr/local/arm/下,解压出来后应该在/usr/local/arm/3.0/下有arm-linux、bin等目录。

四、进入/usr/local/arm/3.0/bin目录下,用chmod 755修改所有文件。 ////////有的帖子没有这步

五、在fedoral下用vi /etc/profile;在出现pathmunge 的语句段后添加pathmunge /usr/local/arm/3.0/bin;(要在一行)然后source /etc/profile更新一下就可以用arm-linux-gcc进行编译了。测试是否可用:输入arm-linux-gcc -v,出现版本信息说明工具已经安装成功了,否则会提示bash: arm-linux-gcc: command not found 。可以建个hello.c文档,用arm-linux-gcc -o hello hello.c验证下是否编译成功。到这步就完成了交叉工具的安装。

u-boot移植的具体步骤:

一建立适合的board平台

参照board/smdk2410目录,我们在源码的board下建立自己的平台mini2440,步骤如下.

1 修改顶层Makefile

cd /root/build_uboot/u-boot

vi Makefile

找到:

smdk2410_config : unconfig

@./mkconfig $(@:_config=) arm arm920t smdk2410 NULL s3c24x0

在其后面添加:

mini2440_config : unconfig

@./mkconfig $(@:_config=) arm arm920t mini2440 NULL s3c24x0

各项的意思如下:

arm: CPU的架构(ARCH)

arm920t: CPU的类型(CPU),其对应于cpu/arm920t子目录。

mini2440: 开发板的型号(BOARD),对应于board/mini2440目录。

NULL: 开发者/或经销商(vender)。

s3c24x0: 片上系统(SOC)。

我把我的板子起名叫mini2440,可以依自己的喜好修改

2 建立board/mini2440目录,拷贝board/mini2440下的文件到board/mini2440目录,将smdk2410.c更名为mini2440.c ////////有的帖子没有这步

cp -r board/smdk2410 board/mini2440

3 修改board/mini2440/Makefile

将:

COBJS := smdk2410.o flash.o

改为:

COBJS := mini2440.o flash.o

4 cp include/configs/smdk2410.h include/configs/mini2440.h

5 修改cpu/arm920t/config.mk文件 ////////有的帖子没有这步将:

PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu)

改为:

PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,$(call

cc-option,-mabi=apcs-gnu),)

6 测试编译能否成功:利用上面建好的交叉编译环境

make mini2440_config

提示:Configure for mini2440 board…

接下来输入make或make all ARCH=arm

编译信息最后两行:

arm-linux-objcopy --gap-fill=0xff -O srec u-boot u-boot.srec

arm-linux-objcopy --gap-fill=0xff -O binary u-boot u-boot.bin

到此交叉编译成功。

7 在成功之前,我出现了一个错误,错误信息如下:

march=armv4 -mapcs-32 -Wall -Wstrict-prototypes -c -o cmd_bootm.o cmd_bootm.c

cmd_bootm.c:470:1: directives may not be used inside a macro argument

cmd_bootm.c:469:9: unterminated argument list invoking macro "U_BOOT_CMD"

cmd_bootm.c:477: parse error before ')' token

make[1]: *** [cmd_bootm.o] Error 1

make[1]: Leaving directory `/home/arm/linux/u-boot-1.1.6/common'

make: *** [common/libcommon.a] Error 2

网上也有同样的问题,根据一位网友提供的解决方法处理后,能成功编译过。方法如下:Common/cmd_bootm.c中的代码:

U_BOOT_CMD(

bootm, CFG_MAXARGS, 1, do_bootm,

"bootm - boot application image from memory\n",

"[addr [arg ...]]\n - boot application image stored in memory\n"

"\tpassing arguments 'arg ...'; when booting a Linux kernel,\n"

"\t'arg' can be the address of an initrd image\n" (469)

#ifdef CONFIG_OF_FLAT_TREE

(470)

"\tWhen booting a Linux kernel which requires a flat device-tree\n"

"\ta third argument is required which is the address of the of the\n"

"\tdevice-tree blob. To boot that kernel without an initrd image,\n"

"\tuse a '-' for the second argument. If you do not pass a third\n"

"\ta bd_info struct will be passed instead\n"

#endif

);

(477)

修改为:

#ifdef CONFIG_OF_FLAT_TREE

U_BOOT_CMD(

bootm, CFG_MAXARGS, 1, do_bootm,

"bootm - boot application image from memory\n",

"[addr [arg ...]]\n - boot application image stored in memory\n"

"passing arguments 'arg ...'; when booting a Linux kernel,\n"

"\t'arg' can be the address of an initrd image\n"

"\tWhen booting a Linux kernel which requires a flat device-tree\n"

"\ta third argument is required which is the address of the of the\n"

"\tdevice-tree blob. To boot that kernel without an initrd image,\n"

"\tuse a '-' for the second argument. If you do not pass a third\n"

"\ta bd_info struct will be passed instead\n"

);

#else

U_BOOT_CMD(

bootm, CFG_MAXARGS, 1, do_bootm,

"bootm - boot application image from memory\n",

"[addr [arg ...]]\n - boot application image stored in memory\n"

"\tpassing arguments 'arg ...'; when booting a Linux kernel,\n"

"\t'arg' can be the address of an initrd image\n"

);

#endif

提示说不能U_BOOT_CMD里面不能用#if这些东西,不知道为什么u-boot这样写?没有弄懂。生成u-boot.bin就OK了。接下来可用进行其他工作。

windows安装交叉编译环境

Duanxx的嵌入式学习: Win7安装交叉编译环境 ——Duanxx ——2015-09-15 ARM-linux的交叉编译环境,一般的教程都是在linux系统(比如ubuntu)上安装linaro的arm-linux-gnueabihf编译环境,然后再安装Eclipse和CDT,这样来实现交叉编译环境的安装。 我个人使用这种方法已经使用了几年了,因为我个人比较喜欢使用Linux系统(我使用的是CentOS),所以感觉很自然。但对于初学者而言,如果对linux系统不熟悉,这个方法非常的麻烦,仅仅是为了编译一个可以在ARM-linux上运行的elf文件,还要装虚拟机,学习linux系统的很多使用方法,挺麻烦的。 这两天试了一下在windows平台上安装交叉编译环境,成功了,这里将详细教程写下来,就当是做个记录。 目录 一、安装Eclipse (2) 二、安装CDT (3) 2.1Eclipse Marketplace 安装CDT (4) 2.2 Install New Software 安装CDT方案1 (4) 2.3 Install New Software 安装CDT方案2 (7) 2.4 手动安装CDT (9) 三、安装minGW (10) 四、安装Linaro ToolChain (10) 五、搭建交叉编译开发环境 (13) 六、RSE将可执行文件传输到ARM上 (26)

一、安装Eclipse Eclipse的下载网址是:https://www.sodocs.net/doc/a92298606.html,/downloads/ 会有下面的这个网页,我打红色框的都可以直接使用,这里其实是无所谓的,因为Eclipse是基于插件的开发环境,如果只是为了开发C++的,可以考虑选择后面一个“Eclipse IDE for c/C++ Developers”。 Eclipse解压后就可以直接使用,见下图中的eclipse.exe,同时注意一下freatures和plugins文件夹。

UBOOT命令详解

常用U-boot命令详解(z) 2010-09-30 15:05:52| 分类:学习心得体会|字号订阅 U-boot发展到现在,他的命令行模式已经非常接近Linux下的shell了,在我编译的 U-boot-2009.11中的命令行模式模式下支持“Tab”键的命令补全和命令的历史记录功能。而且如果你输入的命令的前几个字符和别的命令不重复,那么你就只需要打这几个字符即可,比如我想看这个U-boot的版本号,命令就是“ version”,但是在所有的命令中没有其他任何一个的命令是由“v”开头的,所以只需要输入“v”即可。 [u-boot@MINI2440]# version U-Boot 2009.11 ( 4月04 2010 - 12:09:25) [u-boot@MINI2440]# v U-Boot 2009.11 ( 4月04 2010 - 12:09:25) [u-boot@MINI2440]# base Base Address: 0x00000000 [u-boot@MINI2440]# ba Base Address: 0x00000000 由于U-boot支持的命令实在太多,一个一个细讲不现实,也没有必要。所以下面我挑一些烧写和引导常用命令介绍一下,其他的命令大家就举一反三,或者“help”吧! (1)获取帮助 命令:help 或? 功能:查看当前U-boot版本中支持的所有命令。 [u-boot@MINI2440]#help ?- alias for'help' askenv - get environment variables from stdin base - print or set address offset bdinfo - print Board Info structure bmp - manipulate BMP image data boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootelf - Boot from an ELF image in memory bootm - boot application image from memory bootp - boot image via network using BOOTP/TFTP protocol

Ubuntu8.04下的ARM交叉编译工具链(arm-linux-)详细介绍.

原文链接与:https://www.sodocs.net/doc/a92298606.html,/u1/58901/showart_1335004.html 实验室的机器配置太低,速度太慢实在是受不了。说是已经升级了,内存从128M升级到了256M。My god!这年头还能到什么地方找那么多128的内存条去阿?哇嘎嘎。真是服了。。。哈哈 打开一个pdf文件要等老半天。基本上没有办法工作。于是想在自己的笔记本上做一个交叉编译环境。我的机器配置也不高,但是相对于实验室的机器来说已经相当不错了。我的机器是单操作系统:只有Ubuntu8.0.4。感觉和windows XP差不多。XP下有的东西,ubuntu下基本上也有。 ps:昨天是我的生日。昨天上午有课,一下午还有今天上午就是在交叉编译的过程中度过的。感觉整个过程挺考验耐心的。下面进入正题。 待续。。。最近两天内补充完整。 ************************************************************************************* 在进行嵌入式在进行嵌入式开发之前,首先要建立一个交叉编译环境,这是一套编译器、连接器和libc库等组成的开发环境。本文结合自己做嵌入式交叉编译开发工作的经验,同时结合自己的体会,做了一个介绍 随着消费类电子产品的大量开发和应用和Linux操作系统的不断健壮和强大,嵌入式系统越来越多的进入人们的生活之中,应用范围越来越广。 在裁减和定制Linux,运用于你的嵌入式系统之前,由于一般嵌入式开发系统存储大小有限,通常你都要在你的强大的pc机上建立一个用于目标机的交叉编译环境。这是一个由编译器、连接器和解释器组成的综合开发环境。交叉编译工具主要由binutils、gcc 和glibc 几个部分组成。有时出于减小libc 库大小的考虑,你也可以用别的c 库来代替glibc,例如uClibc、

UBoot移植详解

u-boot 移植步骤详解 1 U-Boot简介 U-Boot,全称Universal Boot Loader,是遵循GPL条款的开放源码项目。从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是相应的Linux内核源程序的简化,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。但是U-Boot不仅仅支持嵌入式Linux 系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系统。其目前要支持的目标操作系统是OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks, LynxOS, pSOS, QNX, RTEMS, ARTOS。这是U-Boot中Universal的一层含义,另外一层含义则是U-Boot除了支持PowerPC系列的处理器外,还能支持MIPS、x86、ARM、NIOS、XScale等诸多常用系列的处理器。这两个特点正是U-Boot项目的开发目标,即支持尽可能多的嵌入式处理器和嵌入式操作系统。就目前来看,U-Boot对PowerPC系列处理器支持最为丰富,对Linux的支持最完善。其它系列的处理器和操作系统基本是在2002年11 月PPCBOOT 改名为U-Boot后逐步扩充的。从PPCBOOT向U-Boot的顺利过渡,很大程度上归功于U-Boot的维护人德国DENX软件工程中心Wolfgang Denk[以下简称W.D]本人精湛专业水平和持着不懈的努力。当前,U-Boot项目正在他的领军之下,众多有志于开放源码BOOT LOADER移植工作的嵌入式开发人员正如火如荼地将各个不同系列嵌入式处理器的移植工作不断展开和深入,以支持更多的嵌入式操作系统的装载与引导。 选择U-Boot的理由: ①开放源码; ②支持多种嵌入式操作系统内核,如Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS; ③支持多个处理器系列,如PowerPC、ARM、x86、MIPS、XScale; ④较高的可靠性和稳定性; ④较高的可靠性和稳定性; ⑤高度灵活的功能设置,适合U-Boot调试、操作系统不同引导要求、产品发布等; ⑥丰富的设备驱动源码,如串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、键盘等; ⑦较为丰富的开发调试文档与强大的网络技术支持; 2 U-Boot主要目录结构 - board 目标板相关文件,主要包含SDRAM、FLASH驱动; - common 独立于处理器体系结构的通用代码,如内存大小探测与故障检测;

嵌入式交叉开发环境的建立

与通用计算机上的软件开发不同,嵌入式的编译过程被称为交叉编译,嵌入式系统的软件开发环境被称为嵌入式交叉开发环境。交叉编译就是把在宿主机上编写的高级语言程序编译成可以运行在目标机上的代码,即在宿主机上能够编译生成另一种CPU(嵌入式微处理器)上的二进制程序。交叉开发环境由宿主机和目标机组成,宿主机与目标机之间在物理连接的基础上建立起逻辑连接。 宿主机(Host)是用于开发嵌入式系统的计算机。一般为PC机(或者工作站),具备丰富的软硬件资源,为嵌入式软件的开发提供全过程支持。目标机(Target)即所开发的嵌入式系统,是嵌入式软件的运行环境,其硬件软件是为特定应用定制的。物理连接是指宿主机与目标机通过物理线路连接在一起,连接方式主要有串口、以太网接口和OCD(On Chip Debug)三种方式。逻辑连接指宿主机与目标机间按某种通信协议建立起来的通信连接。在开发过程中,目标机端需接收和执行宿主机发出的各种命令如设置断点、读内存、写内存等,将结果返回给宿主机,配合宿主机各方面的工作。 宿主机上用于嵌入式软件开发的工具软件一般

包括:文本编辑器、交叉编译器、交叉调试器、仿真器、下载器等。 当我们建立完成了嵌入式交叉开发环境后,我们就可以按照如图1所示,在宿主机上编写程序的源代码,使用交叉编译器编译成各个目标模块,使用交叉链接器链接生成可供下载调试或固化的目标程序,通过目标机和宿主机之间的物理连接(串口或网络接口)将目标程序下载到目标机。 图1嵌入式软件编译过程 在这里中,我们是在宿主机的虚拟机(VMware Workstaion )上安装Red Hat Enterprise Linux 5。在Linux环境下,我们一般采用arm-linux-gcc作为交叉编译器,glibc是应用程序编程的函数库文件软件包,binutils用作二进制程序处理工具。这样一些软件构成了Linux下的交叉编译工具链。 通常构建交叉工具链有3种方法: (1)分步编译和安装交叉编译工具链所需要的库和源代码,最终生成交叉编译工具链;

嵌入式交叉编译环境的搭建

实验二、嵌入式交叉编译环境的搭建 1、实验目的: 通过本实验使学生掌握交叉编译环境的建立,了解在S3C2440上交叉编译环境搭建的原理及步骤。 2、实验设备及说明 1、安装ubuntu10及vmware的计算机 2、天嵌2440的开发板 3、实验指导书 4、天嵌开发板的超级终端设置 5、天嵌开发板开发文档 6、TQ2440使用手册v2.3---20100125 3、实验内容和步骤 1、安装交叉编译器:EABI4.3.3 ●解压EABI 工具包 命令:tar zxvf /mnt/hgfs/(根据本机压缩包存储路径输入)/EABI 4.3.3.tar.gz –C / ##将压缩包解压到根目录下 ●添加路径至全局变量PATH中 命令:PATH=$PAHT:/opt/EmbedSky/4.3.3/bin (此路径应根据本机的具体情况输入) ●查看全局变量PATH 命令:echo PATH ###查看刚才的添加是否成功 ●查看交叉编译命令是否能够使用 命令:arm-linux-gcc –v ###如果刚才解压、添加变量成功,此时输入命令后,即可以显示命令的版本信息。

2、minicom

●在线安装minicom 命令:apt-get install minicom ●在命令行中键入“minicom”,这就启动了minicom软件。 ●Minicom在启动时默认会进行初始化配置minicom -s ?CTRL+A Z,来查看minicom的帮助 ?CTRL-A O配置minicom的串口参数,选择“Serial port setup”子项,上面列出的配置是minicom启动是的默认配置,用户可以通过键入每一项前的大写字母,分别对每一项进行更改.要对波特率、数据位和停止位进行配置,键入“E”,在该配置界面中,可以键入相应波特率、停止位等对应的字母,即可实现配置,配置完成后按回车键就退出了该配置界面。在确认配置正确后,可键入回车返回上级配置界面,并将其保存为默认配置。 ?

嵌入式操作系统实验一建立交叉编译环境

嵌入式操作系统实验一建 立交叉编译环境 Last updated on the afternoon of January 3, 2021

嵌入式操作系统实验报告 队友:张圣苗亚 实验内容 1、准备工作工作:安装virtualbox虚拟机工具,并安装系统、增强型工具,实现共享文件夹的自动挂载。 2、利用crosstool提供的脚本安装和相关资源编译面向的ARM的GCC工具。 详细内容1:安装虚拟机软件和虚拟机时要完成的主要步骤有:安装virtualbox,建立一台虚拟机,分配内存和硬盘,指定共享文件夹(主机和虚拟机可共同操作),指定操作系统镜像文件路径(相当于光盘,第一次启动时安装),安装虚拟操作系统,安装增强工具包,实现共享文件夹的自动挂载。有几点需要注意: 1、虚拟硬盘尽量分配大一些,之后再扩就比较麻烦。 2、共享文件夹不要有中文路径,不然挂载后看不到中文名称文件。 3、安装操作系统时,不能断网,需要下载各种资源,不然会异常。 详细内容2需要安装与脚本相关的工具,需要修改crosstool中的配置文件以指定编译的目标位arm-linux。需要修改需要的资源 实验步骤 实验准备: 在实验准备中,在安装完增强工具包()并重启之后,需要实现对共享文件夹的自动挂载,只需要修改etc目录中的配置文件,是很多linux系统管理员的偏爱,因为凡是需要随系统自动启动的服务、程序等,都可以放在里面。 $sudomkdir/mnt/share $sudomount-tvboxsfembedded/mnt/shared 上面三句话实现了将共享文件夹embeded挂载到了share上。 gedit/etc/ 将第2句命令添加在exit之前,实现了自动挂载功能。 实验一 一、搭建编译环境 1、安装于脚本运行相关及其他的工具bison、flex、build-essential、patch、libncurses5-dev。

ubuntu10.04全过程创建交叉编译环境

ubuntu10.04下建立交叉编译工具链(支持软浮点)全过程 参考了网上的不少的资料,花了五个小时终于完成了,记录下全过程供大家分享。 用到的源码包如下,建议新手全部放在/home/usr/downloads/ 目录下。以下操作在用户权限下进行。 ======================================================================= arm-linux-gcc-3.4.1.tar.gz glibc-2.3.3.tar.gz linux-2.6.8.tar.gz crosstool-0.43.tar.gz binutils-2.15.tar.gz glibc-linuxthreads-2.3.3.tar.gz binutils-2.18.tar.gz --安装用 编译一次至少要花半个小时,如果因为依赖软件没有安装中途会报错退出,只有从头再来,那样很浪费时间的。 sudo apt-get install bison flex build-essential patch libncurses5-dev 由于ubuntu10.04自带的ld ,as版本太高的原因,需要安装binutils的2.18版本,然后替换系统中的2.20版本。方法如下: $cd downloads $tar xzvf binutils-2.18.tar.gz $cd binutils-2.18 $./configure --prefix=/tmp/binutils --disable-nls (-prefix后面的是生成可执行文件存放的位置可以自己定义) $make all $make install 编译成功后在/tmp/binutils/bin/中就生成了ld和as程序的可执行文件 重新链接/usr/bin/ld 和/usr/bin/as文件 $sudo rm /usr/bin/ld /usr/bin/as //删除2.20的ld,as $sudo ln –s /tmp/binutils/bin/ld /usr/bin/ $sudo ln –s /tmp/binutils/bin/as /usr/bin/ 然后可运行ld –v 和as –v 查看版本是否为2.18。 安装2.18版本可解决出现的 ld as " version too old "问题。 2. ubuntu10.04下默认的GCC版本是4.4.3,但这个不是版本越高越好,版本太高,对语法什么的要求也高,编译不成功,降低版本吧: #sudo apt-get install gcc-4.1 //安装4.1的GCC,需要联网 #sudo rm /usr/bin/gcc //删除之前4.4.3的快捷方式,4.4.3的GCC并未删除#sudo ln -s /usr/bin/gcc-4.1 /usr/bin/gcc //建立4.1的快捷方式 这是由于crosstool中定义了GCC的版本的上下线,最高也就到4.1,在其配置的时候会对这个版本信息进行检测,不在其规定范围就报错了。 3.修改sh版本 如果运行

UBoot源码分析1

?UBoot源码解析(一)

主要内容 ?分析UBoot是如何引导Linux内核 ?UBoot源码的一阶段解析

BootLoader概念?Boot Loader 就是在操作系统内核运行之前运行 的一段小程序。通过这段小程序,我们可以初始 化硬件设备、建立内存空间的映射图,从而将系 统的软硬件环境带到一个合适的状态,以便为最 终调用操作系统内核准备好正确的环境 ?通常,Boot Loader 是严重地依赖于硬件而实现 的,特别是在嵌入式世界。因此,在嵌入式世界 里建立一个通用的Boot Loader 几乎是不可能的。 尽管如此,我们仍然可以对Boot Loader 归纳出 一些通用的概念来,以指导用户特定的Boot Loader 设计与实现。

UBoot来源?U-Boot 是 Das U-Boot 的简称,其含义是 Universal Boot Loader,是遵循 GPL 条款的开放源码项目。最早德国 DENX 软件工程中心的 Wolfgang Denk 基于 8xxROM 和 FADSROM 的源码创建了 PPCBoot 工程项目,此后不断 添加处理器的支持。而后,Sysgo Gmbh 把 PPCBoot 移 植到 ARM 平台上,创建了 ARMBoot 工程项目。最终, 以 PPCBoot 工程和 ARMBoot 工程为基础,创建了 U- Boot 工程。 ?而今,U-Boot 作为一个主流、通用的 BootLoader,成功地被移植到包括 PowerPC、ARM、X86 、MIPS、NIOS、XScale 等主流体系结构上的百种开发板,成为功能最多、 灵活性最强,并且开发最积极的开源 BootLoader。目前。 U-Boot 仍然由 DENX 的 Wolfgang Denk 维护

嵌入式Linux开发交叉编译器的安装

实验三嵌入式Linux开发交叉编译器的安装 班级:B08511 姓名:张媛媛学号:20084051112 成绩: 一、实验目的 安装ARM平台下的嵌入式Linux开发的交叉编译器arm-linux-gcc,编译简单的程序并通过NFS方式运行于开发板上,比较与gcc生成的可执行文件的不同; 二、实验设备 硬件:PC机开发板 三、实验原理 嵌入式系统的交叉开发环境一般包括交叉编译器、交叉调试器和系统仿真器,其中交叉编译器用于在宿主机上生成能在目标机上运行的代码,而交叉调试器和系统仿真器则用于在宿主机与目标机间完成嵌入式软件的调试。在采用宿主机/目标机模式开发嵌入式应用软件时,首先利用宿主机上丰富的资源和良好的开发环境开发和仿真调试目标机上的软件,然后通过串口或者用网络将交叉编译生成的目标代码传输并装载到目标机上,并在监控程序或者操作系统的支持下利用交叉调试器进行分析和调试,最后目标机在特定环境下脱离宿主机单独运行。 本次实验涉及到的是嵌入式Linux开发的交叉编译器arm-linux-gcc,从体系结构角度来讲,借助其编译生成的程序是由ARM平台下机器指令构成的可执行程序。 四、实验内容 (1)arm-linux-gcc-3.4.1.tgz为编译器的文件压缩包(实验室机器中位于windows系统的“c:\嵌入式Linux实验\Tools”),为3.4.1版本的交叉编译工具,用来编译常用的一些代码;可通过虚拟机与Windows系统的共享文件夹将其拷贝到Linux系统中; 安装命令:tar xvfz arm-linux-gcc-3.4.1.tgz –C / (2)设置环境变量 可以在/etc/bash.bashrc文件中加入: export PATH=$PATH:/usr/local/arm/3.4.1/bin 就可以直接使用arm-linux-gcc的一些命令; (3)查看arm-linux-gcc编译器版本 输入arm-linux-gcc –v可查看编译器版本,如图3-1: 图3-1 编译器版本

uboot环境变量总结

Common目录下面与环境变量有关的文件有以下几个:env_common.c,env_dataflash.c,env_eeprom.c,env_flash.c,env_nand.c,env_nowhere.c,env_nvram.c,environment.c。 env_common.c中包含的是default_environment[]的定义; env_dataflash.c,env_eeprom.c,env_flash.c,env_nand.c, env_nvram.c 中包含的是相应存储器与环境变量有关的函数:env_init(void),saveenv(void),env_relocate_spec (void),env_relocate_spec (void),use_default()。至于env_nowhere.c,因为我们没有定义CFG_ENV_IS_NOWHERE,所以这个文件实际上没有用。 environment.c这个文件时是我真正理解环境变量的一个关键。在这个文件里定义了一个完整的环境变量的结构体,即包含了这两个ENV_CRC(用于CRC校验),Flags(标志有没有环境变量的备份,根据CFG_REDUNDAND_ENVIRONMENT这个宏定义判断)。定义这个环境变量结构体的时候还有一个非常重要的关键字: __PPCENV__,而__PPCENV__在该.c文件中好像说是gnu c编译器的属性,如下: # define __PPCENV__ __attribute__ ((section(".text"))) 意思是把这个环境变量表作为代码段,所以在编译完UBOOT后,UBOOT的代码段就会有环境变量表。当然,这要在我们定义了ENV_IS_EMBEDDED之后才行,具体而言,环境变量表会在以下几个地方出现(以nand flash为例): 1、UBOOT中的代码段(定义了ENV_IS_EMBEDDED), 2、UBOOT中的默认环 境变量, 3、紧接UBOOT(0x0 ~ 0x1ffff)后面:0x20000 ~ 0x3ffff 之间,包括备份的环境变量,我们读取,保存也是对这个区域(即参数区)进行的。3、SDRAM中的UBOOT中,包括代码段部分和默认部分,4、SDRAM中的melloc分配的内存空间中。 Environment.c代码如下: env_t environment __PPCENV__ = { ENV_CRC, /* CRC Sum */ #ifdef CFG_REDUNDAND_ENVIRONMENT 1, /* Flags: valid */ #endif { #if defined(CONFIG_BOOTARGS) "bootargs=" CONFIG_BOOTARGS "\0" #endif #if defined(CONFIG_BOOTCOMMAND) "bootcmd=" CONFIG_BOOTCOMMAND "\0" #endif #if defined(CONFIG_RAMBOOTCOMMAND) "ramboot=" CONFIG_RAMBOOTCOMMAND "\0"

交叉编译环境的搭建简介(精)

交叉编译环境的搭建简介 在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。简单地说,就是在一个平台上生成另一个平台上的可执行代码。这里需要注意的是所谓平台,实际上包含两个概念:体系结构(Architecture、操作系统(Operating System。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。举例来说,我们常说的x86 Linux平台实际上是Intel x86体系结构和Linux for x86操作系统的统称;而x86 WinNT平台实际上是Intel x86体系结构和Windows NT for x86操作系统的简称。 有时是因为目的平台上不允许或不能够安装我们所需要的编译器,而我们又需要这个编译器的某些特征;有时是因为目的平台上的资源贫乏,无法运行我们所需要编译器;有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。 交叉编译这个概念的出现和流行是和嵌入式系统的广泛发展同步的。我们常用的计算机软件,都需要通过编译的方式,把使用高级计算机语言编写的代码(比如C代码编译(compile成计算机可以识别和执行的二进制代码。比如,我们在Windows平台上,可使用Visual C++开发环境,编写程序并编译成可执行程序。这种方式下,我们使用PC 平台上的Windows工具开发针对Windows本身的可执行程序,这种编译过程称为native compilation,中文可理解为本机编译。然而,在进行嵌入式系统的开发时,运行程序的目标平台通常具有有限的存储空间和 运算能力,比如常见的 ARM 平台,其一般的静态存储空间大概是16到32MB,而CPU的主频大概在100MHz到500MHz之间。这种情况下,在ARM 平台上进行本机编译就不太可能了,这是因为一般的编译工具链(compilation tool chain需要很大的存储空间,并需要很强的CPU 运算能力。为了解决这个问题,交叉编译工具就应运而生了。通过交叉编译工具,我们就可以在CPU能力很强、存储控件足够的主机平台上(比如PC上编译出针对其他平台的可执行程序。

UBOOT详细解读

大多数bootloader都分为stage1和stage2两部分,u-boot也不例外。依赖于CPU体系结构的代码(如设备初始化代码等)通常都放在stage1且可以用汇编语言来实现,而stage2则通常用C语言来实现,这样可以实现复杂的功能,而且有更好的可读性和移植性。 1、Stage1 start.S代码结构 u-boot的stage1代码通常放在start.S文件中,他用汇编语言写成,其主要代码部分如下:(1)定义入口。由于一个可执行的Image必须有一个入口点,并且只能有一个全局入口,通常这个入口放在ROM(Flash)的0x0地址,因此,必须通知编译器以使其知道这个入口,该工作可通过修改连接器脚本来完成。 (2)设置异常向量(Exception Vector)。 (3)设置CPU的速度、时钟频率及终端控制寄存器。 (4)初始化内存控制器。 (5)将ROM中的程序复制到RAM中。 (6)初始化堆栈。 (7)转到RAM中执行,该工作可使用指令ldr pc来完成。 2、Stage2 C语言代码部分 lib_arm/board.c中的start arm boot是C语言开始的函数也是整个启动代码中C语言的主函数,同时还是整个u-boot(armboot)的主函数,该函数只要完成如下操作: (1)调用一系列的初始化函数。 (2)初始化Flash设备。 (3)初始化系统内存分配函数。 (4)如果目标系统拥有NAND设备,则初始化NAND设备。 (5)如果目标系统有显示设备,则初始化该类设备。 (6)初始化相关网络设备,填写IP、MAC地址等。 (7)进去命令循环(即整个boot的工作循环),接受用户从串口输入的命令,然后进行相应的工作。 3、U-Boot的启动顺序(示例,其他u-boot版本类似) cpu/arm920t/start.S @文件包含处理 #include @由顶层的mkconfig生成,其中只包含了一个文件:configs/<顶层makefile中6个参数的第1个参数>.h #include #include

2014完整ARM嵌入式系统实验报告

郑州航空工业管理学院 嵌入式系统实验报告 (修订版) 20 – 20第学期 赵成,张克新编著 院系: 姓名: 专业: 学号: 电子通信工程系 2014年3月制

实验一ARM体系结构与编程方法 一、实验目的 了解ARM9 S3C2410A嵌入式微处理器芯片的体系结构,熟悉ARM微处理器的工作模式、指令状态、寄存器组及异常中断的概念,掌握ARM指令系统,能在ADS1.2 IDE中进行ARM汇编语言程序设计。 二、实验内容 1.ADS1.2 IDE的安装、环境配置及工程项目的建立; 2.ARM汇编语言程序设计(参考附录A): (1)两个寄存器值相加; (2)LDR、STR指令操作; (3)使用多寄存器传送指令进行数据复制; (4)使用查表法实现程序跳转; (5)使用BX指令切换处理器状态; (6)微处理器工作模式切换; 三、预备知识 了解ARM嵌入式微处理器芯片的体系结构及指令体系;熟悉汇编语言及可编程微处理器的程序设计方法。 四、实验设备 1. 硬件环境配置 计算机:Intel(R) Pentium(R) 及以上; 内存:1GB及以上; 实验设备:UP-NETARM2410-S嵌入式开发平台,J-Link V8仿真器; 2. 软件环境配置 操作系统:Microsoft Windows XP Professional Service Pack 2; 集成开发环境:ARM Developer Suite (ADS) 1.2。 五、实验分析 1.安装的ADS1.2 IDE中包括和两个软件组件。在ADS1.2中建立类型的工程,工程目标配置为;接着,还需要对工程进行、及链接器设置;最后,配置仿真环境为仿真方式。 2.写出ARM汇编语言的最简程序结构,然后在代码段中实现两个寄存器值的加法运算,给出运算部分相应指令的注释。 ; 文件名:

Linux交叉编译环境

开发编译环境 1.交叉编译器的安装,与使用 以ubuntu-14.04.4-desktop-amd64 为例 将附录1的arm_toolchain.tar.gz 选择一个目录COPY过去,(此处以/opt为例) tar zxvf arm_toolchain.tar.gz 修改~/.bashrc 在最后一行添加 将/opt/X3改成你解压的所在目录即可 source ~/.bashrc 在终端查看是否正确,输入arm后按TAB键若出现 安交叉编译器安装正确 若不添加该环境变量,则在使用该编译器时,请使用绝对路径 如: 部分LINUX操作系统,可能存在所需的库并未安装,在编译时若提示未能找到相关库,请自行搜索该库的相应安装 若出现 arm-Linux-gcc /usr/local/arm/4.3.2/bin/arm-linux-gcc: 行3: /usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-gcc: 没有那个文件或目录(No such file or directory) 且进入external-toolchain/bin/ 直接运行./ arm-none-linux-gnueabi-gcc出现同样提示,则可能原因是64位系统需要安装32位相应库 解决方法: 方法一: sudo apt-get install lib32z1 方法二: sudo apt-get install g++-multilib 方法三: $ sudo dpkg --add-architecture i386 $ sudo apt-get update $ sudo apt-get install ia32-libs (工具:附录1-arm_toolchain.tar.gz)

实验二:交叉编译环境的建立

实验二:交叉编译环境的建立 一.实验目的 通过本实验,使学生掌握交叉编译环境的建立,了解在S3C2410平台上交叉编译的工作方式和原理。 二.实验原理和说明 1、minicom 用法: minicom 是安装REDHAT 时安装的软件,它使用配置文件/etc/minirc.dfl,华恒光盘安装时会提供这个文件。 【注意】 minicom 占用串口,能且仅能启动一个minicom,启动第二个时就会报错: Device /dev/modem is locked。其中/dev/modem 就是/dev/ttyS0,即PC 机串口1,它是在光盘安装时执行./arminst 时创建的链接。查看arminst 文件,可以看到如下一行: ln -sf /dev/ttyS0 /dev/modem minicom 所有的操作都以ctrl+A 开始,例如:退出为ctrl+A,松手后再按下Q,则弹出如下一个小框:选Yes 即可退出minicom。 minicom 中最重要的操作就是对其进行配置的修改。这个操作要先ctrl+A,松手后按下o(是字母o,option 之意,不是零),则弹出如下框: 选择第三项“Serial port setup”,则弹出下面框: 键入E 则弹出如下框,可改变波特率:

若要使用PC 机的串口2 来接开发板的串口1 做监控,则要在串口配置框中选择A,即“Serial Device”,则原来的配置框第一行进入编辑模式,将原来的/dev/modem 改为如下的:/dev/ttyS1,即串口2。 退出配置框只需连续按ESC 键即可返回。 2、HHARM9-EDU目录结构介绍 安装过我们提供的光盘以下,会在您的PC机上建立一个HHARM9-EDU的目录。在shell提示符下执行ls命令,可以显示整个PC上的目录结构: [root@…. root]# cd / [root@…. /]# ls HHARM9-EDU boot lost+found opt sbin usr dev home proc tftpboot var initrd misc root tmp bin etc lib mnt [root@….. /]# 其中在PC机(宿主机)的根目录下安装了HHARM9-EDU的目录和opt目录,其中HHARM9-EDU是开发套件的源代码、驱动、以及相应的应用程序。opt是ARM的编译器存放的目录。进入HHARM9-EDU看看。 [root@……. /]# cd / HHARM9-EDU [root@HHARM9-EDU /] # ls Images applications kernel opt.tgz gprs-ppp minirc.dfl ppcboot-2.0.0 record-image SJF 下面对以上目录作简单介绍: (1) /HHARM9-EDU/SJF/ JTAG烧写工具源码目录,在该目录下执行make,即可生成JTAG烧写工具SJF2410,它就是我们通过JTAG烧写ppcboot要用到的文件。 (2) /HHARM9-EDU/ppcboot/ bootloader源码目录,在该目录下简单的make即可生成HHARM9-EDU的bootloader - ppcboot.bin,可以通过修改这些源码来修改bootloader。 『说明』在嵌入式系统中,我们把引导系统的初始化部分的代码统称为bootloader,相当于PC机的BIOS。但在我们提供的很多套件中,有的引导代码用的是ppcboot,有的是u-boot,有的是bootloader等等,但实际烧写到flash中的文件一般为ppcboot.bin、u-boot.bin、bootloader.bin等二进制代码文件。

搭建ppc交叉编译环境

搭建powerpc交叉编译环境 V0.1 ALL Rights Reserved, Copyright ? FUJITSU LIMITED 2013

改版履历 修改日期修改原因版本修改者2013/2/18 初版制成V0.1 yaoxt

目录 1 下载交叉编译器 (4) 1.1从本地共享下载 (4) 1.2 从ftp下载 (4) 2 安装交叉编译器 (4) 2.1 创建挂载点 (4) 2.2 挂载镜像文件 (4) 2.3 安装交叉编译器 (5) 3 配置用户.bashrc文件 (5) 3.1 在用户目录下打开.bashrc文件: (5) 3.2 添加交叉编译器可执行文件路径: (5) 3.3 指定目标机架构类型: (5) 3.4 指定交叉编译器: (5) 4 安装后测试 (6) 5 编译mpc85xx内核 (6) 5.1 下载linux内核源码 (6) 5.2 编译mpc85xx内核 (6) 5.2.1 生成.config配置文件 (7) 5.2.2 配置内核编译选项 (7) 5.2.3 编译内核 (7) 5.2.4 编译动态模块 (7) 5.2.5 安装模块 (7) 5.2.6 生成开发板mpc8544ds的dtb文件 (8)

1下载交叉编译器 ELDK是Embeded Linux Development Kit的缩写,它是德国denx提供的供PowerPC嵌入式Linux移植的完整开发环境编译套件,有:gcc,gdb,binutils等。Eldk目前支持多种PowerPC 处理器: ●ppc_8xx ------> MPC8xx处理器 ●ppc_4xx ------> 不带FPU的IBM 4xx处理器 ●ppc_4xxFP ------> 带FPU 的IBM 4xx 处理器 ●ppc_6xx ------> 6xx处理器 ●ppc_74xx ------> 74xx处理器 ●ppc_85xx ------> 不带DPU的MPC85xx处理器 ●ppc_85xxDP ------> 带DPU 的MPC85xx处理器 1.1从d enx的ftp下载 下载地址:http://ftp.denx.de/pub/eldk/ 本文选用的交叉编译工具的版本为ppc-2008-04-01.iso,下载地址: http://ftp.denx.de/pub/eldk/4.2/ppc-linux-x86/iso/ 1.2 从本地ftp下载 为方便公司内部下载使用,已将ppc-2008-04-01.iso镜像文件下载后上传至本地ftp,ftp地址为:xxxxx 2 安装交叉编译器 2.1 创建挂载点 命令:mkdir /mnt/cdrom 说明:该命令的目的是创建一个镜像文件的挂载点,挂载点/mnt/cdrom 的目录名称和路径可自定义 2.2 挂载镜像文件 命令:sudo mount –o loop ppc-2008-04-01.iso /mnt/cdrom

【整理】Ubuntu 16.04[64bit]交叉编译环境搭建过程图解

开发裸机环境之前需要先搭建其开发环境,毕竟工欲善其事必先利其器嘛。 安装步骤 1、准备工具安装目录 将压缩包arm-Linux-gcc-4.4.3.tar.gz存放在一个目录下,这个目录就是你等会解压缩的目录,以后这个目录就不能随便删掉了,我的存放路径是/home/aldrich/arm,如下图,记住这个路径,等会还会用到。 1. .tar.gz 和.tgz 2. 解压:tar zxvf FileName.tar.gz 3. 压缩:tar zcvf FileName.tar.gz DirName

2、安装软件 使用tar命令:tar zxvf arm-linux-gcc-4.3.2.tgz将software文件夹下的arm-linux-gcc-4.3.2.tgz解压缩安装到当前目录。通过下图可以看到解压成功了,并且解压后的文件存放在了 1. /home/aldrich/arm/arm-linux-gcc-4.3.2 文件夹下,如下图所示,这个存放路径可得记住,如下图 3、配置系统环境变量 配置环境前先坐下普及: Ubuntu不同目录下profile与bashrc的区别

/etc/profile此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行,并从/etc/profile.d目录的配置文件中搜集shell的设置。 /etc/bash.bashrc为每一个运行bash shell的用户执行此文件,当bash shell被打开时,该文件被读取。 ~/.bash_profile每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次,默认情况下,他设置一些环境变量,执行用户的.bashrc文件。 ~/.bashrc该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取。 ~/.bash_logout当每次退出系统(退出bash shell)时,执行该文件。 另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系。 ~/.bash_profile是交互式、login 方式进入bash 运行的。 ~/.bashrc是交互式non-login 方式进入bash 运行的。 通常二者设置大致相同,所以通常前者会调用后者。 登陆系统时shell读取的顺序应该是 /etc/profile ->/etc/enviroment -->$HOME/.profile -->$HOME/.env 原因应该是jtw所说的用户环境和系统环境的区别了 如果同一个变量在用户环境(/etc/profile)和系统环境(/etc/environment)有不同的值那应该是以用户环境为准了

相关主题