INIT_LIST_HEAD无法初始化链表指针

    解决了函数调用多时系统无响应的问题,现在来解决初始化 buddy 链表头时卡在INIT_LIST_HEAD 宏的问题,把难啃的骨头留在后边,最后再腾出功夫来看中断无法初始化是怎么回事。

    函数卡在INIT_LIST_HEAD 宏,无法初始化全局链表数组,该数组的每个元素分别是一组同阶的buddy链表的链表头。数组为全局变量,存储在bss段。既然无法修改bss的内容,尝试在函数内部定义一个连表节点变量,将该变量的两个指针成员指向自身,结果是成功的。查看变量的地址,靠近内存最高端的栈里,这是因为arm的堆栈是满递减结构,从顶向下增长的。再回头看数组的地址:0x00000420,在前4K,这个地址是CPU内部STEPSTONE使用的,那么要解决这个问题就要修改bss段的链接地址了,将其避开前4K地址。做法是将链接脚本中bss段从kernel段上边拿到下边,原链接脚本:

 /********************************************************************
 *
 * @ File Name  : link.lds
 * @ Date       : 2012-03-24
 * @ Author     : gaofeilong <gaofeilonglcu@163.com>
 *
 * @ Description: lin

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值