Bcm96xx 系列芯片 SDK介绍(二)
3 启动过程分析 这里所要分析的是linux系统起来之后的过程,因为在这之前相比于其他linux系统,它并没有什么不同之处。1 busybox 的init中会执行 etc/inittab 2 inittab 中调用 "bcm_boot_launcher start" 3 bcm_boot_lanucher 是userspace中的一个应用程序,其作用是调用 /etc/rc3.d/ 中的全部脚本 4 rc3.d中的脚本创建 loopback 接口,挂载文件系统,创建/var 目录,加载驱动模块,最后启动了 smd 应用程序 5 smd 是此 SDK 的核心应用程序,它通过 /etc/cms_entity_info.d/ 下的 EID 配置文件将其他应用程序依次启动。以上过程对应的代码和脚本如下: 1: userspace/gpl/apps/busybox/init/init.c 部分代码截取parser_t *parser = config_open2("/etc/inittab", fopen_for_read); //分析 inittab 文件run_actions(SYSINIT); // 执行 SYSINIT 的命令2: /etc/inittab 中有一句: ::sysinit:/bin/sh -l -c "bcm_boot_launcher start" // 执行 bcm_boot_launcher 应用程序,传入 start的参数3: userspace/public/apps/bcm_boot_launcher/bcm_boot_launcher.c 部分代码截取char *dir = "/etc/rc3.d"; // 定义脚本所在目录snprintf(cmdline, sizeof(cmdline)-1, "%s/%s start", dir, curr->filename); // 构造执行脚本的命令if (0 != (rc = system(cmdline))) // 调用system系统函数执行脚本4: rc3.d中的脚本: S45bcm-base-drivers //加载各个驱动模块 insmod *.ko S35system-config //创建 loopback 接口 lo 127.0.0.1 S25mount-fs //挂载文件系统,创建 var/ 下各个子目录 S63save-dmesg //保存linux内核启动日志 S65smd //启动 smd 应用程序5: userspace/private/apps/smd/main.c userspace/public/include/cms_params.h 部分代码截取:#define CMS_EID_DIR "/etc/cms_entity_info.d" //定义 Eid 配置文件所在路径rval = parse_eid_file(fullpathname); //解析 Eid 配置文件launchApp(dInfo); //根据 Eid 配置文件,启动应用程序EID配置文件截取: BEGINeid = EID_EPON_APP //其EID为 EID_EPON_APP ,非常重要name = eponapp //应用程序名称flags = EIF_MDM|EIF_LAUNCH_ON_BOOT|EIF_MESSAGING_CAPABLE //smd是否启动此应用程序的标志 END4 系统架构剖析 此 SDK 的应用层,是一些彼此独立的应用程序,应用程序之间本身没有依赖和关联关系。 但整个系统的运作却需要这些应用程序的交互来完成,这又是如何做到的呢,答案在于此 SDK 中维护的一套 CMS 机制。 而最核心的就是 smd 这个应用程序。前面已经说过了,其他应用程序的启动都是 smd 做的,除此之外 smd 还维护各个应用程序之间的通信。 大致原理如下: A应用程序要和B应用程序通信,则A应用程序首先发送消息给 smd,smd收到A的消息后解析消息头,发现是发往B应用程序的,则smd将消息发给应用程序B。 当然这个过程对于应用程序A和B是不透明的,它们毫不知情,完全感觉不到 smd 的存在,就好像他俩之间在直接通信。这须要每个应用程序都调用cmsMsg_init的接口才行,例如 cmsReturn = cmsMsg_init(EID_OMCIPMD, &msgHandle); //这是 OMCI 应用程序调用的此函数创建一个 AF_LOCAL 的socket,并与 smd 建立连接,smd会保存它的 EID 和 socket连接文件描述符,以便做消息转发。 EID就是表示这个应用程序的标识,需要与 /etc/cms_entity_info.d/ 中的 EID配置文件保持一致。例: omci 应用程序调用cmsMsg_send 接口发送给 httpd应用程序 msgInfo.src = EID_OMCIPMD; // 表示消息来源是 omci 进程 msgInfo.dst = EID_HTTPD; // 表示消息发往 httpd 进程 cmsMsg_send(msgHandle, &msgInfo)由于 omci 调用 cmsMsg_init 接口初始化的 socket 是与 smd 应用程序建立的连接,那么显然这里 cmsMsg_send 发送出去的消息会被 smd 收到。 smd 收到消息后会层次调用接口: routeMessage sendMessageByState oalMsg_send 将消息转发给 httpd 进程httpd 调用 oalMsg_receive 接口收到消息 到此:omci 与 httpd 进程完成通信最后整个 CMS 机制可以归纳为: EID 的配置文件 + smd 的应用程序 + cmsMsg相关的自定义数据结构和接口5 应用层开发示例 目的:创建一个能够被 smd 启动的应用程序my_app,并且能够与其他的应用程序之间互相通信 需要这样几个步骤: 1 定义 EID,并配置 EID配置文件 在 enum CmsEntityId(userspace/public/include/cms_eid.h) 中添加一个表示 my_app 的枚举常量 EID_MY_APP=300,在 userspace/public/libs/cms_util/scripts/eid_bcm_base.txt 中添加 my_app 的eid配置 BEGINeid = EID_MY_APPname = my_appflags = EIF_MDM|EIF_LAUNCH_ON_BOOT|EIF_MESSAGING_CAPABLE END2 编辑源代码 在 userspace/private/apps/ 目录下创建 my_app 子目录 在 userspace/private/apps/my_app 子目录下创建两个文件,main.c 和 Makefilemain.c 中必须要有标示 C应用程序 main() 入口函数的实现,cmsMsg_init 接口的调用,以及消息接收和处理。 在本例中,专门起了2个pthread 线程,一个负责消息的接受,一个负责消息的发送。Makefile 编辑如下: 大概模样可以参考其 userspace/private/app 下的其他用程序的 Makefile 但这样几个地方需要修改: EXE = my_app OBJS = main.o LIBS = -lpthread最后上层Makefile中还要添加对于此Makefile的调用 在 userspace/private/apps/Makefile 中添加make_all_subdirs: my_app my_app:$(MAKE) -C $@
Bcm96xx 系列芯片 SDK介绍(二)相关推荐
- ISD系列语音芯片电路介绍及其应用
ISD系列语音芯片电路介绍及其应用 语音芯片简介:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:o ...
- 甲基化系列 2. 甲基化芯片数据介绍与下载(GEO)
点击关注,桓峰基因 桓峰基因的教程不但教您怎么使用,还会定期分析一些相关的文章,学会教程只是基础,但是如果把分析结果整合到文章里面才是目的,觉得我们这些教程还不错,并且您按照我们的教程分析出来不错的结 ...
- 嵌入式学习:Cortex-M系列芯片介绍
一.Cortex-M系列芯片分类 以意法半导体芯片为例子:Cortex-M0:主频在48M,一般用于低功耗: Cortex-M3:主频为72M,是现在市面上最为流行的芯片之一,一般用于工业等部分控制功 ...
- STM32F4系列芯片RTC模块介绍
RTC是"实时时钟"的缩写,它是一种芯片,在计算机等电子产品中广泛应用.RTC提供了实时时钟计时功能和存储时间的能力,即时钟模块,常用于控制和记录时间的应用场合. RTC的工作原理 ...
- 【ESP32-C3 系列芯片 技术规格书学习笔记 (二、原理图)】
共33个管脚. 电源管脚7个,数字电源管脚11.17.18.模拟电源管脚2.3.31.32.18管脚可复用. 复位管脚1个,7号. Flash管脚,6个,19-24为外接Flash管脚可不接. 晶振时 ...
- 海康威视DS-4100、4000HC 系列板卡SDK编程指南
本文转自:http://blog.csdn.net/wwl33695/article/details/8990514 目 录 板卡介绍篇............................. ...
- 离线语音识别芯片-开发指南及芯片规格介绍
云知声(Unisound)作为行业内领先的人工智能企业,针对AI语音芯片各个不同的细分市场,共发布5款离线语音识别芯片,芯片及模块出货量已达百万级别. 下面介绍这5款芯片的各自特点: ...
- axi dma 寄存器配置_FPGA Xilinx Zynq 系列(三十二)AXI 接口
大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分.大侠可以关注FPGA技术江湖,在"闯荡江湖"."行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢. ...
- 【花雕体验】09 行空板硬件控制pinpong库的系列测试(之二)
行空板板身集成了光线传感器.麦克风.蜂鸣器.Wifi.蓝牙.加速度传感器.按键,正面配置有一块LCD彩屏,可实时呈现多种Python运行结果,包括文字.图片.视频,游戏画面,以及数据图表等. [花雕体 ...
- STM32 系列 DAC的介绍与使用
STM32网上资料多,对自己来说基本的使用也是很简单的, 我的STM32专栏并没有什么系统的基础教学,基本上是某个项目用到了,或者产品使用过程出过问题 才会来记录一下,正好用到了 DAC ,一般产品还 ...
最新文章
- bat 批量提取指定目录下的文件
- 选择之后触_发宜常梳:4种材质的梳子,我们最常用的梳子却对头发最不好,该如何选择?...
- 前端学习(2286):react之无状态组件
- java哈希映射干什么的_java – 为什么在哈希映射中有空值或空键是有用的?
- qgis 图片_QGIS教程09QGIS中如何制作萤火虫地图?
- 交换机VLAN工作模式介绍
- 微波射频学习笔记2--------传输线理论
- 从零学iFIX视频教程 2.01版 完整目录 (总共220节视频)
- SQL中的go、begin、end的用法
- Learning the Model Update for Siamese Trackers学习笔记
- psd文件怎样导出html5,PSD格式的文件怎么转换成CAD格式?
- 有一个人有一百块钱, 打算买一百只鸡, 现在大鸡三块钱一只, 小鸡一块钱三只, 不大不小的鸡两块钱一只. Java编程实现,刚好用一百块钱买一百只鸡.
- mysql有numeric类型吗_mysql数值类型 - numeric
- java飞机大战设计收获_飞机大战编写以及Java的面向对象总结
- Pandas工具包实战(16)apply函数操作:numpy, pandas,
- java+天地图,天地图开发之Android-天地图显示
- 【二】微信开发中的https
- 小白学Docker(四) docker配置阿里云国内镜像加速器
- 与文字相拥 舞尽人间芳华
- uni-app 小程序点击右上角分享设置