当前位置: 首页 > article >正文

【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.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.kler.cn/a/350370.html

相关文章:

  • STM32单片机:GPIO模式
  • mac m1下载maven安装并配置环境变量
  • 记录一下OpenCV Contrib 编译踩的坑
  • Kotlin Bytedeco OpenCV 图像图像54 透视变换 图像矫正
  • 【HarmonyOS-开发指南】
  • 浅说树上倍增(下)
  • jarvis OJ web浅析
  • 微信小程序路由跳转的区别及其常见的使用场景
  • springboot-网站开发-linux服务器部署jar格式图片存档路径问题
  • 堆排序(C++实现)
  • MySQL 之LRU 缓存管理算法
  • ESP32-S3芯片AI开发应用,图像识别与语音唤醒方案,启明云端乐鑫代理商
  • 24/10/12 算法笔记 NiN
  • Linux10-9
  • Git 深度解析 —— 从基础到进阶
  • [哈工大]战德臣 数据库系统 第3讲 关系模型之基本概念
  • 【时时三省】(C语言基础)函数介绍strcat
  • p20 docker自己commit一个镜像 p21 容器数据卷 p22mysql同步数据(国内镜像被封锁暂时往后放)p23具名挂载和匿名挂载
  • 代码随想录算法训练营第五十五天| 图论入门
  • C#源码安装ZedGraph曲线显示组件
  • flutter 使用三方/自家字体
  • 深度学习:LSTM循环神经网络实现评论情感分析
  • 【rk3229 android10 多wifi模块兼容提示bt报错问题】
  • PHP cURL 教程
  • 从零实现llama3(学习)
  • PLM预训练语言模型Pre-trained Language Model