首页 UBoot源码分析及在S3C2440的移植过程

UBoot源码分析及在S3C2440的移植过程

举报
开通vip

UBoot源码分析及在S3C2440的移植过程 K~ U-Boot源码分析及在S3C2440的移植过程 Analysis⋯ofU-B—oo—tandtheProcessofTransplantto$3C2440 许伦辉齐宝岭黄艳国 XuLunhuiOiBaolingHuangYanguo (江西理工大学机电工程学院,江西赣州341000) (SchoolofMechanicalandElectricalEngineering,JiangxiUniversityofScienceandTechnology. JiangxiGanzhou341000) ...

UBoot源码分析及在S3C2440的移植过程
K~ U-Boot源码分析及在S3C2440的移植过程 Analysis⋯ofU-B—oo—tandtheProcessofTransplantto$3C2440 许伦辉齐宝岭黄艳国 XuLunhuiOiBaolingHuangYanguo (江西理工大学机电工程学院,江西赣州341000) (SchoolofMechanicalandElectricalEngineering,JiangxiUniversityofScienceandTechnology. JiangxiGanzhou341000) 摘要:BootloaderU-Boot功能齐全,应用广泛,但移植到ARM微处理器$3C2440上相对比较复杂。本文介绍了U—Boot 的源码结构及U-Boot的配置、编译、连接过程,并对U-Boot的启动过程进行了源码分析,重点阐述了U—B00t移植到ARM微处 理器$3C2440的过程。 关键词:Bootloader;U-Boot;移植;嵌入式系统 中图分类号:TP311.54 文献标识码:B 文章编号:1671-4792一(2009)7—0172—03 Abstract:BootloaderU-Boot,Thefunctioniscomplete.theapplicationiswidespread。Butitisrelative- lyquitecomplexthetransplanttoARMonmicroprocessorof$3C2440.Thisarticleintroducesthesoundcode structureofU-Boot。theU-Bootdisposition,thetranslation,theconnectionprocess.Theanalysisonthe soundcodetotheU-Bootstartupprocedure.elaboratedwithemphasisU-BoottransplantstoARMthemicropro- cessor$3C2440process. Keywords:Bootloader;U-Boot;Transplant;EmbeddedSystem 0引言 Bootloader是在操作系统内核运行之前运行的一段小 程序。通过这段小程序,我们可以初始化硬件设备,建立内存 空间的映射图,从而将系统的软硬件环境带到一个合适的状 态,以便为最终调用操作系统内核准备好正确的环境,其功 能类似于Pc机的BIOS。Bootloader的实现非常依赖于具体 硬件。在嵌入式系统中,硬件配置千差万别,不可能有一个 Bootloader支持所有的CPU、所有的电路板,所以需要进行 一些移植。嵌入式Linux系统中常用的Bootloader有 U-Boot、VIVI、BIob、RedBoot、APJ4boot等,当前比较流行的是 U-Boot,全称为UniversalBootLoader,即通用Bootload- er。它是遵循GPL条款的开放源代码项目,可以引导多种操作 系统,如:Linux、NetBSD、VxWorks、QN)(、RTEMS、ARTOS、LynxOS 等;支持多种构架的CPU,如:PowerPC、MIPS、x86、ARM、NIOS、 XScale等:还可以烧写EXT2、JFFS2文件系统映像、支持串口 下载、网络下载。虽然使用较复杂,但是可以用来方便地调试 程序。 1 U—Boot源码结构 本文是在UIBoot-1.1.6的基础上进行分析和移植的。 从sourceforge网站下载U-Boot一1.1.6.tar.bz2,解压后即 】Z2 得到全部源代码。U-BOot的目录结构比较简单,U.Boot.1. I.6根目录下共有26个子目录,可以分为四类: ①与平台相关的或者开发板相关; ②通用的函数: ④通用的设备驱动程序; ④U-Boot工具、示例程序、文档。 这26个子目录的功能与作用如 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 一所示。 表一26个子目录的功能与作用表 no计d 门挺饭州* 列1w币|叫^己胃frJ仆牡扳(BD仕印u}11¨) Cpu 甲啬柑笑 x”·可:川f,Jcpu.仟Ef『l的下I]最p们叫咀避岳缃竹 Jbz386类似 簟辛句地下j皿川门之佴 lf忙ludc 砸n1的嘲教 =L上什和JI垃饭配置文竹.圩垃饭的犯置室什血 mcⅢdcun6B● Libgenetic 堀Jfj的阼m教 通用的函诎.彩恐埘下。·E驱功胛}t'4*J避‘坫封翟 墟川的设鲁驱 恤盘挂IJ柞序 础“I陴 再生H体&蔷的峨动聊件 歙:,赳鹰州盘勰成竹芷任赙蒜的轻柚 空什最境 N4rId-jpl U.[1mot般从ROM,NORr虹h船j曲.琨程升婧盘持 址N^Nn¨a小聊动 Net 齐种叫料悱汉 口‘埔 上电n柠W卑 %州叫钟的憾础 文档 却发,佳/Ij文H Cxnmple‘ ≈:恻材卑 。蝗嘏试开f弘.坷以使用u电∞t‘F垃后远盯 T凡 制作S-Record.U-Boot格式映像的nTH.比妞mkbmge 万方数据 2U—Boot的配置、编译、连接过程 ④设置好栈: 2.I1U-Boot配置过程 ⑤跳转到第二阶段代码的C入口点。 在顶层Makefile中可以看到如下代码: 现在,C函数的运行环境已经完全准备好了。通过如下 c SRCTREE:=$(CURDIR) 命令直接跳转,它将调用libarm/board.c中的占 ⋯⋯ . startarmboard函数,这是第二阶段的入口点。 墨 MKCONFIG:=$(SRCTREE)/mkconfigldrpc,一start_armboot—startarmboot:.wordsta_ 源 码 ‘‘‘‘。。 rtarmboot 分 Smdk241O_config:unconfig 3.2stage2(c语言部分) 析 及 o$(MKCONFIG)$(。:一config=)armarm920tsmdk 第二阶段从lib_arm/board.C中的start_armboot函 在 2410NULLs3c24xO 数开始,同时也是整个启动代码C语言的主函数。该函数主 留 在U_Boot_1.1.6的根目录下编译,实际上就是执行如要完成如下操作: 8 盒 下命令: ①调用一系列初始化函数; 。 的 ./mkconfigsmdk2410armarm920tsmdk2410NULL ②初始化flash设备: 移 s3c24xO ④初始化内存分配函数; 植 Mkconfig的作用如下: ④如果目标系统拥有NAND设备,初始化NAND设备; 过 程 ①确定开发板名称BOARD_NAME;②创建到平台/开发④如果目标系统有显示设备,初始化显示设备; 板相关头文件的链接;④创建顶层Makefile包含的头文件 ⑥初始化相关网络设备,填写IP、MAC地址,进人命令循 include/config.mk;④创建开发板相关的头文件i旷环,接收用户从串口输入的命令,然后进行相应的工作。 clude/config.h。4U—Boot移植过程 2.22U-Boot的编译、连接过程 本系统开发板是由$3C2440嵌入式微处理器、64M的 ①首先编译cpu/$(CPU)/start.S,对于不同的CPU,还NANDFlash、64}4的SDRAM、4个LED以及ARMJTAG接口组 可能编译cpu/$(cPu)下的其他文件; 成,我们将在开发板smdk2410的基础上进行移植。 ②对于平台/开发板相关的每个目录、每个通用目录使 (1)新建一个开发板的相应目录和文件 用它们各自的Makefile生成相应的库; 为了不破环原来的代码,在board目录下将smdk2410 ⑦将①、②步骤生成的.0,.a文件按照board/$(BOARD-复制为arm2440目录,并将board/arm2440/smdk2410.C改 DIR)/config.mk文件制定的代码起始地址、board/名为arm2440.C。还要在include/configs目录下建立一个 $(BOARDDIR)/U-Boot.1ds链接脚本进行链接:配置文件arm2440.h,可以将include/configs/smdk2410.h ④第④得到的是ELF格式的U-Boot,后面Makefile还直接复制为arm2440.h。 会将它转换为二进制格式、S-Recond格式。 还要修改两个Makefile.首先在顶层Makefile中增加 3U—Boot启动过程源码分析 如下两行: U-Boot属于两阶段的Bootloader,即stagel和Arm2440_config:unconfig stage2。依赖于CPU体系结构的代码(如设备初始化代码)通o$(MKCONFIG)$(o:_config=)armarm920arm2440 常都放在stagel,用汇编语言来实现。而stage2通常由CNULLs3c24xO 语言来实现,这样可以实现更复杂的功能,而且有更好的可 然后在board/arm2440/Makefile中进行如下修改: 读性和可移植性。 COBJS.-smdk2410.0flash.0 3.Istagel 改为: 第一阶段的文件为cpu/arm920t/start.S和COBJS:=arm2440.0flash.0 board/smdk2410/lowlevel—init.S。前者是平台相关的,后(2)修改SDRAM的配置 者是开发板相关。 SDRAM的初始化在U-Boot的第一阶段完成。本开发板 ①硬件设备初始化,依次完成如下设置:将CPU的工作 的HCLK设为IOOM,需要根据SDRAM芯片的具体参数重新计 模式设为管理模式(SVC),关闭WATCHDOG,设置FCLK、HCLK、算REFCNT寄存器的值,代码修改如下: PCLK的比例(即设置CLKDIVN寄存器),关闭MMU、CACHE。此舶efineREFCNT1113 部分代码在cpu/arm920t/start.S中; 改为: ④为加载BooSloader的第二阶段代码准备RAM空间。#defineREFCNTOx4f4 对于$3C2440。通过在start.S调用lowlevel—init函数来(3)增加对$3C2440的支持 设置存储控制器,是外接的SDRN.f。此代码在$3C2440是$3C2410的改进版,他们的基本操作相同。 board/smdk2410/lowlevel—init.S中; 不过在系统时钟设置、NANDFlash控制器的操作等方面有 ④复制Bootloader的第二阶段代码到RAM空间中;一些小差别。需要修改board/arm2440/arm2440.C中的 173 万方数据 board.一init函数。 (4)选择NORFlash的型号 本开发板所用NORFlash型号为AM29LV800,而配置文 件include/configs/arm2440.h中的默认信号为 AM29LV400.修改如下: #if0 #defineCONFIG..AM])..LV4001 #endif #defineCONFIG..AMD..LV8001 现在可以使用loadb、loady等命令通过串口来下载文 件了,它们的效率比JTAG高好几倍。 (5)支持串口xmodem 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 首先在文件开头增加load_serial_xmodem函数的声 明。然后复制load_serial—ymodem函数为load_seri— al_xmodem,稍作修改。将局部数组ymodembuf改名为 xmodembuf,并在后面使用到的地方统一修改,这只是为了与 函数名称一致,info.mode的值从xyzModemymodem改为 xyzModem_xmodem。重新编译、烧写U-Boot.bin后,就可以使 用loadx命令下载文件了. (6)支持网卡芯片CS8900 串口传输文件的速率实在太低,现在增加对网卡芯片 CS8900的支持。 U-Boot已经支持了CS8900,它的驱动程序在 drives/cs8900.c中,只要在U-Boot的控制界面中稍加配 置就可以使用网络功能了。首先设置好开发板的IP地址、 MAC地址、服务器IP地址,例如: Setenvipaddr192.168.1.17 Setenvethaddr08:00:3e:26:Oa:5b Setenv$erverip192.168.1.11 Saveenv (7)支持NANDFlash 要让U-Boot支持NANDFlash,首先在配置文件ir卜 clude/configs/arm2440.h的宏CONFIG_COMMANDS中增加 一CMI)一NAND。 #defineCONFIG__com#睛aI)S(CONFIG—CMD—DFLCFGCFG CMI)_CA c髓lCFG—CMD—PING[CFG—CMD—NANDI (8)修改默认配置参数以方便使用 Linux启动参数,增加如下3个宏; #defineCONFIG_SETUPMEMORY_TAGSl /.向内核传递内存分布信息’/ #defineCONFIG_CMI)LINE_TAGl /.向内核传递命令行参数‘/ /.默认命令行参数。/ #defineCONFIG_BOOTAGS。noinitrdroot=/dev/mtd- block2init:/linux.rcconsole=ttySACO” 自动启动命令,增加如下2个宏: /.自动启动前延时3s。/ #defineCONFIG_BOOTDELAY3 /‘自动启动的命令‘/ #defineCONFIG_BOOTCOMMAND。nboot0x320000000 0;bootm0x32000000 默认网络设置,根据具体网络环境增加、修改下面4个 宏: 舶efineCONFIG_ETIIADDR08:00:3e:26:0a:Sb #defineCONFIG_NETMASK255。255.255。0 #defineCONFIG_IPADDR192.168.1.17 #defineCONFIG_SERVERIP192.168.1.11 5结束语 LU-Boot是一款功能强大的Bootloader软件,使用的 CPU平台及操作系统也较多。本文是笔者在开发过程中根据 相关资料进行摸索,并在成功移植U-Boot的基础上总结出 来的。对于不同的CPU和单板,其基本的方法和步骤是一样 的,希望本文对从事嵌入式开发的相关人员有所帮助。 参考文献 【1】韦东山.嵌入式Linux应用开发完全手册[M】.北京: 人民邮电出版社,2008. 【2】李亚锋,欧文盛.ARM嵌入式Linux系统开发从入门 到精通[M】.北京:清华大学出版社。2007. 【3】锐极电子科技有限公司.ARM&Linux嵌入式系统开 发详解[M】.北京:北京航天航空大学出版社,2007. 作者简介 许伦辉(1965一),男,江西南康人,博士,教授,主要研究 方向:智能控制理论及应用; 齐宝岭(1983一),男,山东济南人,硕士研究生,主要研 究方向:控制理论与控制工程。 万方数据
本文档为【UBoot源码分析及在S3C2440的移植过程】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_668573
暂无简介~
格式:pdf
大小:182KB
软件:PDF阅读器
页数:3
分类:互联网
上传时间:2011-03-20
浏览量:30