CN116166322B - 一种移植Linux内核的方法 - Google Patents

一种移植Linux内核的方法 Download PDF

Info

Publication number
CN116166322B
CN116166322B CN202310445247.3A CN202310445247A CN116166322B CN 116166322 B CN116166322 B CN 116166322B CN 202310445247 A CN202310445247 A CN 202310445247A CN 116166322 B CN116166322 B CN 116166322B
Authority
CN
China
Prior art keywords
file
kernel
patch
code
linux 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
CN202310445247.3A
Other languages
English (en)
Other versions
CN116166322A (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.)
Kirin Software Co Ltd
Original Assignee
Kirin Software 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 Kirin Software Co Ltd filed Critical Kirin Software Co Ltd
Priority to CN202310445247.3A priority Critical patent/CN116166322B/zh
Publication of CN116166322A publication Critical patent/CN116166322A/zh
Application granted granted Critical
Publication of CN116166322B publication Critical patent/CN116166322B/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/70Software maintenance or management
    • G06F8/76Adapting program code to run in a different environment; Porting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • 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)
  • Stored Programmes (AREA)

Abstract

本发明涉及移植Linux内核的方法,包括如下步骤:使用芯片官方Linux内核版本与社区Linux内核版本号相同的两个内核源码产生补丁文件;删除硬件本身提供的设备树中所有状态为disabled的描述块;裁剪设备树,删除掉补丁内无关设备的文件;借助硬件本身提供的设备树的compatible字段进行需移植驱动的筛选;通过硬件官方提供的内核编译时产生的目标文件进行再次筛选;把架构无关代码过滤掉。本发明能够让操作系统厂商以尽可能小的工作量,尽可能少的修改代码的方式移植Linux内核,从而达适配芯片厂商提供的设备。

Description

一种移植Linux内核的方法
技术领域
本发明涉及Linux内核移植技术领域,具体涉及通过缩小补丁文件代码移植范围以增加移植效率的移植Linux内核的方法。
背景技术
嵌入式操作系统厂商对于商业发行版的操作系统,需要维持linux内核版本号稳定。国内外有多个嵌入式芯片厂商,如国内的飞腾、瑞芯微、全志,国外的NXP、TI等。这些芯片官方提供的Linux内核版本不一定与嵌入式操作系统厂商的商业发行版Linux内核版本一致,所以需要操作系统厂商自行适配,即能让操作系统厂商的Linux内核启动芯片厂商提供的嵌入式设备。每一个芯片厂商都维护了若干个设备驱动,这些设备驱动的规模可能达到100万行代码的规模。面对这么大规模的代码适配工作,操作系统厂商几乎难以承受。为了降低移植Linux内核的困难度,必须使用一种能够合理、有效缩小工作量的方法,使得操作系统厂商能够快速适配芯片厂商提供的芯片。
在当前,Linux内核领域,没有一种方法能够满足合理、有效缩小移植Linux内核代码工作量的方法。
发明内容
为解决已有技术存在的不足,本发明提供了一种移植Linux内核的方法,包括如下步骤:
步骤S1:使用芯片官方Linux内核版本与社区Linux内核版本号相同的两个内核源码产生补丁文件P1;
步骤S2:通过删除硬件本身提供的设备树中所有状态为disabled的描述块,删除掉步骤S1产生的补丁文件所对应的第一源码文件内关于disabled设备的文件,缩小设备树文件中的代码移植范围,得到一个第二源码文件;
步骤S3:通过裁剪设备树,删除掉第二源码文件内无关设备的文件,只保留cpu、内存、GIC、块设备、timer、串口六个设备对应的文件,第二次缩小补丁文件中的代码移植范围,得到一个第三源码文件;
步骤S4:将第三源码文件编译成新的设备树二进制文件,借助硬件本身提供的设备树的compatible字段进行需移植驱动的筛选,第三次缩小补丁文件中的代码移植范围,并得到补丁文件P2;
步骤S5:从补丁文件P1中,筛选出arm64架构相关部分,得到补丁文件P3,合并补丁文件P2与补丁文件P3,得到补丁文件P4,通过硬件官方提供的内核编译时产生的目标文件对补丁文件P4进行筛选,第四次缩小补丁文件中的代码移植范围,得到补丁文件P5;
步骤S6:把补丁文件P5中架构无关代码过滤掉,第五次缩小补丁文件中的代码移植范围。
其中,所述步骤S1包括:分别从开发板官网及内核社区下载版本号相同的内核源码V1及内核源码V2,根据内核源码V1及内核源码V2的差别作出内核源码补丁P1。
其中,所述步骤S2包括如下步骤:
步骤S21:从开发板中通过/sys/firmware/fdt文件导出开发板的设备树二进制文件dtb;
步骤S22:使用dtc命令把dtb文件反编译成设备树源码文件dts;
步骤S23:删除设备树源码文件dts中所有状态为disabled的描述块,另存为dts2。
其中,所述步骤S3包括如下步骤:
步骤S31:把dts2编译成新的设备树二进制描述文件dtb2;
步骤S32:把dtb2烧录到开发板中,确保开发板能够正常启动;
步骤S33:删除dts2中所有外设和配置,只保留可以启动开发板的最小的描述部分,最小的描述部分包括cpu、内存、GIC、块设备、timer、串口描述,另存为dts3。
其中,所述步骤S4包括如下步骤:
步骤S41:把dts3编译成新的设备树二进制描述文件dtb3;
步骤S42:把dtb3烧录到开发板中,确保开发板能够正常启动;
步骤S43:从dts3中列出所有compatible内容COM1;
步骤S44:从V1版本代码中查找所有与COM1匹配的c文件列表LIST1;
步骤S45:从V1版本代码中查找LIST1列表中有编译过程文件的列表,得到LIST2;
步骤S46:使用LIST2文件列表,对补丁P1文件进行筛选,缩小代码移植的范围,得到补丁文件P2。
本发明能够让操作系统厂商以尽可能小的工作量,尽可能少的修改代码的方式移植Linux内核,从而达适配芯片厂商提供的设备。
具体实施方式
为了对本发明的技术方案及有益效果有更进一步的了解,下面详细说明本发明的技术方案及其产生的有益效果。
本发明的总体思路如下:
1、在移植Linux内核时,先使用芯片官方Linux内核版本与社区Linux内核版本号相同的两个内核源码产生补丁文件。
2、通过删除硬件本身提供的设备树中所有状态为disabled的描述块,缩小补丁文件中的代码移植范围。
3、通过裁剪设备树,仅保留cpu、内存、GIC、块设备、timer、串口六个设备描述字段,第二次缩小补丁文件中的代码移植范围。
4、借助硬件本身提供的设备树的compatible字段进行需移植驱动的筛选,第三次缩小补丁文件中的代码移植范围。
5、通过硬件官方提供的内核编译时产生的目标文件进行再次筛选,第四次缩小补丁文件中的代码移植范围。
6、把架构无关代码过滤掉,第五次缩小补丁文件中的代码移植范围。
7、通过芯片官方提供的Linux内核的配置文件编译操作系统厂商的Linux内核,新增选项配置为Y,解决所有编译冲突后编译得到新内核,启动后可以正常进入系统,完成Linux内核的移植和CPU的适配工作。
本发明的一个具体实施例如下:
使用Firefly平台的RK3588芯片开发板作为硬件,设备安装安装银河麒麟V10桌面版系统为例,实施步骤如下:
1、产生补丁文件,包括如下步骤:
1-1:从开发板官网下载内核源码V1,当前内核为4.19.132;
1-2:从内核社区下载4.19.132版本内核源码V2;
1-3:根据V1与V2的差别做出内核源码补丁P1。
2、第一次缩小补丁文件的代码移植范围,包括如下步骤:
2-1:从开发板中通过/sys/firmware/fdt文件导出开发板的设备树二进制文件dtb;
2-2:使用dtc命令把dtb文件反编译成设备树源码文件dts;
2-3:删除设备树源码文件dts中所有状态为disabled的描述块,另存为dts2。
3、第二次缩小补丁文件的代码移植范围,包括如下步骤:
3-1:把dts2编译成新的设备树二进制描述文件,即dtb2;
3-2:把dtb2烧录到开发板中,确保开发板能够正常启动;
3-3:删除dts2中所有外设和配置,只保留可以启动开发板的最小的描述部分,只保留串口、timer、时钟、cpu、块设备描述,另存为dts3。
4、第三次缩小补丁文件的代码移植范围,包括如下步骤:
4-1:把设备树的源码dts3编译成新的设备树二进制描述文件,即dtb3;
4-2:把dtb3烧录到开发板中,确保开发板能够正常启动;
4-3:从dts3中列出所有compatible内容COM1;
4-4:从V1版本代码中查找所有与COM1匹配的c文件列表LIST1;
4-5:从V1版本代码中查找LIST1列表中有编译过程文件的列表,得到LIST2;
4-6:使用LIST2文件列表,对补丁P1文件进行筛选,缩小代码移植的范围,得到补丁文件P2。
设备树文件中compatible字段用于描述设备与驱动适配时的字符串匹配的关键词。当设备树文件中设备描述部分的compatible关键字规定的字符串在内核驱动代码中可以匹配到时,说明驱动代码是为该设备编写的。如设备树中有mmc设备,该设备的compatible字段为“mmc-pwrseq-simple”,则在linux内核中如果有驱动源码中定义了“mmc-pwrseq-simple”匹配关键词,则说明该驱动源码是设备树中的mmc设备的驱动源码。
LIST1文件为源码文件,即c文件,LIST2文件为过程文件,即o文件。不一定所有源码文件在linux内核中被使用。在编译内核时,被linux内核使用的文件为o文件,即为编译的过程文件,是通过gcc命令从c文件中编译而来。可以通过LIST2文件内容确定LIST1中哪些文件在编译时被使用到。在补丁中根据LIST2文件中列出的文件列表进行筛选,即可完成第三次筛选。
6、第四次缩小补丁文件的代码移植范围,包括如下步骤:
6-1:从补丁文件P1中,筛选出arm64架构相关部分,得到补丁文件P3。
6-2:从内核社区下载需适配内核版本源码,适配版本为5.4.18,即V3;
6-3:合并补丁P2与补丁P3,得到补丁P4文件;
6-4:从补丁P4文件中筛选掉V1源码版本由于内核社区升级而引入的更新,得到P5文件;
6-5:把P5补丁手动合并到V3代码中;
7、第五次缩小补丁文件的代码移植范围,包括如下步骤:
7-2:把P5补丁中所有arch架构下非arm64文件夹下的所有文件全部删除;
7-3:使用V1源码的内核编译配置文件编译V3内核,新增选项均配置为Y;
7-4:编译V3内核,解决所有冲突;
7-5:部署V3内核到开发板上;
7-6:重启后进入系统查看内核版本号为V3版本号。
最后,通过芯片官方提供的Linux内核的配置文件编译操作系统厂商的Linux内核,新增选项配置为Y,解决所有编译冲突后编译得到新内核,启动后可以正常进入系统,完成Linux内核的移植和CPU的适配工作。
本发明通过借助原设备的设备树,对其进行删除disabled状态的描述,仅保留串口、timer、时钟、cpu、块设备描述过滤源码,通过compatible过滤源码,通过编译过程文件过滤源码,通过架构无关过滤源码。五次过滤无关代码的方式缩小Linux内核移植规模,从而使得Linux内核移植变得可行、有效。
本发明能够使操作系统厂商对不同CPU架构、不同CPU厂商、不同Linux内核进行有效、快速内核版本移植,保证操作系统厂商的商业发行版的Linux内核能够一个版本兼容多个CPU平台。
虽然本发明已利用上述较佳实施例进行说明,然其并非用以限定本发明的保护范围,任何本领域技术人员在不脱离本发明的精神和范围之内,相对上述实施例进行各种变动与修改仍属本发明所保护的范围,因此本发明的保护范围以权利要求书所界定的为准。

Claims (5)

1.一种移植Linux内核的方法,其特征在于,包括如下步骤:
步骤S1:使用芯片官方Linux内核版本与社区Linux内核版本号相同的两个内核源码产生补丁文件P1;
步骤S2:通过删除硬件本身提供的设备树中所有状态为disabled的描述块,删除掉步骤S1产生的补丁文件P1所对应的第一源码文件内关于disabled设备的文件,缩小设备树文件中的代码移植范围,得到一个第二源码文件;
步骤S3:通过裁剪设备树,删除掉第二源码文件内无关设备的文件,只保留cpu、内存、GIC、块设备、timer、串口六个设备对应的文件,第二次缩小补丁文件中的代码移植范围,得到一个第三源码文件;
步骤S4:将第三源码文件编译成新的设备树二进制文件,借助硬件本身提供的设备树的compatible字段进行需移植驱动的筛选,第三次缩小补丁文件中的代码移植范围,并得到补丁文件P2;
步骤S5:从补丁文件P1中,筛选出arm64架构相关部分,得到补丁文件P3,合并补丁文件P2与补丁文件P3,得到补丁文件P4,通过硬件官方提供的内核编译时产生的目标文件对补丁文件P4进行筛选,第四次缩小补丁文件中的代码移植范围,得到补丁文件P5;
步骤S6:把补丁文件P5中架构无关代码过滤掉,第五次缩小补丁文件中的代码移植范围。
2.如权利要求1所述的移植Linux内核的方法,其特征在于,所述步骤S1包括:分别从开发板官网及内核社区下载版本号相同的内核源码V1及内核源码V2,根据内核源码V1及内核源码V2的差别作出内核源码补丁P1。
3.如权利要求2所述的移植Linux内核的方法,其特征在于,所述步骤S2包括如下步骤:
步骤S21:从开发板中通过/sys/firmware/fdt文件导出开发板的设备树二进制文件dtb;
步骤S22:使用dtc命令把dtb文件反编译成设备树源码文件dts;
步骤S23:删除设备树源码文件dts中所有状态为disabled的描述块,另存为dts2。
4.如权利要求2所述的移植Linux内核的方法,其特征在于,所述步骤S3包括如下步骤:
步骤S31:把dts2编译成新的设备树二进制描述文件dtb2;
步骤S32:把dtb2烧录到开发板中,确保开发板能够正常启动;
步骤S33:删除dts2中所有外设和配置,只保留可以启动开发板的最小的描述部分,最小的描述部分包括cpu、内存、GIC、块设备、timer、串口描述,另存为dts3。
5.如权利要求2所述的移植Linux内核的方法,其特征在于,所述步骤S4包括如下步骤:
步骤S41:把dts3编译成新的设备树二进制描述文件dtb3;
步骤S42:把dtb3烧录到开发板中,确保开发板能够正常启动;
步骤S43:从dts3中列出所有compatible内容COM1;
步骤S44:从V1版本代码中查找所有与COM1匹配的c文件列表LIST1;
步骤S45:从V1版本代码中查找LIST1列表中有编译过程文件的列表,得到LIST2;
步骤S46:使用LIST2文件列表,对补丁P1文件进行筛选,缩小代码移植的范围,得到补丁文件P2。
CN202310445247.3A 2023-04-24 2023-04-24 一种移植Linux内核的方法 Active CN116166322B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310445247.3A CN116166322B (zh) 2023-04-24 2023-04-24 一种移植Linux内核的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310445247.3A CN116166322B (zh) 2023-04-24 2023-04-24 一种移植Linux内核的方法

Publications (2)

Publication Number Publication Date
CN116166322A CN116166322A (zh) 2023-05-26
CN116166322B true CN116166322B (zh) 2023-07-04

Family

ID=86420377

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310445247.3A Active CN116166322B (zh) 2023-04-24 2023-04-24 一种移植Linux内核的方法

Country Status (1)

Country Link
CN (1) CN116166322B (zh)

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5815415A (en) * 1996-01-19 1998-09-29 Bentley Systems, Incorporated Computer system for portable persistent modeling
CN103973475A (zh) * 2013-02-05 2014-08-06 腾讯科技(深圳)有限公司 差异补丁包生成方法及下载方法、服务器、客户端
CN104199713A (zh) * 2014-08-25 2014-12-10 山东超越数控电子有限公司 一种嵌入式Linux操作系统裁剪定制方法
CN111722868A (zh) * 2020-05-20 2020-09-29 上海中科网威信息技术有限公司 一种申威防火墙快速移植高版本linux内核的方法
CN113835686A (zh) * 2020-06-08 2021-12-24 华为技术有限公司 代码处理方法和装置
CN115437684A (zh) * 2022-09-21 2022-12-06 麒麟软件有限公司 一种针对Linux内核源代码的文件级裁剪方法和系统
CN115794118A (zh) * 2023-01-05 2023-03-14 中科方德软件有限公司 内核代码处理方法及电子设备

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5815415A (en) * 1996-01-19 1998-09-29 Bentley Systems, Incorporated Computer system for portable persistent modeling
CN103973475A (zh) * 2013-02-05 2014-08-06 腾讯科技(深圳)有限公司 差异补丁包生成方法及下载方法、服务器、客户端
CN104199713A (zh) * 2014-08-25 2014-12-10 山东超越数控电子有限公司 一种嵌入式Linux操作系统裁剪定制方法
CN111722868A (zh) * 2020-05-20 2020-09-29 上海中科网威信息技术有限公司 一种申威防火墙快速移植高版本linux内核的方法
CN113835686A (zh) * 2020-06-08 2021-12-24 华为技术有限公司 代码处理方法和装置
CN115437684A (zh) * 2022-09-21 2022-12-06 麒麟软件有限公司 一种针对Linux内核源代码的文件级裁剪方法和系统
CN115794118A (zh) * 2023-01-05 2023-03-14 中科方德软件有限公司 内核代码处理方法及电子设备

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
ARMLinux在AT91RM9200平台上的移植;罗致;王仲东;;兵工自动化(01);全文 *

Also Published As

Publication number Publication date
CN116166322A (zh) 2023-05-26

Similar Documents

Publication Publication Date Title
US7991988B2 (en) Communication device and firmware update method thereof
CN100343807C (zh) 一种Boot软件升级方法和一种Boot软件恢复方法
CN107506219A (zh) 一种基于Android系统的通用版本升级方法
CN102314364B (zh) 一种自动适配移动终端的方法
CN104375844A (zh) 固件升级方法及装置
CN103942067A (zh) 智能设备自动清理软件安装包文件的方法及装置
CN111142911B (zh) 具有异常恢复功能的嵌入式系统及其升级方法
CN110535776B (zh) 网关限流方法、装置、网关、系统及存储介质
CN101211265A (zh) 一种终端嵌入式系统的软件更新方法和装置
CN111625249A (zh) 用于物联网设备的自动升级和回滚方法和装置
CN102402452A (zh) 一种编译方法及装置
CN116166322B (zh) 一种移植Linux内核的方法
CN106775874A (zh) 终端设备的系统升级方法
CN114942933A (zh) 一种自动更新数据库的方法及相关装置
CN106604141A (zh) 一种双升级方法
CN114398048A (zh) 一种app自动升级的方法、装置和计算机设备
CN112533193B (zh) 一种实现不同网络需求的配置方法和终端
US7634258B2 (en) System and method for over-the-air update of wireless communication devices
KR20070038681A (ko) 펌웨어 업데이트 방법 및 시스템
CN100373384C (zh) 远程数据库的可靠下载与本地数据库的使用无冲突的方法
CN112068875B (zh) 一种基于java动态加载实现线索过滤策略系统及方法
CN107395389A (zh) 一种基于蓝牙Mesh网络的调光器固件升级方法
CN111831314B (zh) 一种针对不可写分区打补丁的方法与装置
JP2018195046A (ja) プログラム更新装置、プログラム更新方法、プログラム更新プログラム及びプログラム更新システム
CN111209141B (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