欢迎光临小豌豆知识网!
当前位置:首页 > 电学技术 > 电通讯技术> 一种基于Linux的多硬件适配方法独创技术13002字

一种基于Linux的多硬件适配方法

2021-02-26 10:51:49

一种基于Linux的多硬件适配方法

  技术领域

  本发明涉及汽车电子技术领域,特别涉及一种基于Linux的多硬件适配方法。

  背景技术

  随着汽车工业的不断的发展,同一款车型根据不同配置可以分为多个版本,不同的版本的上的车载娱乐系统需要根据不同的硬件设备来做出相应的不同的设备识别,驱动加载,现有主要有两种技术可以实现不同的硬件适配,第一种是在编码阶段就根据不同的车型做出区别,比如Android系统可以用lunch命令选择不同的平台编译选项,然后再用make命令执行编译命令,这样在编译后的代码就已经可以适配当前的平台设备,第二种是用同一款代码,在启动阶段获取不同的硬件信息,然后通过代码对硬件进行动态的配置,比如有可以将硬件参数写入内存中,Bootloader阶段读取内存中的参数信息,然后修改bootargs参数,用bootargs给内核传递不同参数,内核通过不同bootargs参数加载不同的设备,但是第一种方法不够灵活,只能通过编译不同的代码来进行区分,不可以动态的对硬件进行适配,不能满足软硬件平台化的要求,第二种方案用代码可以动态的适配,但是通过bootargs传参的方法比较陈旧,而且bootargs参数修改也有限制,只能适配内存大小,波特率等参数,所以也不能更好的满足动态适配的要求。

  发明内容

  为了解决上述技术问题,本发明提供了一种基于Linux的多硬件适配方法,在Bootloader阶段是可以使车载娱乐系统的车载娱乐SOC处理器处理器端获取到车载MCU处理器端的硬件信息,并且可以根据不同的硬件信息修改内核驱动里面的参数,达到动态适配硬件的功能,所述的车载娱乐SOC处理器在Bootloader阶段通过IPCL和车载MCU处理器通讯,获取车载MCU处理器端不同车型的硬件信息,在Bootloader阶段根据不同车型对设备树FDT进行修改,最后在Linux Kernel驱动设置不同的硬件参数实现动态的硬件适配,所述方法包括以下步骤:

  步骤1):在上电启动后,在Linux启动前进入Bootloader程序,用于板上芯片初始化和加载并且引导Linux操作系统,Bootloader程序的通过SPI的IPCL通信协议获取车载MCU处理器中的硬件配置信息;

  步骤2):在Bootloader阶段,车载娱乐SOC处理器通过IPCL通信协议与车载MCU处理器通讯,获取车载MCU处理器中保存的硬件信息,首先首次建立通信,车载娱乐SOC处理器向车载MCU处理器发送一条数据帧Data Frame,其中包含组名group id为9的数据请求,请求车载MCU处理器发送硬件信息,若车载MCU处理器没有要发送的数据,则发送无效帧DummyFrame,若车载娱乐SOC处理器和车载MCU处理器回复应答帧ACK Frame表示数据已成功发送和接收,车载MCU处理器开始发送硬件数据,车载娱乐SOC处理器接收数据的同时,发送无效帧Dummy Frame,接收后对数据进行解析;

  步骤3):在dts文件里面添加设备树节点信息,设备树节点信息与IPCL通信协议信息从车载MCU处理器中获取的板级信息对应,再根据获取的板级信息对设备树FDT文件进行修改;

  步骤4):修改设备树FDT相应的设备树节点的参数后,让Linux Kernel在驱动中根据设备树dtb文件中节点不同的信息来使驱动加载不同的硬件参数,从而完成Linux的多硬件适配的方法。

  作为本发明的一种改进,所述步骤1中的配置项包括不同的车载MCU处理器软件版本信息、camera型号、lcd类型和audio信息。

  作为本发明的一种改进,对于不同的车型以及同一款车型,高中低配置不同,其搭载的硬件也不同,在驱动都完善的情况下,在Bootloader阶段车载娱乐SOC处理器与车载MCU处理器通信的方式是一种基于SPI的IPCL通信协议,用来获取车载MCU处理器中保存的硬件信息。

  作为本发明的一种改进,在SPI的4路信号线的基础上,增加了2路GPIO信号线,所述GPIO信号线包括soc_srq信号线和 vip_srq信号线,所述soc_srq信号线将车载娱乐SOC处理器端的数据传输请求信息通知给车载MCU处理器,所述vip_srq信号线则是下降沿触发中断,车载娱乐SOC处理器在中断处理下半部分启动SPI传输,当车载MCU处理器有数据要传输或者收到soc_srq请求时,会发送vip_srq请求,引入这两个引脚的目的在于加快IPCL消息的发送和通信效率的提高。

  作为本发明的一种改进,所述步骤2中车载娱乐SOC处理器获取到帧数据后,会通过ipcl_handle_rx函数对整个帧进行解析和校验,确认无误后,进一步通过解析函数解析出具体的车型信息和前屏信息,随后相关函数对设备树FDT进行修改,完成动态的适配过程。

  相对于现有技术,本发明的有益效果是:本发明提出的一种基于Linux的多硬件适配方法设计巧妙,运用灵活,由于在Bootloader阶段获取车型信息,并且修改了Linux设备驱动加载时候的设备树FDT文件,在Linux Kernel启动之前就完成了配置,驱动根据修改过的设备树文件来配置的不同的参数,用户在启动过程中完全感觉不到适配步骤,能够有效的满足对多硬件适配的要求,方便灵活,无感配置,所采用的基于SPI的IPCL通信协议,用于传递不同车型的硬件信息,可以实现车载娱乐SOC处理器和车载MCU处理器之间信息传递,通过对传统的SPI协议进行改进,增加了用于通知对方的GPIO,并且采用定制的数据帧发送,让两者之间的通信更具效率,拥有纠错重发机制,降低了通信出错的概率,并且该通信协议的配置简单,在不同的阶段均可以通信,对不同的平台都有很好的兼容性,使在Bootloader阶段能让车载娱乐SOC处理器稳定可靠实时地获取车载MCU处理器的发送的硬件信息。

  附图说明

  图1为本发明优选实施例的系统框图。

  图2为本发明优选实施例的IPCL通信框图。

  图3为本发明优选实施例的IPCL通信的帧格式。

  图4为本发明优选实施例的获取硬件参数时IPCL的通信流程图。

  具体实施方式

  以下将结合附图1至附图4对本发明做进一步说明,但不应以此来限制本发明的保护范围,为了方便说明并且理解本发明的技术方案,以下说明均以附图所展示为准。

  如图1所示,在Bootloader阶段是可以使车载娱乐系统的车载娱乐SOC处理器端获取到车载MCU处理器端的硬件信息,并且可以根据不同的硬件信息修改内核里面的参数,达到动态适配硬件的功能,所述的车载娱乐SOC处理器在Bootloader阶段通过IPCL和车载MCU处理器通讯,获取车载MCU处理器端不同车型的硬件信息,在Bootloader阶段根据不同车型对设备树FDT进行修改,最后在Linux Kernel驱动设置不同的硬件参数实现动态的硬件适配,其中所采用的车载娱乐SOC处理器芯片是MTK MT2712,车载MCU处理器是RenesasRH850,用LK作为Bootloader程序,当获IPCL获取到车载MCU处理器发送过来的硬件信息之后,在加载Linux Kernel之前运用相关函数对 设备树FDT文件中对应的设备树节点动态的修改。

  为了在车载娱乐SOC处理器能够高效稳定的获取硬件信息,这里IPCL通信的SPI速率设置为1MHz,这里采用了固定的发送帧格式,作为数据交换的基本单位,有三种类型IPCL帧格式:数据帧Data Frame, 应答帧(非应答)ACK/NACK Frame和无效帧Dummy Frame,其中Data Frame:用来封装IPCL message,该帧采用“集总帧”的设计思路,可以将多条message封装在一帧里面,提高通信效率,Data Frame最大长度为550字节,FrameLen占用2字节,CS占用2字节,一个Data Frame最多可以存放550-2-2=546字节有效载荷,如果Data Frame仅封装了一条message,那么message最大长度为546字节,Dummy Frame:MT2712和RH850进行数据交换时,如果MT2712或RH850没有 IPCL message需要发送,可以使用Dummy Frame来完成数据传输,接收端丢弃Dummy Frame即可,ACK/NACK Frame:MT2712或者RH850在ACK_SM状态会发送ACK Frame通知对方,上一次数据交换成功,数据交换成功就是接收到有效DataFrame或者Dummy Frame,反之,发送NACK Frame,在上电启动后,在Linux启动前进入Bootloader程序,用于板上芯片初始化和加载并且引导Linux操作系统,Bootloader程序通过SPI的IPCL通信协议获取车载MCU处理器中的配置项。

  在Bootloader阶段,车载娱乐SOC处理器通过IPCL通信协议与车载MCU处理器通讯,获取车载MCU处理器中保存的硬件信息,如图4所示,在首次建立通信后,车载娱乐SOC处理器向车载MCU处理器发送一条数据帧Data Frame,请求车载MCU处理器发送硬件信息,若车载MCU处理器没有要发送的数据,则发送无效帧Dummy Frame,若车载娱乐SOC处理器和车载MCU处理器回复应答帧ACK Frame表示数据已成功发送和接收,车载MCU处理器开始发送硬件数据,车载娱乐SOC处理器接收数据的同时,发送无效帧Dummy Frame,接收后对数据进行解析一次完整的通信过程结束,最后同时发送应答帧ACK Frame表示数据发送和接收已经完成,至此,完整的一次获取硬件信息的通信已经完成,在dts文件里面添加设备树节点信息,设备树节点信息与IPCL通信协议信息从车载MCU处理器中获取的板级信息对应,再根据获取的板级信息对设备树FDT文件进行修改,修改设备树FDT相应的设备树节点的参数后,让Linux Kernel在驱动中根据设备树dtb文件中节点不同的信息来使驱动加载不同的硬件参数,从而完成Linux的多硬件适配的方法,所述配置项包括不同的车载MCU处理器软件版本信息、camera型号、lcd类型和audio信息,对于不同的车型以及同一款车型,高中低配置不同,其搭载的硬件也不同,在驱动都完善的情况下,在Bootloader阶段车载娱乐SOC处理器与车载MCU处理器通信的方式是一种基于SPI的IPCL通信协议,用来获取车载MCU处理器中保存的硬件信息,如图2所示,在SPI的4路信号线(包括MOSI信号线、MISO信号线、CLK信号线和CS信号线)的基础上,增加了2路GPIO信号线,GPIO信号线包括soc_srq信号线和vip_srq信号线,所述soc_srq信号线将车载娱乐SOC处理器端的数据传输请求信息通知给车载MCU处理器,所述vip_srq信号线则是下降沿触发中断,车载娱乐SOC处理器在中断处理下半部分启动SPI传输,当车载MCU处理器有数据要传输或者收到soc_srq请求时,会发送vip_srq请求,引入这两个引脚的目的在于加快IPCL消息的发送和通信效率的提高。

  对于图1中通过IPCL获取VIP信息,结合图3图4说明,在Bootloader阶段启动IPCL传输,首先车载娱乐SOC处理器发送帧Framelen为 “0x00,0x09”表示该帧总长度为9byte,然后Msg0中MsgLen这里的值设置为“0x00,0x05”,该条Msg长度为5Byte, 然后Group ID为“0x09”,表示该条Msg 表示为是一条服务信息,然后发送Payload为“0x02,0x04”表示该条message是从车载娱乐SOC处理器发送给车载MCU处理器的申请获取的车载MCU处理器板级信息,最后两个Byte是CRC,采用的是CRC-16/CCITT的参数模型;在ACK Frame之后车载MCU处理器回复相同的Group ID ,Payload前面两个Byte为“0x01,0x85”,代表该数据是从车载MCU处理器发送到车载娱乐SOC处理器的板级信息,然后后面每个Byte代表每个硬件信息,其中包括版本信息、前屏、audio、camera等信息,最后两个字节是CRC,所述车载娱乐SOC处理器获取到帧数据后,会通过ipcl_handle_rx函数对整个帧进行解析和校验,确认无误后,进一步通过解析函数解析出具体的车型信息和前屏信息,随后相关函数对设备树FDT进行修改,完成动态的适配过程。

  最后应说明的是:以上所述的实施例仅用于说明本发明的技术方案,而非对其限制,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分或全部技术特征进行等同替换,而这些修改或替换,并不使相应技术方案的本质脱离本发明实施例技术方案的范围。

《一种基于Linux的多硬件适配方法.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式(或pdf格式)