免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 949 | 回复: 0
打印 上一主题 下一主题

bootloader [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-29 17:30 |只看该作者 |倒序浏览

                               
vivi bootloader
一:bootloader有两种模式:
1:autoboot mode.一段时间后自动加载引导Linux核心。
2:prompt mode.接收用户输入来完成一些其它的功能。
二:在prompt mode下有下面一些命令,当然这些都是可配置的,根据实际情况还可能有其它命令。
1:load  [partname |  ] 
2:part show 
   part add name offset size flag
   part del name
   part save
3:param show
  param set paramname val
4:boot  [partname | ]
三:工作过程
主要分成两步,汇编部分的stag1及C语言部分的stage2.
stage1:
1:建立导常向量表。
2:关闭看门狗。
3:关闭所有的中断。
4:初始化系统时钟。
5:初始化RAM控制寄存器。
6:初始化UART控制寄存器。
7:将bootloader拷贝到VIVI_RAM_BASE处(一般是位于RAM的最高地址处)。
8:设置堆栈指针sp为STACK_BASE+STACK_SIZE-4,并跳转到stage2.
stage2:
1:打印版本信息等vivi_banner.
2:硬件初始化,主要是定时器和GPIO。
3:初始化内存映射,主要包括两部分内容,一是建立MMU的TLB,在MMU_TABLE_BASE处建立存储映射表;二是调用汇编函数arm920_setup()来初始化CP15寄存器以及便能MMU?????
4:堆栈初始化。堆空间的分配都位于HEAP_BASE处,主要是mmalloc_init函数,以后bootload调用malloc或free函数的时间都是对这HEAP_SIZE这段空间的操作,主要的数据结构是blockhead_t的双向链表(其实严格来讲并不是标准的双向链表)。
5:MTD设备的初始化。主要是对建立对nandflash的读写函数.????
6:初始化priv数据。priv数据主要包括三种,即bootloader参数(VIVI_PRIV),Linux_CMD参数和MTD分区参数。bootload会首先从程序中读取默认的参数值,如果在config时选择了自定义参数,则会去读取已经存储的用户参数。 三种数据的初始化就是将各自的默认参数读取到相应的地址处. 在读取用户自定义参数时,会首先把param分区拷贝到DRAM_BASE处,然后从DRAM_BASE处读取三种参数分别拷贝到VIVI_PRIV_RAM_BASE处.
7:注册基本的用户命令. 包括cpu_info reset param part mem load dump boot help call go 等。其中注册的每一个用户命令都会被加入到一个单链表中,在命令行模式中会从这个链表中查找用户输入的命令以便执行相应的操作。
8:决定执行boot模式还是cmd模式。如果是boot模式,会首先从参数区中读取media_type类型,然后从mtd_partions表中读取kernel的offsize及size,然后从vivi_part参数区中读取boot_mem_base,接下来从mtd的kernel分区处将size个长度的内核拷贝到boot_mem_base+LINUX_KERNEL_OFFSET(0x08000)处,作一magic验证,最后从linux_cmd处读内核启动参数,拷贝到LINUX_PARAM_OFFSET处并启动内核。。。
               
               
                RAM_BASE/DRAM_BASE
|---------------------64M----------------------|
                                          |----|VIVI_RAM_SIZE-|(1M)                                           |VIVI_RAM_BASE
                                     |----|HEAP_SIZE(1M)                                                |HEAP_BASE
                                 |---|MMU_TABLE_SIZE(16K)
                                 |MMU_TABLE_BASE    
                             [color="#ff9999"]|---|VIVI_PRIV_SIZE(16K*3)    
                             |VIVI_PRIV_RAM_BASE    
                         |---|STACK_SIZE(32K)
                         |STACK_BASE
|----RAM_SIZE------------|
RAM_BASE/DRAM_BASE
VIVI_PRIV_RAM_BASE
|--------------------------------------------|VIVI_PRIV_SIZE(16K*3)
                            |--------------|LINUX_CMD_SIZE(16K)    
                            |LINUX_CMD_OFFSET(0x00008000)    
                 |------------|PARAMETER_TLB_SIZE(16K)    
                 |PARAMETER_TLB_OFFSET(0x00004000)    
|--------------|MTD_PART_SIZE(16K)
|MTD_PART_OFFSET(0x0)
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/92532/showart_1914464.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP