【Linux】C文件头文件数裁剪前58644个,裁剪后9373个
裁剪后可以访问网络和从Windows共享的文件夹:
纯C代码编译(不包含打包)时长比较:未裁剪前:大约5.5小时,裁剪后大约35分钟。
C文件和头文件数量比较(目录里边实际还有tools和scripts目录):
裁剪前后一些目录比较,比如arch,原来里边有很多种CPU架构,裁剪后只有x86了:
这是驱动的网络目录的以太层目录,原来的厂商比较多,裁剪后只有intel了:
这是intel目录,原来还是比较多的,裁剪后只有e1000这个虚拟网卡类型了:
还有就是编译的目标文件数量,裁剪后大概是在3397个,裁剪前大概是21000个。
裁剪方法:
1、前一篇讲make localmodconfig博客;
2、 直接修改Kconfig和Makefile的方法;
3、目录删除,比如像tests、ci这类目录;
直接删除C文件和头文件如果不小心删除太多会导致编译不过问题,或者编译可以通过,连接vmlinux.o前后会出现符号找不到的情况。
最简单的办法就是:
1、把代码库的C文件和头文件全部删除;
2、使用git status命令把所有删除的文件记录到一个文件;
3、然后开始编译,编译中会报源文件和头文件找不到,然后去第2步骤记录文件的这个文件搜索,然后使用git checkout 找到的结果,这里要小心,有时候会搜索到多个记录;
这样操作的好处:裁剪后不会有多余的文件,都是通过编译找到的;坏处就是会比较消耗时间;
在裁剪的过程中:
一般是删除自己觉得不太重要的代码或者目录,然后编译,重启验证功能是否正常,在开始裁剪驱动的网络目录时,有几次裁剪后无法上网,还有几次是裁剪后无法使用从Windows到Ubuntu的文件共享功能。
其实还有很多没有裁剪得很好的地方,比如:裁剪后drivers目录文件夹还是很多:
其实按照我的理解,如果裁剪的干净的话,这个目录剩余不了几个目录了:一些框架性的目录和跟自己系统使用的驱动强相关的代码在就可以了,其他目录都得干掉,因为从硬件来说,就这几个:
除了框架其他没有什么需要保留的目录。。。
在裁剪目录的时候,发现net的目录里边对drivers/net有一些是基于C源文件调用的依赖,比如我们硬件只有intel,没有思科或者其他厂商的,但是代码里有调用关系,开始我碰到这样的问题就直接修改C代码其实里边就是一些if分支什么的,直接干掉,DOGE。
由于内核源代码还是非常复杂的,修改源代码有相当的复杂度,因为有时候各种相互依赖,比如跨目录依赖等等这类。
还有有些依赖是在Makefile和Kconfig里的,内核根目录的Makefile感觉相当复杂,而且编译框架里还有一个专门的scripts目录和tools目录里部分代码,有点难。。。
比如:其实sound目录和virt目录都已经被删除的干净了,但是把这两个目录直接删除编译会报错,编译框架感觉代码又太复杂,看不懂,找不到根因,现在就是放两个空文件在这里。。。。
文件地址(大小32.26M,原始linux6.9.0压缩包223M):
文件地址:Linux-6.9.0-V3.0_20241011.tar.gz · r77683962/linux-6.9.0 - Gitee.comhttps://gitee.com/r77683962/linux-6.9.0/blob/br_package/Linux-6.9.0-V3.0_20241011.tar.gz
裁剪后,其他不说,看代码至少方便很多,另一个就是编译快很多,对于学习内核源代码帮助应该不小。
感谢阅读。
相关文章:

【Linux】C文件头文件数裁剪前58644个,裁剪后9373个
裁剪后可以访问网络和从Windows共享的文件夹: 纯C代码编译(不包含打包)时长比较:未裁剪前:大约5.5小时,裁剪后大约35分钟。 C文件和头文件数量比较(目录里边实际还有tools和scripts目录…...
线性自抗扰控制(LADRC)系统算法框图
非线性ADRC(NLADRC)详细算法框图和源代码请参考专栏系列文章,常用链接如下: 1、NLADRC自抗扰控制 NLADRC自抗扰控制从Simulink仿真到PLC控制实现_自抗扰控制器 simulink仿真-CSDN博客文章浏览阅读1.6k次,点赞2次,收藏7次。本文介绍了如何将ADRC自抗扰控制算法从Simulink…...

基于SSM的微信小程序博客管理系统(博客1)
👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM的微信小程序博客管理系统实现与设计,实现了管理员与用户,管理员实现了用户管理、博文信息管理、博文类型管理、我的博文管理、个人名片分享管理、签到管理…...

text-behind-image:轻松创建文字背景图片设计
在网页设计中,视觉效果往往能够极大地提升用户体验。其中,将文字置于图片背后是一种常见的设计手法,可以增加页面的层次感和视觉吸引力。今天,我将向你介绍一个名为 text-behind-image 的JavaScript库,它可以让你轻松实…...

前端reactvue3——实现滚动到底加载数据
文章目录 ⭐前言⭐react 实现滚动加载⭐vue3 实现滚动加载⭐总结⭐结束 ⭐前言 大家好,我是yma16,本文分享 前端react&vue3——实现滚动加载(到底部加载) scrollTop 属性 一个双精度浮点值,表示元素当前从原点垂直…...
qt 安装提示 无法定位程序输入点 systemparametersinfofordpi于动态链接库
安装 qt-creator-opensource-windows-x86_64-14.0.2.exe 有以下提示 无法定位程序输入点 systemparametersinfofordpi于动态链接库 路径 qt-creator-opensource-windows-x86_64-14.0.2.exe 更新系统 平台win10 很久之前的版本,关闭了更新,更新到 Win…...

算法笔记day04
目录 1. 在字符串中找出连续最长的数字串 2.岛屿数量 3.拼三角 1. 在字符串中找出连续最长的数字串 字符串中找出连续最长的数字串_牛客题霸_牛客网 (nowcoder.com) 算法思路: 这是一道简单的双指针题目,首先用i遍历数组,当遍历到数字的时…...

实战篇:(四)Vue2 + Three.js 创建可交互的360度全景视图,可控制旋转、缩放完整代码
Vue2 Three.js 创建可交互的360度全景视图,可控制旋转、缩放 引言 在现代网页开发中,三维图形技术已经成为提升用户体验的重要工具。本文将展示如何使用 Three.js 创建一个简单的可交互360度全景视图。通过这一项目,你将能够学习到基本的场…...

【load_file读文件】
一、文件操作基础 show 先试试 show variables;发现显示了三百多行的系统变量: 这是数据库的目录: mysql有多种编码方式,有数据库编码、连接时的编码、还有客户端的编码: 这里还有一个日志路径,这个日志是需要手动打开的&#…...

JavaScript object(2)
这样的话,就变成只读了。...

Acwing 排序
1.快速排序 主要思想:基于分治思想。通过选择一个基准元素,将数组分为两部分,左边部分元素都小于等于基准,右边部分元素都大于等于基准。然后对这两部分分别递归地进行排序。 分区逻辑:双指针算法 左指针i从左往右找…...
分布式环境下验证码登录的技术实现
分布式环境下验证码登录的技术实现 在分布式系统中,实现验证码登录是一个复杂但至关重要的任务。它不仅能防止暴力破解和自动化攻击,还能提高系统的安全性和用户体验。本文将详细介绍在分布式环境下如何实现验证码登录,涵盖验证码的生成、存…...

数据结构-5.9.树的存储结构
一.树的逻辑结构: 二.双亲表示法(顺序存储): 1.树中除了根结点外每一颗树中的任意一个结点都只有一个父结点(双亲结点); 2.结点包括结点数据和指针; 3.上述图片中右边的顺序存储解析:比如A结点左边的0,就…...

【Linux】解锁线程基本概念和线程控制,步入多线程学习的大门
目录 1、线程初识 1.1线程的概念 1.2.关于线程和进程的进一步理解 1.3.线程的设计理念 1.4.进程vs线程(图解) 1.5地址空间的第四谈 2.线程的控制: 2.1.关于线程控制的前置知识 2.2创建线程的系统调用: 这个几号手册具体…...

uniapp学习(005-2 详解Part.2)
零基础入门uniapp Vue3组合式API版本到咸虾米壁纸项目实战,开发打包微信小程序、抖音小程序、H5、安卓APP客户端等 总时长 23:40:00 共116P 此文章包含第41p-第p47的内容 文章目录 mainifest.json文件配置获取微信小程序appid注册微信小程序微信小程序控制台图形界…...
深度学习的关键概念和术语
特征 特征是图像上可进行视觉辨识的区域。特征通常代表对应用相关的内容(缺陷、对象、对象的特定部分)。 特征尺寸 仅用于聚焦模式下的绿色分类、红色、蓝色定位和蓝色读取工具。 您认为对分析图像内容最重要的图像特征的主观大小。该特征尺寸确定用于…...

navicate可视化数据库操作-cnblog
1 连接数据库 点击链接,自定义名称,输入root密码 2 准备按照图例创建数据库demo 3 新建数据库...

kubernetes中的微服务
目录 一 什么是微服务 二 微服务的类型 三 ipvs模式 3.1 ipvs模式配置方式 四 微服务类型详解 4.1 clusterip 4.2 ClusterIP中的特殊模式headless 4.3 nodeport 4.4 loadbalancer 4.5 metalLB 4.6 externalname 五 Ingress-nginx 5.1 ingress-nginx功能 5.2 部署…...
Python 量子机器学习及其应用
Python 量子机器学习及其应用 目录 🌀 量子机器学习的基础概念💡 量子计算的原理与经典计算的区别🔑 量子算法在机器学习中的应用潜力⚛️ 量子计算与经典机器学习算法的结合🚀 案例展示:量子算法提升机器学习效率&a…...

echarts显示隐藏柱状图柱子的背景色
showBackground: true, //控制是否显示背景色backgroundStyle: {// color: rgba(180, 180, 180, 0.4) //背景色的颜色color: red} 关键代码是 showBackground: true, //控制是否显示背景色 设置为false或者直接而不写就是不显示背景色,默认是不显示背景色 true的时…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

算法打卡第18天
从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder [9,3,15,20,7…...

阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)
cd /home 进入home盘 安装虚拟环境: 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境: virtualenv myenv 3、激活虚拟环境(激活环境可以在当前环境下安装包) source myenv/bin/activate 此时,终端…...

恶补电源:1.电桥
一、元器件的选择 搜索并选择电桥,再multisim中选择FWB,就有各种型号的电桥: 电桥是用来干嘛的呢? 它是一个由四个二极管搭成的“桥梁”形状的电路,用来把交流电(AC)变成直流电(DC)。…...
人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型
在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重,适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解,并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...

密码学基础——SM4算法
博客主页:christine-rr-CSDN博客 专栏主页:密码学 📌 【今日更新】📌 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 编辑…...
PostgreSQL 与 SQL 基础:为 Fast API 打下数据基础
在构建任何动态、数据驱动的Web API时,一个稳定高效的数据存储方案是不可或缺的。对于使用Python FastAPI的开发者来说,深入理解关系型数据库的工作原理、掌握SQL这门与数据库“对话”的语言,以及学会如何在Python中操作数据库,是…...