- 博客(44)
- 资源 (1)
- 收藏
- 关注
原创 简要分析alloc_skb函数
分配内存:为sk_buff结构体和数据缓冲区(存储实际网络数据包分配内存)初始化结构:设置sk_buff的元数据(如指针、长度、协议类型等)预留头部空间:在数据缓冲区中预留空间,以便后续协议层(如IP、TCP添加头部)。alloc_skb是Linux内核网络栈的基石,通过高效的内存分配和结构体初始化,为网络数据包提供存储和管理的基础设施。其实现结合了slab缓存、内存对齐和预留空间优化,确保网络协议栈能够高性能地处理数据包。
2025-03-20 11:50:32
970
原创 简要分析kfree_skb函数
kfree_skb()是Linux内核网络协议栈内存回收的关键函数,通过引用计数、分片清理、DMA取消映射等机制,确保网络数据包的内存资源被安全高效地释放。
2025-03-20 11:43:56
1117
原创 简要分析IPPROTO_UDP参数
头文件:定义在 <netinet/in.h>(Linux/Unix)或 <winsock2.h> (windows)中:#define IPPROTO_UDP 17 /* UDP 协议 */值:17 ,对应IANA分配的UDP协议号(IANA协议号列表层级:属于传输层协议(OSI第四层),基于IP协议(网络层)工作本质:标识UDP协议的常量(协议号=17)用途:在传输层启用UDP的高效无连接传输在套接字编程中显式指定UDP协议关键特性:无连接、低开销、支持广播/组播。
2025-03-19 11:07:29
1130
原创 简要分析IPPROTO_TCP参数
头文件:定义在<netinet/in.h>(Linux/Unix)或 <winsock2.h>(Windows)中:#define IPPROTO_TCP 6 /* TCP 协议 */值:6,对应IANA分配的TCP协议号层级:属于传输层协议(OSI第四层),基于IP协议(网络层)工作本质:标识TCP协议的常量(协议号=6)用途:在传输层启用TCP的可靠传输机制在套接字编程中显式指定TCP协议关键特性:面向连接、可靠传输、流量与拥塞控制。
2025-03-19 10:42:12
1763
原创 简要分析NLM_F_EXCL参数
头文件:定义在<linux/netlink.h>中#define NLM_F_EXCL 0x200 /* 排他性操作:条目必须不存在 */使用场景:通常与写操作类消息(如RTM_NEWROUTE、RTM_NEWNEIGH)结合使用,表示用户态要求严格创建新条目,避免覆盖已有条目本质:Netlink协议中用于强制排他性创建资源的标志位用途:确保配置条目的唯一性(如唯一路由、ARP条目等)防止因重复操作导致数据意外覆盖关键规则:若条目存在则失败,不存在则创建。
2025-03-18 13:47:01
454
原创 简要分析NLM_F_REPLACE参数
头文件:定义在<linux/netlink.h>中:#define NLM_F_REPLACE 0x100 /* 替换已存在的条目 */使用场景:通常与写操作类消息(如RTM_NEWROUTE、RTM_NEWNEIGH)结合使用,表示用户态需要替换现有条目。本质:Netlink协议中用于强制替换现有资源的标志位用途:更新已存在的配置条目(如路由、邻居表项等)简化用户态配置管理流程关键规则:若条目存在则替换,不存在则创建(除非显示禁止)与NLM_F_EXCL互斥,需注意标志位组合。
2025-03-18 10:15:11
259
原创 简要分析NLMSG_NOOP参数
头文件:定义在<linux/netlink.h>中#define NLMSG_NOOP 0x1 /* 空操作,无实际行为 */作用:标记一个Netlink消息为"无操作",接收方(内核或用户态)无需处理其负载数据本质:Netlink协议中的“空操作”指令用途:测试通信、维持连接、占位或调试行为:接收方无需处理负载,直接忽略或回复ACK。
2025-03-17 16:17:28
455
原创 简要分析NLMSG_DONE参数
头文件:定义在中:#define NLMSG_DONE 0x3 /* 多部分消息传输结束 */作用:标记分块传输的终止,用户态收到此消息后停止等待更多数据。本质:Netlink协议中用于标记分块数据传输结束的标志。用途:通知用户态分块数据已全部发送完毕。优化大数据传输的内存和可靠性。关键行为:分块消息需设置NLM_F_MULTI最后一个消息为NLMSG_DONE,不携带负载。
2025-03-17 16:14:47
474
原创 简要分析select函数
select()是基础的I/O多路复用工具,适合简单场景或跨平台开发缺点:描述符数量受限,性能低,使用繁琐现代高并发场景有限选择 epoll、kqueue,而select()更多用于兼容旧代码或小型项目。
2025-03-15 11:41:22
792
原创 简要分析nlmsg_total_size函数
在Linux内核头文件中,nlmsg_total_size通常通过宏定义实现参数:payload为消息负载(payload)的字节长度。返回值:总大小(消息头+负载+对齐填充)核心作用:精确计算Netlink消息的总大小(含对齐填充),确保内存分配安全和解析正确关键实现:通过宏组合实现对齐计算,避免手动计算错误适用场景:内核与用户态的Netlink消息构造、内存分配及解析。
2025-03-15 11:35:43
395
原创 简要分析epoll()函数
epoll()是Linux高并发网络编程的核心工具,适合处理数万至百万级连接核心机制:通过红黑树管理文件描述符,就绪链表快速返回活跃事件。关键函数:epoll_create、epoll_ctl、epoll_wait。模式选择:默认LT模式易用,ET模式需谨慎处理数据读写。性能优势:显著优于select() / poll(),是构建高性能服务器的首选方案。
2025-03-14 10:26:46
655
原创 简要分析bind函数
(3)协议分发:根据套接字类型(如TCP、UDP、RAW)调用对应的协议栈处理函数。(2)参数验证:内核检查sockfd有效性、addr用户空间指针是否合法。(1)触发系统调用:用户调用bind后,通过syscall指令进入内核。2. 端口管理哈希表inet_hashinfo。二、用户态与内核态交互。3. 端口绑定冲突检测。1. 服务器监听前绑定。2. 客户端指定源端口。七、内核优化与高级特性。三、内核实现关键步骤。1. 套接字对象查找。2. 地址解析与验证。5. 更新套接字状态。
2025-03-14 10:22:00
590
原创 简要分析SOCK_RAW参数的含义
参数说明domain:协议族,如AD_INET(IPv4)或AF_INET6(IPv6)type:套接字类型,SOCK_RAW标识创建原始套接字protocol:指定协议类型(需与domain匹配),例如:IPPROTO_ICMP (ICMP协议)IPPROTO_TCP(TCP协议)IPPROTO_UDP(UDP协议)IPPROTO_RAW(允许自定义IP头)
2025-03-13 10:39:11
429
原创 简要分析NLM_F_REQUEST参数
NLM_F_REQUEST是Netlink请求消息的必备标志,用户标识用户->内核的通信方向组合其他标志可定义请求的详细行为。
2025-03-13 10:36:25
922
原创 简要分析NLM_F_MULTI参数的含义
NLM_F_MULTI用于分块传输大量数据,是内核->用户方向的关键标志用户空间需通过循环接收消息,检查NLM_F_MULTI 和 NLMSG_DONE 来确保数据完整性。忽略此标志可能导致数据处理错误(如截断的路由表或接口列表)
2025-03-12 10:22:58
901
原创 简要分析NETLINK_USER参数
NETLINK_USER时Linux中实现自定义高效通信的利器,适合需要灵活协议和低延迟的场景使用场景内核模块与用户态工具交互高性能用户进程间通信(如实时数据处理)替代传统IPC机制(如需要结构化消息或多播支持时)替代方案:若需标准化接口,可考虑NETLINK_GENERIC;若仅需简单命令,使用ioctl 或 sysfs可能更简单。
2025-03-12 10:18:02
994
原创 简要分析NETLINK_ROUTE参数
NETLINK_ROUTE时Linux内核中Netlink协议族的一个子类型,专用于用户空间与内核网络子系统之间的通信,它是实现动态网络配置(如路由表、网络接口、地址管理)的核心机制,为现代网络管理工具(如iproute2)提供了底层支持。NETLINK_ROUTE通过消息类型(nlmsg_type)区分操作,常见类型包括。三、NETLINK_ROUTE的优势(对比传统机制)四、NETLINK_ROUTE消息类型(部分)一、NETLINK_ROUTE的核心作用。路由、接口、地址、邻居表等。
2025-03-11 10:54:45
772
原创 简要分析NETLINK_KOBJECT_UEVENT参数
NETLINK_KOBJECT_UEVENT是Linux设备热插拔管理的基石,支撑了动态设备管理的自动化关键角色:内核:生成事件消息用户空间服务(如udev):解析事件并响应。适用场景:开发设备监控工具调试设备驱动或热插拔问题构建自定义设备管理逻辑(如容器允许时挂载设备)
2025-03-11 10:51:26
1135
原创 nlmsg_free函数简要分析
nlmsg_free是用户空间Netlink编程中管理消息内存的关键函数,用于手动释放未被成功发送或不在需要的消息。其作用域仅限于用户空间库(如libnl),与内核空间的sk_buff自动释放机制互补。合理使用该函数可以避免内存泄漏。
2025-03-10 10:55:27
575
原创 Linux进程间通信有哪些,分别起到了什么作用
性能优先:共享内存 > 内存映射我呢见 > 管道 > 套接字灵活性: 套接字 > DBus > 消息队列开发复杂度:信号量/共享内存 > 套接字 > 管道。
2025-03-10 10:14:51
2214
原创 nl_has_listeners函数简要分析
nl_has_listners是linux内核用于检查Netlink套接字是否有活跃监听者(用户空间进程订阅)的辅助函数,其核心作用是避免内核向无监听者的多播组发送消息,从而节省资源。指定待检查的 Netlink 套接字(内核通过此套接字管理多播组订阅)。要检查的多播组 ID,对应用户空间进程通过。封装了广播消息和监听者检查的高级接口。1. 内核发送多播消息前的检查。1. 检查多播组订阅状态。三、内部实现于关键逻辑。六、用户空间订阅多播组。2. 线程安全与同步。向指定多播组广播消息。
2025-03-09 10:37:45
405
原创 netlink_unicast函数解析
netlink_unicast时内核通过Netlink协议向用户空间单播消息的核心接口,其自动释放sk_buff的机制通过所有权转移和引用计数实现,确保内存安全。开发者只需关注消息构造和发送逻辑,无需手动管理内存,极大降低了资源泄漏风险。
2025-03-09 10:32:05
746
原创 mencpy函数简要分析
memcpy是C语言中实现内存高效复制的关键工具,适用于非重叠内存块的快速拷贝,使用时需严格把控内存边界,避免内存溢出和浅拷贝问题,在处理内存重叠的场景,应选择memmove替代。若复制的内容包含指针或动态分配的资源,memcpy仅复制指针值(浅拷贝),可能导致重复释放或内存泄漏。对于某些架构(如ARM),未对齐的内存访问可能导致性能下降或错误,需确保内存对齐。将src指向的内存区域的前n个字节,按字节顺序复制到dest指向的内存区域。memcpy是C标准库中的一个核心函数,用于高效的复制内存块的内容。
2025-03-09 10:27:49
472
原创 alloc_skb函数的作用
alloc_skb时Linux内核网络子系统中最基础的内存分配接口,用于创建和管理网络数据包的缓冲区。合理使用GFP_ATOMIC和GFP_KERNEL、正确处理缓冲区生命周期,可避免内核崩溃或性能瓶颈。
2025-03-09 10:17:31
1035
原创 GFP_KERNEL参数的含义
GFP_KERNEL是Linux内核中安全且灵活的内存分配标志,适用于大多数允许睡眠的上下文,合理使用它需结合代码的上下文环境和内存需求特性,同时注意避免在原子操作中无用。
2025-03-09 10:07:41
852
原创 GFP_ATOMIC参数的含义
仅在必要场景使用(如中断、软中断)必须检查返回值,处理分配失败的情况。避免滥用,过度依赖可能导致内存碎片化或系统不稳定。
2025-03-08 17:08:21
644
原创 什么是用户态寄存器,及其作用
在操作系统中,用户态寄存器是指当程序运行在用户态时,CPU使用的寄存器集合,这些寄存器保存了当前进程在用户态的执行状态(如代码执行位置、栈指针、通用数据等)。当进程通过系统调用或中断进入内核态时,内核中保存这些寄存器的值,以便在返回用户态时恢复进程的执行。
2025-03-08 17:01:32
946
原创 简要分析Netlink协议
Netlink协议是Linux内核中用于内核态与用户态进程间通信(IPC)的一种机制,基于套接字的通信接口,提供高效、灵活的双向数据传输能力,常用于内核模块与用户程序之间的实时交互。b. 使用nlmsg_new()分配消息缓冲区,填充数据后通过netlink_unicast()发送。Netlink是linux内核中高效、灵活的内核-用户态通信协议,尤其适合需要双向交互和大数据量传输的场景。有效载荷:紧跟在nlmsghdr后的用户数据,可以是任意格式(如二进制数据、结构体等)。内核-用户态实时通信。
2025-03-07 14:59:27
1146
原创 clk_prepare函数详细解析
在Linux内核的时钟框架中,clk_prepare()是一个用于初始化时钟资源的函数。如果时钟需要频繁启用/禁用,clk_prepare()只需要调用一次,而clk_enable() 、 clk_disable()可多次调用。复杂时钟系统(如多级分频、PLL)需要先通过 clk_prepare()建立依赖关系,在通过clk_enable()按顺序启用。clk_enable()可能需要操作硬件寄存器,而某些上下文(如原子上下文)不允许睡眠。2. 避免重复初始化。
2025-03-07 11:31:49
393
原创 原子上下文详细分析
原子上下文是linux内核中一种特殊的代码执行环境,其核心特征是不允许睡眠或调度。在原子上下文中,代码必须保证操作的原子性(不可中断),不能触发任何可能导致进程切换或延迟的操作。任何可能引发睡眠的操作(如kmalloc(GFP_KERNEL)、mutex_lock、wait_event)都不能在原子上下文中使用,否则会导致内核崩溃或死锁。中断处理:中断可能在任何时间发生,内核必须快速响应,不能因睡眠导致延迟。同步需求:在持有自旋锁时,如果代码睡眠,其他CPU可能会死锁等待该锁。d. 自旋锁保护的临界区。
2025-03-06 16:02:05
311
原创 中断上下文详细解析
在linux内核中,中断上下文分为中断上文和中断下文,两者设计的目的是为了解决硬件中断处理的实时性和延迟敏感性的矛盾。中断上文时直接响应硬件中断的代码部分,由内核的硬件中断处理函数(IRQ Handler)实现特点:1. 实时性要求高必须立即响应硬件中断(例如网卡收到数据包、磁盘I/O完成)。2. 不可睡眠运行在原子上下文,禁止任何可能引发睡眠的操作(如mutex_lock、kmalloc(GFP_KERNEL))。3. 快速完成。
2025-03-06 13:30:54
1578
原创 进程上下文详细分析
1. 进程上下文是进程在内核态的执行环境,允许睡眠和调度。2. 进程上下文本身没有上文和下文的标准定义,但可根据场景解释为:a. 上下文切换中的保存旧状态和恢复新状态b. 系统调用的进入内核态和返回用户态。
2025-03-06 13:14:02
344
原创 高通ISLAND空间移植方法
创造sensor使用极端场景,高负载,然后触发dump,通过crashman加载,执行adsp_proc\ssc\tools\cmm_scripts\ssc_parser.cmm。看结果中 island heap占用率为多少,在决定上面SNS_ISLAND_HEAP_ALLOC可以减少多少。2.QURTOS_ISLAND_POOL还有32k,可以移到QURTOS_SSC_ISLAND_POOL一些。但是我们通常建议移动要64k对齐,这里剩余也只有 32k,不足64,至于是否要移8 or 16k过去,
2024-11-04 21:07:09
382
2
原创 VScode无法写入用户设置,请打开用户设置并清楚错误或警告
VScode上报错误,点击打开设置,会跳到主题设置界面。修改完之后就能解决报错问题,切换主题。缺少逗号,红色波浪线报错。
2024-11-04 21:02:11
907
原创 高通sensor调试(如何挂载sensor)
firmare 全部push进入机器下vendor/firmware_mnt/image。如何查看registry中的这两项。重启sensor,查看log打印。查看sensor在不在位。
2024-01-02 16:38:54
1432
1
原创 高通SEE框架如何实现ADSP跟kernel通信
将sensor_info.h放在以下路径下adsp_proc/core/api/systemdrivers/sensor_info.h。qcom_smem_alloc :: 申请共享内存空间,分配内存地址,从而实现adsp侧访问到kernel指定地址。smem_get_addr :: adsp侧得到kernel那边申请的共享内存地址。实现方案,在kernel处形成节点,将adsp侧的数据上报到kernel的节点中。qcom_smem_get :: 获取adsp侧数据。在驱动scons中需要添加以下。
2024-01-02 16:27:46
1978
原创 Linux中的18个tar命令
13. 从 tar、tar.gz 和 tar.bz2 文件中解压多个文件。存档文件,只需运行以下命令。18. 检查 tar、tar.gz 和 tar.bz2 存档文件的大小。17. 如何验证 tar、tar.gz 和 tar.bz2 存档文件。16. 将文件或目录添加到 tar.gz 和 tar.bz2 文件。11. 在 Linux 中从 tar.gz 文件解压单个文件。要将文件或目录添加到现有的 tar 存档文件,我们使用选项。6. 在 Linux 中解压 tar.bz2 存档文件。
2023-04-17 14:40:56
781
原创 BSP(板级支持包)详解
BSP主要功能为屏蔽硬件,提供操作系统及硬件驱动,具体功能包括:(1)单板硬件初始化,主要是CPU的初始化,为整个软件系统提供底层硬件支持。(2)为操作系统提供设备驱动程序和系统中断服务程序。(3)定制操作系统的功能,为软件系统提供一个实时多任务的运行环境。(4)初始化操作系统,为操作系统的正常运行做好准备。BSP是一个介于操作系统和底层硬件之间的软件层次,包括了系统中大部分与硬件相关的软件模块。
2022-11-11 14:06:57
3951
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人