This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

操作系统的加载



在TI6678的板子上加载操作系统,TI默认的起始地址是:0x80000000,也就是DDR3的地址,操作系统运行正常;现在我把起止地址改成了0x0c000000,也就是多核共享内存(MSM)的位置;TI默认的多核共享内存的大小为4M,而经过我裁剪的操作系统大小为1.64M(起止地址为0x80000000时没问题),为什么我的操作系统在挂载根文件系统的时候(函数vfs_cached_init中)会从保留区(reserve)取值?现在跑的是单核,没有跑多核

我运行的是uclinux系统,.config文件是TI自带的默认的配置文件,/arch/c6x/config/ti_evmc6678defconfig,如果在0x0c00000地址加载操作系统,最终会运行到die()函数中,说明系统已经跑死了。系统在初始化函数start_kernel()函数中会跑到函数vfs_caches_init()函数中,经过一系列调用在sched.c文件中会调用schedule()函数,最终在函数switch_to(prev,next,prev)函数中陷入异常,进入NMI中断,最终会进入die()函数,死循环。打印变量显示要切换next进程的堆栈地址是非法的,具体地址没记住。如果加载地址是0x80000000,那么进程prev的堆栈地址是0x8018c388,进程next的堆栈地址是0x9e010300,请问这两个进程之间的地址为什么间隔这么大?谢谢!