• U-BOOT移植 前准备


    一、  首先下载U-BOOT的2012.4.1    ,下载方法  :打开 goole ,搜索 u- boot  ,进入点击 sourcecode ,再点击 ftpserver 进行下载

            将文件移到虚拟机上,解压   tar xjf u-boot-2012.04.01.tar.bz2

            然后make smdk2410_config 配置一下,出现Configuring for smdk2410 board... 表示配置成功  (注意此时编译器的版本为arm-linux-gcc   4.3.2)

            然后再windows 这边查看源代码,分析准备移植

     二、    首先 u-boot 启动的第一个程序是在  arch/arm/cpu/arm920t/start.s 可以通过链接程序去进行分析

         start.s 做的工作 :

          1、set the cpu to SVC32 mode   设置为管理模式

          2、关看门狗,

          3、关闭中断

         4、设置时钟分频系数,(注意没有设置时钟)

         5 、执行  cpu_init_crit  :做的工作 :打开cahe ,关闭 mmu ,运行  lowlevel_init

                    lowlevel_init 做的工作 :配置存储芯片 (SDRAM .nandflash norflash)的时序,位宽

         6、设置堆栈 运行 board_init_f   单板初始化 链表  init_sequence (包括时钟,等待各种初始化程序),  设置各种堆栈 (malloc 、irq)的堆栈,然后最后剩下存储区的地址  重定位代码。

       三、重定位代码分析

              为什么需要重定位 :  

                           开机时NAND 启动 : 将NAND FLASH中的代码,拷入片内的4K SRAM中,然后运行程序,程序从0地址开始运行

                           开机时NOR启动 :直接在NORFLASH中运行,NOR的起始地址为0,片内的RAM地址不为0(具体查书)。NORFLAHS只能像内存一样读数据,但不能像内存一样写入数据

                           当程序比较大时,就需要将程序进行重定位到一块大的内存存储上比如SDRAM 

                           程序编译时有链接地址,这个程序在运行时的指定地址 ,注意此处的位置无关和绝对定位

           重定位:需要将程序中的代码,变量,只读段都需要定位

                          程序还好说,当运行要去SDRAM内存执行时,直接将地址值赋给PC值就可以了,但是需要访问变量等信息,这时进行链接时使用 pie选项,就可以生成在源程序中的位置信息,重定位时,根据这些地址,生成新的重定位地址

        

      

              

                        

             

            

       

            

      

    要有韧性
  • 相关阅读:
    Linux停SVN提交时强制写日志
    svn文件提交时强制写注释
    ssh 登录出现的几种错误以及解决办法
    Linux内存调试工具初探-MEMWATCH
    段错误调试神器
    Linux环境下段错误的产生原因及调试方法小结
    pthread_create()之前的属性设置
    Linux netstat命令详解
    Linux route命令详解和使用示例(查看和操作IP路由表)
    tomcat最大线程数的设置
  • 原文地址:https://www.cnblogs.com/niuxiaojie521/p/11130855.html
Copyright © 2020-2023  润新知