U-Boot在S3C44B0上的移植方法

非常实用的Bootloader程序为ARM S3C44b0(公版) ,实现了系统引导和支持Xmodem协议文件传输并下载到本址存储器运行 第一部分: 启动代码;==================================================================;文件: startup.s                         ;修改: 李光祥 chenfengmcu@126.com;日期: 2008/10/9;描述: 基于ARM处理器S3C44b0X C语言启动代码;      初始化I 阅读详情

Bootloader 给嵌入式操作系统提供板上硬件资源信息,并进一步加载、引导嵌入式操作系统。由于Bootloader 的功能直接与CPU和微处理器系统相关,所以不同的CPU体系将需要不同的Bootload-er。除了依赖于CPU的体系结构外,Bootloader 实际上也依赖于具体的嵌入式板级设备的配置。也就是说,对于两块不同的嵌入式板,即使它们使用同一种CPU 构建,要想让运行在其中一块上的Bootloader程序也能运行在另一板子上,通常也都需要修改Bootloader 的源程序。 

        本文作者使用基于ARM7TDMI 核的S3C44B0微处理器构建的嵌入式开发板,附有嵌入式开发必须的一些板上硬件资源,针对性地提供了Bootloader的移植方法,可以应用在基于ARM7 系列处理器的嵌入式系统应用开发中。 

        U-Boot 运行及移植条件分析 

        嵌入式系统的硬件部分不可能是完全一致的,由于嵌入式系统需要硬件与软件的配合才能正常工作,因此,需要针对硬件系统进行有关引导程序的设计。对于嵌入式系统来说,引导程序比较复杂,一般采用对基本符合硬件体系要求的现有引导程序进行修改,然后加以应用的方法设计引导程序,这就是引导程序的移植。 

        在移植操作前,需要完成两个工作,一个是寻找一个比较适合的引导程序,另一个就是对所要移植的软件进行分析,结合已有硬件系统,找出移植的条件。本文选择U-Boot 作为引导程序,移植工作就是使原有的U-Boot 能够在本文给定的硬件系统中运行。 

        U-Boot是德国DENX小组开发的用于多种嵌入式CPU的Bootloader引导程序,支持PowPC、ARM、MIPS、m68 K 等多种处理器平台,易于裁剪和调试。U-Boot 遵循GPL (通用公共许可) 公约,完全开放源代码。U-Boot 主要特性如表1所列。 
   


        U-Boot 运行分析 
        U-Boot 的启动过程主要分为两个阶段,即stage1 和stage2。
stage1用汇编语言编写,通常是与CPU的体系结构有关,如设备初始化代码等,在start.S中实现。
stage2为C 语言程序,用来加载操作系统内核,具有可读性和可移植性,是由board.c中的start-armboot() 函数来实现。U-Boot的stage1如图1 所示。 

        图1  U-Boot stage1 初始化过程 

        stage2包括以下步骤;①初始化本阶段要使用到的硬件设备; ②检测系统内存映射; ③将kernel映像和根文件系统映像从FLASH上读到RAM空间中; ④为内核设置启动参数; ⑤调用内核。在调试阶段,操作系统内核是通过U-Boot下载到SDRAM中,调试完毕可以将内核烧写到FLASH中。本文选用的内核是u Clinux,在FLASH 中的分布如图2 所示,这些地址可以通过修改include/ con2figs/ smdk4110.h 文件进行配置。内核运行时的RAM地址必须与u Clinux配置的运行地址相一致。由于FLASH的存储空间有限,存放在FLASH中的u Clinux核心是经过压缩的。U-Boot将压缩的u2Clinux kernel加载到SDRAM 地址0x0C300000如图3所示,如果选择启动u Clinux,则压缩的u Clin2ux核将自解压到0x0C008000,然后再跳转到该处并开始运行。 

        图3中0x0C100000是U-Boot将自身的stage2的代码复制到SDRAM的起始地址,0x0C700000是默认的Load地址空间,用于U-Boot的升级与调试,在需要升级或修改U-Boot时,将更新的U-Boot映像加载到这里,然后通过原有的U-Boot从SDRAM烧写到FLASH覆盖原来的U-Boot,这样可以减少烧写FLASH 的次数。 

        移植条件分析 
        移植操作的目的,是为了在嵌入式开发板上用于引导嵌入式操作系统u Clinux 及其应用。 

        根据Bootloader 运行的分析结果,把Bootloader可移植条件分为如下两种情况。 

        (1) 硬件资源完全支持条件。在完全不改变U-Boot程序源代码的条件下,选用U-Boot程序完全支持的嵌入式微处理器,并且选用U-Boot完全支持的主板配置资源。基本移植条件即是通过分析U-Boot下的board目录和cpu目录,订制开发板,使开发板的配置与之相适应,但是这种情况与实际开发不太吻合。 

        (2) 硬件资源支持修改后的代码。开发者已经选用某种类型的嵌入式微处理器,自行设计了嵌入式系统的开发板或者直接从厂家购买的开发系统。在这种情况下,硬件资源已经确定,只能在不改变U-Boot整体结构的条件下,通过修改U-Boot的相关代码,匹配已有的开发板。 

        在实际应用中,最常遇到的是第2种情况。这时应该保证嵌入式主板能够正常运行,没有硬件故障,具备相应的存储媒介( FLASH、SDRAM) 用来存储和运行U-Boot。由以上分析可以看出,Bootloader 的移植条件包括;①相匹配的微处理器硬件结构; ②可对Boot-loader 进行调整修改的开发环境。 

        注意:以上两个条件必须同时具备,才能着手进行Bootloader 的移植工作。 

        U-Boot 移植操作 

        Bootloader的移植操作前需要作如下两个工作。 

        (1) 对嵌入式系统进行硬件分析,判定是否满足移植条件。根据目标板上CPU、FLASH、SDRAM的情况,以尽可能一致的原则先找出一个与目标板为同一个或同一系列微处理器的U-Boot的支持板为参考,复制相似的目录,修改文件名及内容。 

        (2) 确定下载U-Boot所需要的FLASH地址。这由嵌入式微处理器的中断复位向量决定,嵌入式板的硬件资源不同,中断复位向量就不同,所以不同嵌入式系统板对Bootloader在固件( EEPROM、FLASH) 中的存放地址各不相同。U-Boot 的起始地址必须和硬件复位向量一致,本文分析的ARM7嵌入式系统板的中断复位向量设置为0x0C000000,所以U-Boot的映像文件必须烧写到FLASH的0x0地址处。 

        上述两项工作是移植Bootloader必需完成的前期准备工作。以下结合本文完成的移植工作,介绍移植操作的具体内容和过程。 

        硬件配置条件 
        根据前文对移植条件的分析可知,本文的移植操作属于第2 种情况,即嵌入式系统目标板上硬件资源已经确定,目标板具有硬件资源如表2所列。 

        表2  硬件资源 


        移植操作内容 
        U-Boot 移植所需的硬件资源得到满足后,可以开始移植操作。 

        首先需要在主机建立交叉编译移植开发环境,编译生成目标板上可执行映像。主机端( PC) 开发平台选用linux 操作系统,使用交叉编译工具为arm-elf-tools-20030314.sh。Bootloader 移植操作,实际上就是根据嵌入式系统硬件资源提供的数据,对有关的文件进行修改。移植工作中的文件修改包括汇编和C 文件两部分。 

        移植文件修改 
        针对本文提供的主板硬件资源,并考虑U-Boot能够正常运行的最低条件,在移植过程中需要修改文件如表3所列。 

        表3  修改文件

  表3 中,memsetup.S 文件是对S3C44B0外部存储空间的配置; smdk4110.c 是对S3C44B0各个复用I/ O口的初始化,flash.c 是S3C44B0外接FLASH 芯片的驱动程序。除表3 需要修改的数据外,公共代码(/common目录下的文件)、网络传输代码(/ net 目录)、驱动程序(/drivers目录) 3部分根据不同的移植要求修改。 

        一般情况是要对U-Boot的功能进行扩充或者U-Boot不支持目标板上的设备时,添加相应程序。 

        具体修改操作 
        移植操作中这些文件修改过程的具体操作为: 

        (1)start.S 文件的修改。start.S 是汇编语言编写的U-Boot 程序入口代码,位于cpu/ s3c44b0 下。
移植操作中需要对start.S 进行相应的修改,具体修改内容如下。 

        ①设置WTCON = 0x0,禁止看门狗定时器,避免处理器强行复位。 
        ②设置INTMSK = 0x7ffffff,禁止所有中断。Bootloader 的执行过程中不必响应任何中断。 
        ③根据嵌入式微处理器工作主频,修改宏CONFIG- S3C44B0 - CLOCK- SPEED,使处理器能
够正常工作,本文的目标板上S3C44B0工作主频为66 MHz。在U-Boot 源程序中多处用到该宏,所以根据不同的处理器工作主频进行相应修改。 
        ④设置PLLCON寄存器。PLLCON锁相环控制寄存器中储存有计算系统时钟的相关参数,为了产生正确的系统时钟,必须根据外接晶振频率和处理器工作主频确定各个倍频系数。根据S3C44B0提供的计算式(1) 和式(2) 计算倍频系数M 、P、S 和PLLCON的值。设PLLCON值为Y为 


        式中, f in为晶振频率, f out为S3C44B0 微处理器工作主频,通常s 取1,使P + 2 = fin/2MHz ,可求得P。 

        (2)memsetup.S的修改。memsetup.S代码是对存储器空间的初始化,在start.S中被调用。修改内存映射相关参数,SDRAM 的刷新速度等,根据不同嵌入式系统板修改。 

        (3) /include/configs目录下嵌入式系统板头文件的修改。为了使串口能够正常工作,需要设置正确的波特率。本文嵌入式系统板的串口传输波特率为115 200 bps。根据片上资源配置,修改内存映射相关参数。该头文件里还定义了U-Boot的一些环境变量,这时可以不用修改, U-Boot启动后可以通过setenv命令来设定。其它参数与启动操作系统内核有关,需要与内核启动参数相匹配。 

        (4) 为了使串口能够正常工作,初始化串口4个相关寄存器。当只有一个串口时,只需对UART0的FIFO控制寄存器UFCON0、块控制寄存器UL2CON0、控制寄存器UCON0、波特率除数寄存器UBRDIV0修改, S3C44B0的串口初始化函数在/cpu/ s3c44b0/ serial.c 文件中。 

        如果串口不能正常工作,可能是由于串口时钟设置错误。查看UBRDIV0寄存器内容是否计算正确,查阅S3C44B0 手册由式(3) 计算,设UBRDIVO值为0,串口波特率为b,处理器主频为M, 则 

        U = (int) ( M/ b ×16) - 1 (3) 

        式中,b = 115 200 bps,M = 66 MHz。 

        (5) 根据嵌入式系统板的配置,对S3C44B0 相应的I/ O 寄存器内容修改,修改源文件/ board/smdk4110/ smdk4110.c。由于SMDK4110 嵌入式系统板选用的FLASH 型号不是SST39VF160, 而snds110嵌入式系统板选用的是SST39VF160 ,所以用snds110目录下的flash.c 替换原来的flash.c,使FLASH 芯片正常工作。 

        移植的基本工作已经作完,进入U-Boot主目录,在Shell下输入make命令编译U-Boot,编译后生成最终可以下载到FLASH中的uboot .bin 文件。 

        U-Boot 烧写及运行检查 

        需借助FLASH芯片烧写工具将编译好的U-Boot.bin 文件烧写进FLASH,检查U-Boot是否能正常工作。本文使用针对ARM处理器、运行在Lin2ux操作系统上的简易调试器软件J tager移植U-Boot。J tager支持本文基于ARM7TDMI核的S3C44B0 处理器的调试和对SST39VF160 FLASH芯片的读写。由于J tager是符合GPL公约、开放源代码的项目软件,用户可以免费从因特网获得该软件。 

        烧写完毕后,复位开发板,打开超级终端可以看到U-Boot的提示符。如果这时没有按任意键,U-Boot将自动加载操作系统内核和文件系统。若是按下任意键,则U-Boot停止自动加载,进入U-Boot命令行,可以输入命令进行调试。 

        结 论 

        本文结合分析U-Boot的运行机理和移植Boot-loader的必要条件,研究了U-Boot在基于S3C44B0的嵌入式系统板上的移植方法及具体的软件修改方法。本文移植情况是在硬件资源固定、不改变Boot-loader 框架前提下,对与嵌入式目标板和CPU 相关的代码进行修改。嵌入式开发人员应该在清楚了Bootloader 工作机理、移植条件之后,针对自己的目标板进行移植工作,在遇到不同的目标板时能够灵活的选用合适的Bootloader, 根据具体情况裁剪Bootloader,最大限度地发挥Bootloader的功能。本文选用的Bootloader U-Boot目前能稳定地运行在使用的嵌入式系统板上。通过U-Boot可以实现串口与PC通信,查看、修改内存,引导u Clinux嵌入式操作系统等功能。前期的移植工作是嵌入式系统开发的必要环节,在此基础上可以进行深入的嵌入式系统开发,希望本文能为作相关工作的开发者提供参考。 
 

作者:王 东,李哲英

基于ARM的嵌入式系统Bootloader启动流程分析----- 转!! 阅读详情

相关推荐

保姆级教程:用Zemax 18.9复现单模光纤耦合仿真(附康宁SMF-28e参数)

本文提供了一份详细的Zemax 18.9单模光纤耦合仿真教程,以康宁SMF-28e为例,涵盖从软件设置、材料参数输入到系统构建和优化的全流程。通过光束耦合分析和物理光学传播(POP)技术,帮助用户准确模拟光纤耦合效率,并解决常见问题,适用于光学设计初学者和专业人士。

weixin_27330481的博客 313

关于三星S3C44B0X目标板的uClinux Bootloader

2007-12-25 09:13:59 uClinux是为控制领域设计的嵌入式Linux操作系统,它沿袭了主流Linux的大部分特性,并进行了一定幅度的裁减。其设计主要针对没有内存管理单元(MMU)的微处理器,例如基于ARM7TDMI内核的S3C44B0X。 嵌入式Linux系统通常由三部份组成:Bootloader、Kernel和File System

mybirdsky的专栏 468

Minitab正交试验设计:从入门到精通的完整指南

本文提供了一份使用Minitab进行正交试验设计的完整指南。从正交试验省时省力的原理讲起,详细介绍了在Minitab中创建正交表、填入数据、执行分析(包括解读ANOVA和P值)以及寻找最优参数组合的全流程。文章旨在帮助读者,特别是工艺优化和研发人员,快速掌握这一高效工具,从而用最少的实验次数锁定关键影响因素,提升工作效率与成果。

weixin_29201313的博客 464

移植linux内核串口配置,uClinux内核的移植 - bootloader对uClinux的S3C44B0移植

3.3 uClinux内核的移植3.3.1 uClinux-dist源码包的准备从uClinux的官方网站下载uclinux-dist源码包。源码包中包含了uClinux内核、uClibc库和busybox等 uClinux下的用户应用程序,本文中下载的是uClinux-dist-20041215.tar.gz,在linux系统下解压后会生成一个 uClinux-dist目录,该目录包含了编译uC...

weixin_35661054的博客 298

LIO-SAM编译ubuntu20.04 Noetic

一、下载二、编译&&解决报错报错如下。

Kenneth666888的博客 689

实验二 离散控制系统的性能分析(时域/频域)

1.掌握离散闭环系统的动态性能时域参数的分析与计算方法; 2.掌握离散系统稳定性的频域典型参数分析与计算方法。 MATLAB 软件( 2022a); 1.在 Matlab 语言平台上,通过给定的闭环离散系统,深刻理解时域参数的物理意义与计算方法,内容包括如下: 阻尼比参数分析:Z 平面与 S 平面的极点相互转换编程实现;分析 S/Z 两个平面域特殊特性(水平线、垂直线、斜线、圆周等)的极点轨迹相互映射方法;系统阶跃响应参数:上升时间和超调量等。 2. 采用频域分析方法,通过编程计算,进一步理解离散系统的稳定

m0_51738372的博客 2479

U-BOOT的启动流程及移植

摘要:嵌入式系统一般没有通用的bootloader,u-boot是功能强大的bootloader开发软件,但相对也比较复杂。文中对u-boot的启动流程作了介绍,详细给出了u-boot在S3C44B0开发板上的移植方法和步骤。    关键词:bootloader;u-boot;嵌入式系统;移植;S3C44B01 Bootloader及u-boot简介Bootloader 代码是芯片复位

andyzx的开发日记 2873

【无人机编队】基于matlab虚拟leader无人机编队仿真【含Matlab源码 3279期】

虚拟leader无人机编队仿真 完整代码,包运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 837

uboot的start.S详细注解及分析

       这篇文章来自“mayer的空间”,注解的很好,向原文作者表示谢意。原文地址:http://mayer.spaces.eepw.com.cn/articles/article/item/59591          还有一个网友的注解也很独到,也向原文作者表示谢意。他来自“linux 嵌入式chenzhufly“nux 式 其地址是:http://blog.chinaunix...

micro9981的专栏 252

PyTorch视觉项目实战:从数据加载到模型部署

PyTorch视觉项目实战:从数据加载到模型部署 ,人工智能,计算机视觉,大模型,AI,随着深度学习在计算机视觉领域的飞速发展,PyTorch 凭借其简洁的代码风格、动态计算图特性以及强大的社区支持,成为众多开发者和研究人员的首选框架。从数据加载、模型构建与训练,到最终的模型部署,PyTorch 提供了一套完整且灵活的解决方案。本文将通过实际项目案例,详细阐述基于 PyTorch 的视觉项目全流程,结合丰富的代码示例和概念解析,帮助读者掌握从项目起步到落地的关键技术。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 4万+

【从零开始学习 SystemVerilog】1.1、SystemVerilog 概述

【从零开始学习 SystemVerilog】1.1、SystemVerilog 概述

努力,加油每一天鸭~ 1037

U BOOT

几经艰辛,终于基本完成了 u-boot 在 s3c44b0 的移植工作,在些记录一下在移植过程中所碰到的困难和解决方法(一些心得),作为日后参考之用,也希望能够帮到其它有需要的人 ^_^ 。 1. 来由: 在我搞完 ucos 后 ( 本来我是想学 uclinux 的,不过在对系统一无所知的情况下,还是先学一下 ucos 比较实际 ^_^ ,从中也可以对系统有个清晰的概 念 ) ,我意识到要搞系统的

咕唧咕唧shubo.lk的专栏 1806

【忍者算法】从生活案例理解滑动窗口最大值:一个超直观的思路讲解|LeetCode 239 滑动窗口最大值

点此看全部题解更多干货,请关注公众号【忍者算法】,回复【刷题清单】获取完整题解目录~

忍者算法的博客 632

uboot移植

http://www.foxice.net/techinfo_uboots3c44b01.asp http://www.baiheee.com/documents/090104/090104164132.htm http://www.51kaifa.com/html/jswz/200806/read-10152.htm http://blog.youkuaiyun.com/andyzx/archive/

fangbaolei2088的专栏 698

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

u-boot 在s3c44b0移植总结

我在移植过程主要参考以下文章,在此对其作者表示感谢。 u-boot移植44b0的详细步骤  http://blog.chinaunix.net/u1/36543/showart_290665.html U-Boot移植到S3C44B0X开发板的过程 http://www

[嵌入式开发模块]机械按钮模块 纯C语言 面向对象实现 按键消抖、长按、连击 257

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

uboot移植到S3C44B0X开发板的经历

Sam Fei (email: samfei@163.com) (1) 事情来由几个月前从朋友那里拿到了一块参考Micetek EV44b0-II开发板设计的板子,对其bootloader MBL感觉很不错. 朋友说可能是移植u-boot的.但Micetek并没有提供MBL的源代码, 因此当时没有仔细去研究. 最近公司准备想做基于S3C44B0X CPU的产品,因此购买了杭州立宇泰公司(www

andyzx的开发日记 6750

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

U-boot移植日记(s3c44b0)

        几经艰辛,终于基本完成了 u-boot 在 s3c44b0 的移植工作,在些记录一下在移植过程中所碰到的困难和解决方法(一些心得),作为日后参考之用,也希望能够帮到其它有需要的人 ^_^ 。 1. 来由: 在我搞完 ucos 后 ( 本来我是想学 uclinux 的,不过在对系统一无所知的情况下,还是先学一下 ucos 比较实际 ^_^ ,从中也可以对系统有个清晰的概 念 ) ,我

foxicearm的专栏 758

移植u-boot-2009-11->S3c44b0公板

移植u-boot-2009-11->S3c44b0公板 by panasonic.lin@163.com 网上有关porting u-boot for 44b0的大牛们的教程绝大多数都是以dave/B2板为模板,没办法,u-boot 上只有这块44b0的model。顺着前辈们的路,我在移植的时候遇到很多问题,有些问题前辈可能觉得太简单了 ,没有提及,结果是让我们这些囫囵吞枣的小菜死的很难看

StupidBirds的专栏 1272
上一篇: 基于ATMEL AT91RM9200的嵌入式Linux移植笔记
下一篇: 嵌入式Linux系统开发技术详解-基于ARM
menuconfig
博客等级 码龄19年 713粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值