免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4976 | 回复: 5

ARM平台上uclinux的kernel stack size缩减为4KB时碰到的问题 [复制链接]

论坛徽章:
0
发表于 2011-07-04 17:25 |显示全部楼层
本帖最后由 xdsupermanli 于 2011-07-04 17:32 编辑

各位XDJM:
     大家好!
     我最近在做ARM平台上uclinux kernel方面的工作。现在碰到一个问题,望各位高手能指点一二,先谢过。
     我所用的ARM平台上的uclinux 版本为2.6.25, 当前的kernel stack size 为8KB,也即2个PAGE,其定义在include/asm-arm/thread_info.h中,使用宏:
        #define THREAD_SIZE_ORDER       1
        #define THREAD_SIZE                   8192

    我想把THREAD_SIZE 缩减为4096, THREAD_SIZE_ORDER自然也就变成0,更改完后,重新编译kernel,烧板子,然后boot, 发现kernel启动到pdflush_init()函数时走不下去了。 我打印过sp寄存器的值,可以确信没有stack overflow发生,通过调试发现kernel停在schedule()函数中返回不了,具体的调用链如下:
... ->pdflush_init()->start_one_pdflush_thread()->kthread_run()->kthread_create()->wait_for_completion()->wait_for_common()->do_wait_for_common()->schedule()

在schedule()函数中,下面的goto语句一直在执行,导致函数无法返回:
  if (unlikely(test_thread_flag(TIF_NEED_RESCHED)))
                        goto need_resched;

各位XDJM,有没有人能给点线索?多谢各位!

论坛徽章:
0
发表于 2011-07-04 18:15 |显示全部楼层
arm 好像不支持4K大小的THREAD_SIZE

论坛徽章:
0
发表于 2011-07-05 09:27 |显示全部楼层
回复 2# futex

这位兄弟能否说的详细点,或者有那方面的资料可以共享一下,多谢!

论坛徽章:
0
发表于 2011-07-05 09:49 |显示全部楼层
4K大小的THREAD_SIZE需要内核使用单独的中断处理栈,我在30的内核里面没看到arm中断处理中有中断栈,还是用的进程的内核栈,另外arm 版本的make menuconfig中也没有设置4K大小的THREAD_SIZE大小的选项。uclinux很久没用了,不知道是否是这样,楼主可以去查一下我说的这些地方的代码。
  另外说一句,支持一否还是要看make menuconfig有没该选项。不要轻易去改动内核中定义的宏

论坛徽章:
0
发表于 2011-07-05 10:37 |显示全部楼层
回复 4# futex
多谢!ARM版本的uclinux的config中确实没有CONFIG_4KSTACKS这个宏了。我现在要做的工作就是看能否让ARM版本的uclinux支持4K stack,其目的是要减少kernel对内存的使用量,现在不确定这个工作的难度有多大。
关于中断处理栈,我好像在kernel的代码里也没看到过。

论坛徽章:
0
发表于 2011-07-05 11:04 |显示全部楼层
貌似难度有点大,不建议楼主这么做,在其他地方去省内存吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP