- 博客(57)
- 问答 (1)
- 收藏
- 关注
原创 quilt 使用方法
命令作用quilt init初始化补丁目录创建新补丁关联文件到当前补丁保存修改到补丁quilt push应用下一个补丁quilt pop撤销当前补丁列出所有补丁列出已应用的补丁列出当前补丁关联的文件quilt diff查看未刷新的修改编辑补丁头信息删除补丁重命名补丁这就是 Quilt 的详细使用方法。掌握了这些,你就可以高效地管理源代码补丁了。
2026-04-09 14:24:53
181
原创 windows CMD 常用命令
可靠文件复制,支持镜像同步和日志记录。:启动配置数据编辑器(管理员权限)。:文件系统管理(管理员权限)。:Windows恢复环境管理。:部署映像管理(管理员权限)。:高级复制,可复制目录树。:磁盘分区管理(交互式)。:FTP客户端(交互式)。:移动文件或重命名文件。:以树状图显示目录结构。:Telnet客户端。:重命名文件或目录。:显示文本文件内容。type [文件名]tree [目录名]:显示系统配置信息。:关机或重启计算机。:显示IP配置信息。:显示网络连接统计。
2026-04-03 09:56:34
195
原创 Linux内核随机数API
需求内核态API用户态接口安全随机数高性能伪随机数(无直接内核提供的对应接口)范围随机数用户态自行取模(需注意偏差)概率采样随机数 + 阈值比较同上注:从Linux 5.17开始,底层被替换为更健壮的生成器,但依然不保证密码学安全。总之,Linux内核根据安全强度和性能要求提供了分层明确的随机数接口,概率值则通过随机数比较简单实现。
2026-04-02 14:48:29
313
原创 Linux 专用内存缓存池 (SLAB/SLUB) 解析
专用内存缓存池是 Linux 内核性能优化的基石,理解并正确使用它,可以让你的内核模块和驱动获得接近硬件极限的性能表现。它通过预分配和重用对象,避免了频繁调用底层内存分配器带来的开销和碎片问题。:内存泄漏,内核报错 “cache still has objects”考虑一个网络驱动,每秒需要处理数万个数据包,每个数据包对应一个。:销毁前必须确保所有对象都已释放,否则会导致内存泄漏。✅ 选择合适的对象大小(考虑对齐和缓存行)✅ 对于大对象(> 页大小)考虑使用。✅ 避免在缓存中混用不同生命周期的对象。
2026-04-02 10:28:09
556
原创 Linux 内核中断机制
中断是硬件设备向CPU发出的异步信号,用于通知CPU有事件需要处理。Linux内核中的中断机制是系统响应外部事件的核心基础设施。
2026-04-02 09:38:34
296
原创 Linux 内核中网络地址快速打印符
需求推荐格式符示例IPv4地址快速打印%pI4IPv6地址打印(首选)%pI6cMAC地址打印%pM带端口的地址打印%pIS核心要点所有格式符都必须传递指针,不能直接传值地址数据应保持内核原有的字节序(IPv4为网络字节序)IPv6优先使用%pI6c(压缩格式)%pIS系列可直接打印sockaddr结构,最为方便这些扩展格式说明符是Linux内核网络调试中最常用的工具,比手动调用in4_ntopin6_ntop要简洁得多。
2026-03-31 10:45:07
234
原创 Linux 内核中与网络地址相关的函数
Linux内核提供了丰富的网络地址处理函数,主要用于协议栈内部和内核模块开发。以下是内核中可用的网络地址工具函数分类介绍。实际使用示例:二、地址类型判断函数2.1 IPv4地址类型判断实际使用示例:2.2 IPv6地址类型判断(内核核心函数)实际使用示例:三、地址操作函数3.1 地址比较函数3.2 地址复制和初始化3.3 地址作用域判断四、网络字节序与主机字节序转换4.1 基本字节序函数4.2 地址常量定义五、地址前缀和掩码操作5.1 IPv4掩码函数
2026-03-31 10:41:38
398
原创 Linux 内核遍历宏介绍
/ 1. 定义数据结构int *items;int size;// 2. 创建遍历宏// 1. 定义数据结构 struct my_array {int size;// 2. 创建遍历宏 # define for_each_my_array(item , array) \ for(int __i = 0;\ __i ++) // 3. 使用 struct my_array arr;int * item;
2026-03-31 10:07:21
408
原创 Linux内核的统计辅助函数
提高性能:使用每CPU变量和u64_stats避免锁竞争保证正确性:使用原子操作和顺序锁避免数据撕裂简化设计:根据场景选择最合适的机制推荐组合u64_stats+ 每CPU变量atomic_tatomic_tspinlockseqlock保护多变量在实际开发中,应根据具体需求(精度、频率、上下文)和性能要求选择最合适的统计保护机制。
2026-03-30 20:43:45
182
原创 内核定时器
Linux内核提供了多种定时器机制,用于实现延迟执行、周期性任务和超时处理。不同的定时器适用于不同的场景,从纳秒级精度到秒级延迟,从软中断上下文到进程上下文。低分辨率定时器(timer_list):适用于毫秒级、非精确的延迟需求高分辨率定时器(hrtimer):需要纳秒级精度时使用延迟函数:简单场景下的短期延迟工作队列定时器:需要睡眠操作时使用每CPU定时器:减少锁竞争,提高性能网络超时、设备轮询 →timer_list多媒体、实时控制 →hrtimer驱动短延迟 →udelaymdelay。
2026-03-30 17:55:01
484
原创 每CPU变量(Per-CPU Variable)介绍
每CPU变量是Linux内核中一种特殊的变量,它为系统中的每个CPU都维护一个独立的副本。这种设计使得CPU可以无锁地访问自己的副本,极大地提高了多核系统中的并发性能。// 静态定义// 普通变量// 结构体// 读多写少优化// 动态分配// 分配// 释放// 声明(用于头文件)// 对齐声明核心价值:以空间换时间,避免锁竞争适用场景:高频更新、读多写少、CPU本地数据最佳实践:与配合用于统计,与RCU配合用于复杂数据结构关键要点。
2026-03-30 17:29:05
359
原创 skb_buff 相关函数
以上是内核中操作sk_buff最常用、最核心的函数。理解它们的分类和作用,特别是分配(alloc_skb)、指针操作(pushpullputreserve)、释放(kfree_skb)以及队列管理(queuedequeue,是进行网络驱动开发或协议栈分析的基础。
2026-03-25 20:27:59
457
原创 内核中锁机制
在内核模块开发中,正确使用锁机制是保证并发安全的核心。Linux内核提供了多种锁机制,每种都有不同的特性和适用场景。下面为你详细介绍。
2026-03-25 20:25:01
494
原创 skb_buff 操作函数
的函数,涵盖创建、释放、修改、克隆、共享、数据操作等多个方面。并标记为已消费(通常用于异步处理完成后的释放)。的浅拷贝(共享数据缓冲区,但独立维护引用计数)。复制数据并计算校验和(用于需要校验和的协议)。获取传输层头(如 TCP/UDP 头)的指针。线性化为连续内存(用于需要连续数据的场景)。(共享数据缓冲区,但允许独立修改部分数据)。是否可共享(若不可共享则克隆一份)。获取网络层头(如 IP 头)的指针。获取链路层头(如以太网头)的指针。的深拷贝(完全复制数据缓冲区)。的数据可写(若共享则克隆)。
2026-03-25 20:18:21
251
原创 multipart-parser-c 使用方式
每个新的 multipart 部分开始时调用,包括表单字段和文件上传。此时可以在该回调用中初始化使用 multipart_parser_set_data 设置的用户自定义结构。处理实际数据部分时调用,可能会被多次调用(数据分块)。如果是文件上传,此时就可以开始写文件了。如果是文件上传,此时可以关闭文件句柄了。头部字段值出现时调用,紧跟在 on_header_field 之后。一个部分的所有头部解析完成后调用,在on_part_data之前。遇到头部字段名时调用,可能会被多次调用(对于较长的字段名)
2025-12-20 10:37:27
386
原创 syslog 和 logrotate
syslogd是Unix系统的标准日志守护进程,用于收集、分类和分发系统日志。它支持按设施(facility)和优先级(priority)对日志进行分类,并能将日志写入本地文件或转发到远程服务器。配置文件/etc/syslog.conf定义日志处理规则。 logrotate是日志管理工具,可自动轮转、压缩和清理日志文件,防止磁盘空间耗尽。它支持按时间或大小触发轮转,并能执行自定义脚本。配置文件定义轮转策略,包括压缩、保留周期等参数。两者配合可有效管理系统日志的生命周期。
2025-05-27 17:19:55
888
原创 vscode 远程SSH连接并配置C/C++开发环境
vscode ssh 远程连接服务器;vscode ssh 远程 C/C++ 开发环境
2024-09-01 17:40:20
2475
1
原创 astyle 配置代码格式化(Source Insight / VSCode)
Source Insight 代码自动格式化。Astyle 命令参数说明。vscode 中 Astyle 配置
2024-07-29 21:08:52
2790
1
原创 VirtualBox 安装 Ubuntu Server
VirtualBox 安装 Ubuntu Server 2204、2404 都可以按照该教程进行
2024-07-05 10:59:07
1632
原创 OpenWRT package/Makefile
包本身可能提供宿主工具,而构建或使用这些工具可能需要先构建其他宿主工具。软件包的编译过程目录名字。默认值$(PKG_NAME)-$(PKG_VERSION)这个变量在执行 ./configure 配置脚本时,用于选择要附加什么参数,格式如下。这个变量用于定义系统默认执行 make 的时候,附加的参数有哪些,格式如下。例如,Meson包提供的主机工具需要另一个构建工具Ninja。包需要Meson构建系统来生成构建文件,以及主机上的Glib2。如果你的包需要宿主工具才能为目标机器构建,这些应该放在。
2024-07-04 11:27:47
2109
原创 VirtualBox Ubuntu Sever配置双网卡
如上配置后,ifconfig 只能看到 网卡1 应用了。要应用 网卡2 需要更改文件 /etc/netplan/50-cloud-init.yaml(不同的ubuntu版本这个文件名可能不同)此时可以在宿主机上ping 192.168.56.101 和 ssh 连接 ubuntu sever 了!接下来更改 /etc/netplan/50-cloud-init.yaml 文件启用 enp0s8,然后执行命令 sudo netplan apply 应用即可!
2024-07-02 11:26:53
1006
原创 /proc/{pid}/stat 文件说明
在 Linux 系统中,/proc是一个虚拟文件系统,它提供了大量关于系统和正在运行的进程的信息。是其中一个文件,它提供了关于指定进程 ID(PID)的详细状态信息。
2024-01-26 14:56:05
6044
原创 nginx 交叉编译
准备软件包如下,放在同级目录.├── nginx-1.18.0├── openssl-1.1.1f├── pcre-8.45└── zlib-1.2.11准备工作进入 nginx-1.18.0 目录编写 build.sh 脚本如下:#!/bin/sh# 脚本放在 nginx-1.18.0 目录BUILD_PATH=$(pwd)CROSS_CC=${你的编译器目录}/arm-buildroot-linux-gnueabi-ZLIB_PATH=${BUILD_PATH}/
2022-05-31 10:57:38
844
1
原创 nginx 交叉编译
环境:Linux CentOS6.9 2.6.32-696.el6.x86_64软件版本:nginx http://nginx.org/download/nginx-1.18.0.tar.gz openssl https://www.openssl.org/source/old/1.1.1/openssl-1.1.1f.tar.gz zlib https://codeload.github.com/madler/zlib/tar.gz/refs/tags/v1.2.11
2022-05-30 18:52:02
5243
3
原创 printf 彩色输出
printf 彩色输出需要用到控制命令:\033[A1;A2;A3m命令说明:开头:\033[属性代码:A1前景色:A2背景色:A3结束符:m
2022-05-27 15:12:04
1871
原创 制作 Linux 根文件系统镜像
运行环境系统版本 Ubuntu 22.04 LTS 内核版本 5.15.0-25-generic GCC版本 gcc (Ubuntu 11.2.0-19ubuntu1) 11.2.0 源码下载需要准备 Linux 内核源码和 busybox 源码内核源码下载地址(我选择的是 linux-5.17.4) https://kernel.org/ 官网 https://mirrors.aliyun.com/linux-k
2022-04-24 11:49:01
1674
原创 C 清空一个已经打开的文件
记录 2 个 C 函数,这2个函数是用来截断一个文件的int truncate(const char *path, off_t length);int ftruncate(int fd, off_t length);truncate:/**path : 文件路径length : 截断的长度,设为 0 则可以清空文件。 若 length 大于文件大小,则文件被扩充,扩充部分用 '\0' 填充**/int truncate(const char *path, of
2022-02-15 13:38:00
1627
原创 openwrt 使用自定义 DNS
记录一下在 openwrt 设置自定义 DNS 的命令uci set network.{interface_name}.peerdns = 0 // 是否使用上行DHCP 或者 PPPOE分配的DNS,这个参数默认值是 1。不建议改这个值。uci add_listnetwork.{interface_name}.dns="8.8.8.8" // 添加 DNS。openwrt 会优先使用这个参数设置的 DNSuci commit network // 保存ubus call network..
2021-11-29 15:59:11
6495
原创 Openssl 对称加解密函数 - EVP_Cipher、EVP_Encrypt、EVP_Decryp 系列
实验环境:openssl 1.1.1kEVP_CipherInit_ex()、EVP_CipherUpdate() 和 EVP_CipherFinal_ex() 是可用于解密或加密的函数。执行的操作取决于enc参数的值。加密时应设置为 1,解密时设置为 0,保持值不变为 -1。// 创建密码上下文EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void);// 清除密码上下文中的所有信息并释放与其关联的任何已分配内存,包括ctx本身。// 应在使用密码的所有操.
2021-08-31 10:38:41
14988
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅