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

【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.lryc.cn/news/460701.html

相关文章:

  • 线性自抗扰控制(LADRC)系统算法框图
  • 基于SSM的微信小程序博客管理系统(博客1)
  • text-behind-image:轻松创建文字背景图片设计
  • 前端reactvue3——实现滚动到底加载数据
  • qt 安装提示 无法定位程序输入点 systemparametersinfofordpi于动态链接库
  • 算法笔记day04
  • 实战篇:(四)Vue2 + Three.js 创建可交互的360度全景视图,可控制旋转、缩放完整代码
  • 【load_file读文件】
  • JavaScript object(2)
  • Acwing 排序
  • 分布式环境下验证码登录的技术实现
  • 数据结构-5.9.树的存储结构
  • 【Linux】解锁线程基本概念和线程控制,步入多线程学习的大门
  • uniapp学习(005-2 详解Part.2)
  • 深度学习的关键概念和术语
  • navicate可视化数据库操作-cnblog
  • kubernetes中的微服务
  • Python 量子机器学习及其应用
  • echarts显示隐藏柱状图柱子的背景色
  • QT文件操作【记事本】
  • Linux 定时备份系统日志
  • 音视频入门基础:FLV专题(15)——Video Tag简介
  • 尚硅谷rabbitmq2024 第15-18节 springboot整合与可靠性答疑
  • ctfshow-web 萌新题
  • 基于RPA+AI的网页自动填写机器人 | OPENAIGC开发者大赛高校组优秀作品
  • Tmux常用操作--云GPU版
  • 股市入门常见术语介绍
  • 专栏十九:单细胞大数据时代使用scvi和scanpy整合数据
  • C语言编程必备知识
  • k8s 1.28 集群部署