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上跑,这样比较有助于初学者能跟踪代码

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

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...