`
xiaoer_1982
  • 浏览: 1860659 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

head.s分析(17):修改SP指针

阅读更多

快乐虾

http://blog.csdn.net/lights_joy/

lights@hb165.com

本文适用于

ADI bf561 DSP

uclinux-2008r1.5-rc3 (移植到vdsp5)

Visual DSP++ 5.0(update 5)

欢迎转载,但请保留作者信息

/*

* load the current thread pointer and stack

*/

r1.l = _init_thread_union;

r1.h = _init_thread_union;

r2.l = 0x2000;

r2.h = 0x0000;

r1 = r1 + r2;

sp = r1;

usp = sp;

fp = sp;

在此之前,SP一直使用4kscratch pad,现在终于要进入正题了。可以将uclinux内核的初始化阶段也看成一个线程,用一个表示线程的全局结构来表示它,这就是init_thread_union

/*

* Initial thread structure.

*

* We need to make sure that this is 8192-byte aligned due to the

* way process stacks are handled. This is done by having a special

* "init_task" linker map entry.

*/

union thread_union init_thread_union

__attribute__ ((__section__(".data.init_task"))) = {

INIT_THREAD_INFO(init_task)};

它是一个thread_union,定义如下:

union thread_union {

struct thread_info thread_info;

unsigned long stack[THREAD_SIZE/sizeof(long)];

};

thread_info由低向高排列,stack则从高往低使用,因此在head.s中,将sp设置为指向init_thread_union的最高位置。

/*

* Size of kernel stack for each process. This must be a power of 2...

*/

#define THREAD_SIZE 8192 /* 2 pages */

819216进制即为0x2000

1 参考资料

head.s分析(1):保存u-boot传递过来的指针(2009-1-19)

head.s分析(2)SYSCFG配置(2009-1-19)

head.s分析(3):数据及指针寄存器清0(2009-1-19)

head.s分析(4):关闭CACHE(2009-01-19)

head.s分析(5):关闭串口(2009-01-19)

head.s分析(6):栈指针初始化(2009-01-19)

head.s分析(7)init_early_exception_vectors(2009-1-19)

head.s分析(8):配置PLLSDRAM(2009-01-20)

head.s分析(9)EBIU配置(2009-01-20)

head.s分析(10):转入中断15(2009-01-20)

head.s分析(11):关闭WATCHDOG(2009-01-20)

head.s分析(12)bss段清0(2009-01-20)

head.s分析(13):代码段前空间清0(2009-01-20)

head.s分析(14)L2空间清0(2009-01-20)

head.s分析(15):复制u-boot传递的参数(2009-01-20)

head.s分析(16):取_rambase_ramstart的值(2009-1-20)

分享到:
评论

相关推荐

    C语言单项选择题标准化考试系统.pdf

    - `InsertNode(TEST *head, TEST *s)`:在链表中插入一个新的题目节点。 - `TEST`结构体:文档中显示了该结构体的定义,它包括题干、四个选项、正确答案的key以及指向下一个题目的指针。 4. 随机数生成和测试逻辑...

    ARMLinuxBoot2.6.18

    - **SP**:设置堆栈指针`sp`为解压代码的堆栈指针。 - **R4**:设置`r4`为内核入口点的物理地址。 #### 1.3 Link Address and BSS Zeroing - **链接地址检查**:检查是否在链接地址运行,并在必要时调整全局偏移...

    计算机基本知识0.pdf

    1. **设置栈指针**:在`head.S`中,首先设置栈指针SP,以便在后续的C函数调用中正确地管理函数调用的上下文。 2. **关闭WATCHDOG**:WATCHDOG定时器是一个硬件机制,用于检测系统是否死锁或无响应。在初始化阶段,...

    用C语言开发小型数据库管理系统.txt

    2.void add_rcd(STD *sp) 将缓冲区sp添加到链表当前结点后,生成一新记录结点,并置当前指针指向新结点。 3.int find_rcd(char *xh) 从当前结点开始按学号搜索结点,成功返回1,并置当前指针指向该结点,失败返回...

    arm_linux内核启动过程分析

    - **自解压头**: 在内核源码的`arch/arm/boot/compressed/head.S`文件中,`start`符号标记了zImage自解压的开始位置。自解压头会读取一些重要的魔数(`0x016f2818`),以及解压后的绝对地址等信息。 - **关键指令**: ...

    P2P视频技术源码(VC)

    4) head: Session的头, head[0]为第一个Session, head[max-1]为最后一个session 5) init: 这一服务中每个Session需要执行的初始化操作. (函数指针) 6) process: 这一服务中消息的处理函数 7) closure: 这一服务中...

    P2P视频播放器 详细制作实例

    4) head: Session的头, head[0]为第一个Session, head[max-1]为最后一个session 5) init: 这一服务中每个Session需要执行的初始化操作. (函数指针) 6) process: 这一服务中消息的处理函数 7) closure: 这一服务中...

    嵌入式Linux2.6内核启动流程).doc

    在 ARM 架构下,解压缩代码位于 arch/arm/boot/compressed/head.s 文件中。该文件中的代码负责解压缩内核镜像并将其加载到内存中。 2. 初始化 在解压缩完成后,下一步是初始化。初始化是指对系统进行初始化,以便...

    复习针对性问题列表.docx(参考文献黑色星辰的PPT)

    栈顶指针SP通常用来指示栈的状态,空栈时SP指向栈底,满栈时SP指向栈顶。 21. **8086寻址方式**: 包括直接寻址、立即寻址、寄存器寻址、间接寻址、基址变址寻址等,如示例`MOV AX, [BX]`是寄存器间接寻址。 22. **...

    根据韦东山修改的mini2440中断的裸机代码[参考].pdf

    首先,我们来看`head.S`文件的内容。这是一个汇编语言文件,它负责初始化系统并设置中断向量表。中断向量表是处理器在遇到异常或中断时会跳转执行的地址集合。在这个例子中,除了Reset(复位)和HandleIRQ(中断处理...

    C语言常用函数源码 strcmp strlen atoi atol memcpy strchr strstr printf等等

    - 由于是原地修改,因此无需额外空间。 **2. 判断链表是否有环** **源码分析**: ```c bool isLoop(link *head) { link *p = head; link *q = head; while (p != NULL && q != NULL && q->next != NULL) { p =...

    单片机STC12C5620AD_HeadFile 头文件

    除了上述SFR,STC12C5620AD还定义了一系列基础寄存器,如`P0`至`P3`端口寄存器,`PSW`程序状态字寄存器,`ACC`累加器,`B`辅助寄存器,以及堆栈指针`SP`等,这些寄存器对于实现基本的微控制器功能至关重要。...

    Linux-0.11 [内核源代码带中文注释]

    将堆栈指针sp 指向0x9ff00(即0x9000:0xff00)处 mov ss,ax mov sp,#0xFF00 ! arbitrary value >>512 ! 由于代码段移动过了,所以要重新设置堆栈段的位置。 ! sp 只要指向远大于512 偏移(即地址0x90200)处 ! 都可以...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    通过这样的途径当你更换使用的数据库时,可以轻松的更改编码以适应这样的变化。PHPLIB就是最常用的可以提供一般事务需要的一系列基库。 - 可扩展性 就像前面说的那样,PHP已经进入了一个高速发展的时期。对于一个...

    mtcp 数据结构详解

    - **Log Management**:`log_thread_context *logger`、`log_buff *w_buffer` 和 `FILE *log_fp`分别表示日志线程上下文、写入缓冲区和日志文件指针。 - **Event Polling**:`struct mtcp_epoll *ep`表示事件轮询...

    2021-2022计算机二级等级考试试题及答案No.15940.docx

    而其他选项均存在语法错误或不当之处:选项A中的`*sp`应当是指向字符的指针而非指向字符串的指针;选项B和C试图将一个字符串赋值给数组变量`s`,但在C语言中这样做是非法的。 ### 4. Java中的缓冲区写入换行符 在...

Global site tag (gtag.js) - Google Analytics