9 奔跑的路

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 2k+

Linux内核驱动——并发和竞争的处理

加锁和互斥的目的是为了保护共享资源(数据或外设地址)不被多个线程同时访问,而不是保护代码被同时执行 一、信号量信号量为1表示资源可用,为0表示资源不可用,对信号量的加减主要涉及PV操作,进入临界区调用P操作(down)将信号量减1,推出临界区调用V操作(up)将信号量加1.1. 信号量的实现struct semaphore *sem;void semaphore_init(...

2018-07-28 17:11:43

Linux内核学习笔记——中断,tasklet和工作队列

对于操作系统来说,中断的实现和裸机代码是不一样的,对于裸机代码来说,它的处理过程更符合下面这个流程,我们在编写裸板驱动代码的时候,一般处理的是硬件中断,而且中断号也是硬件中断号,这个中断号是和CPU寄存器的连线方式直接相关的,只要连线方式一确定,那么外设对应的中断号就确定了。比如在下面这个图中,中断源可以是TIMER或者BUTTON,对应的中断号是6和16,当这些外设产生中断信号的时候,它首先通过...

2018-06-10 18:55:45

vmware ubuntu搭建samba用于和windows共享

        实现过程:                1.sudo apt-get samba                2.ps -aux 查看服务是否开启    smbd -F nmbd -D(若未开启  执行sudo /etc/init.d/smbd start )                3.在home下创建share文件夹   mkdir   /home/share  (注...

2018-06-09 13:10:39

Linux 内核网络协议栈 ------sk_buff 结构体 以及 完全解释 (2.6.16)

在2.6.24之后这个结构体有了较大的变化,此处先说一说2.6.16版本的sk_buff,以及解释一些问题。一、先直观的看一下这个结构体~~~~~~~~~~~~~~~~~~~~~~在下面解释每个字段的意义~~~~~~~~~~~[cpp] view plain copy struct sk_buff {           /* These two members must be first. */...

2018-04-08 10:32:47

selenium webdriver 页面css和xpath定位

对于html来说,不管用什么浏览器打开,他的架构是不变的,所以对于编写自动化测试程序来说,基于什么浏览器开发,差异不大,所以这里推荐使用chrome 65或以后版本浏览器,之所以推荐这个浏览器,是因为它可以不用安装任何插件,就可以很方便的提供定位相关的功能。chrome浏览器可以用F12调出调试窗口,用ctrl + F可以调出选择器和xpath搜索输入框,在搜索时可以显示搜索到结果的个数,如果搜索...

2018-03-24 20:19:05

【Python】 Selenium常见元素定位方法和操作的学习介绍

这篇文章主要Selenium+Python自动测试或爬虫中的常见定位方法、鼠标操作、键盘操作介绍,希望该篇基础性文章对你有所帮助,如果有错误或不足之处,请海涵~        前文目录:        [Python爬虫] 在Windows下安装PhantomJS和CasperJS及入门介绍(上)        [Python爬虫] 在Windows下安装PIP+Phantomjs+Seleni...

2018-03-11 20:53:56

【Python】selenium webdriver 启动三大浏览器Firefox,Chrome,IE

一. 安装Python3     1. 进入Python官方网站:https://www.python.org/downloads/  下载并安装最新版本的Python(建议安装Python3) 。  下面是Python官网上几个版本的区别:                     (1).web-based installer 是需要通过联网完成安装的                     (...

2018-03-11 20:40:33

学习Linux-4.12内核网路协议栈(3.2)——网路层的发包处理

上篇文章介绍了接口层将IP包传给网络层以后的处理过程,主要是包括传给上层,转发和丢包处理。这篇文章将介绍传输层怎么将包传递给网络层,以及传给网络层以后的处理过程。这里主要分两部分:TCP包的发送和UDP包的发送。在TCP中,将TCP段打包成IP数据报的方法根据TCP段类型的不同而有多种接口,最常用的就是ip_queue_xmit,而ip_build_and_send_pkt和ip_send

2017-09-03 21:12:07

学习Linux-4.12内核网路协议栈(3.1)——网路层的收包处理

现在我们将进入传输层的分析:在前面我们知道,数据包到达接口层的时候,它会根据ptype_base来查询包的类型,并根据包的类型交给不同的网络层函数处理,比如ip_recv,icmp_recv等,现在我们就来看看网络层是怎么处理不同类型的包的:1. IP私有信息控制块 40 struct inet_skb_parm { 41 int iif;

2017-09-03 13:56:36

学习Linux-4.12内核网路协议栈(2.4)——接口层数据包的发送

这篇文章主要介绍网络层的数据是怎么通过接口层将数据发送出去的,在开始之前我们还是再来看一下softnet_data这个很重要的结构体:struct softnet_data { struct list_head poll_list; struct sk_buff_head process_queue; /* stats */ unsigned int

2017-08-29 09:53:01

学习Linux-4.12内核网路协议栈(2.3)——接口层数据包的接收(下半部)

我们来继续分析net_rx_action:static __latent_entropy void net_rx_action(struct softirq_action *h){ struct softnet_data *sd = this_cpu_ptr(&softnet_data); unsigned long time_limit = jiffies +

2017-08-28 20:03:23

学习Linux-4.12内核网路协议栈(2.2)——接口层数据包的接收(上半部)

前面写了这么多,终于可以开始分析数据报的传输过程了,那我们就愉快的开始吧!我们知道,一个中断处理函数主要分两个部分,上半部和下半部,这篇文章主要介绍上半部分。当一个数据包到达的时候,网卡驱动会完成接收并且触发中断,我们就从这个中断处理函数开始:当一个中断产生并发送给CPU的时候,对于NAPI和不支持NAPI的设备来说处理结果是不一样的,NAPI调用的函数是napi_schedule

2017-08-28 00:00:25

学习Linux-4.12内核网路协议栈(2.1)——接口层加快传输速率的特性

前面花了好多篇幅,终于将网络协议栈的初始化相关的内容介绍完了,也就是说完成前面的那些步骤以后,网络协议栈具备了数据包的收发功能。在网络接口层,它只负责数据包的接收与发送,而不关注数据包在网络层的类型是什么,所以传输速率的快慢往往与接口层的处理有着密切的关系,下面我们来了解一下在提供传输速率上面,现在的内核都引进了哪些新的特性。数据包的接收: NAPI, RPS,RFS数据包的发送: TSO

2017-08-27 18:40:33

udhcp源码详解

udhcp源码详解(五)udhcp源码详解(四)udhcp源码详解(三) 下udhcp源码详解(三) 上udhcp源码详解(二)udhcp源码详解(一)udhcp详解源码(序)

2017-08-27 18:38:53

linux设备模型——总线,驱动,设备间的关系

设备模型之kobject,kset及其关系关于linux设备模型kobject,kset,ktype设备驱动基础0:设备模型之kobject,kset及其关系 设备模型之总线,驱动,设备Linux驱动之bus_register分析Linux设备管理(一)_kobject, kset,ktype分析

2017-07-17 09:11:43

学习Linux-4.12内核网路协议栈(1.8)——网络设备驱动模块的加载

1.了解PCI总线说到网络设备驱动,就不得不说PCI总线,但是这个话题可深可浅,而且网上的资料也是一大堆(比如),但是对于我们来说,目前并不需要掌握很深,下面是网上找的两张最基本的PCI工作结构图,虽然PCI总线上可以挂接不同种类的设备,但我们这里只要了解网络设备就够了,所以我更偏好第二张图,它够简单,也够直观。      关于PCI总线,这里主要介绍两个结构体,一个是

2017-07-16 19:32:28

学习Linux-4.12内核网路协议栈(1.7)——网络设备的初始化(struct net_device)

在linux的网络设备里,其中一个最关键的结构体应该要算net_device了,它由对应的网络设备驱动进行创建和初始化,服务于内核网络子系统。struct net_device这个结构体比较大,在了解它之前,我们先看一下它的注释:1433 /**1434  *  struct net_device - The DEVICE structure.1435  *      Actu

2017-07-16 19:21:19

学习Linux-4.12内核网路协议栈(1.6)——协议栈的初始化(inet_init实现过程)

这篇文章主要分析inet_init()函数的实现过程:1796 static int __init inet_init(void)1797 {1798 struct inet_protosw *q;1799 struct list_head *r;1800 int rc = -EINVAL;18011802 sock_skb_cb_check_siz

2017-07-14 14:57:03

学习Linux-4.12内核网路协议栈(1.5)——协议栈的初始化(inet_init主要数据结构)

前面了解到网络初始化申请了两块skb高速缓存和创建了一个/proc/net/protocols文件,现在开始重头戏,网络协议栈的初始化。这篇文章主要介绍网络栈中使用到的主要数据结构。网络协议栈的内核实现和理论上的分层有些不一样,在代码里面的分层如下图:开始前,先回顾一下应用层socket函数的调用,它会创建一个socket并返回对应的描述符:int sock

2017-07-09 21:37:52

学习Linux-4.12内核网路协议栈(1.4)——协议栈的初始化(proto_init)

这篇文章主要分析proto_init过程,它完成协议相关proc文件的创建3241 static __net_initdata struct pernet_operations proto_net_ops = {3242 .init = proto_init_net,3243 .exit = proto_exit_net,3244 };324

2017-07-09 10:42:28

查看更多

勋章 我的勋章
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 红花
    红花
    子板块内专家分月排名榜第一
  • 黄花
    黄花
    子板块内专家分月排名榜第二