head.s分析(1):保存u-boot传递过来的指针
来源:互联网 发布:软文推广龙域网络 编辑:程序博客网 时间:2024/06/05 02:24
快乐虾
http://blog.csdn.net/lights_joy/
lights@hb165.com
本文适用于
ADI bf561 DSP
uclinux-2008r1.5-rc3 (移植到vdsp5)
Visual DSP++ 5.0(update 5)
欢迎转载,但请保留作者信息
linux-2.6.x/arch/blackfin/mach-bf561/head.S是uclinux的入口点,uclinux的第一条语句就是从__start这个入口开始执行的,本文分析的就是head.s这个文件。
1.1 保存u-boot传递过来的指针
/* R0: argument of command line string, passed from uboot, save it */
R7 = R0;
这一行看起来很简单,实际上涉及到很多内容。
首先要知道的是R0保存的是什么东西。由于uclinux是由u-boot这类的bootloader进行引导的,这类程序通常需要将内核解压缩到一个指定的地址,然后通过一个函数调用将控制权交给内核,通常还要传递一个”console=/dev/ttyBF0”之类的字符串给内核,R0就保存了这个字符串的头指针,因此这行代码先把这个指针保存起来。
下面的代码来自于u-boot-1.1.6-2008R1.5/lib_blackfin/boot.c,从中可以看出这个参数的传递过程:
void do_bootm_linux(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[],
ulong addr, ulong *len_ptr, int verify)
{
int (*appl) (char *cmdline);
char *cmdline;
#ifdef SHARED_RESOURCES
swap_to(FLASH);
#endif
appl = (int (*)(char *))ntohl(header.ih_ep);
printf("Starting Kernel at = %x/n", appl);
cmdline = make_command_line();
if (icache_status())
icache_disable();
if (dcache_status())
dcache_disable();
(*appl) (cmdline);
}
全局变量header中存放了压缩的uClinux映象文件的信息(参见《用u-boot引导uclinux》一文),ip_ep这个成员存放的就是uClinux解压后的入口点的地址,所以在此直接将它赋给appl作为函数指针。而cmdline这个变量存放的就是要传递给uClinux的参数,它是一个字符串。
关键的调用是由(*appl)(cmdline);来完成的,看看它的汇编代码:
R0 = [FP – 4];
P1 = [FP – 8];
CALL(P1);
[FP-4]存放的就是cmdline这个局部变量的值,而[FP-8]存放的则是app1这个局部变量的值。也就是说,编译器是将要传递的字符串参数指针放在R0中的。
在保存了这个指针之后,uclinux在下面还要将这个指针指向的内容复制到uclinux自己的数据段中。
- head.s分析(1):保存u-boot传递过来的指针
- head.s分析(15):复制u-boot传递的参数
- U-BOOT start.S分析
- u-boot分析--start.s
- u-boot start.s 分析
- U-BOOT start.S分析
- U-BOOT环境变量的获取和保存的实现分析
- U-BOOT环境变量的获取和保存的实现分析
- U-BOOT环境变量的获取和保存的实现分析
- U-BOOT环境变量的获取和保存的实现分析
- 基于S3C2440的U-BOOT的start.S分析
- U-boot 代码 start.s 的又一个分析。。。
- 四极管:关于U-BOOT start.S分析的补充说明
- 分析 u-boot 的第一阶段代码(cpu/arm920t/start.S)
- u-boot的执行流程分析start.s
- u-boot.lds 及其入口Start.S的分析
- U-Boot学习笔记(二):U-Boot--arm--Start.S的分析
- 获取传递过来指针的实际大小
- 一位软件工程师的6年总结
- 11个笑话让你领悟人生
- 目标合理,才有机会成功--分享经验、成就百万技术名博(2)
- 第三次出手买股票
- cherokee小型web服务器配置概述
- head.s分析(1):保存u-boot传递过来的指针
- 记念一下,换个生活方式。重新开始。2009/1/19
- head.s分析(2):SYSCFG配置
- head.s分析(3):数据及指针寄存器清0
- 提高485通讯速率的方法
- 关于Oracle的安装、卸载、配置
- 献给胸怀远大抱负的通信同仁们,以此共勉我的创业告白 (ZT)
- 快过年了,手头还有很多事
- ActionScript 3.0 Step By Step系列(一):工欲其善,先利其器(Flex Builder)