at91sam9g25处理器uboot移植 个人笔记一

本文详细记录了U-Boot在AT91SAM9G25处理器上的移植过程,包括生成和应用补丁、修改boards.cfg和Makefile、解决编译问题、分析启动流程等关键步骤。通过对启动代码的深入剖析,揭示了从启动到运行的各个阶段,以及如何处理中断向量表、内存初始化和环境变量设置等细节。
摘要由CSDN通过智能技术生成


1 生成补丁 与 打补丁


  生成补丁 diff -upNr old/ new/ > patch-x.y.z
  diff -upNr u-boot-2014.07/ u-boot-2014.07_moveto9g25/ > moveto9g25-2015.08.25-ok.patch
  打补丁   cd old
           patch -p1 < ../patch-x.y.z
----------------------------------------------------------------------------------------------
2 修改boards.cfg 与 Makefile
  Status, Arch, CPU:SPLCPU, SoC, Vendor, Board name,    Target,        Options, Maintainers
  Active  arm   arm926ejs  at91  atmel   at91sam9g25jzq at91sam9g25jzq_nandflash
         at91sam9g25jzq:AT91SAM9G25,SYS_USE_NANDFLASH    Zhaigch <zhaigcherer@qq.com>


  修改Makefile,指定CROSS_COMPILE = arm-linux-
  拷贝board/atmel/at91sam9x5ek 为 at91sam9g25jzq对应配置文件里的Board name
  拷贝include/configs/at91sam9x5ek.h 为 at91sam9g25jzq.h
  生成配置头文件 make <Target>_config
  make at91sam9g20ek_nandflash_config
  make at91sam9g25jzq_nandflash_config
  make
  make u-boot.dis //生成反汇编文件
----------------------------------------------------------------------------------------------  
3 搜索字符串命令
  grep -nR "xx" ./
  使用4.3.2交叉编译器编译时出错 armv5te指令集不兼容,使用arm-none-gnueabi-4.7.3编译顺利通过。
  
  修改 configs/at91sam9g25jzq.h 里的宏定义为“CONFIG_SYS_TEXT_BASE 0x22000000”
  使程序编译后的运行地址为22000000开始,将nand中拷贝出的程序放到该地址后,直接跳转执行。
  发现源码做的太好了,直接就跑起来了!
---------------------------------------------------------------------------------------------- 
4 启动分析一
  arch/arm/lib/vectors.S    //中断向量表,跳转到 reset,即:
  arch/arm/cpu/arm926ejs/start.S //这里如果没有分两级引导的话,这里需要进行一些必要的初始化操作
    //如关闭内部看门狗,初始化系统时钟,初始化ddr2内存,从nand中拷贝程序到内存中等操作。
    //由于我们是二级启动uboot,以上这些已经被1级引导程序完成,因此 通过宏CONFIG_SKIP_LOWLEVEL_INIT
    //直接跳过这些过程直接调用 _main
  arch/arm/lib/crt0.S  // _main在该文件中定义
    //初始化sp为 CONFIG_SYS_INIT_SP_ADDR = 0x20000000 + 4096 - GENERATED_GBL_DATA_SIZE
    //sub sp, sp, #GD_SIZE   ,接着在sp上方又分配出 GD_SIZE大小的内存
    //mov r9, sp,此时r9保存的就是GD_SIZE大小的内存的起始地址,也可以认为是某个全局变量结构体的指针
    //调用 board_init_f,根据配置头文件中的宏 CONFIG_SYS_GENERIC_BOARD,common/board_f.c被编译
    #define DECLARE_GLOBAL_DATA_PTR
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值