- 博客(120)
- 资源 (17)
- 收藏
- 关注
原创 Linux内核追踪神器:perf实现原理剖析(转)
在 Linux 性能分析的广袤领域中,Perf 犹如一颗璀璨的明星,散发着独特的光芒。Perf,即 Performance 的缩写,是一款集成于 Linux 内核的性能分析工具,如同一位技艺精湛的诊断大师,能深入系统的各个角落,精准地剖析系统性能。它以事件驱动为核心机制,如同精密的仪器,能够捕捉到硬件、软件以及内核层面的各种性能事件。随着 Linux 内核的不断演进,Perf 也在持续发展壮大。从最初简单的性能监测,到如今具备丰富多样的功能,Perf 已经成为 Linux 性能分析不可或缺的工具。
2025-04-02 11:18:55
1025
原创 Linux TCP回显服务器实现(deepseek教我写代码)
通过告诉内核"父进程完全不需要子进程的退出信息",使得内核自动回收终止的子进程资源,从而从根本上避免了僵尸进程的产生。这种方式:简洁高效(无需循环调用wait()适合不需要收集子进程状态的场景是现代Linux系统中处理僵尸进程的推荐方式之一这两个close()明确进程职责:父子进程各司其职,关闭不需要的资源引用精细控制生命周期:通过引用计数机制确保资源及时释放系统健壮性保障:预防资源泄漏导致的级联故障这种模式体现了UNIX哲学中"做一件事并做好"的设计思想,是构建可靠网络服务的基础。
2025-03-22 22:43:33
1005
原创 吐血整理 | 肝翻linux内核常用数据结构汇总(转)
在计算机科学的璀璨星空中,数据结构是一颗耀眼的明星,它是计算机存储、组织数据的巧妙方式,如同建筑中的蓝图,规划着数据的布局与管理。简单来说,数据结构就是相互之间存在一种或多种特定关系的数据元素的集合,它涵盖了数据的逻辑结构、物理结构以及相关的操作运算。数据结构主要分为线性结构和非线性结构。线性结构中的数据元素呈现出一对一的线性关系,如同一条整齐排列的队伍,数组、链表、栈和队列等都属于这一范畴;非线性结构则更为复杂,元素之间存在一对多或多对多的关系,像是一张错综复杂的关系网,树和图就是典型的非线性结构。
2025-03-20 09:51:13
946
原创 Linux C++编程死锁排查:借助Shell与GDB找到真相(转)
在多线程编程的领域中,死锁是一个让人头疼不已的问题。简单来说,死锁就是多个线程因为互相争夺资源,而陷入一种无限期的等待状态,导致所有线程都无法继续执行。就好比两个人过独木桥,独木桥一次只能容纳一个人通过,这两个人同时上了桥,一个从左边往右边走,另一个从右边往左边走,走到桥中间时,谁也不愿意退回去让对方先过,于是就僵持在那里,谁都无法到达对岸,这就是死锁在现实生活中的生动写照。在程序里,死锁通常发生在多个线程需要获取多个共享资源的时候。比如,线程 A 持有资源 1,并且想要获取资源 2;
2025-03-20 09:42:12
664
原创 Linux性能分析神器ftrace:从原理到实战(转)
ftrace,即 Function Trace 的缩写,是 Linux 内核自带的一款强大的跟踪工具。它诞生于 2008 年,由 Steven Rostedt 开发,并在 2.6.27 版本的内核中首次引入。最初,ftrace 只是一个简单的函数跟踪器,主要用于记录内核的函数调用流程,随着不断的发展和完善,如今它已演变成一个功能丰富的跟踪框架,采用插件式的设计,支持开发者添加更多类型的跟踪功能,在 Linux 内核的开发与调试中发挥着不可或缺的作用。
2025-03-20 09:39:18
777
原创 ubuntu中的ens33网卡在ifconfig中被默认关闭了?
突然打开ubuntu虚拟机,发现连不上网,输入ifconfig发现ens33是关闭的状态。systemd中的NetworkManager管理着系统的网络服务,使用:查看服务状态是显示运行的。查看systemd的启动日志:显示如下: 看到关键信息: 使用nmcli工具可以管理NetworkManager:此处主要是打开了NetworkManager的一个全局开关,允许管理所有网络设备,存储位置为:/var/lib/NetworkManager/NetworkManager.state,内容应为:
2025-03-18 16:00:43
839
原创 linux makefile tutorial
一个makefile的教程,几个小时就能看完,对makefile有个总体加细节的系统了解,非常不错:Learn Makefiles With the tastiest examples中文翻译版:起步 - Makefile 教程 (gavinliu6.github.io)gcc官网手册:GNU make
2025-03-11 16:57:24
241
原创 P2P中NAT穿越方案(UDP/TCP)(转)
转自:P2P中NAT穿越方案(UDP/TCP)_udp反向链接-优快云博客本文介绍了传统基于udp的打洞方式,更进一步阐述了tcp打洞的原理,是对于打洞原理最完善的讲解。————————————1、P2P简介对等网络,即对等计算机网络,是一种在对等者(Peer)之间分配任务和工作负载的分布式应用架构,是对等计算模型在应用层形成的一种组网或网络形式。因此,从字面上,P2P可以理解为对等计算或对等网络。在P2P网络环境中,彼此连接的多台计算机之间都处于对等的地位,各台计算机有相同的功能,无主从之分,一台计算
2025-03-10 11:59:02
1086
原创 TCP 和 UDP 可以使用同一个端口吗?(转)
当 TCP 服务进程重启时,服务端会出现 TIME_WAIT 状态的连接,TIME_WAIT 状态的连接使用的 IP+PORT 仍然被认为是一个有效的 IP+PORT 组合,相同机器上不能够在该 IP+PORT 组合上进行绑定,那么执行 bind() 函数的时候,就会返回了 Address already in use 的错误。如果客户端都是与同一个服务器(目标地址和目标端口一样)建立连接,那么如果客户端 TIME_WAIT 状态的连接过多,当端口资源被耗尽,就无法与这个服务器再建立连接了。
2025-03-10 10:49:20
372
原创 Tutk P2P的原理和常见的实现方式(转)
例如,当A发送一个UDP数据包给B的公网地址时,数据包最初有源IP地址和端口地址10.0.0.1:1234和目的地址155.99.25.11:62001,NAT收到包后,将其转换为源155.99.25.11:62000(A的公网地址)和目的10.1.1.3:1234,然后再转发给B。在中间件为常见的NAPT的情况下(也是本文主要讨论的),内网中的客户端没有单独的公网IP地址,而是通过NAPT转换,和其他同一内网用户共享一个公网IP。假设客户端A和客户端B的地址都是内网地址,且在不同的NAT后面。
2025-03-07 16:34:20
878
原创 打破边界,Linux环境下的内存越界调试技巧(转)
在 Linux 系统中,程序的运行依赖于内存的合理分配和使用。当程序发生内存越界时,就好比一个人在自己的房间里肆意妄为,不仅把自己房间搞得乱七八糟,还闯入了别人的房间捣乱。程序会访问到不属于它分配范围内的内存空间,这会导致一系列严重的后果。比如,它可能会改写其他重要数据,就像在别人房间随意涂改别人的东西,使得程序后续使用这些数据时出现错误;也可能会导致内存泄漏,就像一个人不断占用别人的房间却不归还,使得系统内存资源越来越少;更严重的是,直接导致程序崩溃,整个 “居住环境” 都被破坏。
2025-02-18 22:01:35
993
原创 Linux进程间通信:深度剖析与实战指南(转)
Linux 进程间通信(Inter-Process Communication,IPC)是指在多道程序环境下,进程间进行数据交换和信息传递的一种机制或方法。在现代操作系统中,进程是系统资源分配的基本单位,不同进程之间需要相互合作和通信,才能完成各种任务。进程间通信是实现进程间协作的重要手段。进程间通信在 Linux 系统中至关重要。每个进程在 Linux 环境下都有独立的用户地址空间,一般情况下,进程间的进程空间不能相互访问。但在很多实际应用场景中,进程与进程之间需要进行通信,以共同完成特定的功能需求。
2025-02-18 21:26:33
603
原创 深入内存调试:Valgrind工具的终极指南(转)
tool=<name> 最常用的选项。运行 valgrind中名为toolname的工具。默认memcheck。h –help 显示帮助信息。-version 显示valgrind内核的版本,每个工具都有各自的版本。q –quiet 安静地运行,只打印错误信息。v –verbose 更详细的信息, 增加错误数统计。-trace-children=no|yes 跟踪子线程?[no]-track-fds=no|yes 跟踪打开的文件描述?[no]
2025-02-18 21:18:46
947
原创 解锁Linux“故障宝藏”:Core Dump分析秘籍(转)
Core Dump 分析在 Linux 程序开发与调试中扮演着举足轻重的角色。通过深入了解 Core Dump 的生成机制,我们能够精准地捕捉程序崩溃瞬间的关键信息,为后续的问题排查工作奠定坚实基础。在实际的开发过程中,无论是指针操作不当、数组越界,还是多线程环境下的数据竞争等问题,都可能引发 Core Dump。
2025-02-18 13:10:24
1174
原创 当Linux程序“跑路”:利用Backtrace快速精准定位“案发现场”(转)
backtrace,中文可译为 “回溯”,是一个用于生成函数调用栈的工具,在程序崩溃或者出现异常时,可以通过 backtrace 来获取函数调用栈信息。这些信息就像是程序运行的 “脚印”,记录了程序执行的路径,能帮助我们了解到程序的执行流程,定位问题发生的位置。在程序运行过程中,函数之间会相互调用,形成一个调用链。当程序出现异常退出时,我们往往不知道问题出在哪里。
2025-02-18 09:22:43
925
原创 ubuntu中使用ffmpeg库进行api调用开发
上面是我的一个文件夹结构,我把ffmpeg的库放到lib文件夹中,自己的代码放到src里面,顶层有CMakeLists.txt,各个子文件夹有各自的CMakeLists.txt。一般情况下,熟悉了ffmpeg的命令行操作,把他当成一个工具来进行编解码啥的问题不大,不过如果要把功能集成进自己的软件中,还是要调用ffmpeg的api才行。ffmpeg的源码和外带的模块有点太多了,直接用官网别人编译好的库就可以了,下面的操作就是演示使用cmake调用ffmpeg的库,来进行api的开发。
2024-12-06 16:54:53
644
原创 win10中使用ffmpeg的filter滤镜
有时候文字水印要求实时根据具体情况变化,最简单的例子就是叠加一个gps位置、车辆速度这种,可以使用drawtext滤镜的textfile和reload来操作。不过这种变化的数据需要在实时视频流才有用,固定编码没用,只会读取一次。只需要实时修改文件text.txt内容就可以实现实时更新视频文字水印了。1.3 显示实时文字水印。1.1 添加播放时间。1 给视频加文字水印。1.2 添加本地时间。
2024-11-26 17:01:05
571
原创 ubuntu中使用ffmpeg和nginx推http hls视频流
192.168.63.128:8080为ubuntu的地址和端口,8080端口在配置服务器的时候设置了,地址要改成自己的ubuntu地址。nginx支持推送hls视频流,使用的是rtmp模块,即rtmp流推送成功了,hls流也没问题。/hls/1.m3u8中的"1"是推流命令中的最后那个"1",正规名称叫streamname,/hls是固定的。是新增的,配置中/mnt/hls/是hls的播放列表和视频文件路径,可修改。使用ffplay拉流,当然正规的是用浏览器播放,
2024-11-25 13:21:34
732
原创 win10中使用ffmpeg和MediaMTX 推流rtsp视频
在win10上测试下ffmpeg推流rtsp视频,需要同时用到流媒体服务器。拉流是可以的,同时在流媒体服务器也是可以看到拉流记录。3 打开流媒体服务器,其实就是进入第一步。ffmpeg推流到流媒体服务器。,其他客户端从流媒体服务器拉流。5 ffplay拉流rtsp视频。4 ffmpeg推流rtsp到。2 安装ffmpeg。
2024-11-22 17:02:57
1238
原创 ubuntu中使用ffmpeg和nginx推流rtmp视频
最近在测试ffmpeg推流rtmp视频,单独安装ffmpeg是无法完成推流的,需要一个流媒体服务器,常用nginx,可以直接在ubuntu虚拟机里面测试一下。-flvflags no_duration_filesize 禁止no_duration_filesize错误。-i /mnt/hgfs/vmware_ubuntu_share/input.mp4 要推送的mp4文件路径。这个内容的意思是监听1935端口,rtmp的app名字为live。3 安装nginx的rtmp模块。-re 使用视频原来的帧率。
2024-11-21 17:15:14
1004
1
原创 linux应用层读写i2c设备
一般情况下,linux读写i2c设备需要在内核编写一个i2c驱动,该驱动实现一个字符驱动,然后在字符驱动里面使用i2c框架读写和操作对应的设备。其实linux对于这种规范化的驱动是可以直接在linux应用层进行读写操作的,当然前提是要在设备树上面把对应的i2c设备挂好,让i2c总线驱动知道你这个设备的存在。
2024-09-29 10:51:48
1027
原创 rk3568 linux sdk recovery buildroot “host-python-2.7.16“ compile failed
steps:
2024-09-02 14:52:28
1335
3
原创 rk3568 linux sdk buildroot error “Failed to build miniperl. Please run make minitest“
exit 1'steps:nullpage=1。
2024-08-30 19:20:47
908
原创 windows和office微软官方免费激活教程
微软提供了windows系统和office的官方免费激活,其实不用去买什么激活码,官方提供了激活方式,完全免费。
2024-08-08 09:09:33
20663
4
原创 ubuntu中禁止使用鼠标拖动来移动文件
这种方式有好处也有坏处,好处是移动文件方便了,坏处是误操作后会造成故障,尤其是ubuntu中,本身鼠标就特别灵敏并且操作不便,拖动一个文件后,整个环境都会发生变化,很有可能编译失败,然后各种找问题,索性直接禁止。windows和ubuntu中都可以拖动文件到其他路径,然后达到移动文件的目的。
2024-08-03 12:49:29
597
原创 ubuntu中挂载window硬盘分区
装了ubuntu和windows双系统后,可以直接在ubuntu中访问windows中的硬盘文件,但是需要挂载windows的硬盘。注意一定要区分硬盘的文件系统类型,否则你会发现挂载出错,变成只读文件系统,想写入文件提示错误。
2024-08-02 14:04:13
846
原创 R9000X安装ubuntu后没有声音问题解决
照着上面的步骤搞下来就可以升级到最新的内核了,我升级到6.9内核后重启以后就有外放声音了。如果有报错包依赖错误,执行 sudo apt upgrade可以解决。我买了这台机器后安装了ubuntu 23.10,其他驱动都正常,后来发现声卡没有外放声音,但是音量控制和耳机孔都是可以的。总结原因就是驱动有问题,需要升级ubuntu内核到6.7以上。
2024-07-20 00:18:03
468
原创 ubuntu如何彻底卸载android studio?
最新版的ubuntu已经使用snap进行软件管理了,我用snap-store安装android studio以后,在安装plugin的时候强制退出后,直接再也进不去了,而且重装snap-store和android studio都不行.
2024-07-17 18:24:02
781
1
原创 “sudo apt install libncurses5“ 失败找不到安装包解决
【代码】"sudo apt install libncurses5" find no package solution。
2024-07-10 09:49:46
1430
原创 esp32 ESP-IDF vscode插件安装失败(host=‘files.pythonhosted.org‘, port=443): Read timed out.
5 重新安装后发现源已经换掉了。原因:pip安装源连接失败。处理方式:换成国内源。3 新建文件夹pip。
2024-03-15 15:34:28
488
1
原创 linux应用中获取命令行参数处理方式
**/errno = 0;break;case 'r':raw = 1;break;case 'v':return 0;case 'h':return 0;default:return 0;");if (!ts) {exit(1);int ret;if (raw)else。
2024-02-04 11:18:52
436
转载 Linux嵌入式kgdb调试环境搭建,gdb调试内核模块(转)
上篇博文介绍了应用程序调试工具 gdb + gdbserver, 那有没有调试内核的呢?没错, 就是本文介绍的kgdb, 当然早期有kdb, 后面kdb合并到kgdb了, 作为kgdb的前端, 后面我们会介绍, 而kgdb工具跟开发板通信支持kgdboc(串口)和kgdboe(网络),但新版内核只整合kgdboc, 网络被废弃了, 所以下文我们只介绍串口通信。
2024-01-31 17:29:59
789
原创 ubuntu解决问题:E: Unable to locate package manpages-posix-dev
例如我的版本代号为jammy,查看到确实包含了这个包,但是可以看到后缀有个multiverse的标志。想要在ubuntu里面安装manpages-posix-dev这个包,发现弹出错误。5 再次安装想要的库manpages-posix-dev,成功。2 去ubuntu包查询网址看看你的版本是否真的有这个包。上面的脚本显示版本代码未bionic。3 执行添加multiverse的库。1 查看当前ubuntu的版本。
2023-12-11 11:56:22
666
原创 protobuf c语言库 Nanopb的使用方法
产生的simple.pb.h,simple.pb.c文件就是可以拷贝进工程的文件。再加上原本的库文件pb.h, pb_common.c/.h, pb_encode.c/.h, pb_decode.c/.h文件,就可以正常使用了。protobuf有个开源c库,叫做nanopb,可以实现对protobuf的加密和解密。项目的主页写的很清楚,使用方法为编译.proto文件,然后把各个文件包含进工程就可以了。例如,编译simple.proto。
2023-09-20 17:09:11
2290
原创 使用vscode+clangd远程精准浏览linux kernel源码(原创)
vscode是一个编辑器,可以调用各种插件来完成更多高级功能,clangd是一个代码解析工具,是clang的一个子项目。vscode中集成clangd以后,就可以精准的查看代码的调用情况,因为clangd对整个编译过程进行了跟踪(使用compile_commands.json文件实现),对于linux kernel这种复杂的项目非常适合,放弃source insight吧,那玩意儿没啥用,一个宏定义你能找出来几百个定义,鬼知道哪个是实际的定义来源。
2023-03-31 13:27:59
8638
8
原创 TCP协议的滑动窗口和流量控制算法(转)
另外,Nagle 算法默认是打开的,如果对于一些需要小数据包交互的场景的程序,比如,telnet 或 ssh 这样的交互性比较强的程序,则需要关闭 Nagle 算法。那么,当发生窗口关闭时,接收方处理完数据后,会向发送方通告一个窗口非 0 的 ACK 报文,如果这个通告窗口的 ACK 报文在网络中丢失了,那麻烦就大了。接着,就重新开始慢启动,慢启动是会突然减少数据流的。这会导致发送方一直等待接收方的非 0 窗口通知,接收方也一直等待发送方的数据,如不采取措施,这种相互等待的过程,会造成了死锁的现象。
2022-12-19 14:15:35
672
原创 移植MQTT-C库(附源码)
移植文件里面主要包括了常见平台的socket接收和发送函数的封装,假如移植到自己的平台可能需要修改这个文件里面的代码,目前的移植是想要在visual studio里面移植,里面已经有了移植接口了。3 修改posix_sockets.h内容,虽然这个头文件是按照socket标准接口来调用的,但是win32的socket接口跟linux的接口有些不一样,例如close在win32里面是没有的,gai_strerror在win32里面没效果,win32需要调用WSAStartup函数。
2022-12-14 17:10:36
3622
7
原创 vscode远程调试Linux CUDA程序
2 使用remote-ssh登陆到远程的linux服务器,登陆以后看看安装的插件,需要在远程linux服务器也同时安装插件。确保提到的三个插件在远程端是可以用的。3 确保在远程linux服务器已经安装了cuda编译器,没有装的话点下面的链接,输入命令 nvcc -V查看安装情况。4 新建一个目录用来测试,例如~/my_cuda,用vscode打开此目录。1 本地安装插件:remote-ssh,Microsoft。点击CUDA调试按钮就可以运行了。把窗口切换到test.cu,
2022-09-13 17:04:52
3546
6
keil Compiler Version 5:ARMCompiler-506-Windows-x86-b960
2024-08-29
Orcad10.3 免安装精简版+可用lic
2024-07-02
Microsoft.HEVCVideoExtension-2.1.451.0-neutral
2024-02-18
nxp nfc天线pcb匹配参数设计工具AntennaTool
2020-12-17
易兆微yc1021源码
2019-03-22
嵌入式二维码显示方案,附源码
2018-04-11
unicode转gb2312码表
2018-04-02
source insight 4.0最新版加破解文件
2017-10-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人