一种硬件板卡的自动匹配方法

文档序号:6622214阅读:268来源:国知局
一种硬件板卡的自动匹配方法
【专利摘要】一种硬件板卡的自动匹配方法,在uboot启动阶段,获取当前硬件的板卡信息,以字符串的形式保存在linuxuboot环境变量bootargs中;内核将环境变量bootargs中保存的字符串拷贝到内核指针saved_command_line所指向的堆地址空间,再将拷贝保存的字符串通过创建proc文件夹保存在cmdline文件中;启动文件系统,解析proc文件夹下的cmdline文件获取当前硬件的版本类型boardtype和槽位标识slotid,根据解析结果加载相应软件,完成不同板卡所需的配置。本发明可实现软件的共平台,不同的硬件板卡均可自动匹配,减少对硬件的要求,避免人力和资源的浪费。
【专利说明】一种硬件板卡的自动匹配方法

【技术领域】
[0001] 本发明涉及一种硬件板卡的自动匹配方法,特别是指一种利用linux uboot(通用 的引导程序)环境变量向内核传递板卡硬件信息用于软件自动匹配硬件板卡的方法,可应 用于多种硬件板卡共软件平台的系统设计中。

【背景技术】
[0002] 在嵌入式领域,各种功能的硬件板卡层出不穷。同一家公司,随着公司的不断发展 壮大,各种硬件相近,软件差异小的衍生或更新换代产品越来越多,如何让不同硬件板卡实 现共软件平台开发,避免繁杂的多平台软件管理工作,和软件版本发布混乱等问题,是很多 公司都需要面对的问题。多硬件共软件平台就是在这种需要下逐渐发展起来。目前主要有 两种共平台方案。
[0003] 1.采用宏定义区分不同的硬件板卡 软件共平台通过宏定义来区别不同的板卡,这种方法虽然可以实现硬件板卡区分,但 是对不同的硬件板卡编译软件版本时需要先切换板卡宏定义,然后再编译出软件版本。每 块板卡都分别对应一个软件版本,时间长产品多就会造成版本管理复杂紊乱,产品软件开 发维护的时间和人力成本也会越来越大。
[0004] 2.采用硬件寄存器区分不同板卡 软件共平台板卡区分是在内核和文件系统启动后,通过读取硬件器件上标识板卡信息 的寄存器来区别板卡,这种方法基本上能满足一般的需要,对不同板卡编译软件版本无需 切换宏定义,只需要编译一个软件版本即可兼容所有的板卡,可以算是真正意义上的软件 共平台。但是这种情况下,对有些板卡uboot或内核需要定制化的时候就会比较困难。


【发明内容】

[0005] 针对现有技术缺陷,本发明提供了一种硬件板卡的自动匹配方法。
[0006] 本发明的技术方案提供一种硬件板卡的自动匹配方法,基于linux系统执行以下 步骤, 步骤1,在uboot启动阶段,获取当前硬件的板卡信息,将对应的版本类型boardtype 和槽位标识slotid信息以字符串的形式保存在linux uboot环境变量bootargs中;所述 uboot为linux系统通用的引导程序; 步骤2, uboot启动完成后,进入内核启动,内核将环境变量bootargs中保存的字符串 拷贝到内核指针saved_command_line所指向的堆地址空间,再将拷贝保存的字符串通过 创建proc文件夹保存在cmdline文件中; 步骤3,内核启动完成后,开始启动文件系统,解析proc文件夹下的cmdline文件获取 当前硬件的版本类型boardtype和槽位标识slotid,根据解析结果加载相应软件,完成不 同板卡所需的配置。
[0007] 而且,所述当前硬件的板卡包含cpld器件,cpld器件中boardtype寄存器、 pcbversion寄存器、slotid寄存器的地址偏移是固定保留的。
[0008] 而且,步骤1中,获取当前硬件的板卡信息,包括读取cpld的boardtype寄 存器、pcbversion寄存器、slotid寄存器的值,得到的寄存器值包括对应的版本类型 boardtypep、硬件版本pcbversion、和槽位标识slotid,当获取到的寄存器值能匹配到已 知板卡类型时,则进入步骤2,否则进入默认板卡配置模式进行启动。
[0009] 本发明所提供的技术中,硬件板卡信息贯穿linux板卡启动的三个必须过程,可 完成三个过程中的自动匹配硬件板卡操作,可最多程度实现软件的共平台开发,降低开发 维护成本,同时也减少对硬件的要求,避免人力和资源的浪费。本发明采用硬件寄存器区分 不同硬件,除了能实现配置业务软件上的共平台,也可对uboot和内核实现定制化。

【专利附图】

【附图说明】
[0010] 图1是本发明实施例的流程图。
[0011] 图2是本发明实施例的uboot获取板卡信息保存及传递流程图。
[0012] 图3是本发明实施例的kernel获取板卡信息保存及传递流程图。
[0013] 图4是本发明实施例的rootfs获取板卡信息使用流程图。
[0014]

【具体实施方式】 以下结合附图和实施例详细说明本发明技术方案。
[0015] 对于这种软件自动匹配硬件板卡方法,其目的是为了实现软件共平台,而软件共 平台的关键在于如何在一套源代码中兼容多板卡。为了达到兼容目的,可以使用宏定义来 区分硬件板卡,但是如果导致产品软件版本冗杂,就得不偿失了。在linux领域,uboot启 动、内核加载以及文件系统启动是linux板卡启动的三个必须过程,本发明在uboot中直接 获取硬件板卡信息,并将板卡信息贯穿整个设备启动运行流程,这样设备不管在那个流程 都能实现硬件板卡区分。
[0016] 如附图1所示,实施例采用linux uboot环境变量向内核传递板卡信息,再提供给 系统软件自行读取解析匹配硬件板卡对应的软件完成相关配置。具体所述硬件板卡自动匹 配实现包括以下步骤, 步骤 1,在 uboot 启动阶段,读取 CPLD(Complex Programmable Logic Device,复杂可 编程逻辑器件)的boardtype register (版本类型寄存器)、pcbversion register (硬件 版本寄存器)、slotid register (槽位标识寄存器)获取当前硬件的板卡信息,将对应的版 本类型boardtype和槽位标识slotid信息以字符串的形式保持在bootargs (引导程序参 数)环境变量中; uboot下能读取cpld的boardtype寄存器、pcbversion寄存器、slotid寄存器的值, 得到硬件板卡的信息,当获取到的寄存器值能匹配到已知板卡类型时,则在uboot定制化 配置后继续进行kernel (内核)和rootfs (文件系统)加载,否则会进入默认板卡配置模式 进行启动。
[0017] 附图2给出了 uboot获取板卡信息保存及传递流程图,板卡在uboot启动到 ram(随机存取存储器)初始化的过程中,读取三个cpld寄存器获取boardtype, pcbversion 和slotid的值,再根据3个寄存器的值在已知的板卡类型中一一匹配,找到对应的板卡 类型,如果匹配到正确的板卡,就可根据板卡类型进行相应uboot配置,配置完成后,将 boardtype和slotid转换成字符信息保存在bootargs环境变量中,然后进行后续步骤2、 3,可按环境变量bootcmd配置依次启动内核和文件系统;如果没有匹配到已知的板卡,则 会有串口打印输出匹配板卡不成功报错,然后直接进行默认板卡配置模式,即按默认的方 式依次启动内核和文件系统,而不是执行步骤2、3。
[0018] 步骤2,uboot启动完成后,进入kernel (内核)启动,内核会将bootargs中保存的 字符串拷贝到内核指针saved_command_line (linux系统的内核中的一个全局指针变量, 指向一个动态申请的缓存区地址)所指向的堆地址空间,内核再将saved_command_line地 址所保存的字符串信息通过创建proc (-种伪文件系统)文件夹保存在cmdline (命令行 参数)文件中,该文件会在文件系统根目录proc文件夹中保存,通常记为/proc/cmdline文 件; 本发明读取cpld获取得到的板卡信息,在步骤1以字符串的形式保持在bootargs环 境变量中,而bootargs能通过内核创建并保存在/proc/cmdline文件中供软件解析调用。
[0019] 附图3给出了 kernel获取板卡信息保存及传递流程图,在kernel的启动函数 (start_kernel)中,内核将bootargs拷贝到saved_command_line指针指向的地址空间。拷 贝完成后,在内核代码中,就可以通过解析saved_command_line地址所保存的字符串(字 符串形式的板卡类型标识)得到板卡类型,再根据板卡类型就可进行板卡的内核定制化配 置,内核还会加载创建/proc/cmdline文件保存saved_command_line指针保存的信息。
[0020] 步骤3, kernel启动完成后,开始启动rootfs (文件系统),此时可以解析proc文 件夹下的cmdline文件获取当前硬件的boardtype和slotid,根据解析结果来加载不同的 软件完成不同板卡所需的配置。
[0021] 附图4给出了 rootfs获取板卡信息使用流程图,在rootfs文件系统启动完成后, 可解析cmdline文件获取boardtype和slotid,可根据boardtype加载不同板卡所需要的 外设驱动程序文件,还可根据slotid配置完成相同硬件不同槽位的配置。在用户空间,也 可根据boardtype运行不同板卡所需的上层应用程序。
[0022] 具体实施时,基于linux系统,所有硬件板卡必须包含cpld器件,cpld器件通 常根据板卡差异需要烧写不同的cpld文件,其boardtype寄存器、pcbversion寄存器、 slotid寄存器的地址偏移是固定保留的,不可用做其他。板卡信息在uboot、kernel内核 和rootfs文件系统如何传递至关重要,本发明充分利用了 /proc/cmdline文件信息形成特 点:cmdline信息来源于uboot,保存在uboot bootargs环境变量中,再在内核中被继承,并 保存在cmdline文件中,系统启动完成后,直接可在文件系统的cmdline文件中读取得到。
[0023] 本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领 域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替 代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。
【权利要求】
1. 一种硬件板卡的自动匹配方法,其特征在于:基于linux系统执行以下步骤, 步骤1,在uboot启动阶段,获取当前硬件的板卡信息,将对应的版本类型boardtype 和槽位标识slotid信息以字符串的形式保存在linux uboot环境变量bootargs中;所述 uboot为linux系统通用的引导程序; 步骤2, uboot启动完成后,进入内核启动,内核将环境变量bootargs中保存的字符串 拷贝到内核指针saved_command_line所指向的堆地址空间,再将拷贝保存的字符串通过 创建proc文件夹保存在cmdline文件中; 步骤3,内核启动完成后,开始启动文件系统,解析proc文件夹下的cmdline文件获取 当前硬件的版本类型boardtype和槽位标识slotid,根据解析结果加载相应软件,完成不 同板卡所需的配置。
2. 根据权利要求1所述硬件板卡的自动匹配方法,其特征在于:所述当前硬件的板卡 包含cpld器件,cpld器件中boardtype寄存器、pcbversion寄存器、slotid寄存器的地址 偏移是固定保留的。
3. 根据权利要求2所述硬件板卡的自动匹配方法,其特征在于:步骤1中,获取当前硬 件的板卡信息,包括读取cpld的boardtype寄存器、pcbversion寄存器、slotid寄存器的 值,得到的寄存器值包括对应的版本类型boardtypep、硬件版本pcbversion、和槽位标识 slotid,当获取到的寄存器值能匹配到已知板卡类型时,则进入步骤2,否则进入默认板卡 配置模式进行启动。
【文档编号】G06F17/30GK104123381SQ201410375928
【公开日】2014年10月29日 申请日期:2014年8月1日 优先权日:2014年8月1日
【发明者】肖飞, 杨小帅, 张汇 申请人:武汉邮电科学研究院
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1