自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 资源 (6)
  • 收藏
  • 关注

原创 PCIE网卡驱动DMA初始化配置

/ 设置 PCI_COMMAND_MASTER 位。启用 PCIe 设备的 DMA 主控模式(通过设置 PCI Command Register 的。// 启用设备内存和 DMA。配置发送(TX)和接收(RX)描述符环的 DMA 地址(通过 MMIO 寄存器写入)。网卡通过 DMA 将数据写入内存缓冲区,触发中断通知驱动。// 写入 TX 描述符环的 DMA 地址。// 写入 RX 描述符环的 DMA 地址。启动 DMA 引擎(通过设置控制寄存器。// 启用 TX DMA。// 启用 RX DMA。

2025-04-16 23:20:41 1192 1

原创 pcie网卡驱动与dm9000驱动寄存器访问方式

存放设备的基本信息(厂商ID、设备ID),并分配 MMIO 或 I/O 空间地址。// Linux 内核中获取 BAR0 的 MMIO 地址。网卡通过 DMA 将收到的数据写入内存,触发中断通知驱动。是核心,它决定了 MMIO 或 I/O 空间的基地址。更新 DMA 描述符寄存器,通知网卡读取内存中的数据。是数据传输的关键,驱动与网卡通过内存中的描述符交互。:指定 MMIO 或 I/O 空间的基地址。// 2. 写入控制寄存器(启动网卡)// 4. 收到数据时(中断处理),通过直接读写内存地址控制网卡。

2025-04-16 22:50:00 645

原创 对称加密与非对称加密的特点

通过理解对称加密和非对称加密的特点和应用场景,可以更好地设计和实施安全的信息系统,保护数据和通信的安全。

2025-04-12 13:39:56 670

原创 非对称加密以及安全哈希算法在通信认证过程的作用

通过理解这些概念和技术,可以更好地设计和实施安全的信息系统,保护数据和通信的安全。

2025-04-12 13:32:06 905

原创 对称加密与非对称加密与消息摘要算法保证https的数据交互的完整性和保密性

通过对称加密和非对称加密的结合,HTTPS在保障通信安全方面实现了高效性与安全性的平衡,确保了数据的保密性和完整性。

2025-04-11 21:04:28 922

原创 入侵检测snort功能概述

支持多种协议(如TCP/UDP/ICMP、HTTP、FTP、DNS、SMTP等),识别异常字段或违规内容。控制台实时输出、Syslog、数据库(MySQL/PostgreSQL)记录、邮件/短信通知。:基于预定义或自定义规则检测攻击行为(如SQL注入、缓冲区溢出、端口扫描等)。:识别协议异常(如畸形的DNS查询)、流量洪水(DDoS)。:通过动态模块扩展功能(如GeoIP定位、恶意文件检测)。:实时捕获和分析网络数据包(支持以太网、无线等)。:匹配数据包内容(如恶意字符串、正则表达式)。

2025-04-11 20:31:44 575

转载 ARM9寄存器结构

寄存器R14常用在如下的情况:在每一种运行模式下,都可用R14保存子程序的返回地址,当用BL或BLX指令调用子程序时,将子程序的返回地址(在PC中)复制给R14,执行完子程序后,又将R14的值复制回PC,即可完成子程序的调用返回。在所有的运行模式下,未分组寄存器都指向同一个物理寄存器,它们未被系统用作特殊的用途,因此,在中断或异常处理进行运行模式转换时,由于不同的处理器运行模式均使用相同的物理寄存器,可能会造成寄存器中数据的破坏,这一点在进行程序设计时应引起注意。在其他版本的处理器中,Q标志位未定义。

2025-04-08 21:04:40 122

原创 信息系统项目管理中各个知识领域的概要描述及其管理流程

定性(概率/影响矩阵)或定量(蒙特卡洛模拟)。:分析利益和影响力(权力/利益矩阵)。:确定干系人信息需求(频率、渠道)。:关键路径法(CPM)或敏捷迭代。:定义角色与职责(RACI矩阵)。:培训、激励(如塔克曼阶段理论)。:制定标准(如ISO 9001)。:分析对范围、进度、成本等的影响。:由变更控制委员会(CCB)决策。(范围、时间、成本)与质量的统一。:评估和批准变更(CCB参与)。:确定依赖关系(FS、SS等)。:整合子计划(进度、成本等)。:定期沟通(如会议、报告)。

2025-04-05 21:43:09 725

原创 DPDK核心优化技术总结

DPDK通过系统化的优化技术,在数据平面处理上实现了接近线速的性能。这些技术覆盖了从硬件特性利用到软件架构设计的各个层面,形成了一个完整的高性能网络处理方案。理解这些核心优化技术对于开发高性能网络应用和进一步优化DPDK性能至关重要。

2025-04-05 12:21:21 724

原创 S3C2410 的总线架构

如果需要扩展 PCIe 或 SATA 设备,通常需要外接桥接芯片(如 PCIe-to-USB 芯片),但这在 S3C2410 的生态中并不常见。,但内部通过 AMBA 总线划分高速/低速外设,功能上类似南北桥的分层逻辑。,主要外设是 USB 1.1、SD/MMC 和串口,适合低功耗嵌入式场景。与现代 PC 的南北桥架构相比,它更简单、高度集成,但扩展性和带宽较低。(类似北桥):内存、LCD 控制器、DM9000。(类似南桥):USB、UART、GPIO、I2C。:连接内存、LCD 等高速设备。

2025-04-03 21:44:54 409

原创 Linux中断下半部(Bottom Half)机制

HI_SOFTIRQ=0, // 高优先级Tasklet。TASKLET_SOFTIRQ, // 普通Tasklet。IRQ_POLL_SOFTIRQ, // IRQ轮询。NET_TX_SOFTIRQ, // 网络发包。NET_RX_SOFTIRQ, // 网络收包。

2025-04-01 11:53:54 701

原创 Linux内核设备模型中的结构体关系解析

Linux内核设备模型通过抽象device和bus_type等结构体,为不同总线的设备提供了统一的接口和管理机制。这种抽象设计提高了代码的可维护性和扩展性,支持设备热插拔和电源管理,是Linux内核设备驱动开发的基础。总线作为设备模型的核心,定义了设备和驱动程序的匹配规则,支持设备树和动态配置,使得设备驱动开发更加灵活和高效。

2025-03-31 16:52:44 727

原创 socket系统调用的参数涵义

/ 创建 ICMP 原始套接字。// 创建 IPv4 TCP 套接字。// 创建 UDP 套接字。指定套接字使用的协议族(Address Family),决定了通信的地址类型和协议类型。系统调用用于创建一个新的网络套接字(socket),它是网络通信的基础。通过合理配置这三个参数,可以创建适应不同网络场景的套接字,为后续的。指定套接字的通信语义(数据传输方式)。指定套接字使用的具体协议,通常设为。权限(通常需 root 用户)。:返回套接字文件描述符(),用于后续操作(如。:套接字使用后应调用。

2025-03-28 11:59:07 891

原创 linux协议栈网卡接收数据到tcp缓冲区

│ ├─ 无锁竞争 → tcp_rcv_established() → sk_receive_queue → tcp_recvmsg()软中断 → backlog → 用户进程释放锁 → __release_sock() → sk_receive_queue → tcp_recvmsg()软中断 → tcp_data_queue() → sk_receive_queue → tcp_recvmsg() → 用户空间。:1次拷贝(内核→用户空间)。

2025-03-28 10:24:39 871

原创 IP 分片重组与 TCP 会话重组

接收端需对数据段(Segment)按序列号(Sequence Number)排序,确保应用层收到有序数据。若部分分片丢失,重组队列会等待一段时间(如 Linux 默认 30 秒),超时后丢弃所有分片。(13 比特):当前分片在原始数据包中的偏移量(以 8 字节为单位)。在网络层完成,依赖分片字段和超时机制,处理策略通常覆盖后到分片。(如以太网默认 1500 字节)时,路由器或发送端会将其分片。,之后将完整数据包交给传输层(如 TCP/UDP)。到达),内核会缓存乱序段,等待缺失数据。

2025-03-27 21:06:25 1176

原创 TCP报文格式

TCP(Transmission Control Protocol)头部是传输层协议的核心结构,用于建立连接、可靠传输、流量控制和拥塞控制。理解 TCP 头部有助于分析网络问题(如丢包、拥塞)和优化传输性能(如调整窗口大小)。源 IP(4)| 目的 IP(4)| 保留(1)| 协议(1)| TCP 长度(2)端口号(定位应用)、序列号/确认号(可靠传输)、窗口(流量控制)。时,初始序列号(ISN)由系统随机生成(防预测攻击)。Kind(1)| Length(1)| Data(可变)

2025-03-27 20:43:19 1179

原创 IP报文格式

分片后,只有第一个分片包含传输层头部(如 TCP/UDP 端口号)。IPv6 头部更简洁(固定 40 字节),删除了分片、校验和等字段。仅校验 IP 头部,传输层(如 TCP/UDP)有独立的校验和。:表示整个 IP 数据包的长度(头部 + 数据),单位是字节。:定义数据包的优先级和服务质量(QoS)参数,现多用于。:扩展功能(如记录路由、时间戳等),现代网络较少使用。:校验 IP 头部的完整性(不包括数据部分)。(即 20 字节,无可选字段)。(即 60 字节,含可选字段)。

2025-03-27 16:47:19 1209

原创 TCP的三次握手和四次挥手

三次握手:用于建立 TCP 连接,确保双方都能收发数据。四次挥手:用于关闭 TCP 连接,确保双方都完成数据传输并安全关闭。状态转换:TCP 连接在不同状态下转换,确保连接的可靠性和完整性。

2025-03-21 11:47:26 1134

原创 无锁队列

无锁队列(Lock-Free Queue)是一种并发数据结构,它通过原子操作(如 CAS,Compare-And-Swap)来实现线程间的同步,而不需要使用传统的锁(如互斥锁或自旋锁)。无锁队列的核心思想是避免线程阻塞,从而提高并发性能。无锁队列的目标是允许多个线程同时访问队列,而不会因为锁的争用导致性能下降。:使用硬件支持的原子操作(如 CAS)来确保数据的一致性。:线程不会因为等待锁而被阻塞,而是通过重试机制继续尝试操作。:通过内存屏障(Memory Barrier)或原子操作的内存顺序参数(如。

2025-03-18 17:09:01 567

原创 std::unique_ptr、std::shared_ptr 和 std::weak_ptr实现原理

是一种独占所有权的智能指针,确保同一时间只有一个unique_ptr指向某个对象。

2025-03-18 12:36:29 635

原创 C++ static 关键字修饰类的成员变量和成员函数的说明

在 C++ 中,static关键字用于修饰类的成员变量和成员函数时,具有特定的作用。static当static用于修饰类的成员变量时,表示该成员变量是。

2025-03-18 11:58:07 833

原创 C++ 中const 关键字修饰成员变量和成员函数的说明

const当const用于修饰类的成员变量时,表示该成员变量是一个常量,其值在初始化后不能被修改。

2025-03-18 11:40:49 933

原创 二叉排序树(BST)、平衡二叉树(AVL 树)、红黑树(Red-Black Tree)和 B 树(B-Tree)

每个内部节点(非根和非叶子节点)至少有 ⌈�/2⌉⌈m/2⌉ 个子节点。每个节点最多有 �m 个子节点(�m 阶 B 树)。平均时间复杂度:�(log⁡�)O(logn)。平均时间复杂度:�(log⁡�)O(logn)。时间复杂度:�(log⁡�)O(logn)。时间复杂度:�(log⁡�)O(logn)。时间复杂度:�(log⁡�)O(logn)。时间复杂度:�(log⁡�)O(logn)。时间复杂度:�(log⁡�)O(logn)。时间复杂度:�(log⁡�)O(logn)。

2025-03-03 17:47:51 876

原创 32 位系统的虚拟地址管理(进程与内核线程)----页目录页表----物理地址

通过。

2025-03-03 17:36:44 648

原创 网卡驱动接收数据----软中断处理数据----socket接收数据

解析数据包的协议头(如 Ethernet、IP、TCP/UDP),并将数据包传递给协议栈的上层(如。将数据包处理任务分解为硬件中断(快速接收)和软中断(协议栈处理),提高系统响应速度。软中断用于异步处理网络数据包,避免在硬件中断上下文中执行耗时操作(如协议栈处理)。:硬件中断处理程序将数据包从 DMA 缓冲区移动到内核的接收队列,并触发软中断。硬件中断处理程序从 DMA 缓冲区取出数据包,放入内核的接收队列。:数据包从网卡到协议栈的传递过程中,没有额外的数据拷贝。

2025-03-03 16:16:20 644

原创 文件编码格式

文件编码格式 utf-8 gbk unicode 编码格式内容

2022-05-13 11:54:02 5026

原创 C语言类型转换的问题

数据类型转换 16进制输出 字符转换为十六进制

2022-05-12 19:50:04 372

原创 数据包零拷贝

下文是对工作中的零拷贝机制进行主要代码注释描述,以便之后能够快速记忆和理清其工作原理。1、物理内存的分配,代码与内核一起编译,内核启动执行do_early_param进行分配__initcall (capmem_init) //相当于module_init,内核启动流程do_initcalls()会遍历.initcall*.init段,依次执行各个级别的函数cap...

2022-01-13 21:50:14 236

原创 Snort框架分析

下面是snort2.0的框架分析,相比snort之后的版本,其结构比较简单、更容易学习和理解,其次是本人对此版本相对比较熟悉一些,可以为初次接触和学习snort的朋友提供帮助,能够快速整体全局性地了解snort的基本框架。下面从四个方面展开描述。一、snort插件snort中的插件有3类,输出插件,预处理插件,规则选项检测插件插件的好处:灵活地选择使用哪些功能开发人员很容易开发第三方插件,易于扩展。1、输出插件InitOutputPlugins //输出插件初始化函数注册1) 注册过.

2022-01-07 17:11:35 1594

原创 dm9000网卡驱动分析

dm9000_probe:ndev = alloc_etherdev(sizeof(struct board_info)); //net_device分配与初始化db = netdev_priv(ndev); //网卡硬件信息初始化db->addr_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);//地址资源获取db->data_res = platform_get_resource(pdev, IORE...

2022-01-05 16:15:09 867

原创 Linux设备模型

kobject ktype kset是设备模型的基础kobject嵌入在其他结构体当中,该结构便拥有了kobject的功能。提供如引用计数、名称、父指针等字段,用于创建对象的层次结构。ktype是为了描述一族kobject所具有的普遍特性。因此,不再需要每个kobject都分别定义自己的特性,而是将这些普遍的特性在ktype结构中一次定义,然后所有同类的kobject都能共享一样的特性。kset是kobject对象的集合体。可以当作一个容器,具有相同ktype的kobject可以分组到不.

2022-01-05 11:10:50 390

原创 ELF文件格式分析与静态链接总结归纳

一、binutils包 binutils包为elf格式文件提供查看、编辑、反汇编等命令 通过yum provides */objdump 或rpm -qif /usr/bin/objdump得到提供objdump命令的安装包为binutils,通过rpm -qpl 查看包内容,得知,binutils除了提供objdump,还提供ar as ld nm readelf size strip objcopy等二进制相关命令。下面提供objdump常用的参数-h 把elf文件各...

2021-12-20 17:52:50 435

原创 linux C/C++运行时库总结归纳

描述c运行库与main函数运行前后的内幕

2021-12-13 18:00:50 2578

原创 Linux虚拟文件系统vfs与文件操作始末

虚拟文件系统(vfs)是Linux内核的子系统,其设计目的是对用户层(系统调用)屏蔽底层(各特定文件系统)实现的复杂性,对底层提供统一的接口与数据结构,使得能衔接各个特定文件系统(如ext2、ext3、fat32等),是用户层与文件系统层之间的抽象层。 与vfs层相关的主要数据结构有以下几个:超级块对象super_block、索引节点对象inode、目录项dentry、文件对象file、文件系统类型file_system_type、挂载的文件系统vfsmount等。 下面简单介...

2021-12-13 15:05:59 907

转载 开源漏洞扫描器合集

首先,谢谢原作者: (此文为转载的文章,现将原地址贴出如下:http://blog.csdn.net/mypc2010/article/details/77679760)https://github.com/Canbing007/wukong-agentpython redis awvs api nessus api=====================

2018-01-15 14:56:30 11472

转载 Linux 3.x 内核学习笔记——x86 64位内存管理

地址映射64位地址采用4层地址映射,如下图:pgd、pud、pmd、pte各占了9位,加上12位的页内index,共用了48位。即可管理的地址空间为2^48=256T。而在32位地址模式时,该值仅为2^32=4G。另外64位地址时支持的物理内存最大为64T,见e820.c中MAX_ARCH_PFN的定义:# define MAX_ARCH_PFN MAXMEM>>P

2017-01-05 10:09:53 525

原创 tcp标志push与发送窗口的关系

系统调用read与recv读取socket缓存区 发送端系统调用write与push标志位及接收缓存区大小yupush标志位的关系

2016-06-03 13:58:07 2479 1

转载 Linux 3.x 内核学习笔记——x86 64位内存管理

地址映射64位地址采用4层地址映射,如下图:pgd、pud、pmd、pte各占了9位,加上12位的页内index,共用了48位。即可管理的地址空间为2^48=256T。而在32位地址模式时,该值仅为2^32=4G。另外64位地址时支持的物理内存最大为64T,见e820.c中MAX_ARCH_PFN的定义:# define MAX_ARCH_PFN MAXMEM>>PAGE_

2015-03-11 14:43:44 824

转载 init进程

init 进程 getty rc bash

2015-01-27 16:31:07 1574

转载 Bios读文件与Grub(bootload)和initrd和内核对文件系统驱动的支持

前言本文源于这样一个问题:内核镜像存储在硬盘下特定文件系统中,bootloader必须先加载文件系统驱动,才能读取内核文件。类似的,内核要读取根文件系统中的文件,也需要先加载文件系统驱动。如果文件系统驱动存储在硬盘中,启动时没有驱动无法读硬盘,将导致整个启动过程的失败。那么Grub和内核如何解决这个问题的呢?启动过程中需要读硬盘的时刻:1. BIOS读硬盘中MBR,将控制权交给MB

2014-10-27 15:33:21 881

linux 嵌入式性能详解

linux嵌入式内存优化 linux进程管理 elf格式文件分析 linux内存调试 linux动态库静态库文件分析 编译优化

2013-12-07

关于系统调用原理的介绍

应用编程接口(application program interface, API)和系统调用是不同的 API只是一个函数定义 系统调用通过软中断向内核发出一个明确的请求 Libc库定义的一些API引用了封装例程(wrapper routine,唯一目的就是发布系统调用) 一般每个系统调用对应一个封装例程 库再用这些封装例程定义出给用户的API

2019-11-18

关于漏洞扫描原理与技术

扫描程序是自动检测远端或本地主机脆弱性的程序。通过与目标主机TCP/IP端口建立连接并请求某些服务(如TELNET、FTP等),记录目标主机的应答,搜集目标主机相关信息(如匿名用户是否可以登录等),从而发现目标主机某些内在的安全漏洞。对某一类漏洞进行检查的程序成为一个扫描方法。 扫描常用技术包括ping 扫射、端口扫描、操作系统识别、穿透防火墙的扫描

2019-11-18

空空如也

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

TA关注的人

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