zoukankan      html  css  js  c++  java
  • (二)启动代码分析 02

    (二)启动代码分析 02

     

    首先从开发板硬件讲起:

    思考问题: 开发板上电后,程序是如何启动呢???

    这里分 nor flash 启动 和 nand flash 启动

    讲解 : 

    nand flash 启动:

    ______________________________________________________________________________________________________________________

    由于NAND FLASH是接在NAND FLASH控制器上而不是系统总线上,所以没有在S3C2440A的8个BANK中分配地址空间。如果S3C2440被配置成从Nand Flash启动,在S3C2440上电后,Nand Flash控制器的会自动的把Nand Flash上的前4K数据搬移到内部SRAM中,也就是所谓的”Steppingstone”, 同时把这段片内SRAM映射到nGCS0片选的空间(即0x00000000)。系统会从这个内部SRAM中启动,程序员需要完成的工作,就是把最核心的启动程序放在Nand Flash的前4K中,也就是说,你需要编写一个长度小于4K的引导程序,作用是将主程序拷贝到RAM (一般是SDRAM)中运行。而在Nand Flash方式启动的情况下,系统是”看不到”Nor Flash的,因为Nor Flash也是挂在nGCS0上的,而nGCS0的地址空间已经被占用了。

    ________________________________________________________________________________________________________________________

    1、系统上电后,首先自动判断是否是autoboot模式,如果使用 s3c2410是带有nandflash的,并且被设置成autoboot,从nandflash开始启动.
    2、在判断是autoboot模式后,mcu内置的nandflash控制器自动将nandflash的最前面的4k区域(这4k区域存放着 bootloader的最前面4k代码)拷贝到samsung所谓的"steppingstone"里面(steppingstone是在S3C2440 中,实际上是一块4k大小的SRAM,).
    3、在拷贝完前4k代码后,nandflash控制器自动将"steppingstone"映射到arm地址空间0x00000000开始的前4k区域.
    4、在映射过程完成后.nandflash控制器将pc指针直接指向arm地址空间的0x00000000位置,准备开始执行"steppingstone"上的代码.
    5、而"steppingstone"上从nandflash拷贝过来的4k代码,是程序员写的bootloader的前4k代码.这个 bootloader在之前写好,并已经被烧写到nandflash的0x00000000开始的最前面区域..而这"steppingstone"上的 4k代码就是bootloader的前4k代码.
    6、在pc指向arm地址空间的0x00000000后,系统就开始执行指令代码.这4k代码的任务是:初始化硬件,设置中断向量表,设置堆栈,然后一个很重要的任务是,将nandflash的最前面区域的bootloader(包含4k启动代码)拷贝到SDRAM中去,bootloader代码的大小是写好bootloader就确定的.然后只需要确定bootloader想映射到SDRAM的起始位置就ok.
    7、在完成对nandflash上的bootloader搬移后,找到4k代码的搬移代码最后一个指令的下一个指令在SDRAM的bootloader的地址,然后跳转到该位置,继续执行bootloader的剩余代码(引导系统).
     
     
    具体可以看: http://blog.csdn.net/r91987/article/details/7625916   虽然没有图,但是说得很好啊
     
    因为代码必须从 地址 0x000000 开始启动,而 nor flash 就是0x000000  但是nand flash 地址确是 0x30000000  行不通,但是我们有个 4KB 的 steping stone(ARM 芯片自己有的)地址是 0x00000,这样可以 
    硬件复制前4KB 代码到 stepping stone 再转到 0x30000000 的 SDRAM 中去
     
    nor flash 启动,由于 nor flash 可以存放 bios , 但是 可读不可写,但是 bootloader 里面的 RW 段 和 ZI 段 要被写,自然也要进行代码的搬迁工作(参考 杨铸 97页
    ————————————————————————————————————————————————————————————————————————————————————————————————————————————————
    ————————————————————————————————————————————————————————————————————————————————————————————————————————————————
     
    启动代码详解: 
     
    总得来说,裸机开发 启动代码只有 100 多条 汇编指令, 通过启动代码可以近一步熟悉 ARM 汇编指令, 好处是为以后熟练运用 ARM C语言, 汇编语言混合编程以及 uboot的移植打下基础。
    那么怎样才算ARM汇编 过关呢???? 只要看得懂启动代码就可以了啊!!!!!!!!!!啊啊啊啊 啊啊 啊 啊啊啊 啊!!!!!!!然后自己会修改就行了!啊啊啊啊啊啊a啊 啊啊啊 啊啊 啊~~  !!!!!!!!!!
  • 相关阅读:
    正则表达式分组小记
    Python中关于try...finally的一些疑问
    hello,world!
    02操控奴隶——掌握它的语言“Python”
    01操控奴隶——奴隶的构成与运行方式
    vue特殊属性 key ref slot
    vue内置组件 transition 和 keep-alive 使用
    vue文档全局api笔记2
    vue文档全局api笔记1
    vue 二三倍图适配,1像素边框
  • 原文地址:https://www.cnblogs.com/zhugeanran/p/8410175.html
Copyright © 2011-2022 走看看