U—Boot从NAND+Flash启动的设计与实现

更新时间:2023-05-24 09:34:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

u-boot从nand flash启动的设计与实现

维普资讯

电EL ECTR0NI C

技术TECHN0L0GY

第3卷第 6 O期 20 0 7年 6月

U B o从 NAN ls— ot D Fah启动的设计与实现瞿华山万旺根上海 2O7) O O 2 (海大学通信与信息工程学院上

要:U B o是一款非常优秀的嵌入式 B olae, -ot o t dr能够支持咖 o

协议从网 1下载内核镜像, 2 1但不支持从 NA ND

Fah动。本设计的目的是实现 U-o t N D ls l启 s b o从 AN Fah的启动。本文详述了基于¥ C 4 0开发板的移植过程, 3 21分析 U-o t b o的启动流程的两个阶段,结合 NAN ) ls] F ah自身特殊的物理组织结构,增加 U-o t N b o对 AND Fah读写操 l s

作的支持,使其能够完成将 N N Fah A D l上存储的 U bo代码段拷贝到 sr中执行。依此方法移植 U bo成功 s -ot da m -ot实现了 N N l h从 A D F s启动,通过修改 U bo的其他部分最终实现了引导 Lnx a再 -ot i操作系统内核启动的功能。 u关键词:B olae; B o;NA l h o t dr U-o t o ND Fa s

中图分类号:T 3 8 5 P 6 .

文献标识码:A

De in a d i plm e fU- o o tn r m sg n m e nto Bo tb i g fo NAND a h FlsQu Hu s a W a n g n ah n n Wa g e( c o fCo S ho lo mm u ia in a d I o ma in En n e ig, a h iUn v riy, a h i2 0 2 nc t n nfr to gie rn Sh n a ie st Sh n a 00 7 ) o g g

Ab ta t src:U- o ti e y e c l n o t a e n e b d e y tm,i c n d wno d k r e ma et r u h n tc i B o a v r x el tb o l d ri m e d d s se s e o t a o la en li g h o g e hp wi t TFTP p o o o,b tc ntb o rm h r t l u a’ o tfo NAND a h To s let i p o lm,p rig p o e s b s d o¥ C2 1 c Fls . ov hs

r be o t r cs a e n 3 4 O n b a di ic s e,t e t tg so b o r n lsd i hs p p ̄ Sn eNAND ah h sp riua h sc l o r sds u s d h wo sa e fU- o ta ea ay e n t i a e ic Fls a atc lrp y ia o g nzn tu t r,i s o l d e dn n in p rt n o ra iigs r cu e t h ud a d ra i a dwrt go ea i fNAND a h t b o o o yn t o efo g i o Fls O U-o tfrc p ig i c d rm s NAND a h t d a Fls s rm.U sn hsmeh d。b o ig f m O i t i to g o tn r o NAND a h i e l e yp rig n fe d i ig te Fls r id b t,a atrmo f n h s a z o n d y o h rp rso b o,b oig Liu p rt y tm e n li f al b an d t e at fU-o t o tn n x o eai s se k r e si l o tie . g n n yKe wo d:B o l a e;U- o t y rs o t d r o B o;NAND a h Fls

0引

L a e, od r它是可以运行在多种 C U体系结构的多功能的 P

B ol dr它的整个程序框架清晰, o t ae, o易于移植,很多人将自己的移植代码贡献到网站 ( t:/o re rent ht/ sucf g. e p o/ po c/-ot)更新速度非常快。U B o遵循 G L公 r et ubo/, j s - t o P约,全开放源代码,完目前的版本是 114本论文正是采 ..,用此版本进行说明, - o U B t的目录结构参见 U B o源 o -ot代码。

引导加载程序 ( ot a e) B ol dr是系统加电后运行的第一 o段代码。B ol dr硬件密切相关,般来说都要对 ot a e和 o一

B ol dr o t ae的源代码进行修改才可以在自己的硬件平台上 o运行起来,目前嵌入式领域里出现了很多种类的B ola e, amb o、 lb rd o t vv和 U- o t等。 o t d r如 r o t bo、 e b o、 i o i

Bo

其中 U B o的功能最为完善, -ot它可以支持 T T F P传输协议从网口快速下载内核镜像等,但是美中不足的是 U B o -o t固有支持从 N0R F ah启动,支持从 NAND Fa h启 ls不 ls

要移植 U B o从 NA D Fah启动, -ot N l s首先就应该了解 U B o的工作流程, -ot这是非常必要的一个步骤,工作其流程如图 1示。大多数 B ol dr都分为 s g l和所 ot ae o t e a

动。本系统的硬件采用的是基于¥C 40的开发板,上 321其存储介质带有一片 6 MB的 N N Fah 4 A D l s ( 9 l0 U B,片 3 K F 28 O )两 2 MB的 S R M,系统采用的 D A操作

s g2 t e两大部分, -o t a U B o也不例外。依赖于 C U体系结 P构的代码,比如设备初始化代码等,通常都放在 sae tgl中,而且通常都用 AR汇编语言来实现, M以达到短小精悍的

为 LN X .. 6本论文讨论对 U B t I U 2 61, -o的修改实现从NAND ls动。 Fa h启

目的。而 s g2 t e则通常用 C语言来实现, a这样可以实现更复杂的功能,且代码会具有更好的可读性和可移植性。并

1 U B o简介 - otU bo( n esl oto dr是从 am ot -o tu i r ae) v ab l r b发展起来的一个功能较齐全,持平台相当丰富的一个 B o支 ot

2 U B o的修改过程分析 - ot经过对 U B o文件组织结构以及代码的详细分析之 -ot后,制定出 U B o从 N N -ot A DFah l启动的修改方法, s过程

14 1

u-boot从nand flash启动的设计与实现

维普资讯

瞿华山等: B o从 NAND Fah启动的设计与实现 U-o t ls

第6期

对 N NDFah行读写操作了。 A l进 s 下面给出作者的 N N l h A D Fa配置文件以供参考: s#d f eC G_ AX NAND_ EⅥ C ei F M n _ D E1# d f eSE ei CTORS ZE 1 n I 52# d f eA DDR ei n COLUM N 1

#d fn e ieADDR PAGE 2

#d f eA ei DDR C UM N AGE 3 n OL P # d fn A

ND Chp D UN KNOW N x 0 e ieN il 00_ _

#df eNAND _ A L ei n _ M X F 00RS1 #df eNAND M A ei n _ l X CHI S 1 P #d f eNAND W AI _ ADY( a d ei n _ l T RE n n )NF W a RB i t( )

#d f e NAND—D S L ei n I AB E—C n n ) NF—S t E( a d eCE ( C JHI NF E GH) # d f e NAND—E ei n NAB E— L CE( a d NF—S t E nn ) eC ( C JL NF E oW )

# d f eⅥ R TE NAND— OM M A ei n I— C ND(,d )NF— d ar

图 1 U- ot B o工作流程

Cmd d ()

#d f eWRI _ e n t TE_ NAND- _ C0MM A NDW (,d )NF da r

如下所述。—

Cmd ( ) W d

2 1实现 U B o对 N D Fah的读写操作 . -ot AN ls

#d f eⅥ R TE—NAND— ei n I AD E S(, d ) NF DR S d a r—Ad r d d()

在文件 l—r b adC中存在这样一个函数 nn— i am/or. b ad it)显然这是对 N N l h的初始化函数,是在 U n (, i A D Fa s但 _ B o源码中并没有去实现这个函数,要添加这个函数的 ot需实现代码。在 ic d n l e目录下新建 s d 2 1.,此文件 u m k 40 h在需要定义的是对 N N l h A D Fa操作的一些低层函数,体 s具函数以及实现可参照 badmp/c a/c 9 h件进 or/ l m 9vma.文 v行构建,不做任何修改地直接将 vm 9h的一些函数添可 c a.加到 s k40 h件中即可, md 21.文如下:NF C n ( o f ),NF_ Cmd( ),NF Cmd ( _ W ),_

#d f eW RI J ei n TE AND(,a r d d )NF_ r e d W i () t

#d f eRE ei ADl n _ NAND(d )NF Red ) ar _ a (#d f eNAND C ( R E( a d t) ei n _ TI_ L AL n n pr #d f eNAND C _ E LE n n p r ei n _ l TL S TA ( a d t)# d fn ei eNAN D

CTL CLRCLE( a d t) n n p r__

# d fn ei eNAN D CTL S ETCLE( a d t) n n p r_

#d f eC ei ONF Gj F S一 n I F 2 NAND 1 #d f eC e i ONF Gj F S一 n I F 2 NAND_ F 0 OF

NF Ad r) NF S t E(,— at d (, _ eC ) NF W i RB(, - r e ) NF W i t_

#d f eC ei ONF Gj F S一 n I F 2 NAND sZ _ l IE0#df eC ei ONF G—J F 2 n I F S一NAND—DE 2 * 12 V 04*1 2 04

(, l a (, _ntE C(, _ a— C ) ) NF Red ) NF Ii C ) NF Red E C(;另夕 _—

还需定义 NF E—S C TATE变量,y e e n m{ CE— tp d fe u NFL ), CE]I (W NF lH GH)N C _ TATE; _ F ES

#d f eC ei ONF【 I l n Gjv _ TD NAND E CjF S _ lC F 21

在 bad s k 40 s k4 0 C文件的引用部分 or/md 2 1/md 21.头增加# nl e< s d 2 1.>,此文件中添加 nn— ic d u m k 40 h在 ad it) n (函数的实现代码, i主要是使用 i ld/md2 1. n ue s k4 0 h c文件中一些对 N N l h的操作函数来实现功能, A D Fa s特别强调的是需要监测 nn ad设备,监测根本就不能操作不nn a d。

2 2实现 U- o t N . Bo从

F ah启动 ls

¥ C 40处理器的启动代码可以在外部的 N N 3 21 A D Fah上执行。启动时 NA ls l s ND Fah的前 4K (址为 B地0 0000, M[:3 ) x00 00 O - o一O将被装载到 S R 1 D AM中被称作 Sepn s n的地址中,后开始执行这段代码,动以 t i t e p g o然启

后, 4 B的空间可用做其他用途。自动启动模式过程这 K为:复位, N N l h的前 4 B复制到 Sep gtn把 A D Fa s K tp i s e n o处,tpigt e Sepn s n映射到 D C 0 C U执行 Sep gt e o G N,P t i s n pn o中的代码。以上说明可以看出,

求 U B o能从 N N 要 -ot A D Fah动,是说这 4K代码必须具有读取 N N l启 s就 B A D

修改 i ld/o f ss d 2 1.文件, C N I_ n u ecni/m k 40 h c g将 O FGC OMMANDS处 C G— MD NAND的注释去掉, F C _目的是打开 U- o t对 NAND Fa h的支持,且还要添加对 Bo ls并

N N l h的一些配置设置,参考\ o A D Fa s可 d c目录下的RE ADME n n、 A . a d RE DME. F S NA J F 2 ND两个文件,其一

Fah的能力, l s并且能将 U-o t码拷贝至内存里继续 Bo代执行。

中对 NA DIt f e的定义可使用 ic d/m k 40 h N ea n rc nl es d 2 1. u中的函数 df e e n。经过以上的修改完成之后, -o t以 i U Bo可

U B o是从 cuam90/tr S开始执行的,要 -ot p/r 2ts t a.主

】5 】

u-boot从nand flash启动的设计与实现

维普资讯

第 3卷 O

是设置处理器状态、始化中断和内存时序等,确定是初并否需要对整个 U B o代码重定位, -o t最终从 Fah中跳转到 l s

方式,然后通过 N ND Fah A l控制器进行读写操作, s具体使用以下的几个寄存器进行控制, F O F N C N C N、 F MD、 NF A叻 R、 D NF ATA、 S NF TAT、 E C。经过以上一些 NF C步骤的修改过程,可以实现 U bo从 NA DFah的基本 -o t N l s启动目标。 2 3 U B o其他部分修改 . -ot

定位好的内存位置执行,源码支持的是指从 N R f s启 O ah l动。需要深刻理解的是关于重定向(e ct) rl a的代码, o e其中关键的一步就是通过 ar d指令得到当前代码的地址信息: 如果 U B o是从 R M开始运行,得到的地址信息为 -ot A则 03 F 00; x3 S0 0如果 U B o从 Fah -o t l开始运行, s即从处理器对应的地址运行,得到的地址信息为 000,时将会则 x 00这

其他部分的修改主要是在开发板的配置文件 ic d/ nl e u cniss k40 h中进行, o ma d df io of/md2 1. g C

m n eit n添加 niMD F S F C j F 2 C G_ MD_ T、 F C NE C G_ MD_ I P NG、 CF C G_

执行 cp_op oyl标识的代码将 NO ah的 B ol dr o Rfs上 l ot ae o代码复制到 S R M中。 DA修改 c u am9 0/ tr.,要是对 rlct p/ r 2 tsatS主 eo ae段及ce r bs la s段进行修改,对_

CF CM D G_

_

E V。打开 U B o的 NE功能后,可以 N -ot T就

使用 T P来下载内核进行调试, Fr十分方便。打开 Pn功 i g

rlct段的修改目标是得到 3 e ae o

能,可以很方便地检测开发板与 P C之间网络是否正常,打开 J F 2的文件系统功能,可以支持 J F 2件系统, FS就 FS文CF G CM D_—

个寄存器 r、1 r o r、2的值,中 r其 o为 NA D Fah中 U N l s .B o存放的起始地址,为要拷贝到 S R ot r 1 D AM中的起始地址,据 U b t a/m k 40cn gmk依 -o b r s d 2 1/ f .文件中的说明 o d o i

E NV功能是可以保存环境变量到 NA D N

F ah上。 ls

将其设置为 0 3F 0 0,为 a ot x3 800 r 2 r o的大小。然后通过 mb跳转指令跳转到一 aded一 aded为新增加的一个标 nnra,nn ra识,在新建文件 b ads d 2 1/aded S中, or/m k 40n nra.它主要完成的是根据 r、1r 3值读取 N N l h中 U B o Or、 个 2 A D Fa s -ot代码到 S R M中, D A完成这部分功能的程序流程,图 2如所示。然后修改 bad s k 4 0Mae l文件, o r/md 21/ kfe i让 nn ra.文件加入编译即是在 l ee ii O添加 adedS o vl n .后 wl— t n n ra. a de d O。修改 b ad s k 4 0 ub o.d,文件的 o r/ md 2 1/ -o t1s此

设置环境变量, iu Ln x内核规定其启动参数需由 B ol dr ot ae传递, C N I_ O T R S中填写的就是 o在 O FG B O A G内核的启动参数。此参数可以设置内核从 N S或者 FJ F 2挂载根文件系统。另外环境变量应该存储于 FSNAN

D l h中,以添加: Fa s所#d f eC G E ei F _ NV_ S I— n I . N NAND I #d fn ei eCFG_E NV_ OFFS ET x 0 0 02 00

将 C G L A l D R的地址改为 0 307 C。这 F _O D A D _ x00 F 0是内核的加载地址,bad s k4 0en gmk文件注 o r/md 21/o f . i释中提到 Ln x内核希望自己被加载到 0 30 80 i u x 0000的内

功能是让 U B o的各节能按照本链接器脚本链接在一 -o t起,体修改是在 tx具 et段添加 nn ra.。 i ld/ adedO n ue c o f/m k 40 h cniss d 2 1.的修改,义 C NFG— O T— g定 0 I B O N N目的是打开 N N l h的启动功能。对 c a— A D, A D Fa s l r e bs的修改即是增加对寄存器 r ̄r0的清零语句。 s段 3 l

存地址,由于 u g会在 Ke e镜像之前加大小为而 I e ma r l n04 x0的头信息,以需再减去 0 4。所 x0将文件 bads k40 s d 2 1. o r/md2 1/m k 40 C中的 MA H— CTYPE—

S K2 1改为 1 3 iu内核规定如果 MD 4 0 9,L n x

B olae给出的 ac— u br o t dr o rh n m e与内核不同,则无法启动内核。此号码可以在内核的 a h am t l目录下的 r/r/o s cmah tp s文件查询得到。 c—y e

其他的修改可以参看 u∞t . .\ E D .一1 14 R A ME文件 b进行配置,以实现相应的功能。

3结束语通过以上的修改, bo启动时串口输出的信息 U-ot如下:U- o t . . ( u 2 2 O— 1: 6 1 ) B o 1 4 J n 1 O 6 1 4: 9 1U- o c d Bo t o e: 3 F8 0 0一> 3 F9 3 00 3 CC9 BS 4 S:一> 3 FA1 CC 3 0 RAM n iu ain: o C f rt g o

B n#0 0 0 0 0 6 ak:3 0 0 0 4MBNo a h:1M略 rFls

图 2 U bo拷贝到 S RA的程序流程 -o t D M

NAN D a h:6 略 Fls 4MI n:s ra e il

以上对 N N l h的操作必须要了解其物理组织 A

D Fa s 1 1 6

0u:s ra t e il

u-boot从nand flash启动的设计与实现

维普资讯

瞿华山等: -o t N N l h启动的设计与实现 U B o从 A D Fa sEr:s ra r eil

第6期

[]刘慧, 6林海虹,刘智.多核 D P的 B oL a e程序的实 S o to d r现[]电子技术应用,0 32 ( )7—5 J. 2 0,9 6:27 . []马学文, 7朱名 E, l程小辉 .嵌入式系统中 B olae o t dr的设 o计与实现[]计算机工程 . 0 5 3 ( )9—7 J. 2 0,1 7:69 . []周永宏, 8王成飞,志敏. RM7 )Ⅱ S在嵌入式系统何 A T】 _ ̄

S K2 1# MD 4 0

以上输出信息表明, -o t U bo已经从 NA D Fah正确 N ls的启动,且通过以上的修改可以实现用 T P协议通过并 I网口下载内核镜像,系统启动参数传递给内核,过把通 N S F挂载根文件系统等所有的功能。参考文献

中的 B ol dr otae代码设计[ .片机与嵌入式系统应 o J单]用,0 4 9:72 . 20 ( )2—9

作者简介

[]吴明辉 . 1基于 A M的嵌入式系统的开发与应用[ . R M]北京:民邮电出版社,0 4人 2 0.

瞿华山,,士研究生,男硕主要研究方

[]杜春雷. R体系结构与编程[ . 2 AM M]北京:清华大学出版社,0 4 20.

向为嵌入式系统设计、多媒体信号处理。万旺根,,士,授,士生导师,男博教博

[]¥ C 4 0 3一Bt IC Mi o rcso e’Ma ul 3 3 2 1X 2 iR S c poesr r n a r Us S E - A UNG l t nc.R vs n1 2 zI MS .S Ee r i c o s ei o .. i []郑军, 4郝久玉,翟霄翔.嵌入式图形用户界面的研究和移植[]电子测量技术,0 6 2 () 4—4 J. 2 0,9 2:34 .室,0 0 2 2 0 7

主要研究方向为互动数字媒体、多媒体信号处理。

地址:上海市闸北区延长路 19上海大学行健楼 10 4号 25E mal q s 2 0@1 3 cm;电话: 2—5 3 1 1 - i: h h 0 8 6 .o O 1 63 69

[]岳晓庆,善, 5张其常青.口扩展技术在嵌入式系统中

的串 实现[]电子测量技术. 0 6 2 () 4— 6 J. 2 0,9 2:54 .

(上接第 1 2页) 0

4 3设置软件陷阱 .

有效可行,杆织机电子送经/在剑电子卷取控制系统、物生医学信号数据采集系统等的实际应用中取得了良好的效

当乱飞程序进入非程序区,余指令便无法起作用。冗 利用一条无条件跳转指令强行将捕获的程序空间引向复位地址进行处理:NOP NOP

果,使系统在现场成功运行。参考文献

[]顾永红. 1综述单片机应用系统的抗干扰设计[]计算 J.机自动测量与控制,0 0 1:15 . 2 0 ( )5—3

LJ MP 0 0 0 0 H

软件陷阱安置在: () 1中断向量区,扰因素的存在可以激活不希望出干 现的中断,以在放大板单片机中断向量区加入软件陷所阱,以防止因中断而造成混乱;

E-达争尚, 2 1何俊华,文,实时控制系统的单片机抗孟凡等.干扰设计[]测控技术,0 3 2 ( )6—9 J. 2 0,2 6:66 .E]王幸之.单片机应用系统抗干扰技术[ . 3 M]北京:京北航空航天大学出版社,9 93—6 1 9:64 .

[]胡启民, 4吕庭.单片机系统中复位电路可靠性设计[] J.电子测量技术,0 1 2 () 1—9 2 0,4 3:81 .

() 2程序区及大量未使用的 R M空间, O程序区由于有大量的程序组成,能随意设置陷阱,不否则,常执行的程正序也将陷入进去。程序区的陷阱应设置在程序执行的断裂点处,如,以在 L MP SMP R T等指令处设置陷例可 J、J、 E阱。考虑到程序存贮器的容量,软件陷阱一般 1K B空间有 2个就可以进行有效拦截。~3

E I李冉, 5苏东林,,接收装置抗互调干扰性能分析王琼等.[]电子测量技术,0 6 2 ( )4—9 J. 2 0,9 1:84 .[]程继兴,霞. 6刘单片机系统软件抗干扰措施分析[]电 J.子测量技术,0 3 2 ( ) 6—2 2 0, 66:16.

在采用以上这些措施时,应综合考虑系统程序的执行效率,以取得最好的运行效果。

[]程继兴, 7刘霞.看门狗技术在单片机应用系统中抗干扰[]电子测量技术,0 5 2 ( ) 2—

0 J. 20,8 1:93.[]李志宇 .于多处理器的剑杆织机控制系统研究[] 8基 D. 西安:西北工业大学硕士论文,0 4 6—5 2 0:06 .作者简介

5结束语综上所述,干扰设计是单片机控制系统设计的重要抗环节,设计的好坏往往决定整个系统的成败。本文介绍其

李志字,,士研究生,男博主要研究方向为计算机控制

了印制电路板中地线和电源线的布线方法,从硬件和软件两个方面探讨了一些提高抗干扰能力的方法。这些方法

与控制、多媒体通信与计算机网络。

17 1

本文来源:https://www.bwwdw.com/article/gf24.html

Top