1.CANOpen系列教程14_协议源码移植(二)
2.安卓是安卓安卓开源系统吗
3.OpenHarmony 3GPP协议开发深度剖析——一文读懂RIL
4.安卓如何获取Scheme协议的Url
CANOpen系列教程14_协议源码移植(二)
本文主要阐述了在嵌入式系统开发中,将CANOpen协议源码移植到工程中并实现的协议协议具体步骤。作者首先强调了系列教程的源码源码背景,基于CanFestival架构、安卓安卓STMF1芯片、协议协议FreeRTOS操作系统、源码源码pc28免费完整源码以及Keil MDK-ARM开发环境。安卓安卓接下来,协议协议文章深入讲解了移植过程中需要关注的源码源码几个关键点。
在添加源码和路径部分,安卓安卓作者指出需要在现有工程中加入与CANOpen相关的协议协议组和文件,并添加CANOpen源码的源码源码inc头文件路径,确保编译时能正确找到所需文件。安卓安卓这部分是协议协议基础准备工作,确保开发环境能正确识别和使用新添加的源码源码代码。
在添加代码及分析部分,文章聚焦于实际代码实现的关键点。作者提到需要修改的canfestival.h文件,以防止递归包含问题,同时解释了需要实现的BERT源码底层驱动函数,如canSend,这是CANOpen源代码调用最频繁的函数。作者还详细介绍了初始化相关接口的实现方法,以及定时器调度接口的调用和实现。特别地,文中提到发送接口函数canSend的重要性,并建议尽量保持其接口原样,因为这一函数在多个源文件中被广泛调用。最后,文章还讨论了发送和接收缓存的实现、中断接收机制以及配置节点等关键功能。
工程下载及运行效果部分展示了作者提供的示例工程,该工程展示了主站和从站的心跳功能,通过CAN分析仪抓取数据进行验证。通过这一部分,读者可以直观地了解移植后的CANOpen协议在实际应用中的表现。
文章最后对文档的使用和版权所有进行了说明,并推荐了作者的博客、GitHub以及微信公众号,yingshivip源码鼓励读者关注以获取更多相关资源和内容。
安卓是开源系统吗
开源的意思是安卓系统的源代码是面向用户开放的,可以遵循开源协议进行使用、编译和再发布。在遵守GNU协议的前提下,任何人都可以免费使用,随意控制软件的运行方式。最著名的开源操作系统是linux。
安卓系统是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由谷歌公司和开放手机联盟领导及开发。
OpenHarmony 3GPP协议开发深度剖析——一文读懂RIL
市场上针对终端操作系统3GPP协议开发的相关资料较为稀缺,即便在Android领域,相关学习文档也较为有限,更不用说专门的协议开发书籍了。这可能与市场需求有关,目前市场上从事前后端软件开发的人员最多,包括我自己。输赢源码
鉴于我在某手机协议开发团队工作过一段时间,对协议的AP侧和CP侧开发都有所涉猎,因此我尝试基于OpenAtom OpenHarmony(以下简称“OpenHarmony”)源码编写一些内容,旨在帮助大家了解协议开发领域,尽可能将3gpp协议内容与OpenHarmony电话子系统模块相结合进行讲解。据我所知,目前终端协议开发人才非常紧缺。首先声明,我不是协议专家,且已离开该领域五六年,如有错误,欢迎指正。
谈到终端协议开发,我首先想到的就是RIL。
CP:Communication Processor(通信处理器),通常理解为modem侧,也可以理解为底层协议,这部分由各个modem芯片厂商完成(如海思、高通)。Formatter源码
AP:Application Processor(应用处理器),通常指手机终端,通常理解为上层协议,主要由操作系统Telephony服务进行处理。
RIL:Radio Interface Layer(无线电接口层),通常理解为硬件抽象层,即AP侧将通信请求传给CP侧的中间层。
AT指令:AT指令是应用于终端设备与PC应用之间连接与通信的指令。
常规的Modem开发与调试可以使用AT指令进行操作,而各家的Modem芯片的AT指令都会有各自的差异。因此,手机终端厂商为了能在各种不同型号的产品中集成不同modem芯片,需要进行解耦设计来屏蔽各家AT指令的差异。
于是,OpenHarmony采用RIL对Modem进行HAL(硬件抽象),作为系统与Modem之间的通信桥梁,为AP侧提供控制Modem的接口,各Modem厂商则负责提供对应于AT命令的Vender RIL(这些一般为封装好的so库),从而实现操作系统与Modem间的解耦。
框架层:Telephony Service,电话子系统核心服务模块,主要功能是初始化RIL管理、SIM卡和搜网模块。对应OpenHarmony的源码仓库OpenHarmony/telephony_core_service。这个模块也是非常重要的一个模块,后期单独再做详细解读。
硬件抽象层:即我们要讲的RIL,对应OpenHarmony的源码仓库OpenHarmony/telephony_ril_adapter。RIL Adapter模块主要包括厂商库加载,业务接口实现以及事件调度管理。主要用于屏蔽不同modem厂商硬件差异,为上层提供统一的接口,通过注册HDF服务与上层接口通讯。
芯片层:Modem芯片相关代码,即CP侧,这些代码各个Modem厂商是不开放的,不出现在OpenHarmony中。
硬件抽象层又被划分为hril_hdf层、hril层和venderlib层。
hril_hdf层:HDF服务,基于OpenHarmony HDF框架,提供hril层与Telephony Service层进行通讯。
hril层:hril层的各个业务模块接口实现,比如通话、短彩信、数据业务等。
vendorlib层:各Modem厂商提供的对应于AT命令库,各个厂商可以出于代码闭源政策,在这里以so库形式提供。目前源码仓中已经提供了一套提供代码的AT命令操作,至于这个是针对哪个型号modem芯片的,我后续了解清楚再补充。
下面是ril_adapter仓的源码结构:
本文解读RIL层很小一部分代码,RIL是如何通过HDF与Telephony连接上的,以后更加完整的逻辑梳理会配上时序图讲解,会更加清晰。首先,我们要对OpenHarmony的HDF(Hardware Driver Foundation)驱动框架做一定了解,最好是动手写一个Demo案例,具体的可以单独去官网查阅HDF资料。
首先,找到hril_hdf.c文件的代码,它承担的是驱动业务部分,源码中是不带中文注释的,为了梳理清楚流程,我给源码关键部分加上了中文注释。
上述代码中配置了对应该驱动的moduleName为"hril_hdf",因此我们需要去找到对应驱动的配置文件,以HiDV开发板为例,它的驱动配置在vendor_hisilicon/HiDV/hdf_config/uhdf/device_info.hcs代码中可以找到,如下:
这里可以发现该驱动对应的服务名称为cellular_radio1,那么telephony_core_service通过HDF与RIL进行通信肯定会调用到该服务名称,因此无查找telephony_core_service的相关代码,可以很快定位到telephony_core_service/services/tel_ril/src/tel_ril_manager.cpp该代码,该代码中有一个关键类TelRilManager,它用来负责管理tel_ril。
看tel_ril_manager.cpp中的一个关键函数ConnectRilAdapterService,它就是用来通过HDF框架获取RIL_ADAPTER的服务,之前定义过RIL_ADAPTER_SERVICE_NAME常量为"cellular_radio1",它就是在vendor_hisilicon/XXXX/hdf_config/uhdf/device_info.hcs中配置的hril_hdf驱动对应的服务名称。
安卓如何获取Scheme协议的Url
Scheme协议在安卓应用中扮演着页面内跳转的关键角色,它使得开发者能够轻松控制应用内部导航。最常见的获取方式是通过郭立员老师的分享,但这种方法在某些特定场景下,如应用支持分享和web打开,会显得局限。这时,我们需要借助更深入的技术手段,如通过安装框架和intent拦截器,或者反编译apk来实现,然而这些操作往往会增加复杂性和门槛。
一个更直观的方法是利用按键精灵手机助手。首先,打开助手的android文件夹,通过shift+右键选择"在此处打开Powershell窗口",然后在shell中输入特定命令。这样,你将能看到详细的Scheme url、跳转的包名以及发起跳转应用的uid。这一方法不仅能查看历史跳转记录,包括时间信息,还能揭示应用间的交互路径。
若想获取更多源码命令及详细教程,按键精灵论坛、知乎账号以及微信公众号"按键精灵"是不错的选择。遇到问题,可以在论坛留言或私信小编。完整的内容教程可以参考:安卓如何获取Scheme协议的Url - 集结令●英雄归来教程比武大赛 - 按键精灵论坛。