系统移植(十)Linux内核源码解析(未整理)

1、分析make <board_name>_defconfig执行过程详解

  1. 分析Makefile文件,分析Makefile文件的规则中目标为"<board_name>_defconfig",
    打开linux内核源码目录下的Makefile,搜索“%config”字符串,得到以下结果
    %config: scripts_basic outputmakefile FORCE
    echo $(Q)
    echo $(MAKE)
    echo $(build)
    ( Q ) (Q) (Q)(MAKE) $(build)=scripts/kconfig $@

    解析以上命令:
    $@ : 目标
    $^ : 所有的依赖
    $< : 第一个依赖

    Q = @ —> 取消命令在终端的回显
    MAKE = make —> make命令
    build = -f ./scripts/Makefile.build obj

    以下命令展开之后的结果:
    @make -f ./scripts/Makefile.build obj=scripts/kconfig fsmp1a_defconfig

    解析以上命令的含义:
    make —> 执行make命令
    -f ./scripts/Makefile.build —> 使用file文件作为Makefile文件
    obj=scripts/kconfig —> 执行make命令时,给obj变量赋值
    fsmp1a_defconfig —> make命令对应的目标

  2. 打开linux内核源码目录下的./scripts/Makefile.build,查找“config”目标,
    没有找到对应的目标,通过include包含了其它目录下的Makefile文件,得到以下信息
    kbuild-dir := $(if ( f i l t e r / (filter /%, (filter/(src)), ( s r c ) , (src), (src),(srctree)/$(src))
    kbuild-file := $(if $(wildcard ( k b u i l d − d i r ) / K b u i l d ) , (kbuild-dir)/Kbuild), (kbuilddir)/Kbuild),(kbuild-dir)/Kbuild,$(kbuild-dir)/Makefile)
    include $(kbuild-file)

    以上命令展开之后的结果:include scripts/kconfig/Makefile

  3. 打开linux内核源码中的scripts/kconfig/Makefile文件,搜索“%_defconfig”字符串,
    得到以下结果:
    %_defconfig: $(obj)/conf
    ( Q ) (Q) (Q)< ( s i l e n t ) − − d e f c o n f i g = a r c h / (silent) --defconfig=arch/ (silent)defconfig=arch/(SRCARCH)/configs/$@ $(Kconfig)

    解析以上命令,将命令前边的$(Q)删除,然后重新执行make fsmp1a_defconfig
    命令,然后查看终端回显的结果,如下所示:
    scripts/kconfig/conf --defconfig=arch/arm/configs/fsmp1a_defconfig Kconfig

    解析以上命令:
    scripts/kconfig/conf —> 使用file命令查看conf文件可知conf是一个
    —> ELF格式的可执行文件。
    —> conf程序通过命令行传参的方式,使用argc和argv获取对应的参数
    –defconfig=arch/arm/configs/fsmp1a_defconfig
    —> config可执行程序的第一个参数
    —> arch/arm/configs/目录下存放的是板子的默认的配置文件
    Kconfig
    —> config可执行程序的第二个参数
    —> linux内核源码目录下的Kconfig文件

    以上命令最终执行的效果:
    conf程序解析arch/arm/configs/目录下fsmp1a_defconfig
    和linux内核源码目录下的Kconfig文件,最终在u-boot源码目录下生成.config配置文件,
    .config文件给Makefile文件使用,Makefile文件根据.config文件中的信息最终
    决定了linux内核源码中的哪些文件被编译,哪些文件不被编译。
    2、分析make menuconfig执行过程详解

  4. 分析Makefile文件,分析Makefile文件的规则中目标为"menuconfig",
    打开u-boot源码目录下的Makefile,搜索“%config”字符串,得到以下结果
    %config: scripts_basic outputmakefile FORCE
    echo $(Q)
    echo $(MAKE)
    echo $(build)
    ( Q ) (Q) (Q)(MAKE) $(build)=scripts/kconfig $@

    解析以上命令:
    $@ : 目标
    $^ : 所有的依赖
    $< : 第一个依赖

    Q = @ —> 取消命令在终端的回显
    MAKE = make —> make命令
    build = -f ./scripts/Makefile.build obj

    以下命令展开之后的结果:
    @make -f ./scripts/Makefile.build obj=scripts/kconfig menuconfig

    解析以上命令的含义:
    make —> 执行make命令
    -f ./scripts/Makefile.build —> 使用file文件作为Makefile文件
    obj=scripts/kconfig —> 执行make命令时,给obj变量赋值
    menuconfig —> make命令对应的目标

  5. 打开linux内核源码目录下的./scripts/Makefile.build,查找“menuconfig”目标,
    没有找到对应的目标,通过include包含了其它目录下的Makefile文件,得到以下信息
    kbuild-dir := $(if ( f i l t e r / (filter /%, (filter/(src)), ( s r c ) , (src), (src),(srctree)/$(src))
    kbuild-file := $(if $(wildcard ( k b u i l d − d i r ) / K b u i l d ) , (kbuild-dir)/Kbuild), (kbuilddir)/Kbuild),(kbuild-dir)/Kbuild,$(kbuild-dir)/Makefile)
    include $(kbuild-file)

    以上命令展开之后的结果:include scripts/kconfig/Makefile

  6. 打开linux内核源码中的scripts/kconfig/Makefile文件,搜索“menuconfig”字符串,
    得到以下结果:
    menuconfig: $(obj)/mconf
    $< $(silent) $(Kconfig)

    以上命令展开之后的结果为,执行make menuconfig命令
    scripts/kconfig/mconf Kconfig

    解析以上命令的作用:
    scripts/kconfig/mconf —> 使用file命令查看mconf程序的属性可知,
    —> mconf是一个ELF格式的可执行文件,
    Kconfig —> mconf可执行程序的第一个参数
    —> linux内核源码目录下的Kconfig文件

     mconf程序解析Kconfig文件中的信息,最终调用图形化界面的库,生成图形化的配置界面。
    
  7. 打开linux内核源码目录下的Kconfig文件,解析Kconfig文件中的信息。
    主菜单:类似于windows软件的菜单栏
    可以包含子菜单和菜单选项
    菜单:类似于windows软件中子菜单
    可以包含下一级的菜单或菜单选项
    菜单选项:菜单选项只能被选择或者不选择

    4.1 mainmenu 关键字
    作用:修饰主菜单
    格式:mainmenu “主菜单的名字”

    4.2 menu…endmenu 关键字
    作用:修饰菜单
    格式:
    menu “菜单的名字”
    // 1. 可以包含下一级的菜单
    // 2. 包含一个菜单选项
    endmenu

    4.3 bool 关键字
    作用:修饰菜单选项,修饰的菜单选项有两种状态[*]或[ ]
    格式:
    bool “菜单选项的名字”

    4.4 default 关键字
    作用:对应的菜单选项的默认的状态
    格式:default y|n

    4.5 help关键字
    作用:修饰帮助信息
    格式:
    help
    帮助信息的字符串

     可以通过:shift + ? 获取菜单选项对应的帮助信息。
    

    4.6 config关键字
    作用:修饰配置选项的
    格式:
    config 配置选项的名字
    |—> 1. 一般配置选项的名字的每个字符都要大写
    |—> 2. 多个单词之间使用“_”隔开

    当config修饰的配置选项对应的菜单选项配置为[*]时,
    此时“CONFIG_配置选项的名字 = y” 被写到.config文件中

    当config修饰的配置选项对应的菜单选项配置为[ ]时,
    此时“# CONFIG_配置选项的名字 is not set” 被写到.config文件中

    因此通过make menuconfig进行图形化界面配置时,最终修改的是.config文件中的配置信息。

    .config文件中的信息给Makefile文件使用,Makefile文件根据.config文件中的信息,
    决定linux内核源码哪些被编译,哪些不被编译。

    Makefile文件编译linux内核的伪代码:

    uImage:vmlinux

    vmlinux:$(obj-y)
    ld 命令,将.o文件链接生成.elf文件

    obj-y += 1.o
    obj- ( C O N F I G ∗ ∗ ∗ ∗ ) + = ∗ ∗ ∗ ∗ 2. o o b j − (CONFIG_****) += ****2.o obj- (CONFIG)+=2.oobj(CONFIG_
    ) += 3.o

    obj-$(CONFIG_
    ) += ****n.o
    |—> CONFIG对应的变量在.config文件中定义。

    .o:.c
    gcc -c ****.c -o ****.o

    4.8 source关键字
    作用:包含下一级目录下的Kconfig文件
    格式:
    source “Kconfig文件名及对应的路径”
    3、分析make uImage执行过程详解
    参考:make uImage执行过程分析.pdf 文档

4、分析<board_name>_defconfig, .config, Kconfig, Makefile 四个文件的关系及作用
4.1 分析<board_name>_defconfig,.config,Kconfig,Makefile 四个文件的作用
<board_name>_defconfig :
板子的默认的配置文件,每个板子都有一个对应的默认配置文件,
在linux内核源码的arch/arm/configs目录下

.config :
板子对应的配置文件,给Makefile文件使用
通过执行make <board_name>_defconfig命令在linux源码目录下生成.config文件,
执行make menuconfig进行图形化界面配置,可以修改.config文件中的信息

Kconfig :
存放的是菜单选项对应的配置信息,执行make menuconfig生成图形化配置界面时,
mconf程序会解析Kconfig文件中的配置信息。

Makefile :linux内核源码配置和编译的。
4.2 分析<board_name>_defconfig,.config,Kconfig,Makefile 四个文件的关系
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3280155.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

进程间通信--套接字socket

前面提到的管道、消息队列、共享内存、信号和信号量都是在同一台主机上进行进程间通信&#xff0c;那要想跨网络与不同主机上的进程之间通信&#xff0c;就需要Socket通信了。 实际上&#xff0c;Socket通信不仅可以跨网络与不同主机的进程间通信&#xff0c;还可以在同主机上…

安防监控视频平台LntonAIServer视频监控管理平台裸土检测算法

LntonAIServer裸土检测算法代表了一种先进的土地监测技术&#xff0c;它利用人工智能的强劲能力&#xff0c;实现了对裸土区域的自动识别和实时监测。该算法的推出&#xff0c;为环境保护、农业管理以及城市规划等多个领域提供了创新的解决方案&#xff0c;其应用前景广阔&…

maven插件1(timer-plugin)

概述 timer plugin, 提供4个goal: currentTimecurrentDatecurrentMonthcurrentYear 打包 命令 maven clean install 常见错误 goalPrefix MISSING 错误信息 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-plugin-plugin:3.13.1:helpmojo (help-goal)…

速通JS模块化规范

目录 1模块化概述 1.1什么是模块化&#xff1f; 1.2为什么需要模块化&#xff1f; 2有哪些模块化规范&#xff1f; 3导入与导出的概念 4CommonJS 规范 4.1初步体验 4.2导出数据 4.3导入数据 4.4扩展理解 4.5浏览器端运行 5ES6 模块化规范 5.1初步体验 5.2Node 中运…

创建自己的 Omnigraph (python篇)

Omnigraph 是 Nvidia Omniverse 中一个强大的视觉化脚本工具&#xff0c;它让开发者能够以直观和灵活的方式创建复杂的行为和交互性。通过结合 Action Graphs 和 Push Graphs&#xff0c;以及利用丰富的节点库&#xff0c;用户可以在 Omniverse 平台上构建出令人惊叹的虚拟世界…

【书生大模型实战】L1-LangGPT结构化提示词编写实践

一、关卡任务 背景问题&#xff1a;近期相关研究发现&#xff0c;LLM在对比浮点数字时表现不佳&#xff0c;经验证&#xff0c;internlm2-chat-1.8b (internlm2-chat-7b)也存在这一问题&#xff0c;例如认为13.8<13.11。 任务要求&#xff1a;利用LangGPT优化提示词&#x…

【爱创大师】【数学】一元一次方程的实现

科技 教育 艺术 跨界融合&#xff0c;欢迎来到爱创大师 问题引入&#xff1a; 同学们还记得啥是一元一次方程吗&#xff0c;来回顾一下定义 一元一次方程指只含有一个未知数、未知数的最高次数为1且两边都为整式的等式。一元一次方程只有一个根。一元一次方程可以解决绝大多…

【2024最新】国内6个免费的AI绘画网站,支持Midjourney等绘画模型

一、什么是AI绘画&#xff1f; AI绘画&#xff0c;也称为人工智能绘画或机器生成艺术&#xff0c;是指使用人工智能技术来创作视觉艺术作品的过程。这种技术通常涉及到深度学习模型&#xff0c;尤其是生成对抗网络&#xff08;GANs&#xff09;和变分自编码器&#xff08;VAEs…

3d动画软件blender如何汉化?(最新版本4.2)

前言 Blender是一个非常强大的3d动画软件&#xff0c;总能受到大量工作者的青睐。 但是&#xff0c;对于新手来说&#xff08;尤其是英语学渣&#xff09;&#xff0c;语言是个难事。大部分blender打开时都是英文&#xff0c;对新手使用具有一定的障碍。因此&#xff0c;我们需…

向量数据库(二):Qdrant

写在前面 我们借助 Qdrant 来了解向量数据库的一些内容 内容 什么是 Qdrant? Qdrant 是一个开源的针对向量相似性搜索的引擎,它提供了一系列的 API 用于对向量数据进行存储、搜索和管理等功能。 下面是来自 Qdrant 官网的一个架构图: 初步了解 Qdrant 里的一些概念 …

【Qt】QComboBox和QListWidget样式调整问题

总是遇到一些重复的问题&#xff0c;隔得时间长了&#xff0c;就又忘记了&#xff0c;记录一下。 问题1&#xff1a; QComboBox下拉条目高度设置不生效的问题&#xff0c;在样式中设置了item的高度&#xff0c;但是不生效。 解决办法&#xff1a; 创建QCoboBox的时候&#…

SM2p256v1椭圆曲线点加点减倍点python实现代码

首先给出SM2p256v1椭圆曲线的建议参数如下&#xff1a; default_ecc_table {n: FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7203DF6B21C6052B53BBF40939D54123,p: FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF,g: 32c4ae2c1f1981195f9904466a39c9948fe30bbff266…

freemodbus libmodbus

相比libmodbus, freeModbus看起来更舒服。 1. 文件与函数&#xff1a;FreeModbus每个文件函数都不是很多。客户端、服务端函数分开。相对每个函数功能比较明确 freeModbus mbfuncholding_m.c、mbfuncholding.c 函数一共就几个&#xff0c;只看函数列表就猜到函数功能 服务端…

数据库基础-认识数据库

文章目录 0.MySQL登录的基本介绍&#xff1a;1.数据库概念&#xff1a;2.见一见数据库3.主流数据库4.服务器&#xff0c;数据库和表之间的关系 0.MySQL登录的基本介绍&#xff1a; 1.数据库概念&#xff1a; 我们能看见mysqld&#xff0c;但是数据库还是没有看到。 2.见一见数…

SSRF-labs-master靶场

目录 file_get_content.php sql_connect.php download.php dns-spoofing.php dns_rebinding.php 访问链接 http://127.0.0.1/SSRF/# file_get_content.php 在编程语言中&#xff0c;有一些函数可以获取本地保存文件的内容。这些功能可能能够从远程URL以及本地文件 如果没…

Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 | 1/2(含分析过程)

Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 | 1/2&#xff08;含分析过程&#xff09; 目录 Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 | 1/2&#xff08;含分析过程&#xff09; 一、简单介绍 二、机器学习 1、为什么使用机器学习&a…

免费【2024】springboot 厨房达人美食分享平台

博主介绍&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围&#xff1a;SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

体育赛事中的AI运用

7月24日&#xff0c;国际奥委会&#xff08;IOC&#xff09;举办了新闻发布会&#xff0c;宣布计划在2024年巴黎奥运会上展示一系列创新的人工智能&#xff08;AI&#xff09;技术。这次会议不仅是对即将到来的奥运赛事的预热&#xff0c;也深入探讨了人工智能在体育领域可能带…

9000字干货:从消息流平台Serverless之路,看Serverless标准演进

本文分享自华为云社区《9000字干货&#xff1a;从消息流平台Serverless之路&#xff0c;看Serverless标准演进》 这是一个最美好的时代。 随着以数字化升级为代表的第四次工业革命浪潮的席卷&#xff0c;企业正在不断地深化运用这一技术&#xff0c;构建一个又一个全连接&…

从零开始,快速打造API:揭秘 Python 库toapi的神奇力量

在开发过程中&#xff0c;我们常常需要从不同的网站获取数据&#xff0c;有时候还需要将这些数据转化成API接口提供给前端使用。传统的方法可能需要大量的时间和精力去编写代码。但今天我要介绍一个神奇的Python库——toapi&#xff0c;它可以让你在几分钟内创建API接口&#x…