![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux驱动
文章平均质量分 76
叨陪鲤
哈
展开
-
Linux内核学习之2号进程kthreadd
Author : Toney Email : vip_13031075266@163.com Date : 2020.12.02 Copyright: 未经同意不得转载!!! Version : Linux-4.19.y Reference:https://www.linux.org/目录一、Linux的2号进程二、kthreadd进程的创建三、kthreadd进程执行体四、create_kthread函数五、小结...原创 2020-12-03 23:55:31 · 10946 阅读 · 0 评论 -
Linux内核学习之工作队列
Author : Toney Email : vip_13031075266@163.com Date : 2020.12.02 Copyright: 未经同意不得转载!!! Version : Linux-2.6.12 Reference:https://www.linux.org/ ...原创 2020-12-03 00:02:09 · 6732 阅读 · 1 评论 -
内核软中断之tasklet机制
1. 软中断IRQ简介软中断(SoftIRQ)是内核提供的一种基于中断的延时机制, Linux内核定义的软中断有以下几种:enum{ HI_SOFTIRQ=0, /*高优先级的tasklet*/ TIMER_SOFTIRQ, NET_TX_SOFTIRQ, NET_RX_SOFTIRQ, BLOCK_SOFTIRQ, TASKLET_SOFTIRQ, /*普通tasklet...原创 2019-12-22 22:02:14 · 10492 阅读 · 0 评论 -
Linux内核中的Workqueue机制分析
1. 什么是workqueueLinux中的workqueue(工作队列)主要是为了简化在内核创建线程而设计的。通过相应的工作队列接口,可以使开发人员只关心与特定功能相关的处理流程,而不必关心内核线程的创建、维护和销毁等工作(这样的工作对于一般人员来说是比较困难的,稍有不慎可能导致系统的崩溃),大大提高的系统的稳定性和扩展性。我们可以通过调用workqueue的相关接口函数自动创建内核线程,此...原创 2019-10-26 23:56:25 · 8782 阅读 · 0 评论 -
kernel_thread()和kthread_run()/kthread_create()的根本区别
1. 函数的作用首先要说明的是:这几个函数都是用来创建内核线程的。先看一下几个函数关系:这里有两个长得很像的函数:create_kthread() 和 kthread_create()。(这不是长得像,根本就是一样的好吧,有点难记),这里只是函数封装的很像,但本质上还是kernel_thread() 和 **kthread_create()**这两个函数的区别。从上面的函数调用便可以看出:...原创 2019-10-21 23:14:58 · 13993 阅读 · 3 评论 -
如何实现自定义sk_buff数据包并提交协议栈
目录一、自定义数据包的封装流程1.分配skb2.初始定位(skb_reserve)3.拷贝数据(skb_push / skb_pull / skb_put / )4.设置传输层头部5.设置IP层头部6.添加以太网头二、自定义数据包的封装实例1. “纯净数据包”发送到本机的协议栈并交由上层处理:2. “完整的IP数据包”发送到本地的协议栈并交由上层处理:...原创 2019-06-15 00:00:20 · 5476 阅读 · 3 评论 -
Linux原始套接字抓取底层报文
1.原始套接字使用场景 我们平常所用到的网络编程都是在应用层收发数据,每个程序只能收到发给自己的数据,即每个程序只能收到来自该程序绑定的端口的数据。收到的数据往往只包括应用层数据,原有的头部信息在传递过程中被隐藏了。某些情况下我们需要执行更底层的操作,比如监听所有本机收发的数据、修改报头等,而像SOCK_STREAM、SOCK_DGRAMZ则通常用于应用层,并不能满足该需求。...原创 2018-12-16 00:08:09 · 9091 阅读 · 13 评论 -
Linux网络编程:原始套接字简介
Linux网络编程:原始套接字编程一、原始套接字用途通常情况下程序员接所接触到的套接字(Socket)为两类:流式套接字(SOCK_STREAM):一种面向连接的Socket,针对于面向连接的TCP 服务应用; 数据报式套接字(SOCK_DGRAM):一种无连接的Socket,对应于无连接的UDP 服务应用。从用户的角度来看,SOCK_STREAM、SOCK_DGRAM 这两类套...转载 2018-12-15 23:18:45 · 4372 阅读 · 0 评论 -
IP头详解
IP包头长度(Header Length):长度4比特。这个字段的作用是为了描述IP包头的长度,因为在IP包头中有变长的可选部分。该部分占4个bit位,单位为32bit(4个字节),即本区域值= IP头部长度(单位为bit)/(8*4),因此,一个IP包头的长度最长为“1111”,即15*4=60个字节。IP包头最小长度为20字节 IP包总长(Total Length):长度16比特...原创 2018-12-15 22:43:39 · 4348 阅读 · 0 评论 -
Linux 网卡驱动sk_buff内核源码随笔
这几天在调试有关网卡驱动的东西,有很多地方不清楚。有关网卡驱动部分主要有两个很重要的结构体:struct net_device 和struct sk_buff。 驱动大部分都是围绕这两个东西进行操作的,包括加协议头尾,去头去尾等。为了搞清楚协议栈如何处理数据包,周末闲来无事就看看内核代码去了解下这部分东西,并做了简要记录:/* *sk_buff->h :传...原创 2018-10-27 19:33:41 · 4842 阅读 · 1 评论 -
uboot命令简介
uboot下的命令行1.典型嵌入式linux系统启动过程:嵌入式系统上电后先执行uboot、然后uboot负责初始化DDR,初始化Flash,然后将OS从Flash中读取到DDR中,然后启动OS(OS启动后uboot就无用了) 2.uboot必须解决哪些问题1、自身可开机直接启动(1)一般的SoC都支持多种启动方式,譬如SD卡启动、NorFlash启动、NandFlash启动等·····uboot...原创 2018-06-20 16:04:05 · 1955 阅读 · 0 评论 -
container of()函数简介
在linux 内核编程中,会经常见到一个宏函数container_of(ptr,type,member), 但是当你通过追踪源码时,像我们这样的一般人就会绝望了(这一堆都是什么呀? 函数还可以这样定义??? 怎么还有0呢??? 哎,算了,还是放弃吧。。。)。 这就是内核大佬们厉害的地方,随便两行代码就让我们怀疑人生,凡是都需要一个过程,慢慢来吧。 其实,原理很简单: ...原创 2018-02-25 21:15:45 · 93780 阅读 · 51 评论