自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 内核中 GFP_*标志说明

选择GFP标志的核心原则是。

2026-03-26 17:23:33 351

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

原创 openwrt 镜像新增分区

记录一下给 openwrt 镜像中新增一个分区该如何操作(环境 openwrt 23.05,源码编译)

2026-02-12 17:50:55 411

原创 multipart-parser-c 使用方式

每个新的 multipart 部分开始时调用,包括表单字段和文件上传。此时可以在该回调用中初始化使用 multipart_parser_set_data 设置的用户自定义结构。处理实际数据部分时调用,可能会被多次调用(数据分块)。如果是文件上传,此时就可以开始写文件了。如果是文件上传,此时可以关闭文件句柄了。头部字段值出现时调用,紧跟在 on_header_field 之后。一个部分的所有头部解析完成后调用,在on_part_data之前。遇到头部字段名时调用,可能会被多次调用(对于较长的字段名)

2025-12-20 10:37:27 386

原创 Linux C 优雅的执行命令

【代码】Linux C 优雅的执行命令。

2025-05-30 09:21:09 479

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

原创 ubuntu server 扩容

virtual ubuntu server 扩容

2024-08-19 18:18:15 928

原创 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 Patch 制作与使用

环境:Ubuntu 2404 Server, OpenWRT-23.05。

2024-07-04 16:34:02 1445

原创 OpenWRT package/Makefile

包本身可能提供宿主工具,而构建或使用这些工具可能需要先构建其他宿主工具。软件包的编译过程目录名字。默认值$(PKG_NAME)-$(PKG_VERSION)这个变量在执行 ./configure 配置脚本时,用于选择要附加什么参数,格式如下。这个变量用于定义系统默认执行 make 的时候,附加的参数有哪些,格式如下。例如,Meson包提供的主机工具需要另一个构建工具Ninja。包需要Meson构建系统来生成构建文件,以及主机上的Glib2。如果你的包需要宿主工具才能为目标机器构建,这些应该放在。

2024-07-04 11:27:47 2109

原创 ubuntu 安装并启用 samba

环境:ubuntu server 24.04。

2024-07-02 17:03:01 1363

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

原创 创建OpenWRT虚拟机

openwrt 虚拟机

2024-06-21 15:10:29 2014

原创 使用 openssl 进行哈希计算

openssl 哈希算法函数

2024-02-20 17:02:39 2228 1

原创 /proc/{pid}/stat 文件说明

在 Linux 系统中,/proc是一个虚拟文件系统,它提供了大量关于系统和正在运行的进程的信息。是其中一个文件,它提供了关于指定进程 ID(PID)的详细状态信息。

2024-01-26 14:56:05 6044

原创 obuspa

TR-369 USP obuspa

2023-12-18 11:29:18 3106

原创 VirtualBox 设置共享文件夹

VirtualBox 共享文件夹

2023-12-13 16:10:30 1264

原创 ubuntu 主题美化及推荐

ubuntu 主题美化

2023-12-13 14:52:34 6953

原创 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关注的人

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