【Linux】C文件头文件数裁剪前58644个,裁剪后9373个

ops/2024/10/18 10:03:08/

裁剪后可以访问网络和从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.comicon-default.png?t=O83Ahttps://gitee.com/r77683962/linux-6.9.0/blob/br_package/Linux-6.9.0-V3.0_20241011.tar.gz

裁剪后,其他不说,看代码至少方便很多,另一个就是编译快很多,对于学习内核源代码帮助应该不小。

感谢阅读。


http://www.ppmy.cn/ops/124278.html

相关文章

uibot发送邮件:自动化邮件发送教程详解!

uibot发送邮件的操作指南?uibot发送邮件的两种方式? 在现代办公环境中,自动化流程的引入极大地提高了工作效率。uibot发送邮件功能成为了许多企业和个人实现邮件自动化发送的首选工具。AokSend将详细介绍如何使用uibot发送邮件。 uibot发送…

【论文#性能对比】Video coding with H.264/AVC: Tools, Performance, and Complexity

目录 摘要1.前言2.标准化视频编码方案的概念3. H.264/AVC 编码方案3.1 帧内预测3.2 运动补偿预测3.3 变换编码3.4 熵编码方案3.5 自适应去块滤波器3.6 错误鲁棒性和网络友好性 4.码率受限的编码器控制5. H.264/AVC 的配置文件和级别6.与先前标准的比较6.1 编码效率6.2 硬件复杂…

Django 后端数据传给前端

Step 1 创建一个数据库 Step 2 在Django中点击数据库连接 Step 3 连接成功 Step 4 settings中找DATABASES Step 5 将数据库挂上面 将数据库引擎和数据库名改成自己的 Step 6 在_init_.py中加上数据库的支持语句 import pymysql pymysql.install_as_MySQLdb() Step7 简单创建两…

c#代码介绍23种设计模式_16迭代器模式

目录 1、迭代器模式的介绍 2、迭代器模式的定义 3、迭代器模式的结构 4、代器模式角色组成 5、迭代器实现 6、迭代器模式的适用场景 7、迭代器模式的优缺点 8、.NET中迭代器模式的应用 9、实现思路 1、迭代器模式的介绍 迭代器是针对集合对象而生的,对于集合对象而言…

鸿蒙 Next 实战: 环境搭建

前言 作为独立开发者,如果我们错过了传统移动 App,和后起小程序的红利,那万物互联 AI 的应用开发就得抓住了。 虽然个人上架应用平台难易都差不多,但是鸿蒙生态当前正需要广大开发者参与,一旦上架,相比其…

Git配置token免密登录

配置token免密登录 如果不用ssh免密登录,还有其他基于Token那得免密登录方法吗? 2021年开始,github就不能使用密码登录git了,需要使用token作为密码登录,需要自己在setting中创建。 那么每次都需要我手动输入token密…

0x11 科迈 RAS系统 Cookie验证越权漏洞

参考: 科迈 RAS系统 Cookie验证越权漏洞 | PeiQi文库 (wgpsec.org)免责声明 欢迎访问我的博客。以下内容仅供教育和信息用途: 合法性:我不支持或鼓励非法活动。请确保遵守法律法规。信息准确性:尽管我尽力提供准确的信息,但不保证其完全准确或适用。使用前请自行验证。风…

数据库

约束 1.是否许空值 not null 不能为空 2.默认值(default) 3.主键(primary key) 自增(auto——increment) 主键的特性: 1.唯一性 2.非空 3.int类型可以设置自增 4.非空主键不能设置自…