CN116301908B - 基于申威架构的Buildroot本地编译方法及系统 - Google Patents

基于申威架构的Buildroot本地编译方法及系统 Download PDF

Info

Publication number
CN116301908B
CN116301908B CN202310589455.0A CN202310589455A CN116301908B CN 116301908 B CN116301908 B CN 116301908B CN 202310589455 A CN202310589455 A CN 202310589455A CN 116301908 B CN116301908 B CN 116301908B
Authority
CN
China
Prior art keywords
shenwei
local
file
buildroot
compiling
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
CN202310589455.0A
Other languages
English (en)
Other versions
CN116301908A (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.)
BEIJING ZHONGKE WANGWEI INFORMATION TECHNOLOGY CO LTD
Original Assignee
BEIJING ZHONGKE WANGWEI INFORMATION 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 BEIJING ZHONGKE WANGWEI INFORMATION TECHNOLOGY CO LTD filed Critical BEIJING ZHONGKE WANGWEI INFORMATION TECHNOLOGY CO LTD
Priority to CN202310589455.0A priority Critical patent/CN116301908B/zh
Publication of CN116301908A publication Critical patent/CN116301908A/zh
Application granted granted Critical
Publication of CN116301908B publication Critical patent/CN116301908B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/37Compiler construction; Parser generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • 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)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Stored Programmes (AREA)

Abstract

本发明提供一种基于申威架构的Buildroot本地编译方法及系统,属于计算机技术领域。该方法包括:在确定申威架构所支持的发行版操作系统完成安装后,将工具链类型设置为外部工具链;将外部工具链的GCC编译器配置信息,以及外部工具链编译引用的mk文件分别与申威架构所支持的发行版操作系统进行匹配设置;通过自定义脚本将申威架构所支持的发行版操作系统的基础库文件拷贝到Buildroot本地编译文件系统目录下,以完成Buildroot的本地编译。本发明提供的基于申威架构的Buildroot本地编译方法及系统,解决申威架构无法使用Buildroot构建文件系统及编译开源程序的问题。

Description

基于申威架构的Buildroot本地编译方法及系统
技术领域
本发明涉及计算机技术领域,尤其涉及一种基于申威架构的Buildroot本地编译方法及系统。
背景技术
Buildroot是Linux平台上一个构建嵌入式Linux系统的框架。整个Buildroot是由Makefile脚本和Kconfig配置文件构成的。可以和编译Linux内核一样,通过Buildroot配置,make menuconfig修改,编译出一个完整的可以直接烧写到机器上运行的Linux系统软件(包含boot、kernel、rootfs以及rootfs中的各种库和应用程序)。buildboot也可以单独通过配置和使用交叉编译链工具来实现制作一个Linux文件系统。
目前发行版Buildroot源码不支持申威架构(sw_64\alphaev6)的编译,无论是本地工具链(Buildroot toolchain)还是外部工具链(External toolchain),都没有对申威架构的适配。另外,申威平台CPU如831、3231等对应的发行版系统安装启动后自带支持本地编译的GCC编译工具,也带有内核启动所必须的基础Lib库文件,但在对应发行版系统安装启动后没有对应的交叉工具链或外部工具链供Buildroot直接编译使用,无法直接编译Buildroot完成申威架构内核文件系统的构建和新增开源库的编译工作。
发明内容
本发明提供一种基于申威架构的Buildroot本地编译方法及系统,用以解决现有技术中发行版Buildroot源码不支持申威架构的编译,无论是本地工具链还是外部工具链,都没有对申威架构的适配的缺陷。
本发明提供一种基于申威架构的Buildroot本地编译方法,包括:
在确定申威架构所支持的发行版操作系统完成安装后,将工具链类型设置为外部工具链;
将所述外部工具链的GCC编译器配置信息,以及所述外部工具链编译引用的mk文件分别与所述申威架构所支持的发行版操作系统进行匹配设置;
通过自定义脚本将所述申威架构所支持的发行版操作系统的基础库文件拷贝到Buildroot本地编译文件系统目录下,以完成Buildroot的本地编译;
其中,所述Buildroot本地编译文件系统目录是在完成所述外部工具链的相关配置与申威架构本地编译环境匹配设置完成后编译时所创建的文件系统目录。
根据本发明提供的一种基于申威架构的Buildroot本地编译方法,所述GCC编译器配置信息包括GCC编译器版本号信息、内核头文件版本号信息和GCC编译器路径信息;
所述将所述外部工具链的GCC编译器配置信息,以及所述外部工具链编译引用的mk文件分别与所述申威架构所支持的发行版操作系统进行匹配设置,包括:
将所述外部工具链的GCC编译器版本号信息和内核头文件版本号信息分别与所述申威架构所支持的发行版操作系统所记录的版本号进行匹配设置;
去掉引用所述外部工具链的默认工具链目录下的mk文件,引用toolchain最外层的mk文件;
将packet开源库编译配置文件中的GCC编译器路径信息修改为所述申威架构所支持的发行版操作系统的本地GCC编译器路径。
根据本发明提供的一种基于申威架构的Buildroot本地编译方法,所述将packet开源库编译配置文件中的GCC编译器路径信息修改为所述申威架构所支持的发行版操作系统的本地GCC编译器路径,包括:
通过which gcc指令查看所述申威架构所支持的发行版操作系统的本地GCC编译器路径;
将所述packet开源库编译配置文件中的TARGET_CROSS变量的赋值替换为所述本地GCC编译器路径。
根据本发明提供的一种基于申威架构的Buildroot本地编译方法,在所述将工具链类型设置为外部工具链之前,还包括:
根据所述申威架构的CPU类型,将所述申威架构所支持的发行版操作系统作为本地编译的基础系统;
通过gcc-v指令获取所述申威架构所支持的发行版操作系统在本地所记录的GCC编译器版本号,以及通过uname-a指令获取所述申威架构所支持的发行版操作系统在本地所记录的内核头文件版本号。
根据本发明提供的一种基于申威架构的Buildroot本地编译方法,所述将所述外部工具链的GCC编译器版本号信息和内核头文件版本号信息分别与所述申威架构所支持的发行版操作系统所记录的版本号进行匹配设置,包括:
将所述GCC编译器版本号信息设置为所述申威架构所支持的发行版操作系统在本地所记录的GCC编译器版本号中的主版本号;
将所述内核头文件版本号信息设置为所述申威架构所支持的发行版操作系统在本地所记录的内核头文件版本号中的主版本号。
根据本发明提供的一种基于申威架构的Buildroot本地编译方法,所述通过自定义脚本将所述申威架构所支持的发行版操作系统的基础库文件拷贝到Buildroot本地编译文件系统目录下,以完成Buildroot的本地编译,包括:
通过所述自定义脚本抓取所述申威架构所支持的发行版操作系统在本地的基础库文件;
将每一基础库文件拷贝到Buildroot本地编译文件系统目录中与所述基础库文件的文件类型匹配的子目录下,最终生成sysroot文件系统;
其中,所述基础库文件的文件类型为lib库文件、;所述本地编译文件系统目录为output/target/lib目录。
根据本发明提供的一种基于申威架构的Buildroot本地编译方法,所述自定义脚本在Buildroot的系统配置中被设置为在创建文件系统镜像文件之前执行。
本发明还提供一种基于申威架构的Buildroot本地编译系统,包括:
编译工具链设置模块,用于在确定申威架构所支持的发行版操作系统完成安装后,将工具链类型设置为外部工具链;
外部工具链配置模块,用于将所述外部工具链的GCC编译器配置信息,以及所述外部工具链编译引用的mk文件分别与所述申威架构所支持的发行版操作系统进行匹配设置;
文件系统配置模块,用于通过自定义脚本将所述申威架构所支持的发行版操作系统的基础库文件拷贝到Buildroot本地编译文件系统目录下,以完成Buildroot的本地编译;
其中,所述Buildroot本地编译文件系统目录是在完成所述外部工具链的相关配置与申威架构本地编译环境匹配设置完成后编译时所创建的文件系统目录。
本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述基于申威架构的Buildroot本地编译方法。
本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述基于申威架构的Buildroot本地编译方法。
本发明提供的基于申威架构的Buildroot本地编译方法及系统,在申威本地编译环境内将Buildroot的编译工具链设置为外部工具链后,通过将外部工具链的GCC编译器配置信息及其所引用的mk文件手动关联至申威本地的GCC编译资源,随即运行自定义脚本申威系统将本地基础库文件拷贝到Buildroot本地编译文件系统目录。能够借助申威系统本地GCC编译器实现申威架构对Buildroot的本地编译,解决申威架构无法使用Buildroot构建文件系统及编译开源程序的问题,可快速完成申威架构内核文件系统的构建和新增开源库的编译工作,大大提升申威架构适配移植和新开源功能开发的效率。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的基于申威架构的Buildroot本地编译方法的流程示意图;
图2是本发明提供的基于申威架构的Buildroot本地编译系统的结构示意图;
图3是本发明提供的电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
应当理解,在本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本发明。如在本发明说明书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
图1是本发明提供的基于申威架构的Buildroot本地编译方法的流程示意图。如图1所示,本发明实施例提供的基于申威架构的Buildroot本地编译方法,包括:步骤101、在确定申威架构所支持的发行版操作系统完成安装后,将工具链类型设置为外部工具链。
需要说明的是,本发明实施例提供的基于申威架构的Buildroot本地编译方法的执行主体是具有申威架构,且设置有基于申威架构的Buildroot本地编译系统的处理芯片,或者是具有如上所述处理芯片的下游电子设备产品。
本发明实施例提供的基于申威架构的Buildroot本地编译方法的应用场景为,借助申威系统本地的GCC编译器实现申威架构本地编译Buildroot。
具体地,在步骤101中,基于申威架构的Buildroot本地编译系统在确定其所依托运行的电子设备已经安装申威所支持的发行版操作系统,且搭建好本地编译环境后,由于Buildroot支持使用本地GCC编译修改,故需要通过make menuconfig指令将Buildroot中的工具链类型参数由默认的本地工具链(Buildroot toolchain)修改替换为外部工具链(External toolchain)。
其中,替换Buildroot toolchain的作用,是禁止掉Buildroot使用默认的自动化脚本及本地GCC从零开始制作交叉编译工具链,由于该交叉工具链源码不支持申威架构,所以其制作交叉工具链也是编译不过的。
而将其修改为External toolchain的作用,是为了后续修改相关文件替换外部工具链为本地GCC编译工具。
步骤102、将所述外部工具链的GCC编译器配置信息,以及所述外部工具链编译引用的mk文件分别与所述申威架构所支持的发行版操作系统进行匹配设置。
具体地,基于申威架构的Buildroot本地编译系统在启用外部工具链后,并没有关于申威架构的开源代码包可供使用,故需要获取申威架构所支持的发行版操作系统在本地的相关配置,并根据相关配置对外部工具链的GCC编译器配置信息及其所引用的mk文件进行手动设置,以完成外链工具源码的关联。
步骤103、通过自定义脚本将所述申威架构所支持的发行版操作系统的基础库文件拷贝到Buildroot本地编译文件系统目录下,以完成Buildroot的本地编译。
其中,所述Buildroot本地编译文件系统目录是在完成所述外部工具链的相关配置与申威架构本地编译环境匹配设置完成后编译时所创建的文件系统目录。
需要说明的是,在步骤103之前,需要根据用户自身对待生成的文件系统的操作需求编译出能实现对应功能的自定义脚本。
其中,操作需求包括但不限于对文件系统进行修改、补充、裁剪等。
具体地,由于在步骤102中配置使用外部工具链被修改替换成了使用本地的GCC一键编译开源程序,相当于没有工具链生成sysroot基础库,所以无法构建完整的文件系统,故在步骤103中,基于申威架构的Buildroot本地编译系统执行自定义脚本自动获取申威发行版系统本地的基础库文件,并将其拷贝至执行make编译时候所创建的Buildroot本地编译文件系统目录下,以生成完整的rootfs文件系统,至此完成申威架构本地编译Buildroot。
可以理解的是,Buildroot目录下的package子目录下面放着应用软件的配置文件,每个应用软件的配置文件有Config.in和soft_name.mk。故在上述步骤流程的基础上,还可以对package目录下的package/Makefile.in配置文件进行关联或者修改,以实现借助申威架构对第三方应用程序进行本地编译。
本发明实施例在申威本地编译环境内将Buildroot的编译工具链设置为外部工具链后,通过将外部工具链的GCC编译器配置信息及其所引用的mk文件手动关联至申威本地的GCC编译资源,随即运行自定义脚本申威系统将本地基础库文件拷贝到Buildroot本地编译文件系统目录。能够借助申威系统本地GCC编译器实现申威架构对Buildroot的本地编译,解决申威架构无法使用Buildroot构建文件系统及编译开源程序的问题,可快速完成申威架构内核文件系统的构建和新增开源库的编译工作,大大提升申威架构适配移植和新开源功能开发的效率。
在上述任一实施例的基础上,GCC编译器配置信息包括GCC编译器版本号信息、内核头文件版本号信息和GCC编译器路径信息。
具体地,外部工具链的GCC编译器配置信息应当包括GCC编译器版本号信息、内核头文件版本号信息和GCC编译器路径信息。
其中,GCC编译器版本号信息,用于明确区别申威架构本地GCC的每一个发布版本。该信息的版本号参量一般由主版本号和次版本号组成。
内核头文件版本号信息,用于明确区别申威架构所支持的操作系统内核的每一个发布版本。该信息的版本号参量一般由主版本号和次版本号组成。
GCC编译器路径信息,通过该参量进行关联设置可以确保本地GCC编译器所在目录位于环境变量中。
所述将所述外部工具链的GCC编译器配置信息,以及所述外部工具链编译引用的mk文件分别与所述申威架构所支持的发行版操作系统进行匹配设置,包括:将所述外部工具链的GCC编译器版本号信息和内核头文件版本号信息分别与所述申威架构所支持的发行版操作系统所记录的版本号进行匹配设置。
具体地,Buildroot支持使用本地GCC编译修改,则由基于申威架构的Buildroot本地编译将外部工具链的GCC编译器版本号信息和内核头文件版本号信息均被配置为和本地安装的发行版系统所对应的版本号信息相匹配。
去掉引用所述外部工具链的默认工具链目录下的mk文件,引用toolchain最外层的mk文件。
需要说明的是,Makefile文件,是指Buildroot编译总的配置文件,其定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。
具体地,基于申威架构的Buildroot本地编译系统需要修改Makefile对外部工具链MK文件的引用,先在原有的引用语句前加“#”注释掉toolchain对原有本地工具链及外部工具链的MK引用,再通过添加“include toolchain/toolchain.mk”指令,将其修改为只引用toolchain最外层的MK文件,通过去掉引用外部工具链toolchain/toolchain-external/下的所有MK文件,防止外部工具链替换编译报错。
将packet开源库编译配置文件中的GCC编译器路径信息修改为所述申威架构所支持的发行版操作系统的本地GCC编译器路径。
具体地,基于申威架构的Buildroot本地编译系统通过将package/Makefilemk.in文件中的GCC编译器路径信息修改为本地GCC所在路径,如此所有的编译工具链用的都是安装好的申威发行版本地编译环境。
本发明实施例通过指定外部工具链的GCC版本为申威发行版系统本地GCC编译器版本,指定外部编译工具链引用内核头文件版本为申威发行版系统本地内核版本,以及修改替换外部工具链编译引用的MK文件,同时修改packet开源库编译配置文件编译器路径为申威发行版系统本地GCC编译器路径,以实现将外部工具链的GCC编译器配置申威本地的GCC编译资源的关联,解决了申威架构使用外部工具链进行本地编译却无法在公网上获取开源编译资源的问题,此外还通过引用最外层MK尽可能减少报错时的修改量,有助于提高申威架构本地编译Buildroot的效率。
在上述任一实施例的基础上,将packet开源库编译配置文件中的GCC编译器路径信息修改为所述申威架构所支持的发行版操作系统的本地GCC编译器路径,包括:通过which gcc指令查看所述申威架构所支持的发行版操作系统的本地GCC编译器路径。
具体地,基于申威架构的Buildroot本地编译系统通过which gcc指令查看本地GCC编译器路径,若查询成功则相应输出申威架构所支持的发行版操作系统的本地GCC编译器路径,反之,若查询失败,则需要对本地GCC编译器的安装情况进行排查,例如是否已安装,或者关联的GCC版本号是否正确等。
将所述packet开源库编译配置文件中的TARGET_CROSS变量的赋值替换为所述本地GCC编译器路径。
具体地,基于申威架构的Buildroot本地编译系统在package/Makefile.in文件(即packet开源库编译配置文件),找到TARGET_CROSS赋值,将该参量原始默认的toolchain-external或toolchain-Buildroot的赋值覆盖替换为本地GCC编译器路径“/usr/bin/”。
本发明实施例通过对packet开源库编译配置文件中TARGET_CROSS变量进行赋值修改,将利用which gcc查看本地GCC所在路径直接覆盖替换掉TARGET_CROSS变量的默认赋值,实现所有的编译工具链均使用安装好的申威发行版本地编译环境,可供外部工具链调用关联好的编译资源。
在上述任一实施例的基础上,在所述将工具链类型设置为外部工具链之前,还包括:根据所述申威架构的CPU类型,将所述申威架构所支持的发行版操作系统作为本地编译的基础系统。
具体地,在步骤101之前,基于申威架构的Buildroot本地编译系统在确定具有申威架构的对应类型CPU在其所依托运行的电子设备中启动运作后,通过Linux系统中的“cat/etc/issue”指令查看申威架构所支持的发行版操作系统,并将其作为本地编译的基础系统。
其中,申威平台CPU如831、3231等对应的发行版系统有深度(Deepin)、麒麟(Kylin)、统信(Uos)等。
通过gcc-v指令获取所述申威架构所支持的发行版操作系统在本地所记录的GCC编译器版本号,以及通过uname-a指令获取所述申威架构所支持的发行版操作系统在本地所记录的内核头文件版本号。
具体地,基于申威架构的Buildroot本地编译系统分别通过“gcc-v”指令获取申威架构所支持的发行版操作系统的GCC编译器版本号后供用户记录(或者暂存在本地),以及通过“uname-a”指令获取申威架构所支持的发行版操作系统的内核头文件版本号后供用户记录(或者区别于GCC编译器版本号暂存在本地),以待后续进行关联配置。
本发明实施例在安装搭建申威本地编译环境时,根据申威CPU类型查找支持其安装运行的发行版操作系统作为本地编译的基础系统,安装完成后通过gcc -v确认其本地GCC版本及通过uname-a确认其内核版本,以备配置Buildroot时进行本地关联使用。
在上述任一实施例的基础上,将所述外部工具链的GCC编译器版本号信息和内核头文件版本号信息分别与所述申威架构所支持的发行版操作系统所记录的版本号进行匹配设置,包括:将所述GCC编译器版本号信息设置为所述申威架构所支持的发行版操作系统在本地所记录的GCC编译器版本号中的主版本号。
具体地,基于申威架构的Buildroot本地编译系统通过“toolchain prefix”指令对本地GCC编译器进行修改、配置的过程中,可以将“External toolchain gcc version()”指令中的括号部分的内容设置为申威架构所支持的发行版操作系统本地所记录的GCC编译器版本号中的主版本号,以完成对GCC编译器版本号信息的关联。
将所述内核头文件版本号信息设置为所述申威架构所支持的发行版操作系统在本地所记录的内核头文件版本号中的主版本号。
具体地,基于申威架构的Buildroot本地编译系统在对本地GCC编译器进行修改、配置的过程中,可以将“External toolchain kernel headers series()”指令中的括号部分的内容设置为申威架构所支持的发行版操作系统本地所记录的内核头文件版本号中的主版本号,以完成对内核头文件版本号信息的关联。
本发明实施例的Buildroot支持使用本地GCC编译器进行修改,将外部工具链的GCC版本和内核头文件版本均配置为与本地安装的发行版系统查看的主版本号信息一致,能够使借助申威架构对Buildroot所进行的本地编译更具有兼容性。
在上述任一实施例的基础上,通过自定义脚本将所述申威架构所支持的发行版操作系统的基础库文件拷贝到Buildroot本地编译文件系统目录下,以完成Buildroot的本地编译,包括:通过所述自定义脚本抓取所述申威架构所支持的发行版操作系统在本地的基础库文件。
具体地,在步骤103中,基于申威架构的Buildroot本地编译系统可以在运行自定义脚本后,通过find指令在本地编译环境中的基础库进行抓取,得到相应的基础库文件。
将每一基础库文件拷贝到Buildroot本地编译文件系统目录中与所述基础库文件的文件类型匹配的子目录下,最终生成sysroot文件系统。
其中,所述基础库文件的文件类型为lib库文件。所述本地编译文件系统目录为output/target/lib目录。
需要说明的是,Buildroot本地编译文件系统目录是由不同文件类型按照其对应的菜单优先级顺序逐级向下开展子目录。
其中,Buildroot/output:是编译出来的输出文件夹,output目录包含其下的目录:
(1)output/host: 存放着制作好的编译工具链,如gcc、arm-linux-gcc等工具。
(2)output/images: 存放着编译好的uboot.bin,zImage,rootfs等镜像文件,可烧写到板子里, 让linux系统跑起来。
(3)output/target: 用来制作rootfs文件系统,里面放着Linux系统基本的目录结构,以及编译好的应用库和bin可执行文件。
(4)/lib/:存储/bin/及/sbin/的执行文件所需的链接库,以及Linux的内核模块。
具体地,基于申威架构的Buildroot本地编译系统根据基础库文件的文件类型,以直接通过自定义脚本将对应基础库文件直接复制到对应功能的配置文件路径在Buildroot本地编译文件系统目录中子目录(例如output/target/lib)下,直至所有基础库文件全部完成拷贝,以生成一套完整的sysroot文件系统。
本发明实施例在通过运行自定义脚本将申威系统在本地的不同基础库文件,拷贝到Buildroot本地编译文件系统目录中对应的子目录下。能够在配置使用外部工具链external toolchain被修改替换成了使用本地的GCC一键编译开源程序所致使得没有工具链生成sysroot的基础上自动抓取出一套与申威相适配的根文件系统,以供本地内核进行挂载,完成申威架构对Buildroot的本地编译。
在上述任一实施在上述任一实施例的基础上,所述自定义脚本在Buildroot的系统配置中被设置为在创建文件系统镜像文件之前执行。
具体地,基于申威架构的Buildroot本地编译系统所运行的自定义脚本在Buildroot的系统配置(system configuration)中设置为“custom scripts to runbefore creating filesystem images”,以在创建生成文件系统镜像文件之前执行。
本发明实施例通过将自定义脚本在Buildroot的系统配置中被设置为在创建文件系统镜像文件之前执行,能够保证生成文件系统镜像之前已经做完基础库的拷贝,文件系统仍可以正常启动。
图2是本发明提供的基于申威架构的Buildroot本地编译系统的结构示意图。在上述任一实施例的基础上,如图2所示,该系统包括:编译工具链设置模块210、外部工具链配置模块220和文件系统配置模块230,其中:
编译工具链设置模块210,用于在确定申威架构所支持的发行版操作系统完成安装后,将工具链类型设置为外部工具链。
外部工具链配置模块220,用于将所述外部工具链的GCC编译器配置信息,以及所述外部工具链编译引用的mk文件分别与所述申威架构所支持的发行版操作系统进行匹配设置。
文件系统配置模块230,用于通过自定义脚本将所述申威架构所支持的发行版操作系统的基础库文件拷贝到Buildroot本地编译文件系统目录下,以完成Buildroot的本地编译。
其中,所述Buildroot本地编译文件系统目录是在完成所述外部工具链的相关配置与申威架构本地编译环境匹配设置完成后编译时所创建的文件系统目录。
具体地,编译工具链设置模块210、外部工具链配置模块220和文件系统配置模块230顺次电连接。
编译工具链设置模块210在确定其所依托运行的电子设备已经安装申威所支持的发行版操作系统,且搭建好本地编译环境后,由于Buildroot支持使用本地GCC编译修改,故需要通过make menuconfig指令将Buildroot中的工具链类型参数由默认的本地工具链(Buildroot toolchain)修改替换为外部工具链(External toolchain)。
外部工具链配置模块220在启用外部工具链后,并没有关于申威架构的开源代码包可供使用,故需要获取申威架构所支持的发行版操作系统在本地的相关配置,并根据相关配置对外部工具链的GCC编译器配置信息及其所引用的mk文件进行手动设置,以完成外链工具源码的关联。
文件系统配置模块230执行自定义脚本自动获取申威发行版系统本地的基础库文件,并将其拷贝至Buildroot本地编译文件系统目录下,以生成完整的rootfs文件系统,至此完成申威架构本地编译Buildroot。
可选地,所述GCC编译器配置信息包括GCC编译器版本号信息、内核头文件版本号信息和GCC编译器路径信息。
相应地,外部工具链配置模块220包括版本配置单元、MK引用配置单元和本地路径配置单元,其中:
版本配置单元,用于将所述外部工具链的GCC编译器版本号信息和内核头文件版本号信息分别与所述申威架构所支持的发行版操作系统所记录的版本号进行匹配设置。
MK引用配置单元,用于去掉引用所述外部工具链的默认工具链目录下的mk文件,引用toolchain最外层的mk文件。
本地路径配置单元,用于将packet开源库编译配置文件中的GCC编译器路径信息修改为所述申威架构所支持的发行版操作系统的本地GCC编译器路径。
可选地,本地路径配置单元包括本地路径查询子单元和本地路径配置子单元,其中:
本地路径查询子单元,用于通过which gcc指令查看所述申威架构所支持的发行版操作系统的本地GCC编译器路径。
本地路径配置子单元,用于将所述packet开源库编译配置文件中的TARGET_CROSS变量的赋值替换为所述本地GCC编译器路径。
可选地,该系统还包括操作系统模块和本地版本查询模块,其中:
操作系统模块,用于根据所述申威架构的CPU类型,将所述申威架构所支持的发行版操作系统作为本地编译的基础系统。
本地版本查询模块,用于通过gcc-v指令获取所述申威架构所支持的发行版操作系统在本地所记录的GCC编译器版本号,以及通过uname-a指令获取所述申威架构所支持的发行版操作系统在本地所记录的内核头文件版本号。
可选地,版本配置单元包括第一版本配置子单元和第二版本配置子单元,其中:
第一版本配置子单元,用于将所述GCC编译器版本号信息设置为所述申威架构所支持的发行版操作系统在本地所记录的GCC编译器版本号中的主版本号。
第二版本配置子单元,用于将所述内核头文件版本号信息设置为所述申威架构所支持的发行版操作系统在本地所记录的内核头文件版本号中的主版本号。
可选地,文件系统配置模块230包括基础库抓取单元和基础库拷贝单元,其中:
基础库抓取单元,用于通过所述自定义脚本抓取所述申威架构所支持的发行版操作系统在本地的基础库文件。
基础库拷贝单元,用于将每一基础库文件拷贝到Buildroot本地编译文件系统目录中与所述基础库文件的文件类型匹配的子目录下,最终生成sysroot文件系统。
其中,所述基础库文件的文件类型为lib库文件。所述本地编译文件系统目录为output/target/lib目录。
可选地,所述自定义脚本在Buildroot的系统配置中被设置为在创建文件系统镜像文件之前执行。
本发明实施例提供的基于申威架构的Buildroot本地编译系统,用于执行本发明上述基于申威架构的Buildroot本地编译方法,其实施方式与本发明提供的基于申威架构的Buildroot本地编译方法的实施方式一致,且可以达到相同的有益效果,此处不再赘述。
本发明实施例在申威本地编译环境内将Buildroot的编译工具链设置为外部工具链后,通过将外部工具链的GCC编译器配置信息及其所引用的mk文件手动关联至申威本地的GCC编译资源,随即运行自定义脚本申威系统将本地基础库文件拷贝到Buildroot本地编译文件系统目录。能够借助申威系统本地GCC编译器实现申威架构对Buildroot的本地编译,解决申威架构无法使用Buildroot构建文件系统及编译开源程序的问题,可快速完成申威架构内核文件系统的构建和新增开源库的编译工作,大大提升申威架构适配移植和新开源功能开发的效率。
图3示例了一种电子设备的实体结构示意图,如图3所示,该电子设备可以包括:处理器(processor)310、通信接口(Communications Interface)320、存储器(memory)330和通信总线340,其中,处理器310,通信接口320,存储器330通过通信总线340完成相互间的通信。处理器310可以调用存储器330中的逻辑指令,以执行基于申威架构的Buildroot本地编译方法,该方法包括:在确定申威架构所支持的发行版操作系统完成安装后,将工具链类型设置为外部工具链;将所述外部工具链的GCC编译器配置信息,以及所述外部工具链编译引用的mk文件分别与所述申威架构所支持的发行版操作系统进行匹配设置;通过自定义脚本将所述申威架构所支持的发行版操作系统的基础库文件拷贝到Buildroot本地编译文件系统目录下,以完成Buildroot的本地编译;其中,所述Buildroot本地编译文件系统目录是在完成所述外部工具链的相关配置与申威架构本地编译环境匹配设置完成后编译时所创建的文件系统目录。
此外,上述的存储器330中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,计算机程序可存储在非暂态计算机可读存储介质上,所述计算机程序被处理器执行时,计算机能够执行上述各方法所提供的基于申威架构的Buildroot本地编译方法,该方法包括:在确定申威架构所支持的发行版操作系统完成安装后,将工具链类型设置为外部工具链;将所述外部工具链的GCC编译器配置信息,以及所述外部工具链编译引用的mk文件分别与所述申威架构所支持的发行版操作系统进行匹配设置;通过自定义脚本将所述申威架构所支持的发行版操作系统的基础库文件拷贝到Buildroot本地编译文件系统目录下,以完成Buildroot的本地编译;其中,所述Buildroot本地编译文件系统目录是在完成所述外部工具链的相关配置与申威架构本地编译环境匹配设置完成后编译时所创建的文件系统目录。
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各方法提供的基于申威架构的Buildroot本地编译方法,该方法包括:在确定申威架构所支持的发行版操作系统完成安装后,将工具链类型设置为外部工具链;将所述外部工具链的GCC编译器配置信息,以及所述外部工具链编译引用的mk文件分别与所述申威架构所支持的发行版操作系统进行匹配设置;通过自定义脚本将所述申威架构所支持的发行版操作系统的基础库文件拷贝到Buildroot本地编译文件系统目录下,以完成Buildroot的本地编译;其中,所述Buildroot本地编译文件系统目录是在完成所述外部工具链的相关配置与申威架构本地编译环境匹配设置完成后编译时所创建的文件系统目录。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (9)

1.一种基于申威架构的Buildroot本地编译方法,其特征在于,包括:
在确定申威架构所支持的发行版操作系统完成安装后,将工具链类型设置为外部工具链;
将所述外部工具链的GCC编译器配置信息,以及所述外部工具链编译引用的mk文件分别与所述申威架构所支持的发行版操作系统进行匹配设置;
通过自定义脚本将所述申威架构所支持的发行版操作系统的基础库文件拷贝到Buildroot本地编译文件系统目录下,以完成Buildroot的本地编译;
其中,所述Buildroot本地编译文件系统目录是在完成所述外部工具链的相关配置与申威架构本地编译环境匹配设置完成后编译时所创建的文件系统目录;
其中,所述GCC编译器配置信息包括GCC编译器版本号信息、内核头文件版本号信息和GCC编译器路径信息;
所述将所述外部工具链的GCC编译器配置信息,以及所述外部工具链编译引用的mk文件分别与所述申威架构所支持的发行版操作系统进行匹配设置,包括:
将所述外部工具链的GCC编译器版本号信息和内核头文件版本号信息分别与所述申威架构所支持的发行版操作系统所记录的版本号进行匹配设置;
去掉引用所述外部工具链的默认工具链目录下的mk文件,引用toolchain最外层的mk文件;
将packet开源库编译配置文件中的GCC编译器路径信息修改为所述申威架构所支持的发行版操作系统的本地GCC编译器路径。
2.根据权利要求1所述的基于申威架构的Buildroot本地编译方法,其特征在于,所述将packet开源库编译配置文件中的GCC编译器路径信息修改为所述申威架构所支持的发行版操作系统的本地GCC编译器路径,包括:
通过which gcc指令查看所述申威架构所支持的发行版操作系统的本地GCC编译器路径;
将所述packet开源库编译配置文件中的TARGET_CROSS变量的赋值替换为所述本地GCC编译器路径。
3.根据权利要求1所述的基于申威架构的Buildroot本地编译方法,其特征在于,在所述将工具链类型设置为外部工具链之前,还包括:
根据所述申威架构的CPU类型,将所述申威架构所支持的发行版操作系统作为本地编译的基础系统;
通过gcc-v指令获取所述申威架构所支持的发行版操作系统在本地所记录的GCC编译器版本号,以及通过uname-a指令获取所述申威架构所支持的发行版操作系统在本地所记录的内核头文件版本号。
4.根据权利要求3所述的基于申威架构的Buildroot本地编译方法,其特征在于,所述将所述外部工具链的GCC编译器版本号信息和内核头文件版本号信息分别与所述申威架构所支持的发行版操作系统所记录的版本号进行匹配设置,包括:
将所述GCC编译器版本号信息设置为所述申威架构所支持的发行版操作系统在本地所记录的GCC编译器版本号中的主版本号;
将所述内核头文件版本号信息设置为所述申威架构所支持的发行版操作系统在本地所记录的内核头文件版本号中的主版本号。
5.根据权利要求1所述的基于申威架构的Buildroot本地编译方法,其特征在于,所述通过自定义脚本将所述申威架构所支持的发行版操作系统的基础库文件拷贝到Buildroot本地编译文件系统目录下,以完成Buildroot的本地编译,包括:
通过所述自定义脚本抓取所述申威架构所支持的发行版操作系统在本地的基础库文件;
将每一基础库文件拷贝到Buildroot本地编译文件系统目录中与所述基础库文件的文件类型匹配的子目录下,最终生成sysroot文件系统;
其中,所述基础库文件的文件类型为lib库文件;所述本地编译文件系统目录为output/target/lib目录。
6.根据权利要求5所述的基于申威架构的Buildroot本地编译方法,其特征在于,所述自定义脚本在Buildroot的系统配置中被设置为在创建文件系统镜像文件之前执行。
7.一种基于申威架构的Buildroot本地编译系统,其特征在于,包括:
编译工具链设置模块,用于在确定申威架构所支持的发行版操作系统完成安装后,将工具链类型设置为外部工具链;
外部工具链配置模块,用于将所述外部工具链的GCC编译器配置信息,以及所述外部工具链编译引用的mk文件分别与所述申威架构所支持的发行版操作系统进行匹配设置;
文件系统配置模块,用于通过自定义脚本将所述申威架构所支持的发行版操作系统的基础库文件拷贝到Buildroot本地编译文件系统目录下,以完成Buildroot的本地编译;
其中,所述Buildroot本地编译文件系统目录是在完成所述外部工具链的相关配置与申威架构本地编译环境匹配设置完成后编译时所创建的文件系统目录;
其中,所述GCC编译器配置信息包括GCC编译器版本号信息、内核头文件版本号信息和GCC编译器路径信息;
所述外部工具链配置模块包括版本配置单元、MK引用配置单元和本地路径配置单元;
所述版本配置单元,用于将所述外部工具链的GCC编译器版本号信息和内核头文件版本号信息分别与所述申威架构所支持的发行版操作系统所记录的版本号进行匹配设置;
所述MK引用配置单元,用于去掉引用所述外部工具链的默认工具链目录下的mk文件,引用toolchain最外层的mk文件;
所述本地路径配置单元,用于将packet开源库编译配置文件中的GCC编译器路径信息修改为所述申威架构所支持的发行版操作系统的本地GCC编译器路径。
8.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至6任一项所述基于申威架构的Buildroot本地编译方法。
9.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述基于申威架构的Buildroot本地编译方法。
CN202310589455.0A 2023-05-24 2023-05-24 基于申威架构的Buildroot本地编译方法及系统 Active CN116301908B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310589455.0A CN116301908B (zh) 2023-05-24 2023-05-24 基于申威架构的Buildroot本地编译方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310589455.0A CN116301908B (zh) 2023-05-24 2023-05-24 基于申威架构的Buildroot本地编译方法及系统

Publications (2)

Publication Number Publication Date
CN116301908A CN116301908A (zh) 2023-06-23
CN116301908B true CN116301908B (zh) 2023-08-22

Family

ID=86801829

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310589455.0A Active CN116301908B (zh) 2023-05-24 2023-05-24 基于申威架构的Buildroot本地编译方法及系统

Country Status (1)

Country Link
CN (1) CN116301908B (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113204351A (zh) * 2021-07-06 2021-08-03 成都菁蓉联创科技有限公司 一种嵌入式系统包管理方法及其使用方法
CN113504914A (zh) * 2021-09-09 2021-10-15 北京鲸鲮信息系统技术有限公司 操作系统的构建编译方法及装置、电子设备、存储介质
CN113934426A (zh) * 2021-09-23 2022-01-14 北京车和家信息技术有限公司 软件包处理方法、装置、系统、设备及介质
CN115454436A (zh) * 2022-07-26 2022-12-09 摩比天线技术(深圳)有限公司 文件系统的构建方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11586358B2 (en) * 2014-12-17 2023-02-21 Red Hat, Inc. Building file system images using cached logical volume snapshots

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113204351A (zh) * 2021-07-06 2021-08-03 成都菁蓉联创科技有限公司 一种嵌入式系统包管理方法及其使用方法
CN113504914A (zh) * 2021-09-09 2021-10-15 北京鲸鲮信息系统技术有限公司 操作系统的构建编译方法及装置、电子设备、存储介质
CN113934426A (zh) * 2021-09-23 2022-01-14 北京车和家信息技术有限公司 软件包处理方法、装置、系统、设备及介质
CN115454436A (zh) * 2022-07-26 2022-12-09 摩比天线技术(深圳)有限公司 文件系统的构建方法

Also Published As

Publication number Publication date
CN116301908A (zh) 2023-06-23

Similar Documents

Publication Publication Date Title
US11599348B2 (en) Container image building using shared resources
CN109491695B (zh) 一种集成安卓应用的增量更新方法
CN106709704B (zh) 一种基于许可链的智能合约升级方法
US7937697B2 (en) Method, system and computer program for distributing software patches
CN110673923A (zh) Xwiki系统配置方法、系统及计算机设备
US9043781B2 (en) Algorithm for automated enterprise deployments
CN114816417B (zh) 一种交叉编译方法、装置、计算设备及存储介质
CN106610839A (zh) 发布升级包的方法、轻量升级方法、装置及系统
CN113064595A (zh) 一种基于Docker镜像的QT应用程序编译方法和装置
CN115629971A (zh) 一种应用的开发系统和开发方法
CN110704113B (zh) 一种基于fpga平台的启动方法、系统及开发板装置
CN113342323A (zh) 软件在线开发的方法及装置
EP3121750B1 (en) System and method for antivirus checking of native images of software assemblies
CN112416612B (zh) 服务调用方法、装置、计算机设备和可读存储介质
CN108694049B (zh) 一种更新软件的方法和设备
CN116301908B (zh) 基于申威架构的Buildroot本地编译方法及系统
CN115857999A (zh) 基于vue的系统架构改造获得微前端系统架构的方法及系统
CN113360156B (zh) 一种ios编译方法及相关设备
CN111273940B (zh) 将程序文件上传至代码仓库的方法及装置
CN113157329A (zh) 启动应用的方法、系统、服务器和存储介质
Markomanolis et al. Time-Independent Trace Acquisition Framework--A Grid'5000 How-to
CN110673890A (zh) 插件调用方法、系统、介质及装置
CN112882720B (zh) 一种编译方法及装置
CN111273944B (zh) 生成程序文件并上传至代码仓库的方法及装置
CN115543374A (zh) 方案生成方法、设备升级方法及相关装置、设备和介质

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