uboot移植实验

合集下载

移植笔记从Norflash启动的uboot

移植笔记从Norflash启动的uboot

移植笔记从Norflash启动的uboot uboot移植记录之一uboot整个移植过程我们可以分为三个阶段:一,移植可以从Nor flash启动的uboot这个阶段是移植一个最简单的uboot,可以烧在Nor flash内运行.二,移植支持Nand flash驱动的uboot加入Nand flash驱动的支持,可以在uboot命令行下操作Nand flash.但还未能从Nand flash启动,只能在Nor flash内运行.三,移植可以从Nor flash启动的uboot可以烧录在Nand flash,并设置从Nand flash启动运行uboot.分三个阶段进行移植,可以对整个uboot的移植过程及原理更加清晰明了,同时降低了发现问题时解决问题的困难度和解决范围.首先介绍移植可以从Nor flash启动的uboot. 这个阶段相对简单一点,是移植一个最简单的uboot,可以烧在Nor flash内运行.不需要修改太多的东西。

步骤如下: 测试一下默认的smdk2410_config配置能否在你的板子上正常运行 1.编译uboot1.1.4#make smdk2410_config#make ARCH=arm注:编译针对arm的平台时,uboot默认使用arm-linux-gcc编译,若交叉编译器名字不一样,需要自行在Makefile里修改。

会出现两个错误.错误信息一:cc1: Invalid option `abi=apcs-gnu'make[1]: *** [hello_world.o] Error 1make[1]: Leaving directory `/root/u-boot-1.1.4/examples'make: *** [examples] Error 2解决办法:出错的文件是/cpu/arm920t/下的config.mk:将PLATform_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu) 改成: PLATform_CPPFLAGS +=$(call cc-option,-mapcs-32,$(callcc-option,-mabi=apcs-gnu,))错误信息二:make[1]: *** No rule to make target `hello_world.srec', needed by`all'. Stop. make[1]: Leaving directory `/work/src/u-boot-1.1.4/examples' 解决方法:打开 examples/Makefile把example文件夹下的Makefile中的第126行%.srec: % 改成 %.srec: %.o第129行的%.bin: % 改成 %.bin: %.o2.若编译成功,则会在uboot源码下产生u-boot.bin文件。

u_boot移植(五)之分析uboot源码中nand flash操作

u_boot移植(五)之分析uboot源码中nand flash操作

u_boot移植(五)之分析uboot源码中nand flash操作一、OneNand 和Nand Flash我们已经能从Nand Flash启动了,启动之后,大家会看到如下效果:可以看出,我们的uboot默认使用的是OneNand。

需要注意的是我们的FSC100上面是没有OneNand的,有的是K9F2G08U0B型号的NAND FLASH。

前面我们了解过Nor Flash 和Nand Flash,那OneNand Flash又是什么呢?二、uboot 源码中Nand Flash部分代码分析我们从Nand Flash初始化看起,打开lib_arm/board.c文件,为了紧抓主线,以下代码只列举出了主线代码。

可以看出,我们可以通过CONFIG_CMD_NAND和CONFIG_CMD_ONENAND两个宏来选择NAND FLASH初始化还是 ONENAND FLASH初始化。

uboot 中默认定义了宏CONFIG_CMD_ONENAND,所以选择的是ONENAND FLASH初始化。

我们的FSC100上面使用的是NAND FLASH,所以我们要定义CONFIG_CMD_NAND宏,取消CONFIG_CMD_ONENAND宏的定义。

嗯!先做个记录:修改include/configs/fsc100.h,定义宏CONFIG_CMD_NAND,取消宏CONFIG_CMD_ONENAND。

好了,接下我们看看nand_init()函数时如何实现的。

看以看出,这段代码调用根据CONFIG_SYS_MAX_NAND_DEVICE宏[默认没有定义]的值来决定系统中Nand Flash设备的个数。

接着调用nand_init_chip()函数完成Nand Flash初始化,然后计算出每块Nand Flash的大小。

最终会输出Nand Flash总的容量。

嗯!做个记录:修改include/configs/fsc100.h,定义宏CONFIG_SYS_MAX_NAND_DEVICE,值为1没有看明白的地方是给nand_init_chip()函数传递的参数,接下来我们来看看他们是如何定义的。

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

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

UBOOT移植(NANDFLASH的支持)——初步移植(二)NAND FLASH初始化入口函数(arch/arm/lib/board.c)这里需要定义CONFIG_CMD_NAND这个宏才行,在配置头文件中已经包含进去了,没问题。

nand_init()函数(drivers/mtd/nand/nand.c)这个函数里面使用两个宏参数进行控制CONFIG_SYS_MAX_NAND_DEVICE和CONFIG_SYS_NAND_SELECT_DEVICE,前者已经在配置头文件中进行了描述,后者由于对应的是有多个NAND设备存在的情况,这里就忽略了。

nand_init_chip()函数(drivers/mtd/nand/nand.c)这个函数需要配置三个宏参数,除了CONFIG_RELOC_FIXUP_WORKS其余都定义了。

没有定义的那个宏给出的描述是“Relocation to SDRAM works on all XXX boards”意思是重置到SDRAM工作在所有XXX板子上。

UBOOT中大部分ARM板子上都没有定义这个宏,SMDK2410也没有定义这个宏,这里也就选择不定义。

这个函数函数还需要三个参数,这三个参数在开头进行了定义。

nand_info_t nand_info[CONFIG_SYS_MAX_NAND_DEVICE];static struct nand_chip nand_chip[CONFIG_SYS_MAX_NAND_DEVICE];static ulong base_address[CONFIG_SYS_MAX_NAND_DEVICE] =CONFIG_SYS_NAND_BASE_LIST;宏CONFIG_SYS_NAND_BASE_LIST采用默认的配置。

#ifndef CONFIG_SYS_NAND_BASE_LIST#define CONFIG_SYS_NAND_BASE_LIST { CONFIG_SYS_NAND_BASE }#endif上述所有参数在配置头文件中都有定义。

Uboot在S3C2440上的移植

Uboot在S3C2440上的移植
Hn n a di g
E vrc n n i cme t
硬 拷 贝 到 内 部 B o nen lS AM, 被 映 射 到 n C O的 otItra R 且 GS
片 选 空 间 O 0 0 ,0 0 O 0 0 ,0 0; o ls 方 式 启 x 0 00 0 - x 8 00 0 N r Fah
U o t ¥ C 4 0上的移植 b o 在 3 24
卢 伟 ,潘 炼
( 汉 科 技 大 学 信 息 科 学 与 工 程 学 院 自动 化 系 , 北 武 汉 4 4 0 ) 武 湖 32 0
摘 要 :通 过 分 析 U o t的 文 件 结 构 及 其 启 动 流 程 , 细 给 出 了 Ub o 基 于 A M9 0 开 发 板 上 bo 详 ot在 R 2T
( eto no t n Si c n nier gWu a nvrt o c n ea dT c nlg, hn 4 4 0 ,hn ) D p.fIfr i ce e ad E g e n , h n U iesy fS i c n eh ooyWu a 3 20 C ia ma o n n i i e
的移 植 方 案 , 包括 编 译 、 试 全 过 程 , 终 能 够 在 U ot 令 方 式 下 加 载 映 像 文 件 , 成 Ln x内 核 与 调 最 bo 命 完 iu yf af 像 文 件 的 调 试 , 有 B olae 植 的 通 用 性 。 s映 具 ot dr移 o
关 键 词 :Ub o;¥ C 4 0 R 2 T o t 3 2 4 ;A M9 0 ;引 导 过 程 ;启 动 代 码
t e nie s l ha a tr o Bo to de r n p a a in. h u v ra c r ce f ol a r ta s lntto

uboot中NANDflash的MTD驱动移植

uboot中NANDflash的MTD驱动移植

u-boot中NAND flash的MTD驱动移植u-boot中移植了linux中的MTD驱动源码来支持NAND flash擦除、烧写及读的驱动。

MTD(memory technology device内存技术设备)是用于访问flash设备的Linux的子系统。

MTD的主要目的是为了使新的存储设备的驱动更加简单并有通用接口函数可用。

MTD驱动可支持CFI接口的norflash驱动、NAND flash驱动。

我们知道NAND flash 的访问接口并没有像norflash一样提供了一个标准的CFI访问接口,但是NAND flash生产厂家之间在各品牌、各型号NAND falsh芯片的访问接口方面做了一些约定俗成规定,如命令字、地址序列、命令序列、坏块标记位置、oob区格式等。

值得注意的是:在工艺制程方面分NAND flash有两种类型:MLC和SLC。

MLC和SLC属于两种不同类型的NAND FLASH存储器。

SLC全称是Single-Level Cell,即单层单元闪存,而MLC全称则是Multi-Level Cell,即为多层单元闪存。

它们之间的区别,在于SLC每一个单元,只能存储一位数据,MLC每一个单元可以存储两位数据,MLC的数据密度要比SLC 大一倍。

在页面容量方面分NAND也有两种类型:大页面NAND flash(如:HY27UF082G2B)和小页面NAND flash(如:K9F1G08U0A)。

这两种类型在页面容量,命令序列、地址序列、页内访问、坏块标识方面都有很大的不同,并遵循不同的约定所以在移植驱动时要特别注意。

下面以大页面的NAND flash:现代HY27UF082G2B为例介绍一下NAND flash一些基本情况,再来介绍MTD驱动的基本结构及流程分析,最后介绍u-boot中MTD驱动移植的详细步骤:3.4.1)NAND flash一些基本情况fl2400开发板上的nandflash芯片型号为:现代HY27UF082G2B,下面先介绍一下nandflash,及norflash与nandflash之间的区别:NOR和NAND是现在市场上两种主要的非易失闪存技术。

uboot2012-10移植s5pv210

uboot2012-10移植s5pv210

s5pv210 uboot-2012-10的移植s5pv210 uboot-2012-10移植(一) 之分析Alex Ling的linaro-2011.10 for mini210好久好久前就买了s5pv210的开发板,一直都是东搞搞西搞搞,一点收获也没有,这次下决心来移植最新的uboot到u-boot-2012.10上,并通过这个博客记录下来以防时间长给忘了,我的开发板是QT210的。

s5pv210的启动分为BL0,BL1,BL2,BL0是出厂的时候就固化在IROM里的,所以我们的uboot就要实现BL1和BL2,BL1在uboot里叫做u-boot-spl.bin,BL2就是我们很熟悉的u-boot.bin了。

在移植之前,我们先看下Alex Ling 的linaro-2011.10 for mini210的UBOOT是怎么实现的。

这里主要还是分析SPL部分,u-boot.bin是如何生成的现在资料很多,也很复杂,我这个菜鸟也是一知半解的,所以就不分析了。

1.顶层的Makefile,从中可以知道,我们要想生成u-boot-spl.bin就必须配置COFNIG_SPL,那么u-boot-spl.bin依赖什么呢,我们继续[plain]view plaincopy1.ALL-$(CONFIG_SPL) += $(obj)spl/u-boot-spl.bin2.3.all: $(ALL-y)搜索发现,是进入到uboot顶层目录的spl目录下执行Makefile的[plain]view plaincopy1.$(obj)spl/u-boot-spl.bin: depend2. $(MAKE) -C spl all2.打开spl/Makefile分析,一开始就给我们导出CONFIG_SPL_BUILD[plain]view plaincopy1.CONFIG_SPL_BUILD := y2.export CONFIG_SPL_BUILD然后分析目标,因为我们的平台是三星的,所以,会有两个目标,一个是不带头信息的u-boot-spl.bin,一个是$(obj)$(BOARD)-spl.bin。

在ubuntu8[1].0.4上移植uboot

在ubuntu8[1].0.4上移植uboot

在ubuntu8.04上UBOOT移植笔记一、 与windows共享最好的做法是通过SAMBA与Windows建立共享,但是在ubuntu8.04上配置SAMBA服务器是一件非常痛苦的事,特别是对于没有经验的新手来说更是如此。

变通的做法是在UBUNTU8.04上安装SAMBA客户端,用Windows的共享来实现文件交换。

先在windows上建立一个共享文件夹,例如“SWAP”,共享权限是可读可写。

然后搜索Ubuntu的安装光盘,找到“smbclient_3.0.28a-lubuntu4_i386.deb”,双击安装。

安装完成后,在Ubuntu桌面上依次选择“位置”-“网络”,找到Windows共享主机,双击即可看到共享文件夹。

连接成功后,会在Ubuntu的桌面上产生一个映射,以后再次双击该映射图标即可。

二、 安装开发工具链1、arm-linux-gccz首先在你的用户目录下建立tools文件夹:mkdir tools (推荐使用终端操作,也可以在图形用户界面下进行)z然后从以下地址下载arm-linux-gcc-3.3.2.tar.bz2到windows的共享文件夹“/developers/linux/files/tools/arm-linux-gcc-3.3.2.tar.bz2”z将arm-linux-gcc-3.3.2.tar.bz2从共享文件夹拖到刚才建立的 tools文件夹z进入tools文件夹:cd toolsz然后解压缩:tar xvf arm-linux-gcc-3.3.2.tar.bz2,在 tools文件夹形成/usr/local/arm/3.3.2/文件夹z进入刚才形成的local文件夹:cd usr/local/z将arm文件夹拷贝到/usr/local/文件夹:sudo cp -rv arm /usr/local/z将编译器路径添加到系统环境变量export PATH=/usr/local/arm/3.3.2/bin:$PATHz检查环境变量是否添加成功:echo $PATH,在输出的信息中如果含有/usr/local/arm/3.3.2/bin,则表示添加成功。

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移植工作的嵌入式开发人员正如火如荼地将各个不同系列嵌入式处理器的移植工作不断展开和深入,以支持更多的嵌入式操作系统的装载与引导。

最新Uboot移植步骤 6:NandFlash读操作

最新Uboot移植步骤 6:NandFlash读操作

最新Uboot移植步骤6:NandFlash读操作前面在调试时把NAND相关的宏CONFIG_CMD_NAND注释掉了一些,现在去重新打开:编译,看看会出什么错误:先看第一个error:72行显示一个不完整的类型看这个nand的定义:发现nand是2410_nand的结构体,但我们未定义CONFIG_S3C2410这个宏,我们现在要使用2440,正好下面有,我们直接使用2440的结构体好了:这个文件都是给2410用的,我们直接拷贝一份,改名为2440,SI文件添加一下:修改宏定义:修改Makefile:先看看nand是如何操作的,着nand相关函数:看nand_init函数:可见这里就可以识别nand并输出nand的大小了,先看运行哪个函数:可见CONFIG_SYS_NAND_SELF_INIT宏未定义,所以运行nand_init_chip函数:看单板初始化函数:把2410修改为2440:发现s3c2440_get_base_nand函数未定义,我们先搜下2410的定义,改为2440的定义:修改发现S3C2440_NAND_BASE未定义,那我们找到2410定义的地方自己仿照定义2440下:修改初始化时序:看这个函数,我们把2410都改成2440:修改这里:看到nfcont,我们还要设置下这个:现在board_nand_init函数修改完了,开始修改nand_scan函数:观察之后,发现要修改如下(具体为何这样修改,参考NAND驱动开发视频,现在我还没看,无法详述):编译,下载:有错误:搜索nand_wait_ready,发现再我们自己的init.c函数里也定义了,把我们的改一下:再编译下载:发现NAND已经可以识别!把uboot从nor拷贝到nand:验证:数据都相同,现在重启开发板从nand启动:这时从NAND启动,Nor无法识别,所以显示0KB!成功!。

UBoot实验1、UBoot编译与下载实验

UBoot实验1、UBoot编译与下载实验

Uboot编译与下载实验一、 实验目的掌握UBoot的编译方法,以及如何将生成的UBoot BIN文件下载到目标板二、 实验资源硬件资源CPU PIII以上内存512M硬盘80G软件资源Uboot源代码 uboot_1.2.0cross toolchain 3.4.1RedHat Linux 9.0操作系统三、 实验前的准备1、一台PC机(装有PC版Linux)。

2、实验平台。

3、串口线、网络线。

4、SJF2440烧写软件与驱动。

5、ICE16仿真器。

四、 实验步骤1、建立实验目录#mkdir /root/Myjob#cd /root/Myjob2、挂载实验光盘通过下面的命令把实验光盘挂接到/mnt/cdrom目录上。

#mount /dev/cdrom /mnt/cdrom#cd /mnt/cdrom/SourceCode/3、拷贝并解压缩交叉编译工具包#cp u-boot1.2.0.tar.gz /root/Myjob#cd /root/Myjob4、编译UBoota)进入U-Boot代码目录#cd u-boot1.2.0b)进行配置#make smdk2440_configc)进行编译#make然后就会在/u-boot1.2.0目录下生成u-boot.bin5、仿真器与驱动的定装接下来对SJF2440软件进行安装,并对并口JTAG驱动程序进行安装。

a、并口JTAG驱动程序的安装下面以WinXP为例,介绍驱动的安装方法。

在XP下以管理员身份登陆。

拷贝giveio.sys文件(光盘\Tools\sjf2440_Rev02\GIVEIO)到 “C:\windows\system32\drivers.”目录下,记住去掉只读属性(如图1)。

图1 拷贝giveio.sys文件选择控制面板,“添加硬件”。

出现对话框后点击下一步按钮,出现如图2对话框。

图2 添加硬件向导1选择“是,硬件已连接好”,点击下一步按钮。

Uboot启动流程分析和移植介绍

Uboot启动流程分析和移植介绍

基于MPC83xx 的U-boot 启动流程分析和移植董 闯北京邮电大学信息与通信工程学院,北京(100876)E-mail :donix.dong@摘 要:本文首先引入Bootloader 的概念,接着介绍U-boot 这种引导程序,并以Freescale 32位微处理器MPC83xx 为例,结合代码详细分析了U-boot 的启动的各个阶段及最终引导Linux 内核的过程,最后,建立交叉编译环境,针对TC8313E 目标板,给出U-boot 移植与编译的基本步骤。

关键词:U-boot;MPC83xx;交叉编译;移植;嵌入式系统中图分类号:TP393.051.引言引导程序(Bootloader)是系统加电后运行的第一段软件代码,类似于PC 机中的引导加载程序BIOS 。

虽然引导程序仅在系统启动时运行非常短的时间,但对于嵌入式系统来说,这是一个非常重要的组成部分。

通过这段小程序,初始化必要的硬件设备,创建内核需要的一些信息并将这些信息传递给内核,从而将系统的软、硬件环境配置到一个合适的状态,最终调用操作系统内核,真正起到引导和加载内核的作用。

2. U-boot 介绍目前,嵌入式领域里出现了很多种类的Bootloader ,如Armboot 、Blob 、Redboot 、vivi 和U-boot 等,其中U-boot 是使用最广泛,功能最完善的。

U-boot (Universal Boot Loader)是从PPCBOOT 发展演化而来[1],其源码目录、编译形式与Linux 内核很相似,事实上,不少U-boot 源码就是相应的Linux 内核源程序的简化,尤其是一些设备的驱动程序,这从U-boot 源码的注释中就能体现。

U-boot 中Universal 有两层含义,一是U-boot 除了支持PowerPC 系列的处理器外,还能支持MIPS 、x86、ARM 、NIOS 、XScale 等诸多常用系列的处理器;另外一层含义则是U-boot 不仅仅支持嵌入式Linux 操作系统的引导,还支持OpenBSD, NetBSD, FreeBSD, SVR4, Solaris, VxWorks, LynxOS, pSOS, lrix, RTEMS, QNX, ARTOS 等操作系统的引导。

基于S3C2440的Uboot分析与移植

基于S3C2440的Uboot分析与移植
运 行地 址 改为 .O O 0 ,0 0 = x 0 00 0 。跳线 选择 从 No ls r ah F












UB o ∞81 f g ‘21 -0 t2 0(u I 9 1一明:1“) 2:
¨ I o n Rl ∞ B J w I ’ S f d 日 I 8f l :D  ̄ (
_ _

=0嗍 哪明 =0帅 x 嗍 :0帅
帅帅: I C NI e etd b o r r e .I i s n trc M- e 1 I OE C O s lc e yb ad d b s i o e MI d R N E l d! d
2 6M B s i I : sr a n eil 0t u : sr a eil Er r : sr a eil F 2 ‘ *一 L ‘B
源 代码 。U o t 目录下共有 3 b o根 0个子 目录 ,可 以分为
4类 :
2 2 产 品应用 Pou t pi 2 rdcApl d e
2 1 年 第 2 卷 第 5期 02 1
ht:ww . Sa r. t l we -. gc pl ・ o n
计 算 机 系 统 应 用
墙, 重启 xn t. i d e d服务 ,开放 T 服务 。在/ cep r 邱 e / ot t x s
结 构表 示一 个 Na dFah芯 片 。这个 结 构体 中包 含 n ls
了 关于 Na dFah的地 址信 息 、读 写方 法 、E C模 n ls C
式 、硬 件控 制 等 一 系列 低 层机 制 【,因 此新 驱动 的 5 】 编 写将 变得 更 加 方便 ,只 需修 改 该 结构 体 的相应 成

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内核的启动环境中。

一步步教你移植uboot(超精华版)

一步步教你移植uboot(超精华版)
#cp include/configs/smdk2410.h include/configs/gec2440.h 3)、测试是否能配置和编译成功
#make gec2440_config #make 编译完成时最后两句如下:
arm-linux-objcopy -O srec u-boot u-boot.srec arm-linux-objcopy --gap-fill=0xff -O binary u-boot u-boot.bin 表示编译成功。
# if defined(CONFIG_S3C2410)
ldr r1, =0x7ff //0x3ff,根据 2410 芯片手册,INTSUBMSK 有 11 位可用,vivi 也是 0x7ff, u-boot 则是 0x3ff,不过芯片复位后所有中断都被屏蔽,故这无影响
ldr r0, =INTSUBMSK

>> 2
广州广嵌电子科技有限公司
u-boot移植要点 我们可以总结出bootloader的两大功能:
1 是下载功能,既通过网口、串口或者USB口下载文件到RAM中。 2 是对flash芯片的读写功能。 u-boot对S3C2440已经有了很好的支持,在移植过程中主要是完善u-boot对nand flash 的读写功能。 u-boot移植前的准备工作 1.下载源码 Uboot的源码可以从以下网址下载: /u-boot/u-boot-2009.11.tar.bz2?modtime=1134 752480&big_mirror=0 我们这里下载的是u-boot-2009.11.tar.bz2 工具链使用cross-4.1.2

samsung: 开发者/或经销商(vender)。
s3c24x0: 片上系统(SOC)。 板子起名叫gec2440,可以依自己的喜好修改

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移植工作的嵌入式开发人员正如火如荼地将各个不同系列嵌入式处理器的移植工作不断展开和深入,以支持更多的嵌入式操作系统的装载与引导。

uboot内核移植和裁剪详细步骤

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内核移植完了,剩下就移植驱动了。

u_boot 移植(一)之uboot配置编译

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文件为对应开发板的配置文件。

UBOOT是怎么样移植到NXP LPC1788开发板上面的呢

UBOOT是怎么样移植到NXP LPC1788开发板上面的呢

UBOOT是怎么样移植到NXP LPC1788开发板上面
的呢
LPC1788的外部存储控制器(Emc),可以对动态存储器和静态存储器的支持,可以接SDRAN、NAND_FLASH、NOR_FLASH等多种存储器!有了这些存储器的支持,就有更大的空间存储我们的代码和数据,把Uboot 移植到开发板上,有了这个强大的程序支持,就可以在上面跑UC操作系统,还可以吧程序放到NAND_FLASH里面运行。

益处是大大的有啊!
好了废话不多说咱们开头。

首先要做的是安装Linux系统,我装了个虚拟机里面跑的是CentOS。

详细假如安装就不多说了网上有无数的教程。

这里说交错编译器的安装,我用的是4.5.1的版本,这个东西是开发过程中最重要的东西了。

详细安装步骤如下。

在根名目下创建“/disk/m3”的路径,将交错编译器放到这个路径。

以后的开发就在这个路径里举行。

现在用“tar”指令解压编译器,如上图。

这个是我自己的习惯。

解压完后将WB_ARM拷贝到“/opt/”路径下,如上图。

编译器就在“/opt/WB_ARM/toolschain/4.5.1/bin/”路径下。

用“ls”指令可以查看到如上图。

用vim编辑器,把交错编译器的路径添加到家名目下的
“.bash_profile”文件中。

用法vim的办法如上图。

上图就是将路径添加后的结果,注重不要写错了。

完成后保存退出。

然后注销CentOS,按键盘上的“Ctrl+Alt+字符删除键(←)”,就可以注销。

第1页共3页。

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

一、移植环境
∙主机:UBUNTU
∙开发板:飞凌2440
∙编译器:arm-linux-gcc-4.3.2.tgz ∙u-boot:u-boot-2009.03.tar.bz2
3)修改u-boot根目录下的Makefile文件。

查找到smdk2410_config的地方,在他下面按照smdk2410_config的格式建立mini2440_config的编译选项,另外还要指定交叉编译器
4)测试编译新建的mini2440开发板项目
到此为止,u-boot对自己的mini2440开发板还没有任何用处,以上的移植只是搭建了一个mini2440开发板u-boot的框架,要使其功能实现,还要根据mini2440开发板的具体资源情况来对u-boot源码进行修改。

3. 根据u-boot启动流程图的步骤来分析或者修改添加u-boot源码,使之适合mini2440开发板(注:修改或添加的地方都用红色表示)。

1)mini2440开发板u-boot的stage1入口点分析。

一般在嵌入式系统软件开发中,在所有源码文件编译完成之后,链接器要读取一个链接分配文件,在该文件中定义了程序的入口点,代码段、数据段等分配情况等。

那么我们的my2440开发板u-boot的这个链接文件就是cpu/arm920t/u-boot.lds,打开该文件部分代码如下:
知道了程序的入口点是_start,那么我们就打开mini2440开发板u-boot第一个要运行的程序cpu/arm920t/start.S(即u-boot的stage1部分),查找到_start的位置如下:
从这个汇编代码可以看到程序又跳转到start_code处开始执行,那么再查找到start_code 处的代码如下:
由此可以看到,start_code处才是u-boot启动代码的真正开始处。

以上就是u-boot的stage1入口的过程。

2)mini2440开发板u-boot的stage1阶段的硬件设备初始化。

由于在u-boot启动代码处有两行是AT91RM9200DK的LED初始代码,但我们mini2440上的LED资源与该开发板的不一致,所以我们要删除或屏蔽该处代码,再加上my2440的LED驱动代码(注:添加my2440 LED功能只是用于表示u-boot运行的状态,给调试带来方便,可将该段代码放到任何你想调试的地方),代码如下:
在include/configs/mini2440.h头文件中添加CONFIG_S3C2440宏
现在编译u-boot,在根目录下会生成一个u-boot.bin文件。

然后我们利用mini2440原有的supervivi把u-boot.bin下载到RAM中运行测试(注意:我们使用supervivi进行下载时已经对CPU、RAM进行了初始化,所以我们在u-boot中要屏蔽掉对CPU、RAM的初始化),如下:
下载运行后可以看到开发板上的LED灯第一了亮了,其他三个熄灭,测试结果符合上面的要求。

终端运行结果如下:
3)在u-boot中添加对S3C2440一些寄存器的支持、添加中断禁止部分和时钟设置部分。

由于2410和2440的寄存器及地址大部分是一致的,所以这里就直接在2410的基础上再加上对2440的支持即可,代码如下:
#else //下面2410和2440的寄存器地址是一致的
# define pWTCON 0x53000000
# define INTMSK 0x4A000008 /* Interupt-Controller base addresses */
# define INTSUBMSK 0x4A00001C
# define CLKDIVN 0x4C000014 /* clock divisor register */
# endif
ldr r0,=pWTCON
mov r1, #0x0
str r1,[r0]
/*
*mask all IRQs by setting all bits in the INTMR - default
*/
mov r1, #0xffffffff
ldr r0,=INTMSK
str r1,[r0]
# if defined(CONFIG_S3C2410)
ldr r1,=0x3ff
ldr r0,=INTSUBMSK
str r1,[r0]
# endif
# if defined(CONFIG_S3C2440)//添加s3c2440的中断禁止部分
ldr r1, =0x7fff //根据2440芯片手册,INTSUBMSK寄存器有15位
可用
ldr r0, =INTSUBMSK
str r1, [r0]
# endif
# if defined(CONFIG_S3C2440) //添加s3c2440的时钟部分
#define MPLLCON 0x4C000004 //系统主频配置寄存器基地址#define UPLLCON 0x4C000008 //USB时钟频率配置寄存器基地址
ldr r0, =CLKDIVN //设置分频系数FCLK:HCLK:PCLK =
1:4:8
mov r1, #5
str r1, [r0]
ldr r0, =MPLLCON //设置系统主频为405MHz
ldr r1, =0x7F021 //这个值参考芯片手册“PLL VALUE SELECTION
TABLE”部分
str r1, [r0]
ldr r0, =UPLLCON //设置USB时钟频率为48MHz
ldr r1, =0x38022 //这个值参考芯片手册“PLL VALUE SELECTION
TABLE”部分
str r1, [r0]
#else //其他开发板的时钟部分,这里就不用管了,我们现在是做2440

/* FCLK:HCLK:PCLK = 1:2:4 */
/* default FCLK is 120 MHz !*/
ldr r0,=CLKDIVN
mov r1, #3
str r1,[r0]
# endif
#endif /* CONFIG_S3C2400 ||CONFIG_S3C2410 || CONFIG_S3C2440 */
S3C2440的时钟部分除了在start.S中添加外,还要分别在board/samsung/mini2440/mini2440.c 和cpu/arm920t/s3c24x0/speed.c中修改或添加部分代码,如下:
好了!修改完毕后我们再重新编译u-boot,然后再下载到RAM中运行测试。

结果终端有输出信息并且出现类似Shell的命令行,这说明这一部分移植完成。

示意图如下:。

相关文档
最新文档