平台介绍:
vxWorks6.7,CPU为loongson3A1000(4核)
基本过程就是首先0号cpu初始化(这段代码还没分析),之后就是0号cpu对1,2,3号CPU进行初始化。这里主要记录下对0号之外的cpu的初始化。
函数调用:
usrRoot
usrSmpInit
kernelCpuEnableInternal
vxCpuStateInit
sysCpuEnable
sysCpuStart
godson3_cpu_start
#define CPUSET_SET(cpuset, n) (cpuset |= (1 << n)) //某位置1
#define CPUSET_ISSET(cpuset, n) (cpuset & (1 << n)) //判断某位是否为1
#define CPUSET_CLR(cpuset, n) (cpuset &= ~(1 << n))//把某位置0
#define CPUSET_ZERO(cpuset) (cpuset = 0) //清0
LOCAL void usrEnableCpu (void)
{
int cpu;
int numCpus = vxCpuConfiguredGet ();
cpuset_t enabledCpus;
ULONG timeoutTicks, timeoutStart, currentTickCount;
CPUSET_ZERO (enabledCpus);
CPUSET_SET (enabledCpus, 0);
vxCpuEnableTimeout = VX_ENABLE_CPU_TIMEOUT;
timeoutTicks = vxCpuEnableTimeout * sysClkRateGet ();
//对0号之外cpu进行使能操作
for (cpu = 1; cpu < numCpus; cpu++)
{
//kernelCpuEnableInternal是做使能操作的函数,如果使能失败打印信息,没有失败则记录下该cpu已使能
if (kernelCpuEnableInternal (cpu) == ERROR)
{
logMsg ("usrEnableCpu: error when enabling additional CPU: %x\n"
"userEnableCpu: kernelCpuEnableInternal failed\n"
,cpu, 0, 0, 0, 0,