linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解

探秘肝脏/肝脏肿瘤图像分割 医学影像技术的新突破 一、引言肝脏 / 肝脏肿瘤图像分割在医学领域的重要性日益凸显,它为肝脏疾病的诊断和治疗提供了关键的技术支持。随着医学成像技术的快速发展,如磁共振成像(MRI)和计算机断层扫描(CT)等,医学图像作为诊治的关键依据,在临床医疗上发挥着越来越重要的作用。肝癌是致死率极高的恶性疾病,利用肝部 CT 图像和 MRI 图像进行医疗诊治至关重要。近年来,深度学习在图像分割领域取得了很大的成功。卷积神经网络(CNN)是深度学习中常用的一种模型,它可以通过学习大量的图像数据来自动提取图像的特征,从而实现准确的图像分割。在肝 阅读详情
前面我们介绍模块编程的时候介绍了驱动进入内核有两种方式:模块和直接编译进内核,并介绍了模块的一种编译方式——在一个独立的文件夹通过makefile配合内核源码路径完成

    那么如何将驱动直接编译进内核呢?

    在我们实际内核的移植配置过程中经常听说的内核裁剪又是怎么麽回事呢?

我们在进行linux内核配置的时候经常会执行make menuconfig这个命令,然后屏幕上会出现以下界面:


这个界面是怎么生成的呢?

跟我们经常说的内核配置与与编译又有什么关系呢?

下面我们借此来讲解一下linux内核的配置机制及其编译过程。

一、配置系统的基本结构

Linux内核的配置系统由三个部分组成,分别是:

   1、Makefile:分布在 Linux 内核源代码根目录及各层目录中,定义 Linux 内核的编译规则;

    2、配置文件(config.in(2.4内核,2.6内核)):给用户提供配置选择的功能;

    3、配置工具:包括配置命令解释器(对配置脚本中使用的配置命令进行解释)和配置用户界面(提供基于字符界面、基于 Ncurses 图形界面以及基于 Xwindows 图形界面的用户配置界面,各自对应于 Make config、Make menuconfig 和 make xconfig)。

   这些配置工具都是使用脚本语言,如 Tcl/TK、Perl 编写的(也包含一些用 C 编写的代码)。本文并不是对配置系统本身进行分析,而是介绍如何使用配置系统。所以,除非是配置系统的维护者,一般的内核开发者无须了解它们的原理,只需要知道如何编写 Makefile 和配置文件就可以。

二、makefile menuconfig过程讲解

当我们在执行make menuconfig这个命令时,系统到底帮我们做了哪些工作呢?

这里面一共涉及到了一下几个文件我们来一一讲解

Linux内核根目录下的scripts文件夹

arch/$ARCH/Kconfig文件、各层目录下的Kconfig文件

Linux内核根目录下的makefile文件、各层目录下的makefile文件

Linux内核根目录下的的.config文件、arm/$ARCH/下的config文件

Linux内核根目录下的 include/generated/autoconf.h文件

1)scripts文件夹存放的是跟make menuconfig配置界面的图形绘制相关的文件,我们作为使用者无需关心这个文件夹的内容


2)当我们执行make menuconfig命令出现上述蓝色配置界面以前,系统帮我们做了以下工作:

    首先系统会读取arch/$ARCH/目录下的Kconfig文件生成整个配置界面选项(Kconfig是整个linux配置机制的核心),那么ARCH环境变量的值等于多少呢?

它是由linux内核根目录下的makefile文件决定的,在makefile下有此环境变量的定义:


或者通过 make ARCH=arm menuconfig命令来生成配置界面,默认生成的界面是所有参数都是没有值的

    比如教务处进行考试,考试科数可能有外语、语文、数学等科,这里相当于我们选择了arm科可进行考试,系统就会读取arm/arm/kconfig文件生成配置选项(选择了arm科的卷子),系统还提供了x86科、milps科等10几门功课的考试题


3)假设教务处比较“仁慈”,为了怕某些同学做不错试题,还给我们准备了一份参考答案(默认配置选项),存放在arch/$ARCH/configs下,对于arm科来说就是arch/arm/configs文件夹:


    此文件夹中有许多选项,系统会读取哪个呢?内核默认会读取linux内核根目录下.config文件作为内核的默认选项(试题的参考答案),我们一般会根据开发板的类型从中选取一个与我们开发板最接近的系列到Linux内核根目录下(选择一个最接近的参考答案)

#cp arch/arm/configs/s3c2410_defconfig .config

4).config

    假设教务处留了一个心眼,他提供的参考答案并不完全正确(.config文件与我们的板子并不是完全匹配),这时我们可以选择直接修改.config文件然后执行make menuconfig命令读取新的选项

    但是一般我们不采取这个方案,我们选择在配置界面中通过空格、esc、回车选择某些选项选中或者不选中,最后保存退出的时候,Linux内核会把新的选项(正确的参考答案)更新到.config中,此时我们可以把.config重命名为其它文件保存起来(当你执行make distclean时系统会把.config文件删除),以后我们再配置内核时就不需要再去arch/arm/configs下考取相应的文件了,省去了重新配置的麻烦,直接将保存的.config文件复制为.config即可.

5)经过以上两步,我们可以正确的读取、配置我们需要的界面了

那么他们如何跟makefile文件建立编译关系呢?

当你保存make menuconfig选项时,系统会除了会自动更新.config外,还会将所有的选项以宏的形式保存在

Linux内核根目录下的 include/generated/autoconf.h文件下


内核中的源代码就都会包含以上.h文件,跟宏的定义情况进行条件编译。

当我们需要对一个文件整体选择如是否编译时,还需要修改对应的makefile文件,例如:


    我们选择是否要编译s3c2410_ts.c这个文件时,makefile会根据CONFIG_TOUCHSCREEN_S3C2410来决定是编译此文件,此宏是在Kconfig文件中定义,当我们配置完成后,会出现在.config及autconf中,至此,我们就完成了整个linux内核的编译过程。

    最后我们会发现,整个linux内核配置过程中,留给用户的接口其实只有各层Kconfig、makefile文件以及对应的源文件。

    比如我们如果想要给内核增加一个功能,并且通过make menuconfig控制其声称过程

    首先需要做的工作是:修改对应目录下的Kconfig文件,按照Kconfig语法增加对应的选项;

    其次执行make menuconfig选择编译进内核或者不编译进内核,或者编译为模块,.config文件和autoconf.h文件会自动生成;

    最后修改对应目录下的makefile文件完成编译选项的添加;

    最后的最后执行make zImage命令进行编译。

三、具体实例

下面我们以前面做过的模块实验为例,讲解如何通过make menuconfig机制将前面单独编译的模块编译进内核或编译为模块

假设我已经有了这么一个驱动:

modules.c

  1. #include <linux/module.h>       /*module_init()*/   
  2. #include <linux/kernel.h> /* printk() */   
  3. #include <linux/init.h>       /* __init __exit */   
  4.   
  5. #define DEBUG   //open debug message   
  6.   
  7. #ifdef DEBUG   
  8. #define PRINTK(fmt, arg...)     printk(KERN_WARNING fmt, ##arg)   
  9. #else   
  10. #define PRINTK(fmt, arg...)     printk(KERN_DEBUG fmt, ##arg)   
  11. #endif   
  12.   
  13. /* Module Init & Exit function */  
  14. static int __init myModule_init(void)  
  15. {  
  16.     /* Module init code */  
  17.     PRINTK("myModule_init\n");  
  18.     return 0;  
  19. }  
  20.   
  21. static void __exit myModule_exit(void)  
  22. {  
  23.     /* Module exit code */  
  24.     PRINTK("myModule_exit\n");  
  25.     return;  
  26. }  
  27.   
  28. module_init(myModule_init);  
  29. module_exit(myModule_exit);  
  30.   
  31. MODULE_AUTHOR("dengwei");                          /*模块作者,可选*/  
  32. MODULE_LICENSE("GPL");                             /*模块许可证明,描述内核模块的许可权限,必须*/  
  33. MODULE_DESCRIPTION("A simple Hello World Module"); /*模块说明,可选*/  
#include <linux/module.h>       /*module_init()*/
#include <linux/kernel.h>	/* printk() */
#include <linux/init.h>		/* __init __exit */

#define DEBUG	//open debug message

#ifdef DEBUG
#define PRINTK(fmt, arg...)		printk(KERN_WARNING fmt, ##arg)
#else
#define PRINTK(fmt, arg...)		printk(KERN_DEBUG fmt, ##arg)
#endif

/* Module Init & Exit function */
static int __init myModule_init(void)
{
	/* Module init code */
	PRINTK("myModule_init\n");
	return 0;
}

static void __exit myModule_exit(void)
{
	/* Module exit code */
	PRINTK("myModule_exit\n");
	return;
}

module_init(myModule_init);
module_exit(myModule_exit);

MODULE_AUTHOR("dengwei");                          /*模块作者,可选*/
MODULE_LICENSE("GPL");                             /*模块许可证明,描述内核模块的许可权限,必须*/
MODULE_DESCRIPTION("A simple Hello World Module"); /*模块说明,可选*/

Step1:将modules.c拷到drivers/char/目录下(这个文件夹一般存放常见的字符驱动)

Step2: vi driver/char/Kconfig,在
    config DEVKMEM后添加以下信息

config MODULES
tristate "modules device support"
default y
help
 Say Y here,the modules will be build in kernel.
 Say M here,the modules willbe build to modules.
 Say N here,there will be nothing to be do. 

Step3:make menuconfig
     Device driver-character devices
           [*]modules device suppor

Step4:vi driver/char/Makefile,在js-rtc后添加
obj-$(CONFIG_MODULES)+= modules.o
CONFIG_MODULES 必须跟上面的Kconfig中保持一致,系统会自动添加CONFIG_前缀

modules.o必须跟你加入的.c文件名一致

最后执行:make zImage modules就会被编译进内核中


第三步:

Step3:make menuconfig
     Device driver-character devices
           [M]modules device suppor
把星号在配置界面通过空格改为M,最后执行make modules,在driver/char/目录下会生成一个modules.ko文件

跟我们前面讲的单独编译模块效果一样,也会生成一个模块,将它考入开发板执行insmod moudles.ko,即可将生成的模块插入内核使用

医学影像分割入门:为什么U-Net至今仍是肝脏CT肿瘤分割的‘首选’? 本文探讨了U-Net在肝脏CT肿瘤分割中的持久优势,分析了其轻量化设计、对称架构和跳跃连接如何完美适配医学影像的小样本、高精度需求。通过对比实验和实战建议,揭示了U-Net在肝脏肿瘤分割任务中超越新模型的根本原因,并提供了PyTorch实现和部署技巧。 阅读详情

相关推荐

CT图像窗宽窗位调整在肝脏肿瘤分割中的关键作用

本文深入探讨了CT图像窗宽窗位调整在肝脏肿瘤AI分割中的关键作用。通过对比无调整、固定参数与自适应方法,揭示了恰当的窗宽窗位设置能显著增强肿瘤与肝组织的对比度,是提升模型分割精度的决定性预处理步骤。文章提供了核心原理、实战代码及避坑指南,强调该技术能让AI模型“看到”与医生诊断一致的图像信息。

blue的专栏 783

make menuconfig过程讲解

cp config_ok .config make menuconfig 中把config_ok拷贝成为.config的原因 当我们在执行make menuconfig这个命令时,系统到底帮我们做了哪些工作呢? 这里面一共涉及到了一下几个文件我们来一一讲解 Linux内核根目录下的scripts文件夹 arch/$ARCH/Kconfig文件、各层目录下的Kconfig文件 Linux内核根目录下的makefile文件、各层目录下的makefile文件 Linux内核根目录下的的.conf

LETFLY'S LAB 4770

Make menuconfig详解与编程

本文将详细解释make menuconfig的使用方法,并提供相应的源代码作为示例。make menuconfigMakefile中的一个目标,它提供了一个交互式的菜单界面,用于配置内核选项。通过该菜单界面,开发者可以方便地选择和设置内核的各种选项,如编译选项、驱动支持、功能模块等。通过Makefile中的menuconfig目标和相应的命令,开发者可以轻松地使用make menuconfig进行内核配置。通过make menuconfig命令,开发者可以灵活地配置和定制内核,以满足特定的需求和要求。

PixelCoder的博客 1354

【嵌入式Linux】源码菜单配置 | 编译 | 菜单配置的实现 | 源码编译的实现

【嵌入式Linux】源码菜单配置 | 编译 | 菜单配置的实现 | 源码编译的实现

Hi 3016

内核配置必经之路-menuconfig

在嵌入式领域当中,在配置内核的时候会有很多配置方法,比如说make config(基于文本的为传统的配置界面)、make oldconfig(如何只想在原来内核配置的基础上修改一部分,则会省去很多麻烦)、make xconfig(基于图形窗口模式的配置界面,Xwindow下推荐使用)、make menuconfig(基于文本选择的配置界面,字符终端下推荐使用),以上4种配置方式的目的都是在源码的顶...

weixin_42800884的博客 3602

Linux 内核配置机制make menuconfigKconfigmakefile讲解

但是一般我们不采取这个方案,我们选择在配置界面中通过空格、esc、回车选择某些选项选中或者不选中,最后保存退出的时候,Linux内核会把新的选项(正确的参考答案)更新到.config中,此时我们可以把.config重命名为其它文件保存起来(当你执行make distclean时系统会把.config文件删除),以后我们再配置内核时就不需要再去arch/arm/configs下考取相应的文件了,省去了重新配置的麻烦,直接将保存的.config文件复制为.config即可.

u011029104的专栏 5421

基于飞桨Res-Unet网络实现肝脏肿瘤分割任务

点击左上方蓝字关注我们【飞桨开发者说】韩霖,PPDE飞桨开发者技术专家,吉林大学计算机科学与技术学院,主要研究医学影像方向。项目背景近年来,快速发展的深度学习技术已经渗透进了各行各业,医...

百度大脑 3982

深度学习的医学影像肝脏肿瘤病症检测与诊断系统

随着医学影像技术和计算机视觉技术的快速发展,医疗诊断中的自动化工具正逐渐成为临床应用中的研究热点。在肝脏肿瘤的早期检测与诊断中,传统的人工方法耗时较长,且容易受医生的主观经验影响,诊断结果的准确性和一致性难以保证。基于此,本研究结合深度学习技术,设计并实现了一个医学影像肝脏肿瘤病症检测与诊断系统,旨在提高诊断效率、减少误诊率,并为医生提供科学、直观的辅助工具。

ZSW1218的博客 1194

基于U-net的肝脏肿瘤分割实战(Pytorch实现)

这是我去年本科毕业设计的一部分,去年使用tensorflow去实现的,这几天就随手用Pytorch做了一下实现。肝脏肿瘤的分割是医学影像分割里面比较重要的一部分,实现从人的CT或MRI影像中将肝脏区域肿瘤给分割出来,对临床治疗还是有一定的实际意义。在这里网络还是使用最简单的U-net网络,U-net作为医学影像分割中的最经典的方法,其Encoder和Decoder的结构以及对称式的设计对后面的很多网络都有很大的影响。 网络结构 跳跃连接部分就是讲encoder的特征图和decoder的特征图在通道纬度上做

lwf1881的博客 7655

医学图像语义分割:前列腺肿瘤、颅脑肿瘤、腹部多脏器 MRI、肝脏 CT、3D肝脏、心室

只需要把传统神经网络,最后全连接层变成全卷积网络(得到 2 维特征图),再接 softmax 获取每个像素点的分类信息。输入图像 → [特征提取] → [特征融合] → [上采样] → 输出分割图。输出:从一维类别分类,变成二维像素点分类。图像语义分割 = 对每个像素点分类。

Debroon 2159

基于 3D U-Net + PyTorch 实现了对 肝脏肿瘤CT图像的高精度分割 医学ct图像数据集 肝脏肿瘤数据集 约300张 结合 ITK-SNAP 或 3D Slicer

基于 3D U-Net + PyTorch 实现了对 肝脏肿瘤CT图像的高精度分割 医学ct图像数据集 肝脏肿瘤数据集 约300张 结合 ITK-SNAP 或 3D Slicer

2401_88440984的博客 1308

医学影像公开数据集

1、肝脏肿瘤分割挑战数据集(LiTS - Liver Tumor Segmentation Challenge) 由于肝脏的异质和扩散形态,肿瘤病变的自动分割是很有挑战的。通过增强腹部CT扫描获得数据,分割标准结果是由世界各地临床站点提供。训练数据集有130例和测试数据集70例。下载地址:https://competitions.codalab.org/competitions/17094。我也分享到百度云盘上了:https://pan.baidu.com/s/1sDSBMoa9V8aMC5scU8nGE

爱CV 4931

TransUNet实战:从零构建肝脏肿瘤分割系统

通过这个项目,我们验证了TransUNet在医学图像分割中的有效性。引入多模态数据融合尝试3D版本的TransUNet开发交互式修正工具探索联邦学习保护数据隐私整个开发过程中,InsCode(快马)平台提供了很大帮助。它的在线编辑器让团队协作更方便,一键部署功能让我们能快速测试API接口。特别值得一提的是,平台的计算资源足够支持医学影像处理这种计算密集型任务,省去了自己搭建环境的麻烦。对于想尝试医学AI项目的开发者,我的建议是:先从公开数据集开始,充分理解数据特点后再设计模型架构。使用。

OnyxPanther23的博客 406

肝脏/肝脏肿瘤图像分割数据集(猫脸码客第261期)

自动上下文模型(ACM)由密集块和上下文模块组成,在不同层次上捕获并结合不同尺度下的物体上下文信息,提高图像分割准确性。上下文模块通过多次卷积操作和池化操作实现对不同尺度下的信息提取和融合。密集块由多个密集块单元(DenseBlockUnits,DBU)组成,每个 DBU 由多个卷积层和批量归一化层组成。ACM 的输出层是一个具有跳接连接的全卷积层,它使用了扩张卷积操作,进一步提高了分割准确性。

猫脸码客的博客 1073

11、深度学习在肝脏肿瘤分割中的应用

本文探讨了基于深度学习的肝脏肿瘤分割方法,采用U-Net架构与ResNet34编码器相结合的模型,在公开的LiTS数据集上进行了训练和测试。通过数据预处理、模型训练、性能评估与优化,实现了对肝脏肿瘤的准确分割,并使用Dice相似系数(DSC)作为主要评估指标。尽管模型在小肿瘤分割和切片计算方面仍存在不足,但其整体性能表现良好,具有在临床诊断辅助、医学研究和远程医疗中应用的潜力。未来的研究方向包括模型架构优化、数据处理方法改进以及硬件升级。

alice7model的博客 163

从40%到90%:我是如何通过数据预处理提升肝脏肿瘤分割模型效果的

本文详细介绍了如何通过系统化的数据预处理策略,将肝脏肿瘤分割模型的Dice系数从40%提升至90%。文章探讨了医学图像分割的挑战,包括低对比度困境和小目标问题,并分享了灰度值重构、多模态预处理流水线等关键技术突破。这些方法在临床实践中显著提升了肿瘤检出率和分割精度。

a3b4c5的博客 626

75、医学影像在癌症分析中的应用:肝脏肿瘤与前列腺癌研究

本文探讨了医学影像技术在肝脏肿瘤和前列腺癌研究中的应用。肝脏肿瘤研究通过超声纹理分析、CHW多尺度异质性描述与孔隙率量化,结合支持向量机实现高精度化疗反应评估;前列腺癌研究则基于CT图像与有限元生物力学模型,非侵入性估计组织弹性参数,并结合年龄特征进行癌症分级分期分类。两项研究均展示了影像数据在肿瘤诊断与预后评估中的巨大潜力,未来方向包括多模态融合、模型优化、多中心验证及个性化治疗应用。

kmeans3miner的博客 79

部署和调用 ONNX 模型进行肝脏肿瘤分割

本文详细介绍了使用ONNX模型进行肝脏肿瘤分割的完整流程。主要内容包括:环境配置(安装onnxruntime等必要库)、模型加载方法、医学影像数据预处理步骤(读取NIFTI格式、归一化处理)、模型推理过程、结果后处理(概率图转二值掩码)以及可视化展示技巧。特别强调了数据预处理一致性、动态输入维度处理和GPU加速等关键注意事项,为医学影像分割任务的模型部署提供了实用指导。

2301_78068649的博客 443
上一篇: android源码解析 ---- camera 照相机 摄像机
下一篇: Fedora10 安装 wine
xiaolei05
博客等级 码龄17年 127粉丝 138原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值