从庖丁解牛说UBOOT如何编译
boot编译
4.建立 boot.img 引导扇区
连接生成的 boot 文件不能直接运行,必须放入软盘(或其他启动介质)中,现使用 bximage 生成一个 1.4 4M 的虚拟软盘(floppy),名字为 boot.img,为 bochs 作准备。
uroot@uroot-pc:~/linux/011$ bximage boot.img ========================================================================
mov ds,ax
mov es,ax
mov [msg1 + 17],ah
!0x07->替换字符串 1 个点符号,喇叭将鸣叫一声
mov cx,#20
!共显示 20 个字符,包括回车换行符
mov dx,#0x1004
!字符串将显示在屏幕第 17 行,第 5 列
mov bx,#0x000c
.org 510
exception(BX_GP_EXCEPTION, 0, 0); break; #endif #endif default: BX_ERROR(("MOV_CdRd: #UD - control register %d index out of range", i->nnn())); exception(BX_UD_EXCEPTION, 0, 0); } } 683 结束
endtext:
.data
enddata:
.bss
endbss:
!
!".globl"伪操作符用于定义随后的标号标识符是外部的或全局的,并且即使不使用也强制引入
petalinux-build_-c_u-boot的编译流程_概述说明
petalinux-build -c u-boot的编译流程概述说明1. 引言1.1 概述本文旨在介绍petalinux-build -c u-boot命令的编译流程。
Petalinux是一款面向嵌入式Linux开发的工具,而U-Boot是一款应用于嵌入式系统的开源引导加载程序。
通过深入了解这两个工具,并对petalinux-build -c u-boot命令进行详细分析,我们可以更好地理解和掌握其编译流程。
1.2 文章结构本文主要分为五个部分:引言、编译流程概述、编译流程详解、注意事项和常见问题解答以及结论。
在引言中,我们将简要介绍文章的内容和目的。
接下来,在第二部分中,我们将概述Petalinux和U-Boot,并重点介绍petalinux-build -c u-boot命令的作用。
第三部分将详细解释编译流程,并包括准备工作、设置环境变量和构建U-Boot镜像等步骤。
在第四部分,我们将讨论常见错误和解决方法,提供编译优化技巧和建议,并指出其他注意事项。
最后,在结论部分,我们将对编译流程进行总结,并展望未来发展。
1.3 目的本文旨在帮助读者全面了解petalinux-build -c u-boot命令的编译流程。
通过讲解Petalinux和U-Boot的基本知识以及具体的编译步骤,读者可以深入了解如何正确地使用该命令,并解决在编译过程中可能遇到的问题。
同时,本文还将提供一些实用的编译优化技巧和建议,以帮助读者提高工作效率。
希望通过本文的阅读,读者能够更好地掌握petalinux-build -c u-boot命令的使用技巧,并在嵌入式Linux开发中取得更好的成果。
2. 编译流程概述:2.1 Petalinux简介:Petalinux是由Xilinx开发的一种嵌入式Linux开发工具套件,用于构建、定制和部署基于Xilinx处理器系统的嵌入式Linux系统。
它提供了一系列工具和文档,方便开发人员进行Linux镜像的配置、编译和调试。
uboot makefile编译过程
uboot makefile编译过程(原创实用版)目录1.U-Boot 编译过程简介2.U-Boot 编译工具链3.U-Boot 编译步骤4.U-Boot 编译选项5.U-Boot 编译常见问题及解决方法正文1.U-Boot 编译过程简介U-Boot(Universal Boot Loader)是一款开源的、通用的 boot loader,广泛应用于嵌入式系统。
U-Boot 的编译过程主要包括以下几个步骤:配置、编译、链接、生成镜像文件。
在编译过程中,需要选择合适的编译工具链、内核版本以及目标硬件平台。
2.U-Boot 编译工具链U-Boot 的编译工具链通常包括以下几个组件:- 编译器(Compiler):如 GCC(GNU Compiler Collection)或者 Clang。
- 汇编器(Assembler):如 gas(GNU assembler)或者 ld(GNU linker)。
- 链接器(Linker):通常与汇编器一同使用,如 ld(GNU linker)。
- 调试器(Debugger):如 GDB(GNU Debugger)。
3.U-Boot 编译步骤U-Boot 编译过程主要包括以下步骤:- 配置(Configure):根据目标硬件平台、内核版本等参数,运行U-Boot 的 configure 脚本进行配置。
配置过程中,可以选择所需的功能、支持的硬件平台、内核版本等。
- 编译(Compile):根据配置结果,编译器会编译源代码,生成.o 文件。
- 链接(Link):链接器将.o 文件链接成可执行文件,生成最终的镜像文件。
- 生成镜像文件(Create Image):镜像文件通常是二进制格式,用于烧写到目标硬件平台。
4.U-Boot 编译选项在编译 U-Boot 时,可以通过添加不同的编译选项来实现特定功能或者优化编译结果。
常见的编译选项包括:- 指定编译器和汇编器:如“CC=gcc”和“AS=gas”。
U-boot介绍及编译的流程
U-boot介绍及编译的流程U-boot介绍及编译的流程[嵌入式]发布时间:2011-10-09 23:56:18U-boot介绍及编译的流程作用:Uboot适用于多种架构、多种操作系统。
目录:进入Uboot目录,可以看到其各级子目录(类似内核)Board:和开发板有关的文件。
每个开发板都有一个子目录。
Common:实现Uboot支持的命令Cpu:与特定CPU架构相关的代码(比如,ARM920T)Doc:文档目录。
很多的文档,值得一读。
Drives:Uboot支持的设备驱动程序都放在该目录,比如网卡。
Include:Uboot使用的头文件。
该目录下configs目录有与开发板相关的配置头文件。
该目录下asm目录有与CPU体系结构相关的头文件。
注意其命名的方法,和开发板的子目录的命名一样,对该开发板进行软硬件的配置。
【这是一个我们在移植时必须修改的文件】编译:Uboot的Makefile从功能上可以分为两个部分:1. 执行每种board相关的配置2. 编译生成uboot.bin文件Uboot.bin的生成分为两个步骤:1. 选择现在使用的是哪个开发板#make EmbedSky_config2. 编译生成u-boot.bin$make CROSS_COMPILE=arm_linux-TQ中用make。
【实际操作流程:】①进入uboot根目录②先清除【这是个好习惯】配置【比内核简单很多】#make EmbedSky_config③编译 #make④得到uboot.bin,拷贝出来。
uboot配置 编译 连接全过程
uboot 配置编译连接全过程分类:Uboot 2011-11-14 20:48 415人阅读评论(1) 收藏举报根据README中Porting Guide 的指示精神,我们要在新板子上移植UBoot,最快速的办法就是查看当前UBoot 代码中是否有对相似于待移植板子的其他板子的支持(这应该又是一个可考虑成为习惯甚至本能的做法。
也即拿到不熟悉的软件包后,看看里面有没有自己熟悉的、或者和自己目前要做的东西很相似的部分,从这个部分入手往往能很快的解决问题)。
很幸运,我们在里面找到了三星公司所生产的SMDK2410参考板,这是三星公司早先为推销其生产的ARM9芯片-S3C2410所推出的一块PCB参考设计板(推出时随板子附加了很多的软硬件资料)。
知道这个后,我们很高兴,因为我们知道我们板子上的CPU——S3C2440正是S3C2410的升级版。
所以,在真正动手移植之前,分析一下新版本UBoot中如何支持SMDK2410的,自然成为接下来要做的事情。
UBoot本身是用GNU工具链开发的,那这就意味着其代码包里面必然会有很多的Makefile文件,因为GNU Make正是用来管理软件项目编译的GNU工具。
而且,正如我们前面说的,UBoot能支持如此多的CPU体系结构和操作系统,那它就必定会有很多的配置选项用于配置。
所以分析支持SMDK2410参考板的具体代码之前,我们必须先弄懂UBoot的配置编译过程。
我们只有对此了然于胸了,才能比较顺利的完成移植。
所幸的是,不像Linux内核代码,UBoot 的代码量并不多,分析起来并不痛苦。
作为UBoot学习移植系列的第一篇文章,我在这里就以SMDK2410板子的支持作为例子,分析新版本UBoot(2010.06)的配置编译过程。
作为前提,你应该知道一些GNU Make以及一些Bash Shell Script的知识。
从UBOOT用户的角度来讲,其编译配置过程倒是非常的简单,只需要在命令行中切换到UBoot目录下输入两个命令:[csicong@juliantec u-boot-2010.06]$ make ARCH=arm CROSS_COMPILE=arm-linux- smdk2410_config[csicong@juliantec u-boot-2010.06]$ make ARCH=arm CROSS_COMPILE=arm-linux-第一个命令完成UBoot for smdk2410参考板的配置,第二个命令则真正编译出所需要的UBoot 二进制映像文件,编译出来之后我们需要将其下载到FLASH中。
u-boot制作编译过程ok
2.1.5 UBOOT的制作过程1.第一步:修改makefile,目的告诉makefile导入的工程名是什么。
1)在/1niuedu/u-boot-1.3.4的Makefile的2494行进行COPY后进行修改,范例如下:将smdk2410_config : unconfig@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0 复制并修改为:edu2440_config: unconfig@$(MKCONFIG) $(@:_config=) arm arm920t edu2440 NULL s3c24x02)交叉编译143 144修改为(很多u-boot为默认,一般不修改,如不同需要修改)ifeq ($(ARCH),arm)CROSS_COMPILE = arm-linux-说明:在顶层Makefile(u-boot文件中)中为开发板添加新的配置选项,使用已有的配置项目为例复制修改如下代码:Smdk2410_config:unconfig(2497行)(告诉makefile导入的工程名是怎么设置的) @./mkconfig$(@:_config=)arm arm 920t smdk2410 NULL s3c24x0 Arm:CPU架构Arm920t:CPU类型,对应cpu/arm920t目录xyd2440:开发板型号,对应board/xyd2440NULL:开发者s3c2440:片上系统(SOC)2.第二步:配置开发板选项,修改board中相应开发板选项1)在board目录中将smdk2410复制,然后修改名字为edu2440。
2)在board/edu2440目录下将smdk2410.c修改为edu2440.c(可能运行不了,那么再做如下修改)将E:\信盈达常用资料库\嵌入式配套资料\mini2440-20100717光盘资料\linux\bootloader\u-boot-1.1.6\board\open24x0里面的:boot_init.c,open24x0.c两个文件copy到board-edu2440文件下面。
uboot编译流程
uboot编译流程U-Boot是一款开源的嵌入式系统引导加载程序,它可以用于启动各种嵌入式系统,如ARM、MIPS等。
下面是U-Boot编译流程的详细介绍。
1. 下载U-Boot源代码U-Boot的源代码可以从官方网站上下载,也可以从GitHub等代码托管平台上下载。
下载完成后,解压到本地目录。
2. 配置编译环境在编译U-Boot之前,需要先配置编译环境。
具体来说,需要安装交叉编译工具链、make工具、gcc等开发工具。
这些工具的安装方法可以参考各自的官方文档。
3. 配置U-Boot在U-Boot源代码目录下,可以找到一个名为“Makefile”的文件,这个文件是U-Boot的主要配置文件。
通过修改这个文件,可以配置U-Boot的编译选项,如编译器、目标平台等。
具体的配置方法可以参考U-Boot官方文档。
4. 编译U-Boot在完成U-Boot的配置后,可以开始编译U-Boot了。
在终端中进入U-Boot源代码目录,执行“make”命令即可开始编译。
编译过程中,会生成一系列的中间文件和最终的可执行文件。
5. 烧录U-Boot编译完成后,会生成一个名为“u-boot.bin”的二进制文件,这个文件就是U-Boot的可执行文件。
接下来,需要将这个文件烧录到目标设备中。
具体的烧录方法可以参考目标设备的官方文档。
6. 测试U-Boot烧录完成后,可以通过串口等方式连接到目标设备,测试U-Boot是否正常工作。
在启动目标设备时,U-Boot会自动运行,并加载操作系统或其他应用程序。
总结:U-Boot编译流程包括下载源代码、配置编译环境、配置U-Boot、编译U-Boot、烧录U-Boot和测试U-Boot等步骤。
其中,配置U-Boot是最关键的一步,需要根据实际情况进行调整。
在编译完成后,需要将U-Boot烧录到目标设备中,并进行测试,以确保U-Boot正常工作。
从庖丁解牛说uboot如何编译
很多人拿到uboot,编译不知如何下手!其实,这个世界上的万事万物,都有一个“纹理”。
我读中学的时候劈柴,如果顺着木头的纹理劈下去很轻易的就劈开了,但如果反其道而行之不但劈不开而且斧头还会弹回来伤人!呵呵,城里出生的孩子是没这个体会,即使现在农村的孩子因为家里都烧液化气也没有这个机会体验了。
庖丁解牛之所以游刃有余,是因为他掌握了牛的纹理,顺着这些纹理就应该很容易。
那么我们的uboot的纹理在哪里呢?很多初学者,拿到这种代码从来没有去看过它的readme或者document!这两个文本文件是非常重要的东西,可惜呀!很多人不去看readme而去请教别人,google,baidu,跑图书馆。
其实,有些东西当你问到别人的时候,聪明的人也是去看readme然后给你解答的。
下面我们就去找uboot的纹理!本文u-boot版本U-Boot 1.1.4我们按正常人的思维(智商90)来分析。
首先,是要编译,那么编译就要执行命令make,而make实际上就是执行makefile文件。
第一次make肯定是不能成功的。
听从观音菩萨的教诲“从哪里来就到哪里去”!make 出问题,我们就去makefile里找原因。
Makefile里有这样一段话:TOPDIR := $(shell if [ "$$PWD" != "" ]; then echo $$PWD; else pwd; fi)export TOPDIRifeq (include/config.mk,$(wildcard include/config.mk))# load ARCH, BOARD, and CPU configurationinclude include/config.mkexport ARCH CPU BOARD VENDOR SOC# load other configurationinclude $(TOPDIR)/config.mkifndef CROSS_COMPILEifeq ($(HOSTARCH),ppc)CROSS_COMPILE =elseifeq ($(ARCH),ppc)CROSS_COMPILE = powerpc-linux-endififeq ($(ARCH),arm)CROSS_COMPILE = /usr/local/arm/2.95.3/bin/arm-linux-endififeq ($(ARCH),i386)ifeq ($(HOSTARCH),i386)CROSS_COMPILE =elseCROSS_COMPILE = i386-linux-endifendififeq ($(ARCH),mips)CROSS_COMPILE = mips_4KC-endififeq ($(ARCH),nios)CROSS_COMPILE = nios-elf-endififeq ($(ARCH),nios2)CROSS_COMPILE = nios2-elf-endififeq ($(ARCH),m68k)CROSS_COMPILE = m68k-elf-endififeq ($(ARCH),microblaze)CROSS_COMPILE = mb-endifendifendifexport CROSS_COMPILE这段脚本就是设置交叉编译路径CROSS_COMPILE,在设置这个路径前要判断我们所用的平台是什么,即ARCH是什么。
uboot移植心得
最近跑完裸机之后,便开始跑系统,但想着裸机与系统之间隔着个Bootloader,反正以前也没怎么深入研究,便说花一到两周时间来搞搞U-BOOT。
参考了fzb和赵春江两位大牛的,也研究了2010.06版本的和2011.06版本两个经典版本,也对比了TQ(我买的板是天嵌的)自己写的U-BOOT,学到了不少,也发现了很多东西,以下便记录以下自己的心得吧,以便以后可以自己参考下。
U-BOOT的两个阶段启动过程:(2010.06经典版来说)第一阶段:start.S的路径位于arch\arm\cpu\arm920t\这段汇编代码一般被称作第一阶段初始化代码。
主要作用是初始化运行环境;初始化内存;重新放置UBOOT代码到内存中;跳入到内存中执行第二段初始化代码1、关闭开门狗,屏蔽所有中断2、设置分频比3、bl cpu_init_crit() 关MMU,初始化内存bl lowlevel_init() 配置内存,修改内存刷新率参数等4、relocate判断当前代码是在NORFLASH还是RAMcopy_loop循环将FLASH代码复制至RAM中5、stack_setup栈设置clear_bss_bss_start到_bss_end之间的数据清06、ldr pc , start_armboot 跳转到第二阶段//=====================================================================第二阶段:board.c的路径位于arch/arm/lib/board.c,这段代码为U-BOOT的第二阶段初始化代码。
主要作用是初始化两个重要数据结构,对SDRAM的内存分配设置,对各种需要用到的外设进行初始化,最后循环跳入main_loop()函数二阶段start_armboot分为board_init_f 和 board_init_r两部分先执行的board_init_f部分:1、为gd数据结构分配地址,并清零2、执行init_fnc_ptr函数指针数组中的各个初始化函数,如下board_early_init_f ,timer_init ,env_init init_baudrate serial_initconsole_init_f display_banner dram_init3、A、分配SDRAM高64KB为TLB,用于U-BOOTB、分配SDRAM下一单元为U-BOOT代码段,数据段,BSS段(这里插一句,原来BSS段是用来存放未初始化的全局变量与静态变量)C、接着开辟malloc空间,存bd , gd , 3个字大小的异常堆空间4、将relorate的地址值赋给gd结构体相应变量(2011.06版本的,用于返回start.S)后执行的board_init_r部分:1、对gd , bd 数据结构赋值初始化2、各种外设初始化:初始化NORFLASH, NANDFLASH,初始化ONENAND FLASH初始化环境变量初始化PCI设置IP地址初始化各类外设:IIC、LCD、键盘、USB初始化控制台建立IRQ中断堆栈初始化以太网初始化跳转表(定义了U-Boot中基本的常用函数库)。
uboot配置和编译过程详解
uboot配置和编译过程详解uboot主Makefile分析11、uboot version确定(Makefile的24-29⾏)Makefile代码部分:[plain]1. VERSION = 12. PATCHLEVEL = 303. SUBLEVEL = 44. EXTRAVERSION =5. U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)6. VERSION_FILE = $(obj)include/version_autogenerated.h(1)uboot的版本号分3个级别:VERSION:主板本号PATCHLEVEL:次版本号SUBLEVEL:再次版本号EXTRAVERSION:另外附加的版本信息这4个⽤.分隔开共同构成了最终的版本号U_BOOT_VERSION ,这个变量记录了Makefile中配置的版本号。
2、include/version_autogenerated.h⽂件是编译过程中⾃动⽣成的⼀个⽂件,所以源⽬录中没有,但是编译过后的uboot中就有了。
它⾥⾯的内容是⼀个宏定义,宏定义的值内容就是我们在Makefile中配置的uboot的版本号。
2、HOSTARCH和HOSTOS[plain]1. Makefile代码部分:2. HOSTARCH := $(shell uname -m | \3. sed -e s/i.86/i386/ \4. -e s/sun4u/sparc64/ \5. -e s/arm.*/arm/ \6. -e s/sa110/arm/ \7. -e s/powerpc/ppc/ \8. -e s/ppc64/ppc/ \9. -e s/macppc/ppc/)10.11. HOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \12. sed -e 's/cygwin.*/cygwin/')13. 注:sed的替换功能14. test = abcdefgabc15. Test1 = $(test) | sed -e s/abc/123/16. Test2 = $(test) | sed -e s/abc/123/g17. @echo $(Test1 )18. @echo $(Test2 )19. 结果:20. 123defabc21. 123def123abc被替换成了123,如果不加字母g,结果就变成了只有第⼀个abc被替换1、HOSTARCH这个名字:HOST是主机,就是当前在做开发⽤的这台电脑就叫主机;ARCH是architecture()的缩写,表⽰CPU的架构。
U-Boot的编译和使用
4.
5.
设置好堆栈。
跳转到 stage2 的 C 入口点。
双实科技--优质嵌入式系统教育资源供应商
5.1.3、Bootloader的启动(6)
Boot Loader 的 stage2 通常包括以下步骤(以执行的先后
顺序):
1. 2. 3. 4. 5.
初始化本阶段要使用到的硬件设备。 检测系统内存映射(memory map)。 将 kernel 映像和根文件系统映像从 flash 上读到 RAM 空间中。 为内核设置启动参数。 调用内核。
双实科技--优质嵌入式系统教育资源供应商
5.1.3、Bootloader的启动(2)
1.网络启动方式 这种方式的开发板不需要配置较大的 存储介质,跟无盘工作站有点类似。 但是使用这种启动方式之前,需要把 Bootloader 安装到板上的EPROM 或 者Flash中。Bootloader 通过以太网 接口远程下载Linux 内核映像或者文 件系统。这种方式对于嵌入式系统开 发来说非常重要。
双实科技--优质嵌入式系统教育资源供应商
5.1.3、Bootloader的启动(5)
Boot Loader的启动流程: Boot Loader 的 stage1 通常包括以下步骤(以执行的先后顺序):
1. 2. 3.
硬件设备初始化。 为加载 Boot Loader 的 stage2 准备 RAM 空间。 拷贝 Boot Loader 的 stage2 到 RAM 空间中。
5.1、初识BootLoader
5.1.1、初识BootLoader 5.1.2、Bootloader的种类 5.1.3、 Bootloader的启动
双实科技--优质嵌入式系统教育资源供应商
03_UBOOT编译使用及修改实验
03_UBOOT编译使用及修改实验班级:软件工程姓名:学号:成绩:实验名称: UBOOT编译使用及修改1.实验目的:了解UBOOT的基本功能、掌握UBOOT在不同开发板上的编译配置方法,掌握UBOOT常用命令的使用方法,使用这些命令配置正确参数启动系统,并通过添加自己的命令了解UBOOT的基本源码结构。
2.实验内容:编译环境搭建UBOOT配置编译UBOOT烧写UBOOT命令使用UBOOT烧写内核与根文件系统UBOOT自定义命令添加3.实验方法:编译UBOOT烧写到OK6410开发板上执行,通过串口执行各UBOOT常用命令,通过USB口下载内核和根文件系统,修改UBOOT源码添加自定义命令并执行。
4.实验过程(一)编译环境搭建1)使用mkdir命令建立个人实验文件夹保存实验资料#mkdir xxxxx (xxxxx为你的名字全拼)实验资料有:Uboot源码包:uboot1.1.6-2012-09-25.tar.gz交叉编译器:arm-linux-gcc-4.3.2.tgz2)安装交叉编译器进入实验文件夹在终端命令行中输入下面的命令安装交叉编译器:# tar xvzf arm-linux-gcc-4.3.2.tgz -C / 编译器解压到/usr/local/arm3)修改环境变量把交叉编译器路径添加到系统PATH环境变量中,这样以后就可以直接在终端窗口中输入arm-linx-gcc 命令来编译程序。
用文本编辑器打开/etc/profile 添加以下四行到该文件中:export PATH=/usr/local/arm/4.3.2/bin/:$PATHexport TOOLCHAIN=/usr/local/arm/4.3.2export TB_CC_PREFIX=arm-linuxexport PKG_CONFIG_PREFIX=$TOOLCHAIN/arm-none-linux-gnueabi4)测试编译器重新启动系统,在终端里面执行arm-linux-gcc -v回车,若有输出编译器的版本信息说明交叉编译器已工作正常;若提示找不到命令,说明环境变量修改有误,请仔细检查修正。
uboot编译过程
uboot编译过程
Uboot是一种开源的引导载入程序,用于嵌入式系统中的启动过程。
它通常被用来引导Linux内核。
以下是uboot编译的过程:
1. 下载uboot源码:在uboot官网上下载最新版本的uboot源码。
2. 配置编译环境:安装交叉编译工具链,例如arm-linux-gcc 等。
3. 配置uboot:进入uboot的根目录,运行make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig命令进行配置。
在这里可以设置uboot的启动参数、内存布局等。
4. 编译uboot:运行make ARCH=arm CROSS_COMPILE=arm-linux-命令进行编译。
编译完成后,会在uboot目录下生成u-boot.bin文件。
5. 烧录uboot:将u-boot.bin文件烧录到板子的Flash中,使其可以在启动时被加载。
6. 测试uboot:使用串口调试工具,连接开发板和PC,确认uboot 能够正常启动,可以接受命令行输入。
以上就是uboot编译的过程。
在实际开发中,还需要进行调试和优化,使uboot能够顺利地引导Linux内核。
- 1 -。
U-Boot编译过程完全分析
U-Boot编译过程完全分析2.1U-BootMakefile分析2.1.1U-Boot编译命令对于mini2440开发板,编译U-Boot需要执行如下的命令:$makemini2440_config$makeall使用上面的命令编译U-Boot,编译生成的所有文件都保存在源代码目录中。
为了保持源代码目录的干净,可以使用如下命令将编译生成的文件输出到一个外部目录,而不是在源代码目录中,下面的2种方法都将编译生成的文件输出到/tmp/build目录:$e某portBUILD_DIR=/tmp/build$makemini2440_config$makeall或$makeO=/tmp/buildmini2440_config(注意是字母O,而不是数字0)$makeall为了简化分析过程,方便读者理解,这里主要针对第一种编译方式(目标输出到源代码所在目录)进行分析。
2.1.2U-Boot配置、编译、连接过程1.U-Boot配置过程(1)定义主机系统架构HOSTARCH:=$(helluname-m|\\ed-e/i.86/i386/\\-e/un4u/parc64/\\-e/arm.某/arm/\\-e/a110/arm/\\-e/powerpc/ppc/\\-e/ppc64/ppc/\\-e/macppc/ppc/)“ed–e”表示后面跟的是一串命令脚本,而表达式“/abc/def/”表示要从标准输入中,查找到内容为“abc”的,然后替换成“def”。
其中“abc”表达式用可以使用“.”作为通配符。
(2)定义主机操作系统类型HOSTOS:=$(helluname-|tr'[:upper:]''[:lower:]'|\\ed-e'/\\(cygwin\\).某/cygwin/')'[:upper:]''[:lower:]'”作用是将标准输入中的所有大写字母转换为响应的小写字母。
uboot编译原理
uboot编译原理一、什么是UBoot是一个复杂的综合的裸机程序,支持各种。
UBoot就是一个Bootloader,用于启动linux系统的程序,它是上电以后的第一个程序。
它最重要的就是初始化DDR,linux在DDR中运行的,由于Linux内存比较大,放到内部的ROM中是远远不够的。
Linux镜像一开始存在EMMC,NAND FLASH , 等外置存储中。
那么我们需要将linux镜像从外置存储拷贝到DDR中,就需要Uboot程序来做。
主要为系统启动做准备。
Uboot获取1. 可得到,但是我们通常不使用这些Uboot,因为做芯片的厂商才了解自己的东西,工程师往往会在设计时考虑使用哪个版本的uboot。
2.SOC厂商官网获得,这个是厂商根据芯片定制版的uboot。
3.开发版厂商,会参考SOC厂商发布的uboot的进行对开发版产品的uboot进行修改。
Uboot启动内核的流程开发版上电以后,就会加载uboot程序,它是上电后的第一个程序。
然后打印出一些uboot信息,读取uimage /zImage , 读取设备树之后就开始启动内核了。
二、编译Uboot下载开发版厂提供的内核,以后编译uboot1.准备交叉编译工具链,在uboot目录内可以检查到,即输入arm-n,按Tab键可补齐即可,如果不行,就将用户目录下的.bashrc文件拷贝过来,然后执行source .bashrc即可。
如果是新系统,就要安装这些依赖源。
sudoapt-getinstall lib32ncurses5 lib32tinfo5 libc6-i3862.编译内核执行下列命令即可完成zxc123@ubuntu:~/IMX6ULL/ebf_6ull_uboot$ export CROSS_COMPILE=arm-linux-gnueabihf-zxc123@ubuntu:~/IMX6ULL/ebf_6ull_uboot$ exportARCH=armzxc123@ubuntu:~/IMX6ULL/ebf_6ull_uboot$ make ARCH=arm mx6ull_14x14_evk_defconfigzxc123@ubuntu:~/IMX6ULL/ebf_6ull_uboot$ make -j12除了上面这种方法以外,也可以在uboot顶层makefile中设置ARCH,CROSS_COMPILE变量的信息。
uboot内核移植和裁剪详细步骤
uboot内核移植和裁剪详细步骤-U-boot内核移植步骤:Linux 3.3.5系统移植1. 将arch/arm/mach-s3c6410/下的,mach-smdk6410.c cp为mach-my6410.c;2. 打开arch/arm/mach-s3c6410/下的Kconfig,仿照MACH_SMDK6410做一个菜单项:config MACH_MY6410bool "MY6410"select CPU_S3C6410select SAMSUNG_DEV_ADCselect S3C_DEV_HSMMCselect S3C_DEV_HSMMC1select S3C_DEV_I2C1select SAMSUNG_DEV_IDEselect S3C_DEV_FBselect S3C_DEV_RTCselect SAMSUNG_DEV_TSselect S3C_DEV_USB_HOSTselect S3C_DEV_USB_HSOTGselect S3C_DEV_WDTselect SAMSUNG_DEV_BACKLIGHTselect SAMSUNG_DEV_KEYPADselect SAMSUNG_DEV_PWMselect HAVE_S3C2410_WATCHDOG if WATCHDOGselect S3C64XX_SETUP_SDHCIselect S3C64XX_SETUP_I2C1select S3C64XX_SETUP_IDEselect S3C64XX_SETUP_FB_24BPPselect S3C64XX_SETUP_KEYPADhelpMachine support for the Pillar MY64103. 打开arch/arm/tools/mach-types文件,这里面存的是机器ID必须要和uboot里面的ID保持一致,将其283行复制添加在后面并修改为: smdk6410MACH_SMDK6410 SMDK6410 1626 xx6410 MACH_XX6410 XX6410 1626 这个机器ID和UBOOT里的机器ID相同时才能启动内核;1. 修改BSP文件mach-my6410.c,内容如下:将mach-mach-my6410.c文件中的所有smdk6410改成my6410(不要改大写SMDK6410的)MACHINE_START(MY6410, "MY6410")//这个要和Kconfig里的MACH-MY6410匹配 2. 在当前目录的Makefile最后一行加上 obj-$(CONFIG_MACH_MY6410) += mach-my6410.o3. 修改顶层的Makefile:ARCH ?= armCROSS_COMPILE ?= /usr/local/arm/4.2.2-eabi/usr/bin/arm-linux- 4. 复制arch/arm/configs/下的s3c6400-defconfig文件,然后将其保存为.config,配置内核支持EABI,再选中XX6410 board这一项,保存退出;5. 执行make menuconfig对内核进行配置:执行make编译执行make zImage生成zImage将uboot根目录下的mkimage拷贝到/user/bin目录下执行make uImage生成uImage通过以上几步linux内核移植完了,剩下就移植驱动了。
uboot 编译流程
uboot 编译流程Uboot是一款开源的嵌入式系统引导程序,它是Linux系统启动的第一步,负责初始化硬件设备、加载内核镜像和设备树等操作。
本文将介绍Uboot的编译流程,帮助读者了解Uboot的构建过程。
一、准备工作在开始编译Uboot之前,需要先准备好交叉编译工具链和Uboot 源代码。
交叉编译工具链是用于在主机上编译嵌入式系统的工具,它能够生成适用于目标平台的可执行文件。
Uboot源代码可以从官方网站或Github上下载,也可以从开发板厂商提供的SDK中获取。
二、配置编译环境在开始编译Uboot之前,需要先配置编译环境。
首先需要设置交叉编译工具链的路径,可以通过export命令设置环境变量,例如:export CROSS_COMPILE=arm-linux-gnueabihf-接着需要配置Uboot的编译选项,可以通过make menuconfig命令进入配置界面,选择需要编译的功能和驱动程序。
在配置完成后,需要保存配置并退出。
三、编译Uboot在配置完成后,可以通过make命令编译Uboot。
编译过程中会生成一系列的中间文件和最终的可执行文件。
编译完成后,可以通过make install命令将Uboot烧录到目标设备中。
四、调试Uboot在Uboot编译完成后,需要进行调试和测试。
可以通过串口连接目标设备,使用minicom或者putty等终端工具进行调试。
在调试过程中,可以查看Uboot的启动日志和调试信息,以便发现和解决问题。
五、Uboot的更新和升级在使用Uboot的过程中,可能需要对Uboot进行更新和升级。
可以通过tftp或者nfs等方式将新的Uboot镜像下载到目标设备中,然后使用Uboot的命令进行更新和升级。
在更新和升级过程中,需要注意备份原有的Uboot镜像,以防止出现问题。
六、总结Uboot是嵌入式系统启动的重要组成部分,它的编译和调试对于嵌入式系统的开发和调试至关重要。
U-Boot 基本编译教程
U-Boot 基本编译教程此教程为入门教程只讲解如何编译 U-Boot,不讲解代码修改及排错等。
此教程适用于 AR 及 QCA 系列的 ar71xx 平台。
若有疑问,或看不懂,请直接回帖,以便楼主修改教程。
准备工作:Linux 系统:32 位 / 64 位均可。
楼主使用的是 Ubuntu 12.10 amd64。
64 位环境下需要安装 32 位库。
如 Ubuntu 下是运行sudo apt-get install libc6:i386 libgcc1:i38 libstdc++5:i386 libstdc++6:i386。
基础编译环境:一般来说每个发行版的 Linux 系统都有包管理器。
例如在 Ubuntu 的 Shell 里运行sudo apt-get install build-essential就可安装好编译环境。
其他的系统请自行百度。
基本的 Linux Shell 基础:这个只能自己想办法解决了。
入门级:入门级使用现成的工具链和编译脚本,使用最少的命令完成代码编译。
使用 TL-MR3420 v1 的代码进行讲解。
1. 下载源代码打开/en/support/gpl/,在左侧选择 3G/4G Routers,然后在列表中选择 TL-MR3420 V1 的代码进行下载。
2. 解压代码这个就随便了,一般解压在主目录。
将下载的 mr3420_3220v1.tar.gz 移动到主目录。
注意:这里压缩包扩展名有误,实际上是 bzip2 压缩的。
打开终端,此时终端应该默认在主目录下,若不在主目录下,就运行cd ~命令进入主目录。
运行命令tar -jxvf mr3420_3220v1.tar.gz以解压代码。
3. 编译代码运行命令cd mr3420_3220v1/build进入代码编译目录。
运行命令make BOARD_TYPE=ap99 fs_prep以创建编译过程所需的目录。
运行命令make BOARD_TYPE=ap99 uboot以开始编译 U-Boot。
u_boot 移植(一)之uboot配置编译
u_boot 移植(一)之uboot配置编译一 、开发环境PC OS : Ubuntu 14.04SOC : 基于ARM Cortex-a8 核的S5PC100开发板 : FSC100u_boot : u-boot-2010.03编译器 : arm-cortex_a8-linux-gnueabi-gcc version 4.4.6二、目标1.Uboot 能从FSC100的 Nand Flash 正常启动2.Uboot 支持DM9000 网卡3.Uboot 支持Nand Flash 读、写、擦除4.Uboot 支持Linux 内核引动好了,接下来就进行移植uboot到FSC100开发板吧 。
三、建立自己的平台1、 下载源码我们可以在下面这个网站上下载最新的和以前任一版本的 ubootftp://ftp.denx.de/pub/u-boot/2、 解压 uboot 源码并进入目录tar zxvf u-boot-2010.03.tar.gzcd u-boot-2010.03u-boot-2010.3 源码中已经支持了SMDKC100了(SMDKC100是三星公司基于SOC : S5PC100设计的一块开发板)。
我们的FSC100使用的SOC也是S5PC100,所以我们只需要稍加修改Uboot支持的SMDC100代码,就可以编译出支持我们的FSC100开发板的uboot了。
1.修改 u-boot 顶层目录下的 Makefile,指定交叉工具链在ifeq ($(HOSTARCH, $(ARCH))CROSS_COMPILE ?=endif下添加:ifeq (arm, $(ARCH))CROSS_COMPILE ?= arm-cortex_a8-linux-gnueabiendif2.在 u-boot 顶层目录下的 Makefile 中添加 fsc100 配置信息在smdkc100_config: unconfig@$(MKCONFIG) $(@:_config=) arm arm_cortexa8 smdkc100 samsung s5pc1xx下添加:fsc100_config: unconfig@$(MKCONFIG) $(@:_config=) arm arm_cortexa8 fsc100 samsung s5pc1xx3. 添加 fsc100 平台信息(1)进入board/samsung目录(2)拷贝smdkc100 为 fsc100(3)进入fsc100目录下修改smdkc100.c 为fsc100.c修改Makefile中的smkc100.o 为fsc100.o(4)进入include/configs目录,拷贝smdkc100.h为fsc100.hinclude/configs目录下的.h文件为对应开发板的配置文件。