- 论坛徽章:
- 0
|
本帖最后由 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,有没有人能给点线索?多谢各位! |
|