大家好 参照网上的例程 实现了双核加载
CMD文件中把核0、核1的程序入口地址设定为:
核0的程序入口地址是0x10800200
核1的程序入口地址是0x11800200
对于核0的程序 有不理解的地方 还请指教!!!
核1的程序入口地址在CMD中已经设为0x11800200
但核0的程序中 给核1的Magic地址赋值0x11000000 也就是核1的程序入口地址是0x11000000 为啥要这样???
核0程序如下:
void MulticoreBoot()
{
int *pBootMagicAddCore0;
int *IpcGr0;
int i;
pBootMagicAddCore0 = (int*)0x108FFFFC;//核0的Magic地址
(*pBootMagicAddCore0)+= 0x10000000; //给核0的Magic地址赋值0x10000000
for(i = 1;i < CORE_NUM_6657; i++)
{
*(pBootMagicAddCore0+ (0x01000000*i)/4 ) = (*pBootMagicAddCore0) + 0x01000000 * i;
//给核1的Magic地址0x118FFFFC赋值0x11000000 为啥要这样??? 对双核加载有没有影响
}
//核0给核1产生IPC中断
IpcGr0 = (int*)0x02620240;
for(i = 1;i < CORE_NUM_6657;i++)
{
*(IpcGr0+i) = (*(IpcGr0+i)) | 0x00000011;
}
}
在别的资料看到:
“当ROM Boot loader 写完Boot Magic 地址之后,core0 作为主核会发起一个IPC 中断给其他核用于唤醒处于IDLE 状态的从核,并同时将各核各自的Boot Magic 地址写入 0x1x8ffffc。从核会读取该Boot Magic 地址,并从该地址处执行程序。”
按照上面的意思 好像和我给的核0程序有冲突???
Thomas Yang1:
那在你的核1的CMD文件中 0x11000000 是什么区域呢? 你的CORE1 的 cinit00这些段的空间地址在哪里?
skysteed:
回复 Thomas Yang1:
在6657中 0x11000000的区域是保留的
_c_int00的地址是0x11800200 这个是核1的
我还试了 把给0x118fffc赋值0x11000000的这一句屏蔽掉
核1是加载不起来的
这句还必须有
???