CN116166322B - 一种移植Linux内核的方法 - Google Patents
一种移植Linux内核的方法 Download PDFInfo
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/76—Adapting program code to run in a different environment; Porting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy 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内核版本号稳定。国内外有多个嵌入式芯片厂商,如国内的飞腾、瑞芯微、全志,国外的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。
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)
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 | 中科方德软件有限公司 | 内核代码处理方法及电子设备 |
-
2023
- 2023-04-24 CN CN202310445247.3A patent/CN116166322B/zh active Active
Patent Citations (7)
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)
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 |