U-boot分析(1)
来源:互联网 发布:网络吞吐率 编辑:程序博客网 时间:2024/05/17 07:23
1. u-boot是一款功能十分强大的bootloader,分析其代码,获悉bootloader的基本写法。
2. 以sbc2410这块开发板为例分析,u-boot版本为2010.03。
3. cpu相关部分
3.1 cpu在硬件上就是一个门阵列,是一个完全的逻辑器件,它提供了指令集,对cpu的控制就是靠对cpu发送相关指令实现的。这些指令是一连串的二进制码,将这些二进制码发送到cpu指令总线上就能控制cpu。bootloader就是这个二进制码序列,编译u-boot就是为了生成bootloader。生成后的bootloader文件会被写入flash,eeprom等存储器中,cpu会在启动后自动加载运行bootloader中的二进制指令,从而启动。
3.2 指令序列存放在何处?又该如何存放?顺序如何?这些就要看lds文件,一段的格式分开存放这些数据和指令。
3.2.1 sbc2410开发板的cpu是s3c2410,属于arm 920t系列。对这个些列cpu的支持文件在cpu/arm920t下,里面有个u-boot.lds的文件。内容如下:
<cpu/arm920t/u-boot.lds>
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS
{
}
网上有专门介绍这个lds文件格式的文档,这些知识是一定要掌握的,具体的就不多说了,看了文档自己就能全看明白了。大体上能看出,起始地址是0x00000000,依次向下有如下几个段.text .rodata .data .got .u_boot_cmd .bss (NOLOAD)。
3.3
最先放的是cpu/arm920t/start.o
最先的一段
.globl _start
_start:
_undefined_instruction:
_software_interrupt:
_prefetch_abort:
_data_abort:
_not_used:
_irq:
_fiq:
存放的第一个指令是一个跳转指令,后面是异常处理表,分别有相应的处理函数。
start_code:
让cpu工作在svc模式下
对LED灯的控制,以方便程序调试,但是是空函数。
#if
copyex:
#endif
将异常处理表复制到0x0000000处,前面看到这个表就是放在此处的,所以不需操作。
#ifdef CONFIG_S3C24X0
# if defined(CONFIG_S3C2400)
#
#
#
#else
#
#
#
#
# endif
通过宏定义了一些地址常量,具体这些寄存器的内容,需要看s3c2410手册才行。
关闭watchdog功能,不然一到时间就cpu就复位了。
# if defined(CONFIG_S3C2410)
# endif
将所有的中断都mask掉,不响应
#endif
设置时钟分频,应该是cpu上某些部分使用不同的时钟频率。
stack_setup:
#ifdef CONFIG_USE_IRQ
#endif
留出空间,设置sp栈指针,此时可以运行C程序了
clear_bss:
清空bss段
clbss_l:str
pc指向_start_armboot,即跳转执行start_armboot
_start_armboot:
原文见:http://blog.sina.com.cn/s/blog_559f6ffc0100j7yq.html
- U-boot分析(1)
- U-boot 分析1
- u-boot分析1
- u-boot Makefile分析 -- (1)
- U-BOOT命令分析1
- u-boot分析(一)
- u-boot分析(一)
- u-boot分析(2)
- u-boot分析(十一)
- u-boot分析(一)
- U-boot分析与移植(1)----bootloader分析
- U-boot分析与移植(1)----bootloader分析
- U-boot分析与移植(1)----bootloader分析
- U-boot分析与移植(1)----bootloader分析
- U-boot分析与移植(1)----bootloader分析
- U-boot分析与移植(1)----bootloader分析
- u-boot分析和移植(1) bootloader分析
- U-boot分析与移植(1)----bootloader分析
- Oracle 双监听器的配置
- iterator_traits
- C# Lambda Expressions 简介(二)
- Linux 命令使用积累
- 理解signal()
- U-boot分析(1)
- Ubuntu11.10 更新软件源source.list
- 通知,about“一起学python”
- [Win32]一个调试器的实现(三)异常
- 系统调用-open函数的oflags参数引起的调试经历
- hdu 4020 hash的精妙运用
- tic-tac-toe Minimax(极小化极大算法)
- android写文件到sd卡要有权限声明
- u-boot分析(2)