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

本文介绍在ADI bf561 DSP上移植uCLinux的过程,重点讲解了初始化阶段,包括栈指针的设置和使用,以及init_thread_union的作用。

 

快乐虾

http://blog.youkuaiyun.com/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)

 

 

 

[2025-08-22 15:30:00] [ 724.292851] CPU: 0 PID: 18692 Comm: rmmod Tainted: P 5.4.281 #0 [2025-08-22 15:30:00] [ 724.300229] Hardware name: MediaTek MT7987A SPIM-NAND RFB (DT) [2025-08-22 15:30:00] [ 724.306048] pstate: 80000005 (Nzcv daif -PAN -UAO) [2025-08-22 15:30:00] [ 724.310831] pc : hooks_validate+0x34/0x70 [2025-08-22 15:30:00] [ 724.314828] lr : __nf_hook_entries_try_shrink+0xe4/0x130 [2025-08-22 15:30:00] [ 724.320125] sp : ffffffc011923d00 [2025-08-22 15:30:00] [ 724.323427] x29: ffffffc011923d00 x28: ffffff801e250ac0 [2025-08-22 15:30:00] [ 724.328724] x27: 0000000000000000 x26: 0000000000000000 [2025-08-22 15:30:00] [ 724.334022] x25: 0000000056000000 x24: ffffffc010af1940 [2025-08-22 15:30:00] [ 724.339320] x23: ffffff8012518c00 x22: ffffffc010af2290 [2025-08-22 15:30:00] [ 724.344617] x21: ffffffc010870738 x20: ffffff8014ec7600 [2025-08-22 15:30:00] [ 724.349916] x19: ffffff8014ec7658 x18: 0000000000000000 [2025-08-22 15:30:00] [ 724.355213] x17: 0000000000000000 x16: 0000000000000000 [2025-08-22 15:30:00] [ 724.360511] x15: 0000000000000000 x14: 0000000000000000 [2025-08-22 15:30:00] [ 724.365809] x13: 0000000000000000 x12: 0000000000000000 [2025-08-22 15:30:00] [ 724.371107] x11: 0000000000000000 x10: 0000000000000000 [2025-08-22 15:30:00] [ 724.376405] x9 : 0000000000000000 x8 : ffffff8012518c80 [2025-08-22 15:30:00] [ 724.381703] x7 : 0000000000000048 x6 : 0000000000000060 [2025-08-22 15:30:00] [ 724.387001] x5 : ffffffc010870738 x4 : ffffff8012518c48 [2025-08-22 15:30:00] [ 724.392299] x3 : ffffffc0088de010 x2 : 000000007fffffff [2025-08-22 15:30:00] [ 724.397597] x1 : 0000000000000003 x0 : ffffff8012518c00 [2025-08-22 15:30:00] [ 724.402895] Call trace: [2025-08-22 15:30:00] [ 724.405331] hooks_validate+0x34/0x70 [2025-08-22 15:30:00] [ 724.408981] __nf_unregister_net_hook+0x128/0x198 [2025-08-22 15:30:00] [ 724.413672] nf_unregister_net_hook+0x24/0x60 [2025-08-22 15:30:00] [ 724.418018] _6+0x3c/0x188 [app_dpi] [2025-08-22 15:30:00] [ 724.421585] __arm64_sys_delete_module+0x1b0/0x258 [2025-08-22 15:30:00] [ 724.426365] el0_svc_common.constprop.2+0x7c/0x110 [2025-08-22 15:30:00] [ 724.431142] el0_svc_handler+0x20/0x80 [2025-08-22 15:30:00] [ 724.434879] el0_svc+0x8/0x6c0 [2025-08-22 15:30:00] [ 724.437924] Code: d503201f f8617883 eb05007f 540000c0 (b9402063) [2025-08-22 15:30:00] [ 724.444003] ---[ end trace fb8c5245bc54a355 ]--- [2025-08-22 15:30:00] [ 724.452475] Kernel panic - not syncing: Fatal exception [2025-08-22 15:30:00] [ 724.457690] SMP: stopping secondary CPUs [2025-08-22 15:30:00] [ 724.461602] Kernel Offset: disabled [2025-08-22 15:30:00] [ 724.465078] CPU features: 0x00002,2000200c [2025-08-22 15:30:00] [ 724.469161] Memory Limit: none [2025-08-22 15:30:00] [ 724.476138] Starting crashdump kernel... [2025-08-22 15:30:00] [ 724.480059] Starting Memory dump SMCC [2025-08-22 15:30:00] [ 724.483716] Memory dump SMCC failed [2025-08-22 15:30:00] [ 724.487191] Rebooting in 3 seconds.. [2025-08-22 15:30:00] [ 728.490756] SMP: failed to stop secondary CPUs 0-3
最新发布
08-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌云阁主

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值