CN114237724B - 驱动动态加载方法 - Google Patents

驱动动态加载方法 Download PDF

Info

Publication number
CN114237724B
CN114237724B CN202111410381.7A CN202111410381A CN114237724B CN 114237724 B CN114237724 B CN 114237724B CN 202111410381 A CN202111410381 A CN 202111410381A CN 114237724 B CN114237724 B CN 114237724B
Authority
CN
China
Prior art keywords
firmware
driver
script
partition
kernel
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202111410381.7A
Other languages
English (en)
Other versions
CN114237724A (zh
Inventor
林铃
林三朝
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhuhai Freeview Science & Technology Co ltd
Original Assignee
Zhuhai Freeview Science & Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Zhuhai Freeview Science & Technology Co ltd filed Critical Zhuhai Freeview Science & Technology Co ltd
Priority to CN202111410381.7A priority Critical patent/CN114237724B/zh
Publication of CN114237724A publication Critical patent/CN114237724A/zh
Application granted granted Critical
Publication of CN114237724B publication Critical patent/CN114237724B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4411Configuring for operating with peripheral devices; Loading of device drivers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种驱动动态加载方法,包括以下步骤:打包固件包,并将固件包存放于预设的分区内,固件包包括驱动、固件配置脚本及解析程序;设备上电时,BootLoader启动并加载内核;内核初始化硬件平台、挂载根文件系统、并执行启动脚本;启动脚本挂载分区,并执行分区内的驱动加载脚本;驱动加载脚本调用解析程序对固件配置脚本进行解析并执行,将驱动加载入内核。根据本发明的驱动动态加载方法,通过将外设接口的驱动从内核代码中移出,在外部的分区内进行统一维护和编译的方法,极大的降低了代码的维护量,对设备的更新和维护提供了极大的方便;使用固件配置脚本和解析程序的方法,提高了产品的灵活性和技术适用范围。

Description

驱动动态加载方法
技术领域
本发明涉及驱动加载技术领域,尤其是涉及一种驱动动态加载方法。
背景技术
基于嵌入式系统硬件平台做产品级的开发时,经常碰到硬件平台和软件平台的选型,其中ARM+linux、ARM+Android这两种组合是经常被选用的。一旦选好嵌入式硬件平台,就会基于该款硬件平台做外设驱动开发,同时为了满足产品的不同定位和设计要求,还会对硬件及外设接口进行兼容和组合设计,比如:同一个外设接口设计支持多款厂家IC,同一个外设接口针对不同产品使用GPIO复用。这就提出了一个问题:驱动如何被正确加载,驱动如何管理与维护才更方便。现在常采用的方式主要有三种:
一、将需要的驱动编译进内核,不需要的驱动剔除,一款产品对应一个内核镜像。优点是对号入座,便于后续的生产与维护。缺点是如果产品型号多,而且差异较小的情况下,就造成大量的冗余,资源浪费。
二、将所有需要的驱动编译进内核,在设备启动时进行硬件的自动匹配识别。优点是一个内核镜像能支持多款型号的设备,减少了代码的维护量。缺点是内核镜像略显臃肿,占用空间偏大,且仅支持有双向通讯功能的外设,比如I2C、SPI接口,对LCD和GPIO接口的外设则不适用。
三、将驱动编译成内核模块,在设备启动时根据硬件版本号自动识别并加载。优点是内核维护工作量小,一个镜像能兼容多款产品,缺点是需要对硬件版本进行定义,即在BOM清单上体现硬件版本的不同,对主控芯片有限的资源(GPIO)是一种浪费,对后续产线批量生产也造成了一定的困扰和资源浪费。
因此,现有技术还有待进一步改进。
发明内容
本发明旨在至少解决现有技术中存在的技术问题之一。为此,本发明提出了一种驱动动态加载方法,能够快速灵活配置驱动。
根据本发明实施例的驱动动态加载方法,包括以下步骤:打包固件包,并将所述固件包存放于预设的分区内,所述固件包包括驱动、固件配置脚本及解析程序;设备上电时,BootLoader启动并加载内核;所述内核初始化硬件平台、挂载根文件系统、并执行启动脚本;所述启动脚本挂载所述分区,并执行所述分区内的驱动加载脚本;所述驱动加载脚本调用所述解析程序对所述固件配置脚本进行解析并执行,将所述驱动加载入所述内核。
根据本发明实施例的驱动动态加载方法,至少具有如下有益效果:通过将外设接口的驱动从内核代码中移出,在外部的分区内进行统一维护和编译的方法,极大的降低了代码的维护量,对设备的更新和维护提供了极大的方便;使用固件配置脚本和解析程序的方法,提高了产品的灵活性和技术适用范围;此种方法不仅适用于Linux平台,对于底层为Linux的Android平台同样适用。
根据本发明的一些实施例,所述的打包固件包,包括以下步骤:获取所述硬件平台的硬件版本信息;根据所述硬件版本信息,生成相应的固件配置单;根据所述固件配置单,拷贝所述驱动、所述固件配置脚本及所述解析程序至所述分区内预设的第一目录下;将所述第一目录打包成所述固件包。
根据本发明的一些实施例,所述硬件版本信息包括所述硬件平台的产品型号、PCBA版本号及固件索引号。
根据本发明的一些实施例,所述的所述驱动加载脚本调用所述解析程序对所述固件配置脚本进行解析并执行,将所述驱动加载入所述内核,具体包括以下步骤:所述驱动加载脚本对所述硬件版本信息进行解析,对所述产品型号及所述PCBA版本号进行匹配,以解析出所述固件索引号;将所述固件索引号作为参数,调用所述解析程序;所述解析程序对所述固件配置脚本进行解析并执行,将所述驱动加载入内核。
根据本发明的一些实施例,所述驱动以模块的形式存放于所述分区内。
根据本发明的一些实施例,所述驱动按照外设类型分类存放在所述分区内相应的第二目录下。
根据本发明的一些实施例,所述固件配置脚本及所述解析程序存放在所述分区内预设的第三目录下。
根据本发明的一些实施例,采用GUI工具来打包所述固件包。
本发明的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:
图1为本发明实施例的驱动动态加载方法的步骤流程图;
图2为本发明实施例的打包固件包的步骤流程图;
图3为图1示出的步骤S500的具体步骤流程图。
具体实施方式
本部分将详细描述本发明的具体实施例,本发明之较佳实施例在附图中示出,附图的作用在于用图形补充说明书文字部分的描述,使人能够直观地、形象地理解本发明的每个技术特征和整体技术方案,但其不能理解为对本发明保护范围的限制。
在本发明的描述中,若干的含义是一个或者多个,多个的含义是两个以上,大于、小于、超过等理解为不包括本数,以上、以下、以内等理解为包括本数。如果有描述到第一、第二只是用于区分技术特征为目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量或者隐含指明所指示的技术特征的先后关系。
本发明的描述中,除非另有明确的限定,设置、安装、连接等词语应做广义理解,所属技术领域技术人员可以结合技术方案的具体内容合理确定上述词语在本发明中的具体含义。
如图1所示,根据本发明实施例的驱动动态加载方法,包括以下五个步骤:
S100:打包固件包,并将固件包存放于预设的分区内,固件包包括驱动、固件配置脚本及解析程序;
具体地,为了方便设备系统的更新与升级管理,单独设置一个分区用来存放需要动态修改的内容;当需要更新修改时,仅更新该分区内容,而内核映像则可以保持不变。该分区包含一个命名为固件的文件夹,即固件包,该固件包主要包含驱动、固件配置脚本、解析程序等。其中,驱动以模块KO的方式存在,并按照外设的类型分类存放在不同的第二目录下,比如audio、camera、LCD等;每个第二目录下还存放不同芯片厂家的外设驱动及其配置文件(如果有的话),比如cemera目录下有ar0130、ar0230、ov5640、gc2145等型号。固件配置以脚本的形式存在,固件配置脚本详细描述了设备所需要加载的驱动及驱动的传入参数;固件配置脚本存放在分区内预设的第三目录下,即fw目录,并以固件索引号区分,比如fw01、fw02等。解析程序也以脚本的形式存在,且解析程序insfw.sh也放在fw目录下。
如图2所示,上述的打包固件包,具体包括以下三个子步骤:
S101:获取硬件平台的硬件版本信息;
在本发明实施例中,采用GUI工具来进行打包;在打包时,选择硬件平台的产品型号,比如全志A20芯片;产品型号会自动关联PCBA版本号,如GW9802A;假设固件索引号为02,则产品型号、PCBA版本号和固件索引号形成硬件版本信息(hardware_ver.info),该硬件版本信息为A20:GW9802A:02。
S102:根据硬件版本信息,生成相应的固件配置单;
在获取到硬件版本信息(hardware_ver.info)后,选择模板配置单或者导入已有的配置单;如果是选择模板配置单的话,则根据产品需求依次选择外设型号;如果是导入已有的配置单的话,则仅需修改需要改变的外设型号。然后输入配置单的名称和固件版本号,生成相应的固件配置单。固件版本号存在在固件版本信息(firmware_ver.info)中,可以用编译日期来区分。
S103:根据固件配置单,拷贝驱动、固件配置脚本及解析程序至分区内预设的第一目录下,并将第一目录打包成固件包。
将驱动、固件配置脚本及解析程序放置在分区内总的第一目录下,并将整个第一目录打包成tar固件包。
如图1所示,在完成固件包的打包后,便可以执行下列的驱动动态加载方法的步骤:
S200:设备上电时,BootLoader启动并加载内核;
S300:内核初始化硬件平台、挂载根文件系统、并执行启动脚本;
S400:启动脚本挂载分区,并执行分区内的驱动加载脚本;
S500:驱动加载脚本调用解析程序对固件配置脚本进行解析并执行,将驱动加载入内核。
如图3所示,上述的步骤S500,具体还包括以下三个子步骤:
S501:驱动加载脚本install.sh对硬件版本信息hardware_ver.info进行解析,以获取固件索引号;
驱动加载脚本install.sh通过对硬件平台的产品型号和PCBA版本号进行匹配,解析出固件索引号;
S502:将固件索引号作为参数,调用解析程序insfw.sh;
S503:解析程序insfw.sh对固件配置脚本进行解析并执行,将驱动加载入内核。
例如,假设获取到的硬件版本信息为A20:GW9802A:02,固件索引号为02,则驱动加载脚本install.sh以该固件索引号作为参数,调用解析程序insfw.sh;此时解析程序insfw.sh便会解析相应的固件配置脚本,即fw02,从而获取到需要加载的驱动及其参数,并加载入内核。
综上,根据本发明实施例的驱动动态加载方法,通过将外设接口的驱动从内核代码中移出,在外部的分区内进行统一维护和编译的方法,极大的降低了代码的维护量,对设备的更新和维护提供了极大的方便;使用固件配置脚本和解析程序的方法,提高了产品的灵活性和技术适用范围;使用GUI的打包工具,减轻了配置管理的复杂性,节省了人力成本。此种方法不仅适用于Linux平台,对于底层为Linux的Android平台同样适用。
在本说明书的描述中,参考术语“一个实施例”、“进一步实施例”、“一些具体实施例”或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
尽管已经示出和描述了本发明的实施例,本领域的普通技术人员可以理解:在不脱离本发明的原理和宗旨的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由权利要求及其等同物限定。

Claims (5)

1.一种驱动动态加载方法,其特征在于,包括以下步骤:
打包固件包,并将所述固件包存放于预设的分区内,所述固件包包括驱动、固件配置脚本及解析程序;
设备上电时,BootLoader启动并加载内核;
所述内核初始化硬件平台、挂载根文件系统、并执行启动脚本;
所述启动脚本挂载所述分区,并执行所述分区内的驱动加载脚本;
所述驱动加载脚本调用所述解析程序对所述固件配置脚本进行解析并执行,将所述驱动加载入所述内核;
所述的打包固件包,包括以下步骤:
获取所述硬件平台的硬件版本信息;所述硬件版本信息包括所述硬件平台的产品型号、PCBA版本号及固件索引号;
根据所述硬件版本信息,生成相应的固件配置单;
根据所述固件配置单,拷贝所述驱动、所述固件配置脚本及所述解析程序至所述分区内预设的第一目录下;
将所述第一目录打包成所述固件包;
所述的所述驱动加载脚本调用所述解析程序对所述固件配置脚本进行解析并执行,将所述驱动加载入所述内核,具体包括以下步骤:
所述驱动加载脚本对所述硬件版本信息进行解析,对所述产品型号及所述PCBA版本号进行匹配,以解析出所述固件索引号;
将所述固件索引号作为参数,调用所述解析程序;
所述解析程序对所述固件配置脚本进行解析并执行,将所述驱动加载入内核。
2.根据权利要求1所述的驱动动态加载方法,其特征在于,所述驱动以模块的形式存放于所述分区内。
3.根据权利要求2所述的驱动动态加载方法,其特征在于,所述驱动按照外设类型分类存放在所述分区内相应的第二目录下。
4.根据权利要求1所述的驱动动态加载方法,其特征在于,所述固件配置脚本及所述解析程序存放在所述分区内预设的第三目录下。
5.根据权利要求1所述的驱动动态加载方法,其特征在于,采用GUI工具来打包所述固件包。
CN202111410381.7A 2021-11-24 2021-11-24 驱动动态加载方法 Active CN114237724B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111410381.7A CN114237724B (zh) 2021-11-24 2021-11-24 驱动动态加载方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111410381.7A CN114237724B (zh) 2021-11-24 2021-11-24 驱动动态加载方法

Publications (2)

Publication Number Publication Date
CN114237724A CN114237724A (zh) 2022-03-25
CN114237724B true CN114237724B (zh) 2024-03-12

Family

ID=80751096

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111410381.7A Active CN114237724B (zh) 2021-11-24 2021-11-24 驱动动态加载方法

Country Status (1)

Country Link
CN (1) CN114237724B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116301905A (zh) * 2023-05-19 2023-06-23 荣耀终端有限公司 数据处理方法以及相关设备
CN117850917A (zh) * 2024-01-10 2024-04-09 镁佳(武汉)科技有限公司 一种安全启动出厂部署方法及装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104794393A (zh) * 2015-04-24 2015-07-22 杭州字节信息技术有限公司 一种嵌入式分区映像安全认证及内核可信引导方法及其设备
CN106843956A (zh) * 2017-01-17 2017-06-13 青岛海信移动通信技术股份有限公司 系统固件包的生成方法及装置
CN106909480A (zh) * 2017-01-19 2017-06-30 华南师范大学 一种嵌入式系统交叉调试方法和装置
CN112130917A (zh) * 2020-09-22 2020-12-25 北京计算机技术及应用研究所 远程加载系统镜像方法
CN113254091A (zh) * 2021-06-09 2021-08-13 广东睿江云计算股份有限公司 一种基于ceph块设备的无盘系统启动方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104794393A (zh) * 2015-04-24 2015-07-22 杭州字节信息技术有限公司 一种嵌入式分区映像安全认证及内核可信引导方法及其设备
CN106843956A (zh) * 2017-01-17 2017-06-13 青岛海信移动通信技术股份有限公司 系统固件包的生成方法及装置
CN106909480A (zh) * 2017-01-19 2017-06-30 华南师范大学 一种嵌入式系统交叉调试方法和装置
CN112130917A (zh) * 2020-09-22 2020-12-25 北京计算机技术及应用研究所 远程加载系统镜像方法
CN113254091A (zh) * 2021-06-09 2021-08-13 广东睿江云计算股份有限公司 一种基于ceph块设备的无盘系统启动方法

Also Published As

Publication number Publication date
CN114237724A (zh) 2022-03-25

Similar Documents

Publication Publication Date Title
CN114237724B (zh) 驱动动态加载方法
US9772838B2 (en) Firmware update discovery and distribution
US8185889B2 (en) Methods and systems for porting software packages from one format to another
US7673127B2 (en) Method and apparatus for enabling a computer system by loading and executing an updated hardware specific boot routine to modify the operating system
US20040250247A1 (en) Extensible software installation and configuration framework
US20060031815A1 (en) Software and firmware adaptation for unanticipated/changing hardware environments
US20140007067A1 (en) RESOURCE DATa STRUCTURES FOR FIRMWARE UPDATES
CN109274959B (zh) 电视机屏参分离方法、电视机及计算机可读存储介质
JPH10260927A (ja) 周辺機器のインタフェース方法及びインタフェース装置
JP2011516987A (ja) モバイル・デバイス・ソフトウェアの管理方法及び装置
CN102023881A (zh) 一种软件升级方法、装置及嵌入式设备
CN103761107B (zh) 软件包定制的装置及方法
CN109189429A (zh) 双核处理器amp模式下cpu0更新cpu1程序的方法
US8726258B2 (en) Supporting multiple hardware components in UEFI
CN100465891C (zh) 通过即插即用储存装置更新手持式设备操作功能的方法
CN113138790B (zh) Android机顶盒客制化集成方法、装置及机顶盒集成开发系统
CN114127685B (zh) 电子设备及其控制方法
CN112230976A (zh) 同时支持两种软件包管理器并支持软件包相互依赖及冲突检测的方法
CN113835723A (zh) 一种用于车辆电子控制单元的片上系统、升级系统及方法
US20070088941A1 (en) Customization of option ROM images
CN107579847B (zh) 无源光网络地区自适应系统的数据配置方法
US11474807B1 (en) Firmware update method and computer program product for updating firmware
CN112732277B (zh) 一种java多服务应用自动安装部署的集成方法与系统
CN112286568A (zh) 一种Android系统多版本兼容方法
CN114385200A (zh) 一种基于mpack的国产大数据平台的自研软件集成方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
PE01 Entry into force of the registration of the contract for pledge of patent right

Denomination of invention: Drive dynamic loading method

Granted publication date: 20240312

Pledgee: Hengqin Financial Investment International Finance Leasing Co.,Ltd.

Pledgor: ZHUHAI FREEVIEW SCIENCE & TECHNOLOGY CO.,LTD.

Registration number: Y2024980033860

PE01 Entry into force of the registration of the contract for pledge of patent right