bosInit();
//memset结构gBosErrorModule
bosErrorInit();
bosSleepInit()
//将sleep相关函数名存入错误模块gBosErrorModule数组中
bosSleepInitFunctionNames()
bosSemInit()
//将sim相关函数名存入错误模块gBosErrorModule数组中
bosSemInitFunctionNames();
bosMutexInit()
//将MUTEX相关函数名存入错误模块gBosErrorModule数组中
bosMutexInitFunctionNames();
bosEventInit()
//将EVENT相关函数名存入错误模块gBosErrorModule数组中
bosEventInitFunctionNames()
//创建一个信号量gEvtMutex,用于BOS任务核块中事件处理
bosMutexCreate( "EVMU", &gEvtMutex );
memset(gEventTcb, 0, sizeof(gEventTcb));
bosTaskInit() //无内容
bosSocketInit()
//将socket相关函数名存入错误模块gBosErrorModule数组中
bosSocketInitFunctionNames();
bosMsgQInit()
//将msgq相关函数名存入错误模块gBosErrorModule数组中
bosMsgQInitFunctionNames();
memset( &gMsgQ[0], 0, sizeof( gMsgQ ));
//创建一个信号量gMsgQMutex
bosMutexCreate( "MsgQ", &gMsgQMutex );
bosTimeInit()
//将time相关函数名存入错误模块gBosErrorModule数组中
bosTimeInitFunctionNames();
bosCritSectInit()
//将crit相关函数名存入错误模块gBosErrorModule数组中
bosCritSectInitFunctionNames();
//创建临界区,还是用的内核信号量实现
bosCritSectCreate( BOS_CFG_GLOBAL_CRITSECT );
bosTimerInit()
//将timer相关函数名存入错误模块gBosErrorModule数组中
bosTimeInitFunctionNames();
bosLogInit()
//注意日志模块目前代码没有开启队列宏
blogInit( NULL, NULL );
//设置打印及时间戳获取回调函数
defaultCB = blogDefaultPrintCallback;
timestampCB = blogDefaultTimeStampCallback;
//创建两个信号量,一个用于日志模块增删相关处理,一个用于打印
bosMutexCreate( "blogModVars", &modVars.mutex );
bosMutexCreate( "blogPrintCBVars", &printCBVars.mutex );
//初始化
modVars.numModules = 0;
for ( i = 0; i < BLOG_CFG_MOD_NAME_LEN; i++ )
{
modVars.table[0].modName[i] = ' ';
}
modVars.table[0].modName[BLOG_CFG_MOD_NAME_LEN] = '\0';
modVars.table[0].logSeverity = BLOG_SEVERITY_ALL;
modVars.table[0].printSeverity = BLOG_SEVERITY_ALL;
modVars.table[0].displayFields = BLOG_FIELDS_ALL;
modVars.defaultDisplayFields = BLOG_FIELDS_ALL;
modVars.defaultLogSeverity = BLOG_SEVERITY_FATAL_ERR |
BLOG_SEVERITY_ERR |
BLOG_SEVERITY_WARN;
modVars.defaultPrintSeverity = BLOG_SEVERITY_FATAL_ERR |
BLOG_SEVERITY_ERR |
BLOG_SEVERITY_WARN;
//打印及时间戳的回调设置
printCBVars.numCB = 1;
printCBVars.table[0].printCB = defaultCB;
printCBVars.table[0].isEnabled = BOS_TRUE;
getTimeCB = timestampCB;
//设置一个RAW日志模块,用于没有任何日志模块时使用这个
gRawHandle = blogAddModule( "RAW",
BLOG_SEVERITY_ALWAYS,
BLOG_SEVERITY_ALWAYS,
BLOG_FIELDS_NONE );
//为BOS创建一个日志实例模块
gBosBlogSettings = blogAddDefaultModule( "BOS" );
bosAppInit()
memset( &boszcb, 0, sizeof( boszcb ) );
boszcb.resetState = BOS_RESETSTATE_NORESET;
//创建任务控制块信号量
bosMutexCreate( BOS_TCB_MUTEX, &boszcb.tcbMutexId );
//创建复位相关信号量
BOS_SEMCREATE( retval, BOS_APPRESET_SEM, &boszcb.appResetSemId,
bAppResetSemInit );
BOS_SEMCREATE(retval,BOS_APPRESETCOMPLETE_SEM,&boszcb.appResetCompletedSemId,bAppResetCompletSemInit );
BOS_SEMCREATE( retval, BOS_TASKRESET_SEM, &boszcb.taskResetSemId,
bTaskResetSemInit );
//创建设备
devId = MKDEV(ENDPOINTDRV_MAJOR, 0);
register_chrdev_region(devId, 1, "endpoint");
cdev_init(&endpoint_cdev, &endpoint_fops);
cdev_add(&endpoint_cdev, devId, 1);
boardHalProvInit();
memset ( &voiceParams, 0, sizeof(voiceParams) );
//获取语音板卡名及基板卡名,是从FLASH中的NVRAM中获取的
BpGetVoiceBoardId(boardIdStr);
BpGetBoardId(baseBoardIdStr);
//根据板卡名及基板卡名获取语音硬件参数,主要是有端口数量、芯片类形及通道等
BpGetVoiceParms( boardIdStr, &voiceParams, baseBoardIdStr );
//这里如果是6362的板子,则从OTP寄存器中获取是否支持DECT芯片,其中OTP是
//可编程一次性寄存器,通常用于板卡重要数据的安全保护
#if defined(CONFIG_BCM96362)
if (OTP_GET_USER_BIT(OTP_DECT_DISABLE))
voiceParams.numDectLines = 0;
#endif
//设置DECT通道数
if ((NUM_IDECT_CHANNELS + NUM_EDECT_CHANNELS) == 0 )
{
voiceParams.numDectLines = 0;
}
//根据上面获取的语音硬件信息,设置通道级全局数组deviceChannelMap,主要设置每 //个通道的语音板卡类型、通道索引、所在当前设备的索引、当前设备对应的通道类型
//收发时隙等
bhpCreateInternalProvTable( &voiceParams );
//这里主要是根据线路数,对全局配置变量provTable的值进行内存分配
endptProvInit();
ENDPT_410_endpoint_init
最新推荐文章于 2021-01-16 06:47:29 发布