U-Boot2010.09移植文档

合集下载

uboot移植

uboot移植
stage1完成初始化硬件,为stage2准备内存空间,将 stage2复制到内存中,设置堆栈然后跳转到stage2
多阶段的 Boot Loader
Boot Loader 的 stage1 通常包括以下步骤(以执行的先后顺序): ·硬件设备初始化。 ·为加载 Boot Loader 的 stage2 准备 RAM 空间。 ·拷贝 Boot Loader 的 stage2 到 RAM 空间中。 ·设置好堆栈。 ·跳转到 stage2 的 C 入口点。 Boot Loader 的 stage2 通常包括以下步骤(以执行的先后顺序):
Bootloader的通用性质
一.Bootloader与嵌入式linux的关系
一个嵌入式系统从软件角度来看分为四个层次: 1.引导加载程序。包括固化在固件(firmware)中的 boot 代码(可选),和 Boot Loader 两大部分。 2. Linux 内核。特定于嵌入式板子的定制内核以及内核的启动参数。 3. 文件系统。包括根文件系统和建立于 Flash 内存设备之上文件系统。 通常用 ram disk 来作为 root fs。
Bootloader综述 U-boot介绍 u-boot编译及配置 u-boot的启动过程及工作原理 u-boot命令使用说明 u-boot 的移植过程
Uboot渊源
Uboot是德国DENX小组的开发用于多种嵌入式 CPU的bootloader程序, UBoot不仅仅支持嵌入式 Linux系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式 操作系统。UBoot除了支持PowerPC系列的处理器 外,还能支持MIPS、 x86、ARM、NIOS、XScale 等诸多常用系列的处理器。 从下面地址下载uboot的源代码。 /projects/uboot

U-BOOT的启动流程及移植

U-BOOT的启动流程及移植

11U-BOOT的启动流程及移植摘要:嵌入式系统一般没有通用的bootloader,u-boot是功能强大的bootlo ader开发软件,但相对也比较复杂。

文中对u-boot的启动流程作了介绍,详细给出了u-boot在S3C44B0开发板上的移植方法和步骤。

1Bootloader及u-boot简介Bootloader代码是芯片复位后进入操作系统之前执行的一段代码,主要用于完成由硬件启动到操作系统启动的过渡,从而为操作系统提供基本的运行环境,如初始化CPU、堆栈、存储器系统等。

Bootloader代码与CPU芯片的内核结构、具体型号、应用系统的配置及使用的操作系统等因素有关,其功能类似于PC机的BIOS程序。

由于bootloader和CPU及电路板的配置情况有关,因此不可能有通用的bootloader,开发时需要用户根据具体情况进行移植。

嵌入式Linux系统中常用的bootloader有armboot、redboot、blob、u-boot等,其中u-boot是当前比较流行,功能比较强大的bootloader,可以支持多种体系结构,但相对也比较复杂。

bootloader的实现依赖于CPU的体系结构,大多数bootloader都分为stage1和stage2两大部分。

Bootloader的基本原理见参考文献。

u-boot是sourceforge网站上的一个开放源代码的项目。

它可对PowerPC MPC5xx、MPC8xx、MPC82xx、MPC7xx、MPC74xx 、ARM(ARM7、ARM9、StrongARM、Xscale)、MIPS(4kc、5kc)、X86等处理器提供支持,支持的嵌入式操作系统有Linux、Vx-Works、NetBSD、QNX、RTEMS、ARTOS、LynxOS等,主要用来开发嵌入式系统初始化代码bootloader。

软件的主站点是http //sourceforge.net/projects/u-boot。

Uboot_for_mini6410_移植步骤详解

Uboot_for_mini6410_移植步骤详解

这是u-boot-2010.09 针对友善之臂MINI6410移植的最基础版本,只包含了就基本的系统引导,NAND读写,DM9000网卡等等。

但是这个足够开发的方便使用。

今后会陆续添加原先我为mini2440添加的所有功能。

但是此次移植并非我的功劳,首先基本的移植是由Alex Ling <kasimling at >完成的,你可以在这里看到他提交的补丁,但是编译后无法使用,可能是因为host系统不同,对脚本的解析不同,使得spl部分的生成出现问题,只需修改一下nand_spl目录下目标板目录的中config.mk中的PAD_TO := $(shell expr $$[$(TEXT_BASE) + 4096])即可。

DM9000的驱动没有太大的问题(修改了一点可能出现问题的地方,感谢肖工指教),但是原本的u-boot并没有调整所有SROM控制器的配置(其中包括连接DM9000所使用的bank1的总线),我使用了友善带的u-boot的参数配置了一下就好了。

一:/batch.viewlink.php?itemid=1694ftp://ftp.denx.de/pub/u-boot/去这2个网站随便下载都可以下载得到最新或者你想要的u-boot。

现在我将下载u-boot-2010-09,这个也就是最新的版本啦。

下载后把它解压,然后得到u-boot-2010-09的文件夹,然后进去,并且做下面几件事情:1:进入arch这个文件夹,把出arm外的前部文件夹删掉2:进入board这个文件夹,把除samsung外前部文件夹删掉3:进入include/configs,把除smdk6400.h外的所有文件删除。

4: 把顶层目录下有一个叫onenand_ipl的文件夹删除掉,因为没有用到。

5:进入nand_spl/board,把除samsung外全部文件删除掉。

6:再进入arch/arm/cpu文件夹,把除arm1176外其他文件夹删除掉。

UBOOT移植

UBOOT移植

1. u-boot 介绍u-boot 是一个open source 的bootloader,目前版本是0.4.0。

u-boot 是在ppcboot 以及armboot 的基础上发展而来,虽然宣称是0.4.0 版本,却相当的成熟和稳定,已经在许多嵌入式系统开发过程中被采用。

由于其开发源代码,其支持的开发板众多。

唯一遗憾的是并不支持我们现在学习所用samsung 44B0X 的开发板。

为什么我们需要u-boot?显然可以将ucLinux 直接烧入flash,从而不需要额外的引导装载程序(bootloader)。

但是从软件升级的角度以及程序修补的来说,软件的自动更新非常重要。

事实上,引导装载程序(bootloader)的用途不仅如此,但仅从软件的自动更新的需要就说明我们的开发是必要的。

同时,u-boot 移植的过程也是一个对嵌入式系统包括软硬件以及操作系统加深理解的一个过程。

2. u-boot 移植的框架移植u-boot 到新的开发板上仅需要修改和硬件相关的部分。

在代码结构上:1) 在board 目录下创建ev44b0ii 目录,创建ev44b0ii.c 以及flash.c,memsetup.S,u-boot.lds等。

不需要从零开始,可选择一个相似的目录,直接复制过来,修改文件名以及内容。

我在移植u-boot 过程中,选择的是ep7312 目录。

由于u-boot 已经包含基于s3c24b0 的开发板目录,作为参考,也可以复制相应的目录。

2) 在cpu 目录下创建arm7tdmi 目录,主要包含start.S,interrupts.c 以及cpu.c,serial.c几个文件。

同样不需要从零开始建立文件,直接从arm720t 复制,然后修改相应内容。

3) 在include/configs 目录下添加ev44b0ii.h,在这里放上全局的宏定义等。

4) 找到u-boot 根目录下Makefile 修改加入1. ev44b0ii_config : unconfig2. @./mkconfig $(@:_config=) arm arm7tdmi ev44b0ii5) 运行make ev44bii_config,如果没有错误就可以开始硬件相关代码移植的工作3. u-boot 的体系结构1) 总体结构u-boot 是一个层次式结构。

uuboot 移植流程

uuboot 移植流程

uuboot 移植流程U-Boot 移植流程介绍U-Boot是一个开源的引导加载程序,常用于嵌入式系统中。

移植U-Boot可以将其适配到不同的硬件平台上,以满足特定需求。

本文将详细说明U-Boot移植的流程。

准备工作1.硬件选型:根据项目需求,选择适合的硬件平台。

2.获取源代码:从U-Boot官方网站或仓库下载最新版本的源代码。

3.安装交叉编译工具链:根据目标硬件平台的指令集架构,选择合适的交叉编译工具链,并进行安装。

4.了解目标硬件平台:熟悉目标硬件平台的架构、引导方式、存储器布局等相关信息。

移植流程1.配置编译环境:设置交叉编译工具链的环境变量,以确保正确编译U-Boot源代码。

2.配置U-Boot:修改U-Boot源代码中的配置文件,根据目标硬件平台的特性和需求进行相应配置。

–配置目标硬件平台的处理器类型、存储器布局等基本信息。

–配置启动方式,如通过网络(TFTP)或存储介质(SD卡、NAND Flash)等进行启动。

–配置启动流程,如引导加载程序的加载顺序、启动脚本等。

3.添加适配代码:根据目标硬件平台的需求,编写适配代码,包括引导加载程序和设备驱动等。

–引导加载程序:为目标硬件平台选择合适的程序入口点,配置启动参数,加载适配的设备驱动等。

–设备驱动:根据目标硬件平台的外设,编写相应的设备驱动代码,以支持外设的初始化和操作。

4.编译U-Boot:使用交叉编译工具链,编译修改后的U-Boot源代码。

–执行make clean清除之前的编译结果。

–执行make命令编译U-Boot源代码。

5.烧录和运行:将编译生成的U-Boot镜像烧录到目标硬件平台,并进行测试。

–根据目标硬件平台的烧录方式(串口、JTAG等),将U-Boot镜像烧录到目标设备。

–启动目标设备,观察U-Boot的启动信息是否正常输出,检查设备驱动是否正常加载。

6.调试和优化:根据实际情况,进行U-Boot的调试和性能优化。

–使用调试工具进行调试,如调试器、串口打印信息等。

u-boot移植过程

u-boot移植过程

一、U-BOOT的目录结构 u-boot目录下有18个子目录,分别存放管理不通的源程序。

这些目录中所要存放的文件有其规则,可以分成三类。

■第一类目录与处理器体系结构或者开发板硬件直接相关;■第二类目录是一些通用的函数或者驱动程序;■第三类目录是u-boot的应用程序、工具或者文档。

Board:和一些已有开发板相关的文件,比如Makefile和u-boot.lds等都和具体开发板的硬件和地址分配有关。

Common:与体系结构无关的文件,实现各种命令的C文件。

CPU:CPU相关文件,其中的子目录都是以u-boot所支持的CPU为名,比如有子目录arm926ejs、mips、mpc8260和nios等,每个特定的子目录中都包括cpu.c 和interrupt.c和start.S。

其中cpu.c初始化cpu、设置指令cache和数据cache 等;interrupt.c设置系统的各种终端和异常,比如快速中断,开关中断、时钟中断、软件中断、预取中止和未定义指令等;start.S是u-boot启动时执行的第一个文件,他主要是设置系统堆栈和工作发式,为进入C程序奠定基础。

Disk:disk驱动的分区处理代码、Doc:文档。

Drivers:通用设备驱动程序,比如各种网卡、支持CFI的flash、串口和USB 总线等。

Dtt:数字温度测量器或者传感器的驱动Examples:一些独立运行的应用程序的例子。

Fs:支持文件系统的文件,u-boot现在支持cramfs、fat、fdos、jffs2、yaffs 和registerfs。

Include:头文件,还有对各种硬件平台支持的会变文件,系统的配置文件和对文件系统支持的文件。

Net:与网络有关的代码,BOOTP协议、TFTP协议RARP协议和NFS文件系统的实现。

Lib_ppc:存放对PowerPC体系结构通用的文件,主要用于实现PowerPC平台通用的函数,与PowerPC体系结构相关的代码。

U-Boot的移植U-Boot Practically Porting Guide

U-Boot的移植U-Boot Practically Porting Guide
一般不要定义CONFIG_SKIP_LOWLEVEL_INIT,因此,接下来跳转到cpu_init_crit处开始执行:
cpu_init_crit:
/*屏蔽所有中断*/
/*设置时钟源,关闭除FFUART,SRAM,SDRAM,FLASH以外的外设时钟*/
......
#ifdef CFG_CPUSPEED
@$(MKCONFIG) $(@:_config=) arm pxa xsbase270
cerf250_config : unconfig
@$(MKCONFIG) $(@:_config=) arm pxa cerf250
cradle_config : unconfig
@$(MKCONFIG) $(@:_config=) arm pxa cradle
PLATFORM_CPPFLAGS,您可以根据自己的需要进行修改。
笔者的交叉编译器arm-iwmmxt-linux-gnueabi-gcc默认有-march=iwmmxt,遵循新的ARM EABI标准,但仍要保留PLATFORM_CPPFLAGS中的“-mapcs-32,-mabi=apcs-gnu”选项,使用旧的ABI标准来编译,因为u-boot的汇编代码并非按照新的ABI规范编写。可使用-march=armv5te来避免”warning: target CPU does not support interworking”警告。
ifeq ($(ARCH),arm)
CROSS_COMPILE = arm-linux-
endif
即定义交叉编译器名的前缀为arm-linux-,如果您使用的toolchain的名字不同,则需要作相应修改。例如笔者使用的是arm-iwmmxt-linux-gnueabi-gcc,因此要将上面改为:CROSS_COMPILE = arm-iwmmxt-linux-gnueabi-。

u-boot移植

u-boot移植

Uboot 移植5.1 交叉编译环境的搭建5.2移植过程一、在U-boot中建立自己的开发板类型,并测试编译,这个开发板取名叫aking2410,选用Uboot 1.2.0版本 (修改或命令都为加粗)。

下载并解压缩U-boot。

[root@localhost Compile]# tar -jxvf uboot 1.2.0.tar.bz2进入U-boot目录,修改Makefile[root@localhost Compile]#cd u-boot-1.2.0[root@localhost Compile]#gedit Makefile为aking2410建立编译项...smdk2410_config : unconfig@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0 aking2410_config : unconfig@$(MKCONFIG) $(@:_config=) arm arm920t aking2410 akings3c24x0...每项的意思是:arm:CPU的架构(ARCH)arm920t:ARM9系列的一个类型,其对应于cpu/arm920t子目录。

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

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

s3c24x0:片上系统(SOC)。

另外加上自己的交叉编译器的路径,如下:...export ARCH CPU BOARD VENDOR SOC/*added by aking *******start*******/CROSS_COMPILE = /opt/crosstool/arm-linux/bin/arm-linux-/*added by aking********end*********/ifndef CROSS_COMPILEifeq ($(HOSTARCH),ppc)...在/board子目录下建立自己的开发板aking2410目录。

UBOOT移植(NANDFLASH的支持)——初步移植(一)

UBOOT移植(NANDFLASH的支持)——初步移植(一)

UBOOT移植(NANDFLASH的支持)——初步移植(一)这里就仿造《TQ2440的学习—UBOOT移植(NAND FLASH的支持)——初步分析》中展示的S3C2410的NAND FLASH驱动实现S3C2440的NAND FLASH驱动。

还是一步步的来,先实现基本的读写系统。

至于硬件ECC校验就先不实现。

在UBOOT下编写设备支持程序,还是遵循先配置头文件再修改的相关初始化代码的思路来进行。

配置头文件(include/configs/fzb2440.h)关于NAND FLASH的宏配置,有一部分是通用的,一部分是只存在于特定驱动中的。

通用配置CONFIG_CMD_NAND ——开启NAND FLASH支持主要就是支持相关的操作命令,这个可以说是总开关(默认已经包含在config_cmd_default.h中)。

CONFIG_MTD_DEVICE——在使用MTD驱动的规范的时候必须要定义这个宏。

CONFIG_SYS_MAX_NAND_DEVICE——描述有几个NAND FLASH设备。

S3C2440上只有一个接口,所以就只有一个设备。

CONFIG_SYS_NAND_MAX_CHIPS——描述这个NAND FLASH 设备上有几个NAND FLASH芯片。

TQ2440上只使用了一个NAND FLASH芯片,所以就只有一个芯片。

CONFIG_SYS_NAND_BASE——描述NAND操作模块的基地址,S3C2440上是0x4e000000起始的。

CONFIG_SYS_NAND_PAGE_SIZE——描述所使用的NAND FLASH的页大小,TQ2440使用的2K页的芯片(如果不指定,MTD 驱动也会自动尝试获取相关的信息,这里只是为开启硬件校验而定义,最好将其归类于硬件校验支持所需要的宏)。

CONFIG_SYS_NAND_ECCSIZE——这个是表明ECC校验的数据区的大小尺寸(软件校验默认256字节,硬件校验由于S3C2440的这部分功能是针对一个页实现的,所以既然使用2K页的NAND FLASH 所以这部分也就和CONFIG_SYS_NAND_PAGE_SIZE相等)。

u-boot移植详细文档

u-boot移植详细文档

u‐boot移植详细文档作者:Tekkaman Ninja作者博客:整理:Coolbor Xie一、Boot Loader的概念和功能1、嵌入式Linux软件结构与分布在一般情况下嵌入式Linux系统中的软件主要分为以下及部分:(1)引导加载程序:其中包括内部ROM中的固化启动代码和Boot Loader两部分。

而这个内部固化ROM是厂家在芯片生产时候固化的,作用基本上是引导Boot Loader。

有的芯片比较复杂,比如Omap3,他在flash中没有代码的时候有许多启动方式:USB、UART或以太网等等。

而S3C24x0则很简单,只有Norboot和Nandboot。

(2)Linux kernel 和drivers。

(3)文件系统。

包括根文件系统和建立于Flash内存设备之上的文件系统(EXT4、UBI、CRAMFS等等)。

它是提供管理系统的各种配置文件以及系统执行用户应用程序的良好运行环境的载体。

(4)应用程序。

用户自定义的应用程序,存放于文件系统之中。

在Flash 存储器中,他们的一般分布如下:但是以上只是大部分情况下的分布,也有一些可能根文件系统是initramfs,被一起压缩到了内核映像里,或者没有Bootloader参数区,等等。

2、在嵌入式Linux中为什么要有BootLoader在linux内核的启动运行除了内核映像必须在主存的适当位置,CPU还必须具备一定的条件:1. CPU 寄存器的设置: R0=0;R1=Machine ID(即Machine Type Number,定义在linux/arch/arm/tools/mach‐types); R2=内核启动参数在 RAM 中起始基地址;2. CPU 模式: 必须禁止中断(IRQs和FIQs); CPU 必须 SVC 模式;3. Cache 和 MMU 的设置: MMU 必须关闭;指令 Cache 可以打开也可以关闭; 数据 Cache 必须关闭;但是在CPU刚上电启动的时候,一般连内存控制器都没有配置过,根本无法在内存中运行程序,更不可能处在Linux内核的启动环境中。

u-boot-2010.09移植

u-boot-2010.09移植

u-boot-2010.09移植移植前,请确保使用交叉编译器版本为4.3.2。

一.指定交叉编译器修改arch/arm/config.mk 文件,指定交叉编译器为arm-linux-gnu-前缀。

vim arch/arm/config.mk +24CROSS_COMPILE ?= arm-linux-gnu-二.支持nand flash 启动(1)添加一个头文件smdk2410_nand.h ,在头文件中定义S3C2410的nand 寄存器。

vim include/smdk2410_nand.h内容如下:#define NAND_CTL_BASE 0x4E000000/* Offset */#define oNFCONF 0x00 #define oNFCMD 0x04 #define oNFADDR 0x08 #define oNFDATA 0x0c #define oNFSTAT 0x10 #define oNFECC 0x14(2)在程序入口文件start.S 中,添加程序搬运代码,读取nand 前0x30000的数据到0x3ff80000内存中,nand 寄存器的定义在smdk2410_nand.h 文件中,下面的修改中,绿色代码为添加的代码。

vim arch/arm/cpu/arm920t/start.S文件修改如下:/*在开头处,先添加头文件*/ #include <smdk2410_nand.h>@修改uboot 为nand flash 和nor flash 都可以启动。

@添加BWSCON 的宏定义 # define INTMSK 0x4A000008 /* Interupt-Controller base addresses */ # define INTSUBMSK 0x4A00001C# define CLKDIVN 0x4C000014 /* clock divisor register */ # define BWSCON 0x48000000 # endif@添加判断是Nor flash 启动还是 nand flash 启动部分代码 @找到下面代码#ifndef CONFIG_SKIP_RELOCATE_UBOOT relocate: /* relocate U-Boot to RAM */ adr r0, _start /* r0 <- current position of code */ @在上面这段代码之前添加 ldr r0,=BWSCONF ar si gh t实验ldr r0,[r0]ands r0,r0,#6 @逻辑与 ,并影响标志位 。

UBOOT移植操作

UBOOT移植操作

UBOOT移植操作1. 确定目标平台和硬件:首先需要了解目标平台的硬件架构、处理器类型、存储设备(如 Flash 或者 SD 卡)等重要信息。

同时需要获取目标平台的硬件参考手册或者相关文档。

2.设置交叉编译工具链:UBOOT是使用C和汇编语言编写的,因此需要使用交叉编译工具链来生成可在目标平台上运行的二进制可执行文件。

交叉编译工具链包括交叉编译器、链接器和调试器等工具,这些工具需要针对目标平台进行配置。

4. 配置 UBOOT 环境:进入 UBOOT 源代码目录,运行 `make menuconfig` 命令来配置 UBOOT 的环境。

这个命令会打开一个图形界面,可以在其中选择需要的功能、驱动程序和选项。

根据目标平台的硬件特性和需求,选择适当的选项。

5. 修改配置文件:UBOOT 需要一个配置文件(通常是`include/configs/<target.h>`),在这个文件中需要将目标平台的硬件配置信息填入。

这些信息包括芯片型号、Flash 存储器地址等。

还需要设置启动参数,如内核地址、根文件系统地址等。

6. 编译 UBOOT:运行 `make` 命令来编译 UBOOT。

根据配置和硬件平台的不同,可能需要选择不同的编译选项。

编译过程会生成一个 UBOOT 头文件(u-boot.bin)和其他必要的文件。

7.将UBOOT烧录到目标平台:使用烧录工具(如JTAG烧录器、USB烧录器或者SD卡等)将编译好的UBOOT烧录到目标平台的存储设备中。

具体的烧录方法和工具依赖于目标平台的配置。

8.测试和调试:将烧录好的UBOOT安装到目标平台后,通过串口或者网络连接到目标平台,使用终端工具进行测试和调试。

可以通过串口输出来查看启动过程中的日志和错误信息,或者使用调试工具来分析程序执行的问题。

9.优化和定制:根据需求对UBOOT进行优化和定制。

可以修改配置文件、增加功能模块或者修改代码,以达到更好的性能和适应特定需求的目的。

UBoot移植详细教程

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移植教程

U-BOOT移植教程

U-BOOT移植实验u-boot简介u-boot是德国DENX小组的开发用于多种嵌入式CPU的bootloader程序, u-boot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系统。

u-boot除了支持PowerPC系列的处理器外,还能支持MIPS、 x86、ARM、NIOS、XScale等诸多常用系列的处理器。

u-boot源码目录介绍u-boot的启动过程1 启动流程我们一般把bootloader都分为阶段1(stage1)和阶段2(stage2)两大部分,依赖于CPU体系结构的代码(如CPU初始化代码等)通常都放在阶段1中且通常用汇编语言实现,而阶段2则通常用C语言来实现,这样可以实现复杂的功能,而且有更好的可读性和移植性。

1 阶段1,汇编代码,对于s3c2410是cpu/arm920t/start.s文件。

主要流程如下:关闭看门狗禁掉所有中断设置CPU的频率把自己拷贝到RAM配置内存区控制寄存器配置的栈空间进入C代码部分2 阶段2是C语言代码,在lib_arm/board.c中的start_armboot是C语言开始的函数,也是整个启动代码中C语言的主函数。

这个函数调用一系列的初始化函数,然后进入主UBOOT命令行,进入命令循环(即整个boot的工作循环),接受用户从串口输入的命令,然后进行相应的工作。

当用户输入启动linux的命令的时候,u-boot会将kernel 映像(zImage)和从nand flash 上读到RAM 空间中,为内核设置启动参数,调用内核,从而启动linux。

u-boot移植要点:我们可以总结出bootloader的两大功能:1 是下载功能,既通过网口、串口或者USB口下载文件到RAM中。

2 是对flash芯片的读写功能。

u-boot对S3C2410已经有了很好的支持,我们在移植过程中主要是完善u-boot对nand flash的读写功能。

U-Boot移植

U-Boot移植

U-Boot移植手册1.U-Boot配置过程分析用过U-Boot的同学都知道,我们编译 u-boot的第1步是配置选择目标开发板,如:make smdk2410_config,就是表示选择smdk2410开发板作为u-boot运行的目标平台,那么这个简单的命令到底在makefile中是如何来实现的呢,这就是我们接下来要讲的,故事就这样开始了J打开 Makefile, 查看3047行:smdk2410_config : unconfig@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 samsung s3c24x0 目标: smdk2410_config依赖: unconfig命令: @$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 samsung s3c24x0首先来分析依赖: unconfig (makefile 499行)unconfig:@rm -f $(obj)include/config.h $(obj)include/config.mk \$(obj)board/*/config.tmp $(obj)board/*/*/config.tmp \$(obj)include/autoconf.mk $(obj)include/autoconf.mk.dep 从上面的代码看到,unconfig 主要是删除在配置过程中动态产生的文件.分析完 unconfig,接下来分析配置命令@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 samsung s3c24x0•MKCONFIG := $(SRCTREE)/mkconfig ( makefile 111行)•$(@:_config=): Makefile中存在一种表达式 $(A:patternA=patternB)。

u-boot移植大纲2

u-boot移植大纲2
.nand erase 0xe00000 0xF200000
.nand write.yaffs 0x40000000 0xe00000 0x674940 // 0x674940 根文件系统的大小
*如果入大小不对,会出现以下的信息
NAND write: device 0 offset 0xe00000, size 0x676490
.saveenv
.reset
the kernel(0,machid,)
5.挂载rootfs
*如果nand Flash没有根文件系统,或许bootargs中的参数是否正确,否则linux kernel就不断地产生复位
.tftp 0x40000000 rootfs.img
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.进入点
.由编译来决定的
.*lds 第一个文件来决定
.arch/arm/kernel/vmlinux.lds ->分散加载文件决定了目标文件的次序,放在第一的肯定是程序的进入点。
.make config -字符界面配置
->.make menuconfig -菜单界面配置
.make xconfig -QT界面配置、依赖QT
.make gconfig -GTK界面配置、依赖GTK+
->.config(当前内核要包含你所定制的库与驱动)
.__switch_data -拷贝DATA段、清空BSS段、保存processer ID、machine type、atgas potiner

u-boot、inux内核和根文件系统移植文档

u-boot、inux内核和根文件系统移植文档

u-boot、inux内核和根文件系统移植文档目录一、u-boot移植 (1)二、linux内核移植 (2)三、根文件系统移植 (4)四、nfs文件系统 (8)工具:arm-linux-gcc-4.4.3.tar.gzlinux内核:linux-2.6.22.6.tar.bz2,补丁:linux-2.6.22.6_jz2440.patchu-boot源码:u-boot-1.1.6.tar.bz2,补丁:u-boot-1.1.6_jz2440.patchbusybox源码:busybox-1.7.0.tar.bz2yaffs2制作工具:yaffs_source_util_larger_small_page_nand.tar.bz2jffs2制作工具路径:F:\韦东山\CD1_主光盘\GUI\xwindow\X\deps以上源码和工具均来自韦东山光盘。

一、u-boot移植工具和源码在路径:F:\韦东山\CD1_主光盘\system。

tar xjf u-boot-1.1.6.tar.bz2 //解压缩cd u-boot-1.1.6 //进入目录patch -p1 < ../u-boot-1.1.6_jz2440.patch //打补丁,-p1是指忽略第一个目录root@ubuntu:/share/u-boot-1.1.6# make 100ask24x0_config //产生配置文件Configuring for 100ask24x0 board...make all //编译结果会遇到这个问题,发现浮点错误,因为gcc造成,所以修改以下文件gedit cpu/arm920t/config.mkundefined reference to ‘raise’//提示错误将cpu /arm920t/config.mk 改为PLATFORM_RELFLAGS += -fno-strict-aliasing -fno-common -ffixed-r8 /-msoft-floatPLATFORM_CPPFLAGS +=#========================================= ==================## Supply options according to compiler versionPLATFORM_CPPFLAGS +=$(call cc-option,)PLATFORM_RELFLAGS +=$(call cc-option,$(call cc-option,)) 在uboot的根目录中把Makefile中的PLATFORM_LIBS 修该为如下值PLATFORM_LIBS += -L $(shell dirname `$(CC) $(CFLAGS) -print-libgcc-file-name`) -lgcc -lc -L/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib然后重新make distclean,make 100ask24x0_config,make 应就能通过了,最后可生产u-boot.bin 通过jlink下载u-boot.bin到nor flash下载成功后,从nor flash启动,选择k命令,开启dnw,选择dnw的USB Port下载uImage,在u-boot界面输入b即可启动内核。

U-Boot的移植入门(1)——增加对NorFlash的支持

U-Boot的移植入门(1)——增加对NorFlash的支持

U-Boot的移植入门(1)——增加对NorFlash的支持U-Boot 的移植入门(1)——增加对NorFlash的支持2010-02-09 02:12:13分类:嵌入式第二步、增加对NorFlash的支持接下来,我们来提供对于Nor Flash的支持。

U-Boot的SMDK2410相关部分是完整的支持AMD的两块NorFlash的,可惜我们的板子上带的是SST39VF1601。

不过,对于NorFlash的支持还是比较简单的。

我们依然来追踪U-Boot的执行流,在lib_arm/board.c文件中我们可以看到:#ifndef CONFIG_SYS_NO_FLASH/* configure available FLASH banks */display_flash_config (flash_init ());#endif /* CONFIG_SYS_NO_FLASH */默认情况下,U-Boot实际上支持了Nor Flash的。

追踪flash_init 函数,在board/Samsung/mini2440/mini2440.c文件中可以找到它。

我们的flash移植修改的主要代码也就在这儿了。

首先,修改配置文件中的相关部分。

在include/configs/mini2440.h文件中,将#define CONFIG_AMD_LV400 1 /* uncomment this if you have a LV400 flash */#if 0#define CONFIG_AMD_LV800 1 /* uncomment this if you have a LV800 flash */#endif修改为:#if 0#define CONFIG_AMD_LV400 1 /* uncomment this if youhave a LV400 flash */#define CONFIG_AMD_LV800 1 /* uncomment this if you have a LV800 flash */#endif然后添加:#define CONFIG_SST_xF1601 1#ifdef CONFIG_SST_xF1601#define PHYS_FLASH_SIZE 0x00200000 /* 2MB */#define CONFIG_SYS_MAX_FLASH_SECT (32) /* max number of sectors on one chip */#defne CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE + 1F0000)这几个宏的意思基本上都还是比较明确的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

U-Boot2010.09版本移植文档版本:U-Boot2010.09开发板信息:CPU :S3C2440DRAM :64MBNOR Flash :AM29LV800B 1MBNAND Flash :K9F1208 64MBNET : CS8900一、创建开发板配置文件1.# cp -r board/samsung/smdk2410 board/samsung/s3c24402.# mv board/samsung/s3c2440/smdk2410.cboard/samsung/s3c2440/s3c2440.c3.# vim board/samsung/s3c2440/Makefile将COBJS := smdk2410.o flash.o修改为CBJS := s3c2440.o flash.o 4.# cp include/configs/smdk2410.h include/configs/s3c2440.h5.# vim Makefile修改约160行:CROSS_COMPILE ?= arm-linux-在约2231行前添加:s3c2440_config : unconfig@$(MKCONFIG) $(@:_config=) arm arm920t s3c2440 samsung s3c24x0在319行后加入以下语句,为了调试方便,cp -rf u-boot.bin /tftpboot/u-boot09.bin现在可以编译看看版本是否可用:# make distclean# make s3c2440_configConfiguring for s3c2440 board...# make all直到出现:arm-linux-objcopy --gap-fill=0xff -O binary u-boot u-boot.bincp -rf u-boot.bin /tftpboot/u-boot09.bin编译成功了说明版本可行,正式开始移植。

二、修改/arch/arm/cpu/arm920t/start.S文件,这是系统上电后加载的第一个文件1.在103行前加入以下内容:#ifdef CONFIG_S3C24X0/* turn off the watchdog */@ Processor clock values#if (CONFIG_SYS_CLK_FREQ == 12000000)#define MDIV_405 127#define PDIV_405 2#define SDIV_405 1#define CLKDIVN_148 0x5 /* UCLK = UPLL/2 */#define vREFRESH_405 992#define MDIV_96 56#define PDIV_96 2#define SDIV_96 1#define MDIV_48 56#define PDIV_48 2#define SDIV_48 2#define vUPLLCON_NOW_USER ((MDIV_48 << 12) | (PDIV_48 << 4) | (SDIV_48))#define vMPLLCON_NOW_USER ((MDIV_405 << 12) | (PDIV_405 << 4) | (SDIV_405))#define CLKDIVN_VAL CLKDIVN_148#else /* SYS_CLK_FREQ == 16.9344Mhz */#define MDIV_406 184#define PDIV_406 2#define SDIV_406 2#define CLKDIVN_148 0x5 /* UCLK = UPLL/2 */#define CLKDIVN_136 0xf /* UCLK = UPLL/2 */#define vREFRESH_406 992#define MDIV_96 60#define PDIV_96 4#define SDIV_96 1#define vMPLLCON_NOW_USER ((MDIV_406 << 12) | (PDIV_406 << 4) | (SDIV_406))#define vUPLLCON_NOW_USER ((MDIV_96 << 12) | (PDIV_96 << 4) | (SDIV_96))/*#define CLKDIVN_VAL CLKDIVN_136*/#define CLKDIVN_VAL CLKDIVN_148#endif /*CONFIG_SYS_CLK_FREQ == 12000000*/#define pWTCON 0x53000000#define SRCPND 0x4A000000#define INTMSK 0x4A000008#define INTSUBMSK 0x4A00001C#define LOCKTIME 0x4C000000#define MPLLCON 0x4C000004#define UPLLCON 0x4C000008#define CLKCON 0x4C00000C#define CLKSLOW 0x4C000010#define CLKDIVN 0x4C000014#define CAMDIVN 0x4C000018#define GPFCON 0x56000050#define GPFDAT 0x56000054#define GPFUP 0x56000058#define NFCONF 0x4e000000#endif /* CONFIG_S3C24X0 */2.替换168行至220行(修改后的行数,下同)为以下内容:159:start_code:160:/*161: * set the cpu to SVC32 mode162: */163:mrs r0, cpsr164:bic r0, r0, #0x1f165:orr r0, r0, #0xd3166:msr cpsr, r0167:ldr r0, =pWTCONmov r1, #0x0str r1, [r0]/** mask all IRQs by setting all bits in the INTMR - default*/mov r1, #0xffffffffldr r0, =INTMSKstr r1, [r0]ldr r1, =0x7ffldr r0, =INTSUBMSKstr r1, [r0]@ initialize system clocksldr r0, =LOCKTIMEldr r1, =0xffffffstr r1, [r0]/* FCLK:HCLK:PCLK 1:4:8*/ldr r0, =CAMDIVNmov r1, #0str r1, [r0]ldr r0, =CLKDIVNldr r1, =CLKDIVN_VALstr r1, [r0]mrc p15, 0, r1, c1, c0, 0 @ read ctrl register orr r1, r1, #0xc0000000 @ Asynchronousmcr p15, 0, r1, c1, c0, 0 @ write ctrl register/* UPLL setup */ldr r0, =UPLLCONldr r1, upll_value_USERstr r1, [r0]nopnopnopnopnop @ wait until upll has the effectnopnopnop/* PLL setup */ldr r0, =MPLLCONldr r1, mpll_value_USERstr r1, [r0]216:217:/*218: * we do sys-critical inits only at reboot,219: * not when booting from ram!220: */221:#ifndef CONFIG_SKIP_LOWLEVEL_INIT222:bl cpu_init_crit223:#endif3.将237行以下内容copy_loop:ldmia r0!, {r3-r10} /* copy from source address [r0] */stmia r1!, {r3-r10} /* copy to target address [r1] */cmp r0, r2 /* until source end addreee [r2] */ble copy_loop替换为:bl copy_myself4.在263行后添加以下内容(前面MPLLCON与UPLLCON设置时使用的值):.align 4mpll_value_USER:.long vMPLLCON_NOW_USERupll_value_USER:.long vUPLLCON_NOW_USER5.在313行后加入copy_myself函数:#ifndef CONFIG_SKIP_RELOCATE_UBOOTcopy_myself:mov r10, lr @ save return address@ get ready to call C functions@ldr sp, uboot_stack_pointer @ setup stack pointerldr sp, =0x34000000-4 @ setup stack pointermov fp, #0 @ no previous frame, so fp=0 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#define LENGTH_UBOOT 0x30000ldr r0, =TEXT_BASEmov r1, #0x0mov r2, #LENGTH_UBOOT@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@bl copy_uboot_to_ramtst r0, #0x0bne copy_myself_failedmov r0, #0ldr r1, =TEXT_BASEmov r2, #0x400 @ compare first 4-K bytescmp_loop:ldr r3, [r0], #4ldr r4, [r1], #4teq r3, r4bne copy_myself_failed @ not matchedsubs r2, r2, #4beq copy_myself_okb cmp_loopcopy_myself_ok:@ jump to ramldr r0, =TEXT_BASEadd pc, r10, r0 /* fake ^^; return here. */copy_myself_failed:failed_loop:b failed_loop#endif /*CONFIG_SKIP_RELOCATE_UBOOT8*/start.S修改完毕,保存退出。

相关文档
最新文档