自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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

原创 MobaXterm使用VNC远程显示和控制ubuntu桌面

大体流程就是在ubuntu中安装vnc,设置密码,然后配置服务,然后启动服务。

2023-11-02 16:13:53 6758

原创 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

原创 linux应用中的时间处理

【代码】linux应用中的时间处理。

2023-03-09 15:10:47 233

原创 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

ubuntu中使用ffmpeg库进行开发的cmake工程

基于cmake编译框架,使用ffmpeg库进行api调试开发的工程

2024-12-06

keil Compiler Version 5:ARMCompiler-506-Windows-x86-b960

ARMCompiler_506_Windows_x86_b960.zip,用于keil提示没有Missing:Compiler Version 5时使用,具体使用方法:https://blog.youkuaiyun.com/vierin/article/details/139550114?spm=1001.2014.3001.5506

2024-08-29

Orcad10.3 免安装精简版+可用lic

Orcad10.3 免安装精简版+可用lic,一般下载的orcad10.3带的许可证都是过期的,需要重新找许可证文件,这个资源包里面自带一个许可证文件,亲测可用。 安装方式请参照pdf文档里面来搞。

2024-07-02

Microsoft.HEVCVideoExtension-2.1.451.0-neutral

Microsoft.HEVCVideoExtension_2.1.451.0_neutral,用于win10播放HEVC格式的视频文件,windows商店中的安装不了,这个是下载后的文件,可以直接安装。

2024-02-18

cmake工程结构示例

cmake的工程结构示例,可以依据这个cmake工程构建自己的编译系统,熟悉常用的cmake命令

2023-06-27

MQTT-C在visual studio上的移植工程,具体移植过程请看我的博客文章

MQTT-C在visual studio上的移植工程,具体移植过程请看我的博客文章

2022-12-14

stm32 hal examples(stm32 hal完全示例)

包含了所有stm32f4使用hal的外设的示例

2022-02-08

J-LINK V10 V11固件.rar

用于重新更新jlink v10和v11的固件文件,亲测可用

2021-10-26

nxp nfc天线pcb匹配参数设计工具AntennaTool

这是nxp的nfc天线设计工具,可以通过指定天线的pcb参数测算出匹配的参数,然后计算出匹配电路的电阻电容等原件参数

2020-12-17

source insight 4.00.0114 lic.rar

source insight 4.00.0114的许可证文件生成工具,可以支持生成这个版本以后的许可证

2020-07-06

易兆微yc1021源码

这份代码是我自己根据易兆微yc1021的规格书实现的一份嵌入式驱动程序,用户只需要移植几个简单的函数就可以实现蓝牙3.0和4.0通信功能,这么简单的玩意儿天天搞真的烦,下载源码一次搞定多好对吧

2019-03-22

felica规格书(user manual)

这是最新版本的felica规格书,英文不好的不建议下载哦,因为是英文,哈哈哈

2018-12-26

FatFs移植工程vs2013

FatFs在vs2013中移植的代码,移植过程可以看我的微博中的相应的文章

2018-07-03

嵌入式二维码显示方案,附源码

嵌入式二维码的显示方案,代码中用控制台模拟了lcd的显示驱动,请移植的时候自行实现lcd显示驱动。另外移植的时候需要移植config.h中的几个宏定义,自己看下就知道了。

2018-04-11

unicode转gb2312码表

unicode转gb2312的码表,格式为小端格式,前2个字节是unicode值,随后2字节为对应gb2312值。使用方法请翻一下我的csdn博客

2018-04-02

source insight 4.0最新版加破解文件

source insight 4.0最新版加破解文件: 1 打开安装文件安装软件 2 完成后用破解的exe替换安装目录的文件 3 打开si4后提示选择许可证,选择破解的许可证

2017-10-31

振南znFAT--嵌入式FAT32文件系统设计与实现(上下册)

振南znFAT--嵌入式FAT32文件系统设计与实现(上下册)

2015-12-28

Borland C++ 5.02(3)

Borland C++ 5.02

2012-01-30

Borland C++ 5.02(2)

Borland C++ 5.02

2012-01-30

Borland C++ 5.02(1)

Borland C++ 5.02(1),这是压缩包1,请到我的资源里面去找另外两个压缩包

2012-01-30

Borland C 3.1

Borland C 3.1

2012-01-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除