- 博客(505)
- 资源 (44)
- 收藏
- 关注
原创 【Linux】内核裁剪,如何删除未编译到的C源文件和头文件?
1. 最上边行是当前内核的版本信息和编译的时间(没有红色箭头)2.第一个箭头是内核6.14.0版本内核源代码基于笔记本部分使用功能,裁剪后除去内核非使用源代码后C源代码和C头文件数量:9252个(如下图所示,再除去编译中间生成的*.mod.c),(第三个箭头是未做任何裁剪时C和H文件的总数:60480个),裁剪后C源代码和头文件数量仅为默认的15.3%。
2025-05-24 21:15:40
620
原创 【Linux】借助gcc源码修改,搜索头文件当前进展
在使用修改源代码编译的GCC,进行编译内核源代码时,好像性能要慢不少,有可能是打印日志操作有文件IO导致,也有可能是gcc编译的会不会不是release版本不太对,不太清楚。从上图可以看出对于每次的搜索,都是从第一个目录开始搜索,图里也可以看到修改源代码所在的目录,函数,行,昨天的博客感觉对于找到的位置还是不太好。其实,linux内核在编译时和链接时所使用的源代码不一定相同,也即编译能通过,但是链接会报缺少文件这类问题,下一步想找找链接时对于源文件搜索。这里也有一些gcc系统头文件目录搜索。
2025-05-22 23:29:11
418
原创 【Linux】借助gcc源码修改,搜索头文件当前进展
当前碰到一个比较大的问题,就是在编译的时候会生成一些中间文件,在/tmp目录,编译时需要不停的按enter键,才能继续往下编译。从另一方面来说,在内核编译中后期会进行链接,也会报一些头文件不能识别,这块估计得下一步继续摸索。这里的大概的意思是在编译test.c, log.c的时候对外依赖的头文件。这里的日志是编译时将头文件所在的目录添加到编译的头文件搜索目录列表。gcc的代码量比较大,看了很小些gcc源代码,慢慢摸索才找到这里。这只是大概 找到的位置,也不确定是否正确。
2025-05-21 16:15:13
202
原创 【Linux】gcc从源码编译安装,修改源码,验证修改的源码
本文作者分享了从Windows 10切换到Ubuntu Server版本的操作系统使用体验,指出频繁的系统升级通知令人烦恼。接着,作者探讨了学习Linux内核源代码的挑战,特别是如何确定GCC编译时使用的C文件和头文件。作者详细描述了编译GCC 14.2.0的过程,包括修改源代码以添加日志功能,并指出了在修改GCC源代码时需要注意的问题,如避免使用printf以免影响测试用例的通过。最后,作者强调了学习大型项目如GCC的编译框架和Makefile的复杂性。整体而言,文章记录了作者在操作系统切换和GCC源代码
2025-05-15 21:58:44
361
原创 [Linux]针对操作功能裁剪系统后进一步对未使用源代码删除步骤探索
,这里是配置基于下载的内核源代码下次编译时,只编译前面对系统操作使用到的功能所对应的内核源代码,这步实现 很大程度上的裁减,因为内核源代码非常多,反而一台电脑上使用的功能,尤其是驱动真正使用的代码量非常非常少,这里有一个问题,在新生成的config文件时,并不会对原来代码目录的*.c,*.h文件进行变化。这个方法不知道是否可行,编译器在编译的时候一般会在很多头文件目录去搜索,编译器会知道最终编译时所使用的头文件,及头文件所在目录,这样项目编译完成,就会记录所有的头文件,然后把不用的头文件删除。
2025-05-09 11:57:45
835
原创 [Linux]在源代码数量优化中统计源文件数量,目标文件数量的一点作用
在实际的操作中,会发现很多,比如自己的电脑根本就没用到AMD的任何驱动,但是你把AMD代码目录删除,就会报错这类问题,在目录的Kconfig也会对一些模块进行依赖,还有些是源代码的头文件依赖,也有些是函数中代码对其他产品的源代码有依赖,这些有很多看起来不太规范。如果自己的代码基本功比较好的话,可以从源代码级修改,但是由于代码 量比较大,这样操作有点难度。
2025-05-08 12:28:57
302
原创 Ubuntu22.04(禁用)彻底删除Snap以及出现“rm: 无法删除“XXX“:只读文件系统”的解决方案
Ubuntu22.04(禁用)彻底删除Snap以及出现“rm: 无法删除"XXX":只读文件系统”的解决方案 - _Hakuna_Matata - 博客园
2025-05-05 12:26:33
157
原创 【C++】0xc0000005写入位置时发生访问冲突解决方法
很多的程序员在编写代码的时候都在处理的过程中遇到了错误代码0xc0000005导致后续的操作发生了冲突,下面就带来了0xc0000005写入位置时发生访问冲突解决方法,快来一起学习一下吧。要是这样还是没能够成功,那么很可能是你的系统有问题不兼容导致的,因此大家可以通过浆果一键装机工具来进行系统重装解决问题。1、一般用户都是在点击调试按钮进行调试时遇到了错误代码,这是内存的写入错误。2、此时需要更改系统的栈保留空间,点击“项目”选项卡,再点击“项目属性”。4、然后再次进行代码运行,就可以解决之前的问题了。
2025-01-27 13:01:46
981
原创 【C++】如何从源代码编译红色警戒2地图编辑器
这个直接通过微软安装,其实这里先只需要安装很少部分,当通过VS2022打开下载的源代码时,VS会提醒安装所缺的编译器及相关的东西,好像有1、2个多G要安装。这步很重要,这里好像是要更新三方库的下载索引还是啥的,我在这里吃过亏,如果这里不操作,三方库不下载,编译时会报很多源代码依赖不到。vs2022编译前需要下载源代码依赖的三方库,可能会报下载载被x-block-origin。源代码大概1.6M的样子,这里要小心,编译源代码需要的其他三方库比较多。1.红警2的地图编辑器居然更新2.0了,还开源了。
2025-01-18 12:10:14
1770
原创 【Linux】Systemtap在CentsOS9上测试成功了
结果未找到这三个软件实际对应版本的rpm包,最终只能选择安装跟内核版本比较相近的rpm包。安装命令就是rpm -ivh xxx.rpm包。看到运行的效果,可以安心些,哈哈。
2024-12-13 15:14:05
552
原创 【Linux】SystemTap(类似Runtime Hook)在裁剪的系统运行不成功
make[1]: *** [scripts/Makefile.build:244:/tmp/stapksp0yb/stap_304a8a6d54945a958b0401857f38910b_1136_src.o] 错误 1。make: *** [Makefile:1919:/tmp/stapksp0yb] 错误 2。make[1]: *** 正在等待未完成的任务....
2024-11-29 10:35:38
713
原创 【Linux】linux c语言调用send()接口内核调用流程
基于完整日志过滤" a.out "后的日志,因为第1步c代码编译出来的可执行文件叫a.out,执行时内核中的进程名是a.out。到这步其实已经到驱动层了。
2024-11-06 00:32:51
1081
原创 【Linux】进程ID和线程ID在日志中的体现
这里可以看出,在创建进程的时候(实际有可能是线程) ,这个pid是不断变化的,但是如果是创建线程,tgid的值实际上是父进程的值,从上图中可以看出,父进程的tgid值是等于pid的值的(2507行和2516行)。有点类似开始分析打印日志的时候,有多进程时,如果未把多进程的ID打印出来,是不太容易分析出来函数调用流程的,如下图所示红色方框这个字段,(注意,这图未针对函数调用关系混乱)这个pr_info_self打印宏其实还挺厉害,尤其是结合内核裁剪后,说不定更厉害。然后查找进程名为:firefox的进程。
2024-10-18 09:24:00
626
原创 【Linux】C文件头文件数裁剪前58644个,裁剪后9373个
在裁剪目录的时候,发现net的目录里边对drivers/net有一些是基于C源文件调用的依赖,比如我们硬件只有intel,没有思科或者其他厂商的,但是代码里有调用关系,开始我碰到这样的问题就直接修改C代码其实里边就是一些if分支什么的,直接干掉,DOGE。一般是删除自己觉得不太重要的代码或者目录,然后编译,重启验证功能是否正常,在开始裁剪驱动的网络目录时,有几次裁剪后无法上网,还有几次是裁剪后无法使用从Windows到Ubuntu的文件共享功能。这样操作的好处:裁剪后不会有多余的文件,都是通过编译找到的;
2024-10-11 17:48:30
879
原创 【Linux】精简Linux内核编译的简单方法
一般说法:在运行这条命令前,将系统需要在后续内核编译的各种硬件都用一遍,以便你的系统中的模块均被调用了一次,使用“make localmodconfig”命令时,才能将你的系统将调用的模块包含进来。在编辑“~/build/kernel/.config”文件时,将相应项改为“=y”而不是“=m”。一般说法:在运行第二条命令前,将系统的各种硬件都用一遍,以便你的系统中的模块均被调用了一次,使用“make localmodconfig”命令时,才能将你的系统将调用的模块包含进来。
2024-10-06 19:12:01
1049
原创 【Linux】驱动层源代码如何查看进程ID和进程名称?
从第1张图由于字符串过滤的原因看不出来系统的多进程,如果不过滤,看到的是如下图这样子,可以比较好的说明多进程,操作系统不断的多进程切换,就这一张图有不少进程。源代码所在文件、函数、行号、进程ID、进程名以及当前打印的日志类型,中括号外边就是自己想要打印代码的字符串,参数列表什么的。在第1张图里也看到以太接口对收发包和字节的计数,其实数据就是ifconfig命令的,当前数量对不上,前面有博客是可以对得上的。在第1张图里好像还有第0号进程,稀客。登录 - Gitee.com。
2024-09-24 11:04:36
382
原创 【Linux】通过内核以太层可查看应用程序运行时访问外网情况
下边是运行firefox时内核打印的日志,可以看到浏览品运行时调用了很多的操作系统内核系统调用,比如:文件读写、网络数据包的收发等等,其实这些日志还并不全,因为内核源代码有很多调用频率太高的地方不能添加打印日志,容易造成操作系统死机,这即是前一阵子博客讲的为什么需要把函数调用的频率整理出来的原因。在操作系统运行的时候,好像也看到过Windows也会偷偷收发网络数据包,其中有一个当时是Windows操作系统测试网络连通性会去下载一个外网的文件。
2024-09-23 00:40:43
392
原创 【Linux】当前进展
行 2105: [ 2.011995] kernel: [drivers/base/bus.c bus_add_driver 648] bus: 'platform': add driver cht_dollar_cove_ti_pmic。行 2089: [ 2.011850] kernel: [drivers/base/bus.c bus_add_driver 648] bus: 'platform': add driver cht_crystal_cove_pmic。
2024-09-21 13:49:22
1684
2
原创 【Linux】查看操作系统开机时初始化的驱动模块列表的一个方法
1、驱动层module_init(module_init_function)作为模块初始化,并且提供模块内部初始化的函数名;内核最上层看到的是系统调用入口,最底层是驱动。3、从找到的模块函数中添加打印信息;方法也是摸索出来的,不一定对。
2024-09-13 08:37:39
1025
原创 【LINUX】在ubuntu中安装tomcat
#instal jdkapt install openjdk-8-jdk -y#enter install pathcd /home/a/#copy tomcat packagecp /mnt/hgfs/Share/apache-tomcat-9.0.93.tar.gz .#unpress tomcat packagetar -xf apache-tomcat-9.0.93.tar.gz #enter bin pathcd apache-tomcat-9.0.93/bin#start the se
2024-09-11 07:03:52
324
原创 【LINUX】SHELL贪吃蛇
Show()#Mapdo;;;esacdone#Snakefor ((i=0;i++))doecho "*"done#Foodecho "0"dodoneMove();;;;esacArrayMovethenthenthenthenfithen。
2024-09-11 07:02:41
627
原创 【LINUX】ubuntu的docker容器中运行tomcat
Docker在Ubuntu上依赖一些软件包。#复制宿主机tomcat压缩包到容器,以后可能会修改。#查看docker 运行的tomcat id。#复制页面到tomcat服务器目录。#进入docker容器。
2024-09-11 07:01:45
385
类everything java源码
2018-06-13
Orange's chapter8a修改后可以查看消息流程的版本
2018-04-05
chapter5_i
2018-03-13
chatserverclientepoll
2018-08-04
clicks模拟鼠标键盘
2016-03-13
kernel start log.txt with log
2019-10-29
[97世界编程大赛4K组]ts代码运行展示.mp4
2024-05-05
30day 的07_day 添加了大屏显示1024*768,适配了中文显示
2019-04-14
dmesg_with_pr_info_add_file_function.log
2019-11-03
boot.zip Linux kerner grub 5.0.1压缩包
2019-09-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人