uboot成功移植到STM32F103ZET6(一)

接上一贴:uboot成功移植到STM32F103ZET6(硬件资源说明)
uboot成功移植到STM32F103ZET6(硬件资源说明)_佛山林峯的博客-CSDN博客_stm32 uboot

软件平台:IAR for ARM 7.70
硬件主板:浩宇电子STM32F103ZET6最小系统板
STM32库:HAL库
uboot版本:1.1.6
参考uboot代码:TQ2440开发板

第一步:
移植前必须着手准备一个调试好的STM32环境,比如我的工程上层应用只保留了最基础的main.c。
硬件底层驱动只用到4个,分别是定时器2,串口1,LED,NOR Flash和SRAM。必须要保证这些驱动能够完美运行哦!


第二步:
拷贝uboot用到的主要文件,这个要根据自己使用到的功能来修改,本渣用到uboot的功能不多,所以暂时只拷了以下一些文件:


第三步:
      分析uboot的基本架构组成,正常来讲应该是有两大阶段,第一阶段是跟CPU相关的一些初始化,比如S3C2440芯片需要分配中断使用的堆栈、关看门狗、设置时钟分频、初始化堆栈、代码重定位等等一系列操作。第二阶段总的来说主要是跑C语言代码,最终目的是引导Linux Kernel。
      回过头来分析下STM32,由于我们习惯使用MDK或者IAR来开发,尤其是使用了ST公司提供的库文件,因此对于STM32而言第一阶段基本是不需要开发者操心的。再分析第二阶段,STM32没办法跑Linux,不过可以跑我们常用的uCOS、FreeRTOS、RT-Thread等RTOS,也可以裸跑,基本跟我们用bootloader跳转到APP的操作一致,所以我们的最终目的是把uboot做成MCU常用的bootloader,不过是特殊一点的bootloader,因为我想把uboot引导APP在RAM上运行的功能保留下来,这样能避免用户频繁烧flash。
      上面提到STM32的第一阶段基本是MDK或者IAR平台帮我们解决了,但是还没有解决完所有的问题,其中一个是全局变量gd,在2440平台上把GD指针存放在通用寄存器R8里面:
#define DECLARE_GLOBAL_DATA_PTR     register volatile gd_t *gd asm ("r8")      /* 定义寄存器r8作为结构体gd_t指针gd */
还有个问题是uboot的内存分布引起的  


uboot上的代码段、数据段、BSS段都是要重定位到SDRAM上跑的,只有这样数据段的数据才能实现随机修改。
STM32虽然可以在NOR Flash上跑uboot,不过如果像ARM9那样把代码重定位到SRAM,仿真就会失效!
本渣是希望尽可能保留uboot代码在MCU内部的flash上跑,这样比较有助于初学者能跟踪代码。

好了,下一篇文章正式开始从代码处着手分析移植!^_^

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值