- 博客(101)
- 收藏
- 关注
原创 《从零开始学习Linux》——开篇
近日笔者新开专栏,《从零开始学习Linux》,Linux水深而且大,学了一圈之后,有懂得有不懂的,一直没有机会整体的全部重新捋一遍,本专栏的目的是,带着大家包括我自己重新学习Linux一遍这些知识,温故旧的知识,同时进阶新的自己,研究认知外的实物,我将尽我所能,写好这一个专栏,让大家和自己有所收获。希望我博客的分享,能让大家有所收获。大家可以叫我 《家驹(Strange_Head),或者顺哥》——家驹(Strange_Head)
2024-07-13 22:19:04
1528
1
原创 应用层—syscall—内核层、各层之间如何协作?一次性讲清,详解 2/2——《驱动篇》
本文分析了Linux内核中系统调用的处理流程,重点探讨了x86_64架构下从用户态进入内核态的机制。主要内容包括: 系统调用入口:通过汇编指令entry_SYSCALL_64进入内核,保存用户态寄存器到pt_regs结构体,并调用do_syscall_64。 参数处理:详细解析了pt_regs结构体的内存布局和寄存器压栈顺序,说明了系统调用号和参数的传递方式。 安全机制:介绍了内核的安全防护措施,包括栈地址随机化、Spectre漏洞防护和seccomp过滤等。 系统调用分发:分析了do_syscall_x6
2026-04-26 17:11:09
532
原创 应用层—syscall—内核层、各层之间如何协作?一次性讲清,详解 1/2——《驱动篇》
本文通过分析glibc源码中的open函数实现,详细讲解了用户态程序如何通过系统调用进入内核态的过程。文章首先介绍了glibc源码获取方式,然后以一个简单的C程序为例,重点分析了open函数的执行流程。通过跟踪代码可以看到,用户态的open调用最终会通过SYSCALL_CANCEL宏转换为系统调用,其中涉及参数传递、寄存器设置以及syscall指令执行等关键步骤。文章深入探讨了glibc中__libc_open的实现细节,包括weak_alias机制、系统调用封装等核心概念,并详细解析了从用户态到内核态转换
2026-04-26 17:10:31
634
原创 补充知识点`makefile`、`config`、`GLP协议` 3/3 ——《驱动篇》《Linux历史发展》
GPL协议是Linux发展的核心法律框架,其强传染性要求衍生作品必须开源。1992年Linux内核采用GPLv2后,得以与GNU工具结合形成完整操作系统,并防止商业闭源独占。GPL保障了代码共享,吸引全球开发者共建生态,推动Linux在服务器、移动端(Android)等领域的统治地位。历史证明,GPL协议是Linux避免分裂、持续壮大的关键,其“开源互惠”机制塑造了现代开源协作模式。
2026-04-26 17:09:45
479
原创 补充知识点`makefile`、`config`、`GLP协议` 2/3 ——《驱动篇》
本文介绍了配置文件config的核心概念与应用。config本质是纯文本文件,记录系统构建时的编译选项,可通过图形界面或直接编辑修改。Linux内核使用Kconfig组织配置关系,支持层级目录管理、条件依赖、互斥处理等功能,并通过.config文件最终确定编译内容。配置文件配合makefile实现代码的选择性编译,如内核开发中不同厂商代码的取舍。文章还说明了配置项的默认值设置、分组管理及自动化构建等进阶用法,体现了config在系统构建中的灵活性和重要性。
2026-04-26 17:08:57
414
原创 补充知识点`makefile`、`config`、`GLP协议` 1/3 ——《驱动篇》
本文主要介绍了Linux内核开发中Makefile的基础知识和使用技巧。文章首先解释了Makefile的基本概念,将其类比为Windows的bat脚本或Linux的shell脚本,强调其作为构建编译规则的脚本语法的重要性。随后详细讲解了Makefile的核心语法指令:目标(Target)、依赖(Prerequisites)和命令(Recipe),并提供了编译C程序的示例。 文章进一步介绍了Makefile的常用变量与符号,包括变量定义、自动变量($@、$^、$<)的使用方法,以及模式规则和伪目标等高级
2026-04-26 17:08:10
491
原创 第一个驱动程序的编译和运行——《驱动篇》
这篇文章摘要介绍了如何在Linux内核中编写、编译和运行第一个驱动程序模块。主要内容包括: 展示了简单的内核模块示例代码,包含初始化函数(hello_init)和退出函数(hello_exit),使用printk进行内核日志输出。 详细说明了编译内核模块的过程: 创建专门的目录结构 编写Makefile文件 使用内核源码树进行编译 生成.ko模块文件 演示了如何将编译好的模块放入根文件系统(rootfs)并带到自定义Linux系统中运行。 介绍了基本的模块操作命令: insmod - 加载模块 rmmod
2026-04-12 17:39:58
515
原创 Linux驱动篇开篇——《驱动篇》
文章摘要: 本文介绍了Linux内核驱动开发的基础知识,重点讲解了用户态与内核态的区别、内核代码编写规范和环境搭建方法。作者首先通过图示对比了用户态和内核态的运行机制,指出内核态可以直接访问硬件而用户态必须通过系统调用。随后详细说明了内核编程的特殊性,包括标准库不可用、内存管理函数差异等,并给出了一个简单内核模块示例。环境搭建部分介绍了使用QEMU模拟器和编译Linux内核的步骤,包括下载内核源码、安装依赖工具、配置编译选项等。最后简要说明了构建最小根文件系统(rootfs)的方法,为后续驱动开发奠定基础。
2026-04-12 17:38:14
627
原创 《Linux系统网络协议》用 C 语言写一个最小 HTTP Server 与 Client——网络篇
本文介绍如何使用C语言实现一个最小HTTP服务器和客户端。通过这个练习,读者可以理解HTTP协议本质上是基于TCP连接交换特定格式的文本数据。文章包含三个主要部分:1)建立整体通信模型,展示HTTP与TCP的分层关系;2)提供编译说明和Makefile;3)实现最小HTTP服务器代码,包含3个示例路由(/、/hello、/json)来演示请求解析和响应构造。服务器代码展示了如何监听端口、接收连接、解析HTTP请求并返回不同内容类型的响应。这个示例帮助开发者观察原始HTTP报文格式,理解HTTP与TCP在代码
2026-04-05 20:55:45
826
原创 《Linux系统网络协议》从 TCP 到 HTTP:理解 Web 通信的第一步——网络篇
本文介绍了HTTP协议的基础知识,重点包括: HTTP与TCP的关系:HTTP是应用层协议,运行在TCP之上,负责定义请求/响应的语义和格式,而TCP负责底层数据传输。 HTTP的核心模型:基于请求(Request)和响应(Response)的交互模式,遵循"一次请求-一次响应"的原则。 HTTP报文结构:详细解析了请求和响应的组成格式,包括请求行/状态行、头部字段、空行分隔和消息体。 URL组成部分:拆解了URL中的协议方案、主机名、端口、路径和查询参数等元素。 常见HTTP方法:GE
2026-04-05 20:46:13
912
原创 快速入门 MQTT:从 Broker、发布订阅到双机通信
本文介绍了MQTT协议的基本概念和C语言实现方法。MQTT是一种轻量级消息协议,适用于物联网等场景,其核心包含三个角色:Broker(消息中转服务)、Publisher(发布者)和Subscriber(订阅者)。文章澄清了常见误解,强调通信必须通过Broker中转,而非直接点对点连接。文中提供了最小C语言工程示例,包含发布者和订阅者代码,并详细说明了编译运行方法。发布者负责向指定主题发送消息,订阅者则连接Broker并监听特定主题的消息。通过这个最小示例,读者可以快速理解MQTT的核心工作机制。
2026-04-05 20:15:09
603
原创 《Linux系统编程篇》Linux Socket 网络编程03(Linux 进程间通信(IPC))——基础篇
本文提供了4个用C语言实现的最小网络通信程序示例,帮助理解socket、TCP和UDP的核心概念。通过TCP server/client和UDP server/client四组代码,展示了网络通信的基本流程:建立连接、收发数据。所有代码仅依赖标准socket API,可直接编译运行。文章重点比较了TCP和UDP在代码结构上的差异,解释了服务端与客户端的不同职责,并强调了TCP连接建立与数据收发的关键步骤。这些最小化示例可作为网络编程的入门练习,为后续更复杂的网络应用开发打下基础。
2026-04-05 20:06:14
651
原创 《Linux系统编程篇》Linux Socket 网络编程02 (Linux 进程间通信(IPC))——基础篇
本文系统梳理了网络编程中Socket、TCP和UDP的核心概念与区别。Socket是操作系统提供的网络编程接口,而TCP/UDP是传输层协议。TCP面向连接、可靠但复杂,适合文件传输等场景;UDP无连接、轻量快速,适合实时应用。文章详细对比了两者的工作流程、API差异和使用场景,并澄清了常见误区,为初学者提供了从概念到实践的学习路线,建议先理解协议特性再动手编写最小TCP/UDP程序。
2026-04-05 19:48:13
657
原创 《基础篇》Linux新机配置一站式解决流程(2)——基础篇
本文介绍了Linux系统初始配置的完整流程。首先通过sudo apt update && sudo apt upgrade -y命令更新系统软件包,确保安全性;然后配置防火墙,允许SSH连接。接着安装关键工具:VIM编辑器及其基本操作,以及Git、Curl、Wget等基础开发工具。最后根据用户具体用途进行个性化配置。文章提供了详细的命令说明和验证方法,帮助用户快速搭建安全高效的Linux环境。
2025-08-30 13:32:05
1316
原创 《基础篇》Linux新机配置一站式解决流程——基础篇
本文介绍了Ubuntu 20.04.6服务器的一站式基础配置指南,主要内容包括:1)通过hostnamectl命令或编辑配置文件修改主机名;2)使用useradd/adduser命令创建新用户并设置密码;3)通过usermod命令为用户添加sudo权限;4)修改.bashrc文件中的PS1变量来自定义终端提示符。文章提供了详细的操作步骤和注意事项,并配有实操截图,帮助用户快速完成服务器基础配置,避免常见问题。
2025-08-29 20:44:57
1405
原创 《日记篇》舍
《舍》摘要:来深打拼两载,从蚊虫肆虐的陋室到二十平蜗居,父千里探望令我既喜且忧。奋斗与亲情拉扯间,父以目光洞穿我内心挣扎。七月十一夜长谈后终作取舍,泪写此文。父教会我持家之道、收敛心志,这段刻骨经历将成为未来基石。虽舍当下,必期远方。
2025-07-14 09:11:34
550
原创 cc1plus.exe:-1: error: out of memory allocating 65536 bytes
摘要:笔者在Qt编译LVGL时遇到cc1plus.exe内存分配错误(无法分配64KB内存),可能因系统内存不足、编译器限制或代码过大导致。建议关闭占用内存的程序、增加虚拟内存、拆分大文件或更换64位编译器。若使用QtCreator,需检查工具链配置是否为64位并确保无内存限制环境变量。该问题通常因编译环境资源不足引起,优先排查系统内存和编译器版本。
2025-07-08 11:16:44
1110
原创 error: cast from ‘list_head*‘ to ‘long unsigned int‘ loses precision [-fpermissive]
内核链表宏中出现的指针精度丢失错误是由于64位系统下将指针强制转换为32位unsigned long导致的。常见于container_of宏的实现。解决方案包括:1)使用C99的uintptr_t类型保存指针转换;2)采用Linux内核的标准写法,结合typeof和offsetof;3)直接使用标准库的offsetof宏。推荐使用第三种方法,通过包含stddef.h头文件,利用offsetof获取成员偏移量,避免指针强制转换带来的精度问题。这种写法既安全又符合标准,是解决此类问题的理想方案。
2025-07-07 14:23:11
787
原创 《Linux系统编程篇》Linux目录动态检测应用 (inotify递归子目录)——工具篇
inotify(inode notify)是 Linux 内核自 2.6.13 版本开始提供的一种文件系统事件监控机制。它允许用户空间程序注册监控文件或目录,当发生特定事件时,内核会通知用户程序。与之前的dnotify相比,inotify提供了更丰富的事件类型和更高效的监控方式。
2025-03-20 18:23:11
1381
原创 《Linux系统编程篇》Linux Socket 网络编程01 API介绍(Linux 进程间通信(IPC))——基础篇
道可道,非常道;名可名,非常名。无名,天地之始;有名,万物之母。故常无欲,以观其象;常有欲,以观其体。两者同出而异名,同为之玄。玄之又玄,众妙之门。——老子《道德经》
2025-03-20 18:22:33
1458
原创 《Linux系统编程篇》Linux内存检测框架 ——工具篇
我们在查看Linux内存时候,可能会使用`free`命令,尤其是查找内存占用情况的时候,会在命令行不断的敲击`free`命令(真令人头疼)或者(`cat /proc/meminfo`),有没有方法直接在C语言中也就是我们的程序代码中添加一段程序,可以直接,实时的打印查看我们的程序,这样我们就可以在我们想要的地方直接查看内存的空余使用情况,当然有,那就是本节笔者分享下面这段程序的方法。
2025-03-10 20:40:31
951
原创 《Linux系统编程篇》共享内存(Linux 进程间通信(IPC))——基础篇
他总体的作用就是,在Linux当中开辟一段内存空间,使得两个进程可以同时访问,是的就是这么简单具体操作可以具象为操作一个文件(毕竟Linux中一切皆是文件呢)open一个文件(没有就创建他)我可以使用read读取他,也可以使用write去修改他。当然这个文件,也可以让所有进程看到,并操作。
2025-02-26 20:26:24
1125
原创 《Linux系统编程篇》System V信号量实现生产者与消费者问题(Linux 进程间通信(IPC))——基础篇(拓展思维)
接上节,我们来详细展开一下 生产者-消费者问题,并用 System V 信号量 来解决它。这个经典问题帮助我们理解如何在多个进程间同步和互斥地共享资源。生产者-消费者问题是多进程同步问题中的经典例子。问题的背景是:有两个进程,一个生产者(Producer)不断生产产品,另一个消费者(Consumer)不断消费产品。两者都需要共享一个有限的缓冲区。生产者往缓冲区写入数据,消费者从缓冲区读取数据。为了避免并发问题,我们需要同步生产者和消费者的访问。
2025-02-25 20:42:20
824
原创 《Linux系统编程篇》System V信号量(Linux 进程间通信(IPC))——基础篇
System V 信号量(sem_t)是 Unix/Linux 系统中一种进程间同步和互斥的机制。
2025-02-21 16:36:46
1375
原创 自述谈心 日记篇20250221
笔者最近陷入了瓶颈,已经许久没有更新过了,在如今2025年,面对AI可以代替着人类做任何事情,我最近无数次的问自己,我还有没有意义要去学习,明明AI可以做到一切,知道世界的所有知识,我们的学习是否还有必要。
2025-02-21 14:53:32
388
原创 《Linux系统编程篇》POSIX信号量(Linux 进程间通信(IPC))——基础篇
在 Linux 系统编程中,信号量(Semaphore)是一种重要的同步机制,主要用于解决并发访问的互斥和同步问题。
2025-01-13 20:58:03
1141
原创 《Linux系统编程篇》管道(Linux 进程间通信(IPC))——基础篇
在 Linux 中,进程是相互独立的,每个进程都有独立的内存空间。为了在不同进程之间交换数据,操作系统提供了各种 IPC 机制。这些机制可帮助进程完成数据共享、同步、通知和事件处理等任务。管道(Pipe)命名管道(FIFO)消息队列(Message Queue)共享内存(Shared Memory)信号(Signal)套接字(Socket)管道是最简单的 IPC 方式之一,适合在具有亲缘关系的进程(如父子进程)之间传递数据。管道是单向的,数据只能从一端流向另一端。
2024-11-01 18:12:14
1267
原创 《Linux系统编程篇》exec族函数——基础篇
当我们介绍完fork之后,你会发现虽然我可以同时跑俩个程序,但是还是太过于局限了,而且细心的学员们发现,进程直接是完全不互通的,好像fork之后什么也做不了,是的,只学完`fork`就是这样的,所以我们再来介绍新的知识。`exec`族函数。
2024-10-30 19:00:46
1347
原创 《Linux系统编程篇》fork/wait/waitpid/exit函数——基础篇
在 Linux 中,所有的进程都是通过 fork() 派生而来。当一个进程调用 fork() 时,操作系统会复制当前进程的上下文,为它创建一个几乎完全相同的副本,这个副本被称为子进程,而原始进程被称为父进程。这也是人们口中的父子进程的概念。
2024-10-28 19:40:42
1766
原创 《Linux系统编程篇》Linux进程的了解——基础篇
概念:进程(Process)是指计算机系统中正在运行的程序的实例。每个进程都有自己的内存空间、代码、数据、堆栈等资源,它们相互独立地运行,并且能够与其他进程并发地执行。进程是操作系统进行任务调度和资源分配的基本单位。操作系统通过创建、管理和调度进程来实现多任务处理,使多个程序能够同时运行,并且彼此之间不会干扰。举个栗子理解一下💡:把我们的地球想象成一个Linux系统,那么地球上的生物,画,鸟,鱼,虫,甚至人类,都是单独的个体,他们互不干扰,自己有自己的事干,共同的努力下才形成了当前稳定的地球。
2024-08-11 20:26:54
1164
原创 《Linux系统编程篇》文件基础编程 ——基础篇
在Linux系统编程中,我们先来看基本的API,理解基本的文件操作函数是非常重要的。这节我们带着大家一起进入文件编程。文件我们想到无非就三个操作,1、打开文件,2、操作文件内容,3、关闭文件把大象装进冰箱?是的,就是这么简单。于是乎,我们如何装进这个大象是我们学习的关键,用什么工具去打开冰箱(文件),如何把大象放进去(操作文件内容),放进去关冰箱(释放文件)我们在Linux系统上,当然用的是Linux系统的API,来操作系统的文件了,Linux系统给我们提供哪些工具呢?下面我列举了一些。
2024-07-16 23:16:51
976
原创 《Linux系统编程篇》认识在linux上的文件 ——基础篇
每一次努力都是一种投资,哪怕结果未必如愿,但你所获得的成长和经验都是无价的。坚持下去,你会看到那些投资最终会为你带来丰厚的回报。 ——家驹(Strange_Head)
2024-07-13 22:35:18
1115
原创 《Linux系统编程篇》Visual Studio Code配置下载,中文配置,连接远程ssh ——基础篇
vscode绝对值得推荐,非常好用,如果你能体会其中的奥妙的话
2024-07-13 22:30:54
1140
原创 解锁 AI 潜力:香橙派 AIpro 评测与实操指南
在智能科技飞速发展的今天,AI 技术正逐渐改变我们的生活方式。作为开发者,找到一款高性能、易用且经济实惠的开发板至关重要。香橙派 AIpro(OrangePi AIpro)凭借其卓越的硬件配置和强大的 AI 计算能力,相信未来会迅速成为市场上的一匹黑马。本文将带你全面了解这款开发板,通过实际操作和详细评测,揭示其在 AI 开发中的巨大潜力。无论你是初学者还是资深开发者,香橙派 AIpro 都能助你迈向 AI 开发的新高度。准备好了吗?让我们一同探索这款令人兴奋的 AI 开发工具!
2024-05-28 10:21:16
1989
原创 ubuntu20.04.6安装sshd服务,并连接到远程服务器
它负责提供远程登录和安全的 shell 服务。通过启动 sshd 服务,可以允许远程用户通过 SSH(Secure Shell)协议连接到您的计算机,并在远程执行命令或进行文件传输。物理主机使用mobaxterm(或putty)连接虚拟机ssh登录。
2024-04-06 16:14:15
2354
原创 Android 完整SDK项目中添加对应的JNI与底层通信
近日需要写一个安卓app和底层发消息,这就涉及到java如何到c层的一个逻辑,app已经写好,就差发个消息了。至于如何对接底层,得和写底层的人进一步沟通,本文笔者只写从java层通信到cpp,并且打印出一个值,至于通信底层,到了c层了,open,read一个驱动,也就轻轻松松了。
2024-03-07 15:25:09
768
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅