CN113238819A - 一种适用于U-Boot的驱动文件动态加载方法及系统 - Google Patents

一种适用于U-Boot的驱动文件动态加载方法及系统 Download PDF

Info

Publication number
CN113238819A
CN113238819A CN202110775471.XA CN202110775471A CN113238819A CN 113238819 A CN113238819 A CN 113238819A CN 202110775471 A CN202110775471 A CN 202110775471A CN 113238819 A CN113238819 A CN 113238819A
Authority
CN
China
Prior art keywords
boot
file
driver
partition
loading
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.)
Granted
Application number
CN202110775471.XA
Other languages
English (en)
Other versions
CN113238819B (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.)
Chengdu Jingrong Lianchuang Technology Co ltd
Original Assignee
Chengdu Jingrong Lianchuang 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 Chengdu Jingrong Lianchuang Technology Co ltd filed Critical Chengdu Jingrong Lianchuang Technology Co ltd
Priority to CN202110775471.XA priority Critical patent/CN113238819B/zh
Publication of CN113238819A publication Critical patent/CN113238819A/zh
Application granted granted Critical
Publication of CN113238819B publication Critical patent/CN113238819B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/61Installation
    • G06F8/63Image based installation; Cloning; Build to order
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • 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
    • 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/44594Unloading

Landscapes

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

Abstract

本发明提供了一种适用于U‑Boot的驱动文件动态加载方法、系统、设备以及计算机介质,属于通信技术领域。该方法包括:提取不同设备的差异部分;构建驱动开发模型;设备驱动重构与开发;划分DTB存储空间;在分区中分别添加DTB文件以及重构与开发的设备驱动;由boot0加载DTB的指令;对加载的DTB进行解析。本发明针对多种单板间存在的部分外设差异设计一个抽象层,将单板之间的差异部分抽象出来,与U‑Boot烧写镜像分开维护管理。使用时,所有同类型单板使用同一个U‑Boot烧写镜像,辅以差异内容的植入,单板运行时,自动根据抽象层的内容来决定如何初始化外设驱动,实现更简单的版本管理与后期维护。

Description

一种适用于U-Boot的驱动文件动态加载方法及系统
技术领域
本发明属于通信技术领域,尤其涉及一种适用于U-Boot的驱动文件动态加载方法及系统。
背景技术
U-Boot是当前嵌入式领域被广泛应用的,主要用于嵌入式系统的引导加载程序。U-Boot可以支持多种不同的计算机系统结构,包括PPC、ARM、AVR32、MIPS、x86、68k、Nios与MicroBlaze。U-Boot的工作模式有启动加载模式和下载模式。启动加载模式是Bootloader的正常工作模式,嵌入式产品发布时,Bootloader必须工作在这种模式下,Bootloader将嵌入式操作系统从FLASH中加载到SDRAM中运行,整个过程是自动的。下载模式就是Bootloader通过某些通信手段将内核映像或根文件系统映像等从PC机中下载到目标板的FLASH中。用户可以利用Bootloader提供的一些命令接口来完成自己想要的操作。U-Boot通过写死每个驱动程序的配置和参数来加载驱动。
在实际硬件研发过程中,对于很多同类型单板,不同单板之间的外设仅有少量的差异,比如LCD型号、PIN脚使用等存在差异,此时如果对所有单板都使用同一个U-Boot烧写镜像,那么启动时每个驱动程序的配置、参数都是写死的,某个驱动是否加载也是写死的,比如可能某个单板上没有焊接RTC,但是U-Boot写死了需要加载RTC驱动,这样可能会导致异常,这种情况下有些单板的某些外设在U-Boot下将无法使用甚至系统无法启动;如果使用多个U-Boot版本,那么将给版本管理带来巨大的压力,后期维护与技术支持都会变得非常麻烦。
现有的U-Boot加载驱动文件的方法是在U-Boot启动后按照代码写好的顺序加载编译U-Boot当中的设备驱动程序,每个驱动程序的配置、参数都是写死在代码里的。现有技术的缺点如下:驱动的配置、参数以及是否加载均在U-boot中写死,不能动态配置;同一个U-Boot烧写镜像只能适用于少量单板;不同单板使用同一个U-boot镜像时,可能会导致异常,有些单板的某些外设在U-Boot下无法使用甚至无法启动;多个版本的U-Boot对版本管理产生了巨大的压力,后期维护与技术支持都非常困难。
发明内容
针对现有技术中的上述不足,本发明提供的一种适用于U-Boot的驱动文件动态加载方法及系统,以解决驱动无法在U-Boot下动态配置、动态加载的问题;U-Boot烧写镜像不能同时适用于大量单板的问题;不同单板使用同一个U-Boot时产生异常,有些单板的某些外设在U-Boot下无法使用甚至无法启动的问题以及多版本U-Boot对版本管理造成压力的问题。
为了达到以上目的,本发明采用的技术方案为:
本方案提供一种适用于U-Boot的驱动文件动态加载方法,包括以下步骤:
S1、提取不同设备的差异部分,形成DTS设备树文件;
S2、根据所述DTS设备树文件的参数类型以及libftd库提供的扁平设备树解析接口,构建基于DTB的驱动开发模型;
S3、根据所述驱动开发模型,对嵌入式单板进行设备驱动的重构与开发;
S4、在嵌入式单板原有的EMMC存储划分基础上,划分DTB文件与设备驱动的存储空间,并将所述存储空间增加到boot-res分区中;或
单独划分一个用于存储DTB文件与可动态加载的设备驱动文件分区,并命名为uboot-dydrv分区;
S5、在boot-res分区或uboot-dydrv分区中分别添加步骤S1中DTS设备树文件编译得到的DTB文件以及步骤S3的重构与开发的设备驱动;
S6、根据步骤S5的添加结果,执行由boot0加载DTB的指令;
S7、开发动态驱动加载命令,调用步骤S5中存储在boot-res分区或uboot-dydrv分区中的设备驱动对加载的DTB文件进行解析,完成U-Boot下驱动文件的动态加载。
进一步地,所述步骤S1中提取不同设备的差异部分,其具体为:
提取不同嵌入式单板之间设备的差异部分,并将差异部分以DTS设备树文件的形式描述并管理,其中,所述DTS设备树文件中保存有不同嵌入式单板上设备差异部分的配置参数。
再进一步地,所述步骤S2中基于DTB的驱动开发模型支持设备驱动使用由DTB文件传入的驱动配置与驱动参数,以及支持设备驱动根据DTB文件内容确定加载设备的驱动程序。
再进一步地,所述步骤S5具体为:在U-Boot编译完成后,打包各镜像文件时将DTB文件以及重构与开发的设备驱动添加至boot-res分区或uboot-dydrv分区中;或
将boot-res分区进行挂载mount,并将DTB文件和重构与开发的设备驱动添加至boot-res分区或uboot-dydrv分区中。
再进一步地,所述步骤S6包括以下步骤:
S601、根据步骤S5的添加结果,在boot0中参照加载U-Boot至内存的代码,将存储于EMMC中的DTB文件加载至内存中一个固定的地址;
S602、针对U-Boot启动时,在所述固定的地址中读取DTB文件,完成由boot0加载DTB的执行过程。
再进一步地,所述步骤S7包括以下步骤:
S701、开发动态驱动加载命令,将其命名为drv_mgr;
S702、使用动态驱动加载命令调用步骤S5中存储在boot-res分区或uboot-dydrv分区中的设备驱动程序对加载的DTB文件进行解析,完成U-Boot下驱动文件的动态加载。
再进一步地,所述步骤S702中包括以下步骤:
A1、执行动态驱动加载命令,展示boot-res分区或uboot-dydrv分区中的文件:利用mmc驱动,读取boot-res分区或uboot-dydrv分区中需要展示的文件目录,并打印至U-Boot命令行中;
A2、执行动态驱动加载命令,打印DTB文件中的设备树节点:利用mmc驱动,将boot-res分区或uboot-dydrv分区中的设备驱动读取至内存中,并使用设备驱动中调用的libfdt库解析DTB文件和对应节点,并打印;
A3、执行动态驱动加载命令,动态加载驱动:利用mmc驱动将boot-res分区或uboot-dydrv分区中的设备驱动和DTB文件读取至内存中,并在设备驱动中使用libfdt库解析DTB文件,以及通过安装命令install命令向设备驱动中传入加载指令,使设备驱动根据DTB文件进行加载;
A4、执行动态驱动加载命令,动态卸载驱动:利用mmc驱动将boot-res分区或uboot-dydrv分区中的驱动文件和DTB文件读取至内存中,并通过卸载命令uninstall向设备驱动中传入卸载指令,卸载设备驱动,完成U-Boot下驱动文件的动态卸载。
本发明提供了一种适用于U-Boot的驱动文件动态加载系统,包括:
差异提取模块,用于提取不同设备的差异部分,形成DTS设备树文件;
驱动开发算法模块,用于根据所述DTS设备树文件的参数类型以及libftd库提供的扁平设备树解析接口,构建基于DTB的驱动开发模型;
重构与开发模块,用于根据所述驱动开发模型,对嵌入式单板进行设备驱动重构与开发;
空间划分模块,用于在嵌入式单板原有的EMMC存储划分基础上,划分DTB文件与实现的设备驱动的存储空间,并将所述存储空间增加到boot-res分区中;或
单独划分一个用于存储DTB文件与可动态加载的设备驱动文件分区,并命名为uboot-dydrv分区;
驱动添加模块,用于在boot-res分区或uboot-dydrv分区中分别DTS设备树文件编译得到的DTB文件以及重构与开发的设备驱;
DTB加载模块,用于根据驱动添加模块的添加结果,执行由boot0加载DTB的指令;
解析模块,用于开发动态驱动加载命令,调用存储在boot-res分区或uboot-dydrv分区中的设备驱动对加载的DTB文件进行解析,完成U-Boot下驱动文件的动态加载。
本发明提供了一种计算机设备,包括存储器、处理器及存储在存储器上并在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现所述适用于U-Boot的驱动文件动态加载方法和/或适用于U-Boot的驱动文件动态加载系统的模块功能。
本发明提供了一种计算机可读存储介质,所述计算机可读存储介质存储有执行所述适用于U-Boot的驱动文件动态加载方法,和/或适用于U-Boot的驱动文件动态加载系统的计算机程序。
本发明的有益效果:
(1)本发明针对多种单板间存在的部分外设差异,设计一个抽象层,将单板之间的差异部分抽象出来,与U-Boot烧写镜像分开维护管理。使用时,所有同类型单板仍然使用同一个U-Boot烧写镜像,辅以差异内容的植入,单板运行时,自动根据抽象层的内容来决定如何初始化外设驱动,从而实现更简单的版本管理与后期维护。
(2)本发明支持对U-Boot使用DTB的方式来进行硬件抽象,提取出不同外设的差异部分,写入DTS文件中,在U-Boot加载设备驱动时,不再使用写死在代码里的配置参数,而使用写在DTS中的配置参数,根据配置参数来决定是否加载某个设备驱动、或者某个设备具体使用某个PIN脚或者LCD显示某个图片。
(3)本发明中驱动能够在U-Boot下动态配置、动态加载,同一个U-Boot烧写镜像,能够适用于大量的单板;同一个U-Boot烧写镜像,能够根据DTB文件,为不同的单板加载适用于该单板的设备驱动,无需管理很多个版本的U-Boot ,减轻了版本管理的压力。
附图说明
图1为本发明的方法流程图。
图2为在一个示例性实施例中以全志T3系统为例的加载流程图。
图3为本发明的系统结构示意图。
具体实施方式
下面对本发明的具体实施方式进行描述,以便于本技术领域的技术人员理解本发明,但应该清楚,本发明不限于具体实施方式的范围,对本技术领域的普通技术人员来讲,只要各种变化在所附的权利要求限定和确定的本发明的精神和范围内,这些变化是显而易见的,一切利用本发明构思的发明创造均在保护之列。
在对本发明作说明前,现对以下参数的含义进行说明,如表1所示:
表1
Figure 150261DEST_PATH_IMAGE001
现有的U-Boot加载驱动文件的方法是在U-Boot启动后按照代码写好的顺序加载编译U-Boot当中的设备驱动程序,每个驱动程序的配置、参数都是写死在代码里的,如全志T3原始U-Boot 静态加载驱动文件流程:(1)CPU上电后,执行CPU内置的BOOT ROM(也叫做BROM)中的代码;这部分代码作为一级bootloader,进行一些基本的SOC初始化,然后开始按照SD卡、NAND FLASH、EMMC、SPI NOR FLASH的顺序查找二级bootloader;(2)通常会在EMMC中找到可以执行的二级bootloader,对于全志来说,这个二级bootloader通常由全志自研的boot0来实现;boot0代码不超过32k,主要包含一些基本的驱动与基本功能,如读取mmc中的数据到内存中等;boot0主要用来从存储设备中加载三级bootloader,即U-Boot;(3)Boot0将U-Boot 从EMMC加载到内存中后,跳转到U-Boot 代码开始执行U-Boot;(4)U-Boot启动后按照代码写好的顺序加载编译到U-Boot 当中的设备驱动程序,每个驱动程序的配置、参数都是写死在代码里的;(5)初始化环境变量,根据bootcmd环境变量的值,执行对应的命令或者脚本;这些命令或脚本通常就是加载Linux内核与设备树到内存中,然后跳转到内核代码中进行启动;(6)启动linux内核,完成引导流程。然而,驱动的配置、参数以及是否加载均在U-boot中写死,不能动态配置。其存在以下技术问题:同一个U-Boot 烧写镜像只能适用于少量单板;不同单板使用同一个U-boot镜像时,可能会导致异常,有些单板的某些外设在U-Boot下无法使用甚至无法启动;
多个版本的U-Boot 对版本管理产生了巨大的压力,后期维护与技术支持都非常困难。
有鉴于此,本发明提供一种适用于U-Boot的驱动文件动态加载方法、系统、设备以及计算机介质,本发明针对多种单板间存在的部分外设差异,设计一个抽象层,将单板之间的差异部分抽象出来,与U-Boot烧写镜像分开维护管理。使用时,所有同类型单板仍然使用同一个U-Boot烧写镜像,辅以差异内容的植入,单板运行时,自动根据抽象层的内容来决定如何初始化外设驱动,从而实现更简单的版本管理与后期维护。
在一个示例性实施例中,如图1所示,本发明提供了一种适用于U-Boot的驱动文件动态加载方法,其实现方法如下:
S1、提取不同设备的差异部分,形成DTS设备树文件,其具体为:提取不同嵌入式单板之间设备的差异部分,并将差异部分以DTS设备树文件的形式描述并管理,其中,所述DTS设备树文件中保存有不同嵌入式单板上设备差异部分的配置参数数。
在一个示例性实施例中,提取不同单板之间设备的差异部分,将差异部分以DTS设备树文件的形式描述并管理。该DTS设备树文件中保存了不同单板上设备差异部分的配置参数,加载驱动时可以根据DTS设备树文件中的配置参数决定加载哪些设备,如何加载这些设备,以上对DTS设备树文件的实现,将嵌入式单板的公共部分与差异部分解耦,达到了烧写镜像与板级配置解耦的效果。
S2、根据所述DTS设备树文件的参数类型,构建基于DTB的驱动开发模型;
在一个示例性实施例中,基于DTB的驱动开发模型是指,根据提取的DTS文件的参数类型和具体内容,实现驱动开发方法,使得驱动能够调用DTB文件中传递的设备信息来动态加载设备驱动。该驱动开发方法,支持驱动使用由DTB文件传入的驱动配置与驱动参数,支持驱动根据DTB文件内容决定加载哪些设备的驱动程序。
S3、根据所述驱动开发模型,对嵌入式单板进行设备驱动的重构与开发;
在一个示例性实施例中,基于提出的驱动开发方法(驱动开发模型),对嵌入式单板进行驱动重构与驱动开发,使得重构与开发的驱动程序支持使用DTB文件动态加载,从而兼容多个单板。
在一个示例性实施例中,驱动的重构与开发是指,将部分已有的驱动程序移植到新开发的驱动框架下,从而使其可以兼容多个单板;根据步骤S2中设计的驱动开发方法(驱动开发模型),开发必要的新设备驱动,主要包括LCD、WATCHDOG等,使其能兼容多个单板。
S4、在嵌入式单板原有的EMMC存储划分基础上,划分DTB文件与设备驱动的存储空间,并将所述存储空间增加到boot-res分区中;或
单独划分一个用于存储DTB文件与可动态加载的设备驱动文件分区,并命名为uboot-dydrv分区;
在一个示例性实施例中,本发明设置有两种分区划分方式,一种是扩展uboot原有的boot-res分区,另一种是重新单独划分一个分区用于存储DTB文件与设备驱动文件。如果是单独划分了分区,那就是从“uboot-dydrv分区”中读取。
在一个示例性实施例中,在嵌入式单板的EMMC存储划分的基础上,划分一段大小为16M左右的EMMC空间(改分区被命名为boot-res分区),用来存储不同嵌入式单板的差异化DTB文件和动态设备驱动文件,该空间需要保证能被boot0读取到。
在一个示例性实施例中,划分DTB文件存储空间与动态设备驱动的,本发明以全志T3单板为例,划分了大小为16M左右的EMMC空间,该空间的大小可根据实际情况进行调整。需要注意的是,该区域的划分需要在单板原有EMMC存储划分的基础上进行。
S5、在boot-res分区或uboot-dydrv分区中分别添加步骤S1中DTS设备树文件编译得到的DTB文件以及步骤S3的重构与开发的设备驱动;
在一个示例性实施例中,添加DTB文件和设备驱动。在划分的boot-res分区中,添加提取形成的DTB文件和重构与开发的设备驱动。
在一个示例性实施例中,添加DTB文件和设备驱动到划分的存储空间的方法有如下两种:
方法一:在U-Boot编译完成后,打包各个镜像文件时,把DTB文件和设备驱动添加到boot-res分区或uboot-dydrv分区中;
方法二:在系统启动后,将boot-res分区挂载mount起来,把DTB文件和设备驱动添加到boot-res分区或uboot-dydrv分区中。
S6、根据步骤S5的添加结果,执行由boot0加载DTB的指令,其实现方法如下:
S601、根据步骤S5的添加结果,在boot0中参照加载U-Boot至内存的代码,将存储于EMMC中的DTB文件加载至内存中一个固定的地址;
S602、针对U-Boot启动时,在所述固定的地址中读取DTB文件,完成由boot0加载DTB的执行过程。
在一个示例性实施例中,由于U-Boot在初始化过程中需要用到DTB文件,因此DTB文件的加载需要由U-Boot之前的bootloader即boot0来加载。
在一个示例性实施例中,boot0为全志自研的二级启动引导程序,即为系统启动前引导程序的第二阶段,其主要包含一些基本的驱动与基本功能,如读取mmc中的数据到内存中等,boot0主要用于从存储设备中加载第三级启动引导程序,即uboot;本发明针对boot0做出了以下修改:增加了boot0加载DTB文件的功能,boot0承担了将DTB文件加载到内存中一个固定地址的功能;因此boot0不仅从存储设备中加载第三级启动引导程序,还在加载第三级启动引导程序之前,先加载DTB文件。
S7、开发动态驱动加载命令,调用步骤S5中存储在boot-res分区或uboot-dydrv分区中的设备驱动对加载的DTB文件进行解析,完成U-Boot下驱动文件的动态加载,其实现方法如下:
S701、开发动态驱动加载命令,将其命名为drv_mgr;
S702、使用动态驱动加载命令调用步骤S5中存储在boot-res分区或uboot-dydrv分区中的设备驱动程序对加载的DTB文件进行解析,完成U-Boot下驱动文件的动态加载。
在一个示例性实施例中,从libfdt库中移植DTB解析需要用到的API接口,供驱动开发和U-Boot解析DTB使用。将U-Boot下统一管理动态驱动加载的命令命名为drv_mgr,drv_mgr命令为用户提供了以下动态驱动加载管理的操作如下:(1)展示存入boot-res分区中的对应目录的文件;(2)打印出存储在分区中任意设备树的任意节点;(3)使用指定的设备树文件,调用驱动中的加载驱动功能;(4)调用驱动中的卸载驱动功能。其具体为:
A1、执行动态驱动加载命令,展示boot-res分区或uboot-dydrv分区中的文件:利用mmc驱动,读取boot-res分区或uboot-dydrv分区中需要展示的文件目录,并打印至U-Boot命令行中;
A2、执行动态驱动加载命令,打印DTB文件中的设备树节点:利用mmc驱动,将boot-res分区或uboot-dydrv分区中的设备驱动读取至内存中,并使用设备驱动中调用的libfdt库解析DTB文件和对应节点,并打印;
A3、执行动态驱动加载命令,动态加载驱动:利用mmc驱动将boot-res分区或uboot-dydrv分区中的设备驱动和DTB文件读取至内存中,并在设备驱动中使用libfdt库解析DTB文件,以及通过安装命令install命令向设备驱动中传入加载指令,使设备驱动根据DTB文件进行加载;
A4、执行动态驱动加载命令,动态卸载驱动:利用mmc驱动将boot-res分区或uboot-dydrv分区中的驱动文件和DTB文件读取至内存中,并通过卸载命令uninstall向设备驱动中传入卸载指令,卸载设备驱动,完成U-Boot下驱动文件的动态卸载。
在一个示例性实施例中,以全志T3的系统加载流程为例,以说明本发明提出的U-Boot下动态加载驱动文件的工作流程,如图2所示,与全志T3原始U-Boot 静态加载驱动流程对比,主要差异在boot0与U-Boot上。全志T3原始U-Boot静态加载驱动流程,boot0直接加载U-Boot,本发明实现的U-Boot下动态加载驱动的方法中,boot0首先需要加载DTB文件到内存中的一个固定地址,然后再加载U-Boot。原始U-Boot静态加载驱动流程,U-Boot加载写死在U-Boot中的驱动,本发明实现的U-Boot下动态加载驱动的方法中,U-Boot根据DTB文件中描述的驱动信息与设备信息,对设备进行初始化。全志T3原始U-Boot静态加载驱动流程与本发明提出的U-Boot下动态加载驱动流程,在系统启动流程上的主要差异描述如下:
(1)驱动加载差异:
T3原U-Boot静态加载驱动流程:所有驱动程序初始化时,所有参数均为写死到代码中,是否加载某个设备也写死在流程中;U-Boot的动态加载驱动流程:在U-Boot初始化驱动程序时,根据DTB文件中的配置参数来进行初始化,具体初始化哪些设备也由DTB文件决定,而不是写死在流程中,避免了强行初始化某些不存在的或者不想被使用的设备;
(2)logo显示差异:
T3原U-Boot静态加载驱动流程:只能显示写死路径的logo图片文件;U-Boot的动态加载驱动流程;要显示的logo图片的路径可由DTB文件进行配置。
如图3所示,在一个示例性实施例中,本发明提供了一种适用于U-Boot的驱动文件动态加载系统,包括:
差异提取模块,用于提取不同设备的差异部分,形成DTS设备树文件;
驱动开发算法模块,用于根据所述DTS设备树文件的参数类型以及libftd库提供的扁平设备树解析接口,构建基于DTB的驱动开发模型;
重构与开发模块,用于根据所述驱动开发模型,对嵌入式单板进行设备驱动重构与开发;
空间划分模块,用于在嵌入式单板原有的EMMC存储划分基础上,划分DTB文件与实现的设备驱动的存储空间,并将所述存储空间增加到boot-res分区中;或
单独划分一个用于存储DTB文件与可动态加载的设备驱动文件分区,并命名为uboot-dydrv分区;
驱动添加模块,用于在boot-res分区或uboot-dydrv分区中分别DTS设备树文件编译得到的DTB文件以及重构与开发的设备驱;
DTB加载模块,用于根据驱动添加模块的添加结果,执行由boot0加载DTB的指令;
解析模块,用于开发动态驱动加载命令,调用存储在boot-res分区或uboot-dydrv分区中的设备驱动对加载的DTB文件进行解析,完成U-Boot下驱动文件的动态加载。
在一个示例性实施例中,上述系统可执行本发明任意实施例所提供的适用于U-Boot的驱动文件动态加载方法,具备执行所述方法相应的功能模块和有益效果,此处不在赘述。
在一个示例性实施例中,本发明提供了一种计算机设备,包括存储器、处理器及存储在存储器上并在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现所述适用于U-Boot的驱动文件动态加载方法和/或所述的适用于U-Boot的驱动文件动态加载系统的模块功能。
在一个示例性实施例中,本发明提供了一种计算机可读存储介质,所述计算机可读存储介质存储有执行所述适用于U-Boot的驱动文件动态加载方法,和/或适用于U-Boot的驱动文件动态加载系统的计算机程序。
上述计算机可读存储介质可以中由任何类型的易失性或非易失性存储设备和/或他们的组合实现,如静态随机存取存储器(SRAM),可擦除可维和只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘,可读存储介质可以是通用或专用计算机能够存取的任何可用介质。
在一个示例性实施例中,可读存储介质耦合至处理器,从而使处理器能够从该可读存储介质读取信息,且可向该可读存储介质写入信息,可读存储介质也可以是处理器组成部分,处理器和可读存储介质可以位于专用集成电路(ASIC)中,处理器和可读存储介质也可以作为分立组件存在于适用于U-Boot的驱动文件动态加载系统中。
在一个示例性实施例中,本申请的实施例可提供为方法、系统、和/或计算机程序产品,因此,本发明可采用完全硬件实施例、完全软件实施例、和/或结合软件和硬件方面的实施例的形式。而且本发明可采用一个或多个其中包括有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程和/或方框图来描述的,应理解可由计算机程序指令实现流程图和/或方框图中每一流程和/或方框图、以及流程图和/或方框图的结合,可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图中一个流程或多个流程和/或方框图的一个方框或多个方框中指定的功能的步骤。

Claims (10)

1.一种适用于U-Boot的驱动文件动态加载方法,其特征在于,包括以下步骤:
S1、提取不同设备的差异部分,形成DTS设备树文件;
S2、根据所述DTS设备树文件的参数类型以及libftd库提供的扁平设备树解析接口,构建基于DTB的驱动开发模型;
S3、根据所述驱动开发模型,对嵌入式单板进行设备驱动的重构与开发;
S4、在嵌入式单板原有的EMMC存储划分基础上,划分DTB文件与设备驱动的存储空间,并将所述存储空间增加到boot-res分区中;或
单独划分一个用于存储DTB文件与可动态加载的设备驱动文件分区,并命名为uboot-dydrv分区;
S5、在boot-res分区或uboot-dydrv分区中分别添加步骤S1中DTS设备树文件编译得到的DTB文件以及步骤S3的重构与开发的设备驱动;
S6、根据步骤S5的添加结果,执行由boot0加载DTB的指令;
S7、开发动态驱动加载命令,调用步骤S5中存储在boot-res分区或uboot-dydrv分区中的设备驱动对加载的DTB文件进行解析,完成U-Boot下驱动文件的动态加载。
2.根据权利要求1所述的适用于U-Boot的驱动文件动态加载方法,其特征在于,所述步骤S1中提取不同设备的差异部分,其具体为:
提取不同嵌入式单板之间设备的差异部分,并将差异部分以DTS设备树文件的形式描述并管理,其中,所述DTS设备树文件中保存有不同嵌入式单板上设备差异部分的配置参数。
3.根据权利要求1所述的适用于U-Boot的驱动文件动态加载方法,其特征在于,所述步骤S2中基于DTB的驱动开发模型支持设备驱动使用由DTB文件传入的驱动配置与驱动参数,以及支持设备驱动根据DTB文件内容确定加载设备的驱动程序。
4.根据权利要求1所述的适用于U-Boot的驱动文件动态加载方法,其特征在于,所述步骤S5具体为:在U-Boot编译完成后,打包各镜像文件时将DTB文件以及重构与开发的设备驱动添加至boot-res分区或uboot-dydrv分区中;或
将boot-res分区进行挂载mount,并将DTB文件和重构与开发的设备驱动添加至boot-res分区或uboot-dydrv分区中。
5.根据权利要求1所述的适用于U-Boot的驱动文件动态加载方法,其特征在于,所述步骤S6包括以下步骤:
S601、根据步骤S5的添加结果,在boot0中参照加载U-Boot至内存的代码,将存储于EMMC中的DTB文件加载至内存中一个固定的地址;
S602、针对U-Boot启动时,在所述固定的地址中读取DTB文件,完成由boot0加载DTB的执行过程。
6.根据权利要求1所述的适用于U-Boot的驱动文件动态加载方法,其特征在于,所述步骤S7包括以下步骤:
S701、开发动态驱动加载命令,将其命名为drv_mgr;
S702、使用动态驱动加载命令调用步骤S5中存储在boot-res分区或uboot-dydrv分区中的设备驱动程序对加载的DTB文件进行解析,完成U-Boot下驱动文件的动态加载。
7.根据权利要求6所述的适用于U-Boot的驱动文件动态加载方法,其特征在于,所述步骤S702中包括以下步骤:
A1、执行动态驱动加载命令,展示boot-res分区或uboot-dydrv分区中的文件:利用mmc驱动,读取boot-res分区或uboot-dydrv分区中需要展示的文件目录,并打印至U-Boot命令行中;
A2、执行动态驱动加载命令,打印DTB文件中的设备树节点:利用mmc驱动,将boot-res分区或uboot-dydrv分区中的设备驱动读取至内存中,并使用设备驱动中调用的libfdt库解析DTB文件和对应节点,并打印;
A3、执行动态驱动加载命令,动态加载驱动:利用mmc驱动将boot-res分区或uboot-dydrv分区中的设备驱动和DTB文件读取至内存中,并在设备驱动中使用libfdt库解析DTB文件,以及通过安装命令install命令向设备驱动中传入加载指令,使设备驱动根据DTB文件进行加载;
A4、执行动态驱动加载命令,动态卸载驱动:利用mmc驱动将boot-res分区或uboot-dydrv分区中的驱动文件和DTB文件读取至内存中,并通过卸载命令uninstall向设备驱动中传入卸载指令,卸载设备驱动,完成U-Boot下驱动文件的动态卸载。
8.一种适用于U-Boot的驱动文件动态加载系统,其特征在于,包括:
差异提取模块,用于提取不同设备的差异部分,形成DTS设备树文件;
驱动开发算法模块,用于根据所述DTS设备树文件的参数类型以及libftd库提供的扁平设备树解析接口,构建基于DTB的驱动开发模型;
重构与开发模块,用于根据所述驱动开发模型,对嵌入式单板进行设备驱动重构与开发;
空间划分模块,用于在嵌入式单板原有的EMMC存储划分基础上,划分DTB文件与实现的设备驱动的存储空间,并将所述存储空间增加到boot-res分区中;或
单独划分一个用于存储DTB文件与可动态加载的设备驱动文件分区,并命名为uboot-dydrv分区;
驱动添加模块,用于在boot-res分区或uboot-dydrv分区中分别DTS设备树文件编译得到的DTB文件以及重构与开发的设备驱;
DTB加载模块,用于根据驱动添加模块的添加结果,执行由boot0加载DTB的指令;
解析模块,用于开发动态驱动加载命令,调用存储在boot-res分区或uboot-dydrv分区中的设备驱动对加载的DTB文件进行解析,完成U-Boot下驱动文件的动态加载。
9.一种计算机设备,包括存储器、处理器及存储在存储器上并在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1-7中任一所述适用于U-Boot的驱动文件动态加载方法和/或权利要求8所述的适用于U-Boot的驱动文件动态加载系统的模块功能。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有执行权利要求1-7任一所述适用于U-Boot的驱动文件动态加载方法,和/或权利要求8所述的适用于U-Boot的驱动文件动态加载系统的计算机程序。
CN202110775471.XA 2021-07-09 2021-07-09 一种适用于U-Boot的驱动文件动态加载方法及系统 Active CN113238819B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110775471.XA CN113238819B (zh) 2021-07-09 2021-07-09 一种适用于U-Boot的驱动文件动态加载方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110775471.XA CN113238819B (zh) 2021-07-09 2021-07-09 一种适用于U-Boot的驱动文件动态加载方法及系统

Publications (2)

Publication Number Publication Date
CN113238819A true CN113238819A (zh) 2021-08-10
CN113238819B CN113238819B (zh) 2021-09-21

Family

ID=77141316

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110775471.XA Active CN113238819B (zh) 2021-07-09 2021-07-09 一种适用于U-Boot的驱动文件动态加载方法及系统

Country Status (1)

Country Link
CN (1) CN113238819B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114489821A (zh) * 2022-01-25 2022-05-13 中电科申泰信息科技有限公司 一种基于U-Boot的多核处理器一级启动程序架构
CN114691240A (zh) * 2022-04-01 2022-07-01 武汉深之度科技有限公司 驱动硬件配置信息加载方法、装置和系统,以及计算设备
CN115202763A (zh) * 2022-09-19 2022-10-18 大方智造(天津)科技有限公司 一种基于驱动的采集动态加载与调用方法

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101520735A (zh) * 2008-12-18 2009-09-02 康佳集团股份有限公司 一种启动闪存内引导程序的方法及其网络电视和机顶盒
US20140156898A1 (en) * 2012-11-30 2014-06-05 Gang Luo Pci and pci express virtual hot plug systems and methods
US20150178094A1 (en) * 2013-12-20 2015-06-25 Samsung Techwin Co., Ltd. Multisystem and method of booting the same
CN104794393A (zh) * 2015-04-24 2015-07-22 杭州字节信息技术有限公司 一种嵌入式分区映像安全认证及内核可信引导方法及其设备
CN105407140A (zh) * 2015-10-23 2016-03-16 上海比林电子科技有限公司 一种网络化测试系统的计算资源虚拟化系统及方法
CN108076457A (zh) * 2017-12-15 2018-05-25 北京国电通网络技术有限公司 一种基于Linux系统的智慧安全型电网专用无线通信模块
CN110377345A (zh) * 2019-06-27 2019-10-25 苏州浪潮智能科技有限公司 系统启动文件的处理方法及装置
CN110673815A (zh) * 2019-10-15 2020-01-10 重庆远视科技有限公司 一种位图显示方法、装置、设备及计算机可读存储介质
CN112148649A (zh) * 2020-09-03 2020-12-29 深圳市宏旺微电子有限公司 一种u-boot系统下的eMMC HS400传输模式实现方法及装置

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101520735A (zh) * 2008-12-18 2009-09-02 康佳集团股份有限公司 一种启动闪存内引导程序的方法及其网络电视和机顶盒
US20140156898A1 (en) * 2012-11-30 2014-06-05 Gang Luo Pci and pci express virtual hot plug systems and methods
US20150178094A1 (en) * 2013-12-20 2015-06-25 Samsung Techwin Co., Ltd. Multisystem and method of booting the same
CN104794393A (zh) * 2015-04-24 2015-07-22 杭州字节信息技术有限公司 一种嵌入式分区映像安全认证及内核可信引导方法及其设备
CN105407140A (zh) * 2015-10-23 2016-03-16 上海比林电子科技有限公司 一种网络化测试系统的计算资源虚拟化系统及方法
CN108076457A (zh) * 2017-12-15 2018-05-25 北京国电通网络技术有限公司 一种基于Linux系统的智慧安全型电网专用无线通信模块
CN110377345A (zh) * 2019-06-27 2019-10-25 苏州浪潮智能科技有限公司 系统启动文件的处理方法及装置
CN110673815A (zh) * 2019-10-15 2020-01-10 重庆远视科技有限公司 一种位图显示方法、装置、设备及计算机可读存储介质
CN112148649A (zh) * 2020-09-03 2020-12-29 深圳市宏旺微电子有限公司 一种u-boot系统下的eMMC HS400传输模式实现方法及装置

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
JIANXIN GUO.ETC: ""BOOTLOADER Analysis Construction and U-BOOT Porting Based on S3C2440"", 《2018 2ND IEEE ADVANCED INFORMATION MANAGEMENT,COMMUNICATES,ELECTRONIC AND AUTOMATION CONTROL CONFERENCE (IMCEC)》 *
杨宗明: ""基于Zynq的嵌入式图像特征提取系统设计与实现"", 《中国优秀硕士学位论文全文数据库 (信息科技辑)》 *
郑国玲: ""基于嵌入式Linux和MiniGUI的手持终端的设计与实现"", 《中国优秀硕士学位论文全文数据库》 *
郑国玲等: ""基于S3C2410的U-Boot的移植方法研究"", 《计算机工程与设计》 *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114489821A (zh) * 2022-01-25 2022-05-13 中电科申泰信息科技有限公司 一种基于U-Boot的多核处理器一级启动程序架构
CN114691240A (zh) * 2022-04-01 2022-07-01 武汉深之度科技有限公司 驱动硬件配置信息加载方法、装置和系统,以及计算设备
CN115202763A (zh) * 2022-09-19 2022-10-18 大方智造(天津)科技有限公司 一种基于驱动的采集动态加载与调用方法
CN115202763B (zh) * 2022-09-19 2022-12-09 大方智造(天津)科技有限公司 一种基于驱动的采集动态加载与调用方法

Also Published As

Publication number Publication date
CN113238819B (zh) 2021-09-21

Similar Documents

Publication Publication Date Title
CN113238819B (zh) 一种适用于U-Boot的驱动文件动态加载方法及系统
CN106227579B (zh) 一种Docker容器构建方法及Docker管理控制台
US9971618B2 (en) System and method to reconfigure a virtual machine image suitable for cloud deployment
JP4878715B2 (ja) オペレーティングシステムに適合しないアプリケーションにパッチを当てる方法、コンピュータシステム及びコンピュータ可読記録媒体
US8607208B1 (en) System and methods for object code hot updates
TWI521428B (zh) 用於可延伸韌體抽取之方法及相關計算平台
CN111492347A (zh) 用于更新容器的系统和方法
US20170329593A1 (en) INPLACE RETURN TO FACTORY INSTALL (iRTFI)
US9766958B2 (en) Runtime emulating static thread local storage of portable executable software code
US20090094447A1 (en) Universal serial bus flash drive for booting computer and method for loading programs to the flash drive
JPH0836488A (ja) ダイナミック・パッチングを使用するランタイム・エラー・チェック方法と装置
KR20050061378A (ko) 페일세이프 방식으로 맞춤 소프트웨어 영상 갱신을불휘발성 저장 장치에 적용하는 시스템 및 방법
US20200272445A1 (en) Installation of operating system
US20230125342A1 (en) Cross-platform application containerized execution
CN114398145A (zh) 基于X86平台的Jailhouse运行non-root Linux的方法
CN116049207A (zh) 应用程序sql脚本处理方法、装置、处理器及电子设备
CN115291946A (zh) 鸿蒙系统移植方法、装置、电子设备及可读介质
US8788800B2 (en) OS processing method, system and non-transitory computer readable storage medium thereof
CN111782335A (zh) 通过进程内操作系统的扩展应用机制
CN114756296A (zh) 可读写挂载启动方法、装置、存储介质及电子设备
CN114489927A (zh) 一种解耦依赖文件的容器部署方法及系统
US9841982B2 (en) Locating import class files at alternate locations than specified in classpath information
US9448782B1 (en) Reducing a size of an application package
KR20070060448A (ko) 2단계 부트로더를 이용한 시스템 업그레이드 장치 및 방법
US8281294B1 (en) System and method for representing and managing a multi-architecture co-processor application program

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