一种基于linux操作系统的外设固件加载方法、控制设备及计算机可读存储介质与流程

文档序号:22235802发布日期:2020-09-15 19:43阅读:189来源:国知局
一种基于linux操作系统的外设固件加载方法、控制设备及计算机可读存储介质与流程

本发明涉及一种固件加载方法,尤其是涉及一种基于linux操作系统的外设固件加载方法、控制设备及计算机可读存储介质。



背景技术:

手机某些外设需要有固件才能正常工作,这些固件需要在系统启动时,通过驱动下载到芯片中,这样芯片才能正常工作,在linux系统中,一般将固件放在文件系统中,等系统起来以后,驱动会在文件系统里面某些目录下根据文件名找对应的固件文件,如wifi,蓝牙等都需要一个固件,固件其实就是一段跑在外设芯片上的代码,用来和主控芯片通信完成对应芯片的功能。

现有的基于linux操作系统的外设固件加载方法包括以下步骤:先去文件系统指定的路径根据文件名查找自己的固件,然后打开文件,读取内容,然后写到芯片中去,一般的固件加载时在文件系统挂载之后,这时我们可以正常的读取系统文件了,就可以以文件的形式将固件打开,然后写到外设芯片中,但在此之前是无法读取固件的(因为在linux操作系统启动器和linux内核启动阶段是没有文件系统的)。因此,在固件所在的分区挂载之前,驱动是无法加载固件的,而且有些驱动确实会在驱动初始化时加载固件,但这个时候文件系统还没有挂载,会导致固件加载失败。



技术实现要素:

本发明所要解决的技术问题是提供一种使加载外设固件的过程不依赖文件系统,确保外设固件加载成功的基于linux操作系统的外设固件加载方法、控制设备及计算机可读存储介质。

本发明解决上述技术问题所采用的技术方案为:一种基于linux操作系统的外设固件加载方法,包括以下步骤:

(1)将linux操作系统的硬盘在linux内核和文件系统之间建立系统固件分区;

(2)对手机进行刷机时,将linux操作系统相关的所有外设固件刷到硬盘的系统固件分区上,并获取系统固件分区里所有外设固件对应的起始地址;

(3)在linux操作系统启动时,将系统固件分区里所有外设固件对应的起始地址放到linux操作系统启动器对应的命令行参数里面;

(4)在linux操作系统启动后,根据命令行参数记录的所有外设固件对应的起始地址读取每个外设固件信息,然后从外设固件信息中解析出对应的外设固件数据,并读取外设固件数据下载到手机外设芯片里面,即完成基于linux操作系统的外设固件加载。

所述的外设固件信息为含有固件名字、固件起始地址和固件长度信息的一串字节,所述的外设固件数据是固件的内容。

步骤(4)中从外设固件信息中解析出对应的外设固件数据具体过程如下:将每个外设固件信息等分成3段,前一段字节为固件名字,中间一段字节为固件起始地址,最后一段字节为固件长度,然后将每个外设固件信息按顺序存放,在读取外设固件信息的时候,按前中后的顺序,依次获取固件名字、固件起始地址和固件长度后,再获取下一个外设固件的固件名字、固件起始地址和固件长度,如此循环直至获取全部外设固件的固件名字、固件起始地址和固件长度。

一种基于linux操作系统的外设固件加载的控制设备,包括:至少一个处理器和存储器;所述存储器存储计算机执行指令;所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如权利要求1所述的方法。

一种基于linux操作系统的外设固件加载的计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如权利要求1所述的方法。

所述的外部设备包括蓝牙和wifi、全球定位系统和调制解调器。

与现有技术相比,本发明的优点在于:本发明一种基于linux操作系统的外设固件加载方法、控制设备及计算机可读存储介质,将linux外设的固件放到分区,并且根据分区地址读取固件,不依赖文件系统,使驱动在文件系统起来之前就可以加载外设的固件。因此,固件的加载过程提前到linuxkernel启动阶段,即使没有文件系统,我们仍然可以加载固件,使加载固件的过程不依赖文件系统,确保外设固件加载成功。

附图说明

图1为本发明基于linux操作系统的外设固件加载方法的流程示意图;

图2为本发明linux系统硬盘分区图。

具体实施方式

以下结合附图实施例对本发明作进一步详细描述。

实施例1

一种基于linux操作系统的外设固件加载方法,如图1和图2所示,包括以下步骤:

(1)将linux操作系统的硬盘在linux内核和文件系统之间建立系统固件分区;

(2)对手机进行刷机时,将linux操作系统相关的所有外设固件刷到硬盘的系统固件分区上,并获取系统固件分区里所有外设固件对应的起始地址;

(3)在linux操作系统启动时,将系统固件分区里所有外设固件对应的起始地址放到linux操作系统启动器对应的命令行参数里面;

(4)在linux操作系统启动后,根据命令行参数记录的所有外设固件对应的起始地址读取每个外设固件信息,然后从外设固件信息中解析出对应的外设固件数据,并读取外设固件数据下载到手机外设芯片里面,即完成基于linux操作系统的外设固件加载。

在此具体实施例中,所述的外设固件信息为含有固件名字、固件起始地址和固件长度信息的一串字节,所述的外设固件数据是固件的内容(即运行在外部设备的程序);从外设固件信息中解析出对应的外设固件数据具体过程如下:将每个外设固件信息等分成3段,前一段字节为固件名字,中间一段字节为固件起始地址,最后一段字节为固件长度(如每个外设固件信息占24字节,分成3部分,前八个字节为固件名字,中间八个字节为固件起始地址,最后八个字节为固件长度),然后将每个外设固件信息按顺序存放,在读取外设固件信息的时候,按前中后的顺序,依次获取固件名字、固件起始地址和固件长度后,再获取下一个外设固件的固件名字、固件起始地址和固件长度,如此循环直至获取全部外设固件的固件名字、固件起始地址和固件长度。外部设备包括蓝牙和wifi、全球定位系统(gps)、sensor和调制解调器(modem)等。

实施例2

一种基于linux操作系统的外设固件加载的控制设备,包括:至少一个处理器和存储器;存储器存储计算机执行指令;至少一个处理器执行存储器存储的计算机执行指令,使得至少一个处理器执行如实施例1所述的方法。

控制设备的具体执行过程可参见之前所述内容,其实现原理和技术效果类似,此处不再赘述。应理解,处理器可以是中央处理单元(英文:centralprocessingunit,简称:cpu),还可以是其他通用处理器、数字信号处理器(英文:digitalsignalprocessor,简称:dsp)、专用集成电路(英文:applicationspecificintegratedcircuit,简称:asic)等。通用处理器可以是微处理器或者其他常规的处理器。存储器存储的计算机指令,可以直接由硬件处理器执行完成,或者由处理器中的硬件及软件模块组合执行完成。存储器可能包括高速ram存储器,也可能还包括非易失性存储nvm,例如至少一个磁盘存储器。总线可以分为地址总线、数据总线、控制总线等。

实施例3

一种基于linux操作系统的外设固件加载的计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序被执行时,实现如前实施例1所述的基于linux操作系统的外设固件加载的方法。上述计算机可读存储介质可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(sram)、电可擦除可编程只读存储器(eeprom)、可擦除可编程只读存储器(eprom)、可编程只读存储器(prom)、只读存储器(rom)、磁存储器、快闪存储器、磁盘或光盘等。可读存储介质可以是通用或专用的计算机或类似电子设备能够存取的任何可用介质。

计算机可读存储介质可以耦合至处理器,从而使处理器能够从上述介质中读取信息,且可以向上述介质写入信息。当然,上述介质也可以是处理器的组成部分。处理器和可读存储介质可以位于专用集成电路(applicationspecificintegratedcircuits,简称:asic)中。当然,处理器和可读存储介质也可以作为分立组件存在于电子设备中。

本申请技术方案如果以软件的形式实现并作为产品销售或使用时,可以存储在计算机可读取存储介质中。基于这样的理解,本申请的技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括计算机程序或者若干指令。该计算机软件产品使得计算机设备(可以是个人计算机、服务器、网络设备或者类似的电子设备)执行本申请所述方法的全部或部分步骤。前述的存储介质可以是u盘、移动硬盘、只读存储器(rom,road-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

上述说明并非对本发明的限制,本发明也并不限于上述举例。本技术领域的普通技术人员在本发明的实质范围内,做出的变化、改型、添加或替换,也应属于本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1