- 博客(126)
- 资源 (17)
- 收藏
- 关注
原创 Linux操作系统实战:进程创建的底层原理(转)
Linux系统在服务器、开发环境等关键场景中占据核心地位,全球超90%的超级计算机和众多大型企业级应用都运行在Linux上。其高稳定性、安全性和开源特性使其成为开发者的首选。Linux进程是系统资源分配和调度的基本单位,驱动着系统的稳定运行。深入理解进程的工作原理,如进程创建、状态管理、调度和进程间通信,是掌握Linux系统的关键。通过优化算法、合理分配内存和优化I/O操作,可以显著提升进程性能和系统效率。Linux进程的并发处理、守护进程的创建以及进程间通信的实例展示了其在实际应用中的强大功能。掌握这些技
2025-05-14 20:13:24
992
原创 Linux操作系统实战:中断源码的性能分析(转)
Linux中断机制是操作系统响应硬件或软件事件的核心机制,分为硬件中断和软件中断。硬件中断由外部设备触发,如磁盘I/O完成或网络数据包到达;软件中断由CPU内部产生,如除零错误或页面故障。中断发生时,CPU暂停当前任务,根据中断向量表找到相应的处理程序并执行。Linux内核通过驱动程序管理各种硬件设备及其对应的中断处理程序,深入分析中断源码有助于调试和性能优化。中断处理分为上半部和下半部,上半部快速响应硬件,下半部处理耗时任务。软中断、Tasklet和工作队列是实现下半部的三种机制。通过优化中断处理程序、设
2025-05-14 20:10:40
933
原创 linux驱动中spin_lock和信号量之间有什么区别(deepseek教我写驱动)
在Linux内核驱动开发中,spin_lock和信号量是两种常用的同步机制,用于保护共享资源,但它们在等待机制、使用场景和性能影响等方面有显著区别。spin_lock采用忙等待机制,适用于中断上下文和极短的临界区操作,因为它不会让出CPU,但长时间自旋会浪费CPU资源。信号量则采用睡眠等待机制,适用于较长的临界区操作或允许睡眠的上下文,因为它会主动让出CPU,避免资源浪费。此外,使用spin_lock时禁止调用可能引发睡眠的函数,因为自旋锁的持有期间必须保证原子性和不可中断性,否则可能导致死锁或系统崩溃。
2025-05-14 17:19:27
636
原创 stm32 CubeMX生成的hal代码,i2c一直卡在I2C_WaitOnTXISFlagUntilTimeout问题解决
直接用cubemx生成i2c的hal控制代码,调用HAL_I2C_Mem_Read想去读取一下codec的寄存器,发现一直卡在I2C_WaitOnTXISFlagUntilTimeout。假设你的设备的地址是0x10,那么需要左移一位,否则发送设备地址的时候就会nack,然后txis就一直是0。没想动示波器,就搜了搜,发现这个玩意儿跟linux的i2c一样的,对于7位的设备地址,需要往左移一位。这个txis寄存器说是发送寄存器空闲标志,但是上电后一直为0,比较奇怪,这不可能。
2025-05-06 16:16:04
238
原创 内存 “舞台” 上,进程如何 “翩翩起舞”?(转)
在深入了解进程与内存的关系之前,我们先来认识一下内存这个计算机的关键部件。内存,也被称为内存储器或主存储器,它就像是计算机的 “临时仓库”,在计算机运行程序时扮演着至关重要的角色。内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。内存(Memory)也被称为内存储器,其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。
2025-05-01 19:57:07
606
原创 解锁Linux共享内存:进程间通信的超高速通道(转)
在Linux系统的进程间通信 “江湖” 中,众多通信方式各显神通。管道,如同隐秘的地下通道,让有亲缘关系的进程能够悄然传递信息;消息队列则似邮局,进程可投递和接收格式化的消息包裹。然而,有一种通信方式却以其独特的 “高速” 特性脱颖而出,它就是共享内存。想象一下,进程们原本各自生活在独立的 “小天地” 里,有着自己专属的虚拟地址空间。但共享内存却如同神奇的 “任意门”,打破了进程间的隔阂,让多个进程能够直接访问同一块内存区域。
2025-04-25 11:29:28
636
原创 Linux内核追踪神器:perf实现原理剖析(转)
在 Linux 性能分析的广袤领域中,Perf 犹如一颗璀璨的明星,散发着独特的光芒。Perf,即 Performance 的缩写,是一款集成于 Linux 内核的性能分析工具,如同一位技艺精湛的诊断大师,能深入系统的各个角落,精准地剖析系统性能。它以事件驱动为核心机制,如同精密的仪器,能够捕捉到硬件、软件以及内核层面的各种性能事件。随着 Linux 内核的不断演进,Perf 也在持续发展壮大。从最初简单的性能监测,到如今具备丰富多样的功能,Perf 已经成为 Linux 性能分析不可或缺的工具。
2025-04-02 11:18:55
1142
原创 Linux TCP回显服务器实现(deepseek教我写代码)
通过告诉内核"父进程完全不需要子进程的退出信息",使得内核自动回收终止的子进程资源,从而从根本上避免了僵尸进程的产生。这种方式:简洁高效(无需循环调用wait()适合不需要收集子进程状态的场景是现代Linux系统中处理僵尸进程的推荐方式之一这两个close()明确进程职责:父子进程各司其职,关闭不需要的资源引用精细控制生命周期:通过引用计数机制确保资源及时释放系统健壮性保障:预防资源泄漏导致的级联故障这种模式体现了UNIX哲学中"做一件事并做好"的设计思想,是构建可靠网络服务的基础。
2025-03-22 22:43:33
1109
原创 吐血整理 | 肝翻linux内核常用数据结构汇总(转)
在计算机科学的璀璨星空中,数据结构是一颗耀眼的明星,它是计算机存储、组织数据的巧妙方式,如同建筑中的蓝图,规划着数据的布局与管理。简单来说,数据结构就是相互之间存在一种或多种特定关系的数据元素的集合,它涵盖了数据的逻辑结构、物理结构以及相关的操作运算。数据结构主要分为线性结构和非线性结构。线性结构中的数据元素呈现出一对一的线性关系,如同一条整齐排列的队伍,数组、链表、栈和队列等都属于这一范畴;非线性结构则更为复杂,元素之间存在一对多或多对多的关系,像是一张错综复杂的关系网,树和图就是典型的非线性结构。
2025-03-20 09:51:13
1019
原创 Linux C++编程死锁排查:借助Shell与GDB找到真相(转)
在多线程编程的领域中,死锁是一个让人头疼不已的问题。简单来说,死锁就是多个线程因为互相争夺资源,而陷入一种无限期的等待状态,导致所有线程都无法继续执行。就好比两个人过独木桥,独木桥一次只能容纳一个人通过,这两个人同时上了桥,一个从左边往右边走,另一个从右边往左边走,走到桥中间时,谁也不愿意退回去让对方先过,于是就僵持在那里,谁都无法到达对岸,这就是死锁在现实生活中的生动写照。在程序里,死锁通常发生在多个线程需要获取多个共享资源的时候。比如,线程 A 持有资源 1,并且想要获取资源 2;
2025-03-20 09:42:12
750
原创 Linux性能分析神器ftrace:从原理到实战(转)
ftrace,即 Function Trace 的缩写,是 Linux 内核自带的一款强大的跟踪工具。它诞生于 2008 年,由 Steven Rostedt 开发,并在 2.6.27 版本的内核中首次引入。最初,ftrace 只是一个简单的函数跟踪器,主要用于记录内核的函数调用流程,随着不断的发展和完善,如今它已演变成一个功能丰富的跟踪框架,采用插件式的设计,支持开发者添加更多类型的跟踪功能,在 Linux 内核的开发与调试中发挥着不可或缺的作用。
2025-03-20 09:39:18
880
原创 ubuntu中的ens33网卡在ifconfig中被默认关闭了?
突然打开ubuntu虚拟机,发现连不上网,输入ifconfig发现ens33是关闭的状态。systemd中的NetworkManager管理着系统的网络服务,使用:查看服务状态是显示运行的。查看systemd的启动日志:显示如下: 看到关键信息: 使用nmcli工具可以管理NetworkManager:此处主要是打开了NetworkManager的一个全局开关,允许管理所有网络设备,存储位置为:/var/lib/NetworkManager/NetworkManager.state,内容应为:
2025-03-18 16:00:43
897
原创 linux makefile tutorial
一个makefile的教程,几个小时就能看完,对makefile有个总体加细节的系统了解,非常不错:Learn Makefiles With the tastiest examples中文翻译版:起步 - Makefile 教程 (gavinliu6.github.io)gcc官网手册:GNU make
2025-03-11 16:57:24
269
原创 P2P中NAT穿越方案(UDP/TCP)(转)
转自:P2P中NAT穿越方案(UDP/TCP)_udp反向链接-优快云博客本文介绍了传统基于udp的打洞方式,更进一步阐述了tcp打洞的原理,是对于打洞原理最完善的讲解。————————————1、P2P简介对等网络,即对等计算机网络,是一种在对等者(Peer)之间分配任务和工作负载的分布式应用架构,是对等计算模型在应用层形成的一种组网或网络形式。因此,从字面上,P2P可以理解为对等计算或对等网络。在P2P网络环境中,彼此连接的多台计算机之间都处于对等的地位,各台计算机有相同的功能,无主从之分,一台计算
2025-03-10 11:59:02
1140
原创 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
480
原创 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
1000
原创 打破边界,Linux环境下的内存越界调试技巧(转)
在 Linux 系统中,程序的运行依赖于内存的合理分配和使用。当程序发生内存越界时,就好比一个人在自己的房间里肆意妄为,不仅把自己房间搞得乱七八糟,还闯入了别人的房间捣乱。程序会访问到不属于它分配范围内的内存空间,这会导致一系列严重的后果。比如,它可能会改写其他重要数据,就像在别人房间随意涂改别人的东西,使得程序后续使用这些数据时出现错误;也可能会导致内存泄漏,就像一个人不断占用别人的房间却不归还,使得系统内存资源越来越少;更严重的是,直接导致程序崩溃,整个 “居住环境” 都被破坏。
2025-02-18 22:01:35
1033
原创 Linux进程间通信:深度剖析与实战指南(转)
Linux 进程间通信(Inter-Process Communication,IPC)是指在多道程序环境下,进程间进行数据交换和信息传递的一种机制或方法。在现代操作系统中,进程是系统资源分配的基本单位,不同进程之间需要相互合作和通信,才能完成各种任务。进程间通信是实现进程间协作的重要手段。进程间通信在 Linux 系统中至关重要。每个进程在 Linux 环境下都有独立的用户地址空间,一般情况下,进程间的进程空间不能相互访问。但在很多实际应用场景中,进程与进程之间需要进行通信,以共同完成特定的功能需求。
2025-02-18 21:26:33
622
原创 深入内存调试: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
1066
原创 解锁Linux“故障宝藏”:Core Dump分析秘籍(转)
Core Dump 分析在 Linux 程序开发与调试中扮演着举足轻重的角色。通过深入了解 Core Dump 的生成机制,我们能够精准地捕捉程序崩溃瞬间的关键信息,为后续的问题排查工作奠定坚实基础。在实际的开发过程中,无论是指针操作不当、数组越界,还是多线程环境下的数据竞争等问题,都可能引发 Core Dump。
2025-02-18 13:10:24
1342
原创 当Linux程序“跑路”:利用Backtrace快速精准定位“案发现场”(转)
backtrace,中文可译为 “回溯”,是一个用于生成函数调用栈的工具,在程序崩溃或者出现异常时,可以通过 backtrace 来获取函数调用栈信息。这些信息就像是程序运行的 “脚印”,记录了程序执行的路径,能帮助我们了解到程序的执行流程,定位问题发生的位置。在程序运行过程中,函数之间会相互调用,形成一个调用链。当程序出现异常退出时,我们往往不知道问题出在哪里。
2025-02-18 09:22:43
1012
原创 ubuntu中使用ffmpeg库进行api调用开发
上面是我的一个文件夹结构,我把ffmpeg的库放到lib文件夹中,自己的代码放到src里面,顶层有CMakeLists.txt,各个子文件夹有各自的CMakeLists.txt。一般情况下,熟悉了ffmpeg的命令行操作,把他当成一个工具来进行编解码啥的问题不大,不过如果要把功能集成进自己的软件中,还是要调用ffmpeg的api才行。ffmpeg的源码和外带的模块有点太多了,直接用官网别人编译好的库就可以了,下面的操作就是演示使用cmake调用ffmpeg的库,来进行api的开发。
2024-12-06 16:54:53
677
原创 win10中使用ffmpeg的filter滤镜
有时候文字水印要求实时根据具体情况变化,最简单的例子就是叠加一个gps位置、车辆速度这种,可以使用drawtext滤镜的textfile和reload来操作。不过这种变化的数据需要在实时视频流才有用,固定编码没用,只会读取一次。只需要实时修改文件text.txt内容就可以实现实时更新视频文字水印了。1.3 显示实时文字水印。1.1 添加播放时间。1 给视频加文字水印。1.2 添加本地时间。
2024-11-26 17:01:05
592
原创 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
826
原创 win10中使用ffmpeg和MediaMTX 推流rtsp视频
在win10上测试下ffmpeg推流rtsp视频,需要同时用到流媒体服务器。拉流是可以的,同时在流媒体服务器也是可以看到拉流记录。3 打开流媒体服务器,其实就是进入第一步。ffmpeg推流到流媒体服务器。,其他客户端从流媒体服务器拉流。5 ffplay拉流rtsp视频。4 ffmpeg推流rtsp到。2 安装ffmpeg。
2024-11-22 17:02:57
1572
6
原创 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
1136
1
原创 linux应用层读写i2c设备
一般情况下,linux读写i2c设备需要在内核编写一个i2c驱动,该驱动实现一个字符驱动,然后在字符驱动里面使用i2c框架读写和操作对应的设备。其实linux对于这种规范化的驱动是可以直接在linux应用层进行读写操作的,当然前提是要在设备树上面把对应的i2c设备挂好,让i2c总线驱动知道你这个设备的存在。
2024-09-29 10:51:48
1188
原创 rk3568 linux sdk recovery buildroot “host-python-2.7.16“ compile failed
steps:
2024-09-02 14:52:28
1383
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
975
原创 windows和office微软官方免费激活教程
微软提供了windows系统和office的官方免费激活,其实不用去买什么激活码,官方提供了激活方式,完全免费。
2024-08-08 09:09:33
25297
6
原创 ubuntu中禁止使用鼠标拖动来移动文件
这种方式有好处也有坏处,好处是移动文件方便了,坏处是误操作后会造成故障,尤其是ubuntu中,本身鼠标就特别灵敏并且操作不便,拖动一个文件后,整个环境都会发生变化,很有可能编译失败,然后各种找问题,索性直接禁止。windows和ubuntu中都可以拖动文件到其他路径,然后达到移动文件的目的。
2024-08-03 12:49:29
635
原创 ubuntu中挂载window硬盘分区
装了ubuntu和windows双系统后,可以直接在ubuntu中访问windows中的硬盘文件,但是需要挂载windows的硬盘。注意一定要区分硬盘的文件系统类型,否则你会发现挂载出错,变成只读文件系统,想写入文件提示错误。
2024-08-02 14:04:13
949
原创 R9000X安装ubuntu后没有声音问题解决
照着上面的步骤搞下来就可以升级到最新的内核了,我升级到6.9内核后重启以后就有外放声音了。如果有报错包依赖错误,执行 sudo apt upgrade可以解决。我买了这台机器后安装了ubuntu 23.10,其他驱动都正常,后来发现声卡没有外放声音,但是音量控制和耳机孔都是可以的。总结原因就是驱动有问题,需要升级ubuntu内核到6.7以上。
2024-07-20 00:18:03
519
原创 ubuntu如何彻底卸载android studio?
最新版的ubuntu已经使用snap进行软件管理了,我用snap-store安装android studio以后,在安装plugin的时候强制退出后,直接再也进不去了,而且重装snap-store和android studio都不行.
2024-07-17 18:24:02
882
1
原创 “sudo apt install libncurses5“ 失败找不到安装包解决
【代码】"sudo apt install libncurses5" find no package solution。
2024-07-10 09:49:46
1863
原创 esp32 ESP-IDF vscode插件安装失败(host=‘files.pythonhosted.org‘, port=443): Read timed out.
5 重新安装后发现源已经换掉了。原因:pip安装源连接失败。处理方式:换成国内源。3 新建文件夹pip。
2024-03-15 15:34:28
503
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
450
转载 Linux嵌入式kgdb调试环境搭建,gdb调试内核模块(转)
上篇博文介绍了应用程序调试工具 gdb + gdbserver, 那有没有调试内核的呢?没错, 就是本文介绍的kgdb, 当然早期有kdb, 后面kdb合并到kgdb了, 作为kgdb的前端, 后面我们会介绍, 而kgdb工具跟开发板通信支持kgdboc(串口)和kgdboe(网络),但新版内核只整合kgdboc, 网络被废弃了, 所以下文我们只介绍串口通信。
2024-01-31 17:29:59
827
原创 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
692
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
易兆微yc1021源码
2019-03-22
嵌入式二维码显示方案,附源码
2018-04-11
source insight 4.0最新版加破解文件
2017-10-31
unicode转gb2312码表
2018-04-02
nxp nfc天线pcb匹配参数设计工具AntennaTool
2020-12-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人