在内核kbuild中加入arch平台配置项

2023-10-07 08:18

本文主要是介绍在内核kbuild中加入arch平台配置项,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Kbuild编译内核,需要两中类型文件的支持Makefile和Kconfig。Makefile只是在编译的时候使用,但是内核还需要支持配置功能,所以还需要一个Kconfig用来在make menuconfig的时候进行显示。
不管是新写的驱动代码,还是新添加的平台代码,都需要编写相应的Kconfig和Makefile文件来加入的kbuild中进行编译。

要想知道怎么为新的版型添加Kconfig和Makefile,我们首先需要知道kbuild的编译流程是怎样的。从命令行说起,我们编译一个针对某个版型的内核,会使用如下的命令来进行:
1.配置内核
比如编译arm平台上的内核
make ARCH=arm menuconfig
这一步只是为了编译内核,设置内核特性和驱动模块。它会首先进入到arch/arm/目录中,然后读取该目录下的Kconfig。这个就是内核配置文件的主入口,可以看到它是根据不同的ARCH来区分的。我们打开相应的文件,可以看到其中调用了很到其他目录下的Kconfig文件,由此我们才可以在界面上看到配置选项。
新增一个版型我们需要在System Type特性下面来进行配置,如下所示:


menu "System Type"config MMUbool "MMU-based Paged Memory Management Support"default yhelpSelect if you want MMU-based virtualised addressing spacesupport by paged memory management. If unsure, say 'Y'.#
# The "ARM system type" choice list is ordered alphabetically by option
# text.  Please add new entries in the option alphabetic order.
#
choiceprompt "ARM system type"default ARCH_VERSATILE if !MMUdefault ARCH_MULTIPLATFORM if MMU#新添加平台
config ARCH_XXXbool "NEW Platform"select CPU_V8select GENERIC_CLOCKEVENTSselect ARCH_REQUIRE_GPIOLIBselect COMMON_CLKselect CLKDEV_LOOKUPselect ARM_GICselect HAVE_SMPselect ARM_HAS_SG_CHAINselect ARCH_HAS_OPPselect ARCH_HAS_CPUFREQselect MIGHT_HAVE_CACHE_L2X0select USB_GADGET_DUALSPEEDselect PM_OPP if PM helpSupport for Actions OWL Platformendchoice
source "arch/arm/mach-xxx/Kconfig"

我们需要在ARM system type 的choice中加入新的选项,比如上面的ARCH_XXX平台,以便我们能把自己的版型配置上。然后调用mach-XXX下面的Kconfig,我们把跟平台相关的配置型放置在mach-XXX目录下的Kconfig里面去。这样经过层层调用,这些平台相关的内核配置项就会在menuconfig的时候显示出来了,并且我们可以针对需要的特性进行配置了。

2.编译内核
经过上面的menuconfig,会在内核目录下生成.config文件,里面包括了我们配置的项目,然后在这一步我们会进行编译。
make uImage
这一步在编译的时候会首先读取.config里面的配置内容,更具相应的内容来编译不同的模块,Makefile中的CONFIG_XXX总是对应于Kconfig里面的XXX,比如CONFIG_ SMP就对应于Kconfig里面的config SMP选项。举个例子
smp-$(CONFIG_SMP) += omap-smp.o omap-headsmp.o
这个编译项目就是对应于我们配置的config SMP选项,在menuconfig配置的时候可以配置为*/M/空。所以CONFIG_SMP也对应三种结果,一个是y,一个是m,要么就为空。因此这条语句就可以变为:

(a)smp-y += omap-smp.o omap-headsmp.o
它的含义就是把后面的objs编译到内核中,也就是vmlinux中。
(b)smp-m += omap-smp.o omap-headsmp.o
它的含义是把后面的objs编译成一个module,命名为smp.ko,注意要想生成module,还需要执行一个make modules来进行编译才行。
(c)如果不配置,那么后面的objs就不会进行编译了。

这篇关于在内核kbuild中加入arch平台配置项的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/157157

相关文章

IntelliJ IDEA 中配置 Spring MVC 环境的详细步骤及问题解决

《IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决》:本文主要介绍IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决,本文分步骤结合实例给大... 目录步骤 1:创建 Maven Web 项目步骤 2:添加 Spring MVC 依赖1、保存后执行2、将新的依赖

快速修复一个Panic的Linux内核的技巧

《快速修复一个Panic的Linux内核的技巧》Linux系统中运行了不当的mkinitcpio操作导致内核文件不能正常工作,重启的时候,内核启动中止于Panic状态,该怎么解决这个问题呢?下面我们就... 感谢China编程(www.chinasem.cn)网友 鸢一雨音 的投稿写这篇文章是有原因的。为了配置完

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾

如何为Yarn配置国内源的详细教程

《如何为Yarn配置国内源的详细教程》在使用Yarn进行项目开发时,由于网络原因,直接使用官方源可能会导致下载速度慢或连接失败,配置国内源可以显著提高包的下载速度和稳定性,本文将详细介绍如何为Yarn... 目录一、查询当前使用的镜像源二、设置国内源1. 设置为淘宝镜像源2. 设置为其他国内源三、还原为官方

CentOS7更改默认SSH端口与配置指南

《CentOS7更改默认SSH端口与配置指南》SSH是Linux服务器远程管理的核心工具,其默认监听端口为22,由于端口22众所周知,这也使得服务器容易受到自动化扫描和暴力破解攻击,本文将系统性地介绍... 目录引言为什么要更改 SSH 默认端口?步骤详解:如何更改 Centos 7 的 SSH 默认端口1

Maven的使用和配置国内源的保姆级教程

《Maven的使用和配置国内源的保姆级教程》Maven是⼀个项目管理工具,基于POM(ProjectObjectModel,项目对象模型)的概念,Maven可以通过一小段描述信息来管理项目的构建,报告... 目录1. 什么是Maven?2.创建⼀个Maven项目3.Maven 核心功能4.使用Maven H

SpringBoot多数据源配置完整指南

《SpringBoot多数据源配置完整指南》在复杂的企业应用中,经常需要连接多个数据库,SpringBoot提供了灵活的多数据源配置方式,以下是详细的实现方案,需要的朋友可以参考下... 目录一、基础多数据源配置1. 添加依赖2. 配置多个数据源3. 配置数据源Bean二、JPA多数据源配置1. 配置主数据

Spring 基于XML配置 bean管理 Bean-IOC的方法

《Spring基于XML配置bean管理Bean-IOC的方法》:本文主要介绍Spring基于XML配置bean管理Bean-IOC的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录一. spring学习的核心内容二. 基于 XML 配置 bean1. 通过类型来获取 bean2. 通过

如何使用Nginx配置将80端口重定向到443端口

《如何使用Nginx配置将80端口重定向到443端口》这篇文章主要为大家详细介绍了如何将Nginx配置为将HTTP(80端口)请求重定向到HTTPS(443端口),文中的示例代码讲解详细,有需要的小伙... 目录1. 创建或编辑Nginx配置文件2. 配置HTTP重定向到HTTPS3. 配置HTTPS服务器

SpringBoot中配置Redis连接池的完整指南

《SpringBoot中配置Redis连接池的完整指南》这篇文章主要为大家详细介绍了SpringBoot中配置Redis连接池的完整指南,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以... 目录一、添加依赖二、配置 Redis 连接池三、测试 Redis 操作四、完整示例代码(一)pom.