- 博客(402)
- 资源 (65)
- 收藏
- 关注
原创 Linux内核驱动——并发和竞争的处理
加锁和互斥的目的是为了保护共享资源(数据或外设地址)不被多个线程同时访问,而不是保护代码被同时执行 一、信号量信号量为1表示资源可用,为0表示资源不可用,对信号量的加减主要涉及PV操作,进入临界区调用P操作(down)将信号量减1,推出临界区调用V操作(up)将信号量加1.1. 信号量的实现struct semaphore *sem;void semaphore_init(...
2018-07-28 17:11:43
2178
原创 Linux内核学习笔记——中断,tasklet和工作队列
对于操作系统来说,中断的实现和裸机代码是不一样的,对于裸机代码来说,它的处理过程更符合下面这个流程,我们在编写裸板驱动代码的时候,一般处理的是硬件中断,而且中断号也是硬件中断号,这个中断号是和CPU寄存器的连线方式直接相关的,只要连线方式一确定,那么外设对应的中断号就确定了。比如在下面这个图中,中断源可以是TIMER或者BUTTON,对应的中断号是6和16,当这些外设产生中断信号的时候,它首先通过...
2018-06-10 18:55:45
7764
原创 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
2402
1
转载 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
1291
1
原创 selenium webdriver 页面css和xpath定位
对于html来说,不管用什么浏览器打开,他的架构是不变的,所以对于编写自动化测试程序来说,基于什么浏览器开发,差异不大,所以这里推荐使用chrome 65或以后版本浏览器,之所以推荐这个浏览器,是因为它可以不用安装任何插件,就可以很方便的提供定位相关的功能。chrome浏览器可以用F12调出调试窗口,用ctrl + F可以调出选择器和xpath搜索输入框,在搜索时可以显示搜索到结果的个数,如果搜索...
2018-03-24 20:19:05
1943
转载 【Python】 Selenium常见元素定位方法和操作的学习介绍
这篇文章主要Selenium+Python自动测试或爬虫中的常见定位方法、鼠标操作、键盘操作介绍,希望该篇基础性文章对你有所帮助,如果有错误或不足之处,请海涵~ 前文目录: [Python爬虫] 在Windows下安装PhantomJS和CasperJS及入门介绍(上) [Python爬虫] 在Windows下安装PIP+Phantomjs+Seleni...
2018-03-11 20:53:56
1406
转载 【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
3372
原创 学习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
2381
原创 学习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
2389
原创 学习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
2994
原创 学习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
2021
原创 学习Linux-4.12内核网路协议栈(2.2)——接口层数据包的接收(上半部)
前面写了这么多,终于可以开始分析数据报的传输过程了,那我们就愉快的开始吧!我们知道,一个中断处理函数主要分两个部分,上半部和下半部,这篇文章主要介绍上半部分。当一个数据包到达的时候,网卡驱动会完成接收并且触发中断,我们就从这个中断处理函数开始:当一个中断产生并发送给CPU的时候,对于NAPI和不支持NAPI的设备来说处理结果是不一样的,NAPI调用的函数是napi_schedule
2017-08-28 00:00:25
2397
原创 学习Linux-4.12内核网路协议栈(2.1)——接口层加快传输速率的特性
前面花了好多篇幅,终于将网络协议栈的初始化相关的内容介绍完了,也就是说完成前面的那些步骤以后,网络协议栈具备了数据包的收发功能。在网络接口层,它只负责数据包的接收与发送,而不关注数据包在网络层的类型是什么,所以传输速率的快慢往往与接口层的处理有着密切的关系,下面我们来了解一下在提供传输速率上面,现在的内核都引进了哪些新的特性。数据包的接收: NAPI, RPS,RFS数据包的发送: TSO
2017-08-27 18:40:33
1171
转载 udhcp源码详解
udhcp源码详解(五)udhcp源码详解(四)udhcp源码详解(三) 下udhcp源码详解(三) 上udhcp源码详解(二)udhcp源码详解(一)udhcp详解源码(序)
2017-08-27 18:38:53
2251
原创 linux设备模型——总线,驱动,设备间的关系
设备模型之kobject,kset及其关系关于linux设备模型kobject,kset,ktype设备驱动基础0:设备模型之kobject,kset及其关系 设备模型之总线,驱动,设备Linux驱动之bus_register分析Linux设备管理(一)_kobject, kset,ktype分析
2017-07-17 09:11:43
1238
原创 学习Linux-4.12内核网路协议栈(1.8)——网络设备驱动模块的加载
1.了解PCI总线说到网络设备驱动,就不得不说PCI总线,但是这个话题可深可浅,而且网上的资料也是一大堆(比如),但是对于我们来说,目前并不需要掌握很深,下面是网上找的两张最基本的PCI工作结构图,虽然PCI总线上可以挂接不同种类的设备,但我们这里只要了解网络设备就够了,所以我更偏好第二张图,它够简单,也够直观。 关于PCI总线,这里主要介绍两个结构体,一个是
2017-07-16 19:32:28
2513
原创 学习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
9092
原创 学习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
1388
原创 学习Linux-4.12内核网路协议栈(1.5)——协议栈的初始化(inet_init主要数据结构)
前面了解到网络初始化申请了两块skb高速缓存和创建了一个/proc/net/protocols文件,现在开始重头戏,网络协议栈的初始化。这篇文章主要介绍网络栈中使用到的主要数据结构。网络协议栈的内核实现和理论上的分层有些不一样,在代码里面的分层如下图:开始前,先回顾一下应用层socket函数的调用,它会创建一个socket并返回对应的描述符:int sock
2017-07-09 21:37:52
1928
原创 学习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
1643
原创 学习Linux-4.12内核网路协议栈(1.3)——协议栈的初始化(sock_init)
static int __init sock_init(void){ int err; /* * Initialize the network sysctl infrastructure. */ err = net_sysctl_init(); if (err) goto out; /* *
2017-07-06 23:11:45
1729
原创 学习Linux-4.12内核网路协议栈(1.2)——协议栈的初始化(sk_buff)
sk_buff 是网络数据包的承载,是最关键的结构体之一/** * struct sk_buff - socket buffer * @next: Next buffer in list * @prev: Previous buffer in list * @tstamp: Time we arrived/left * @rb
2017-07-06 18:47:08
2428
原创 学习Linux-4.12内核网路协议栈(0)——前言
当决定开始写这个系列文章的时候,就意识到这可能会是个漫长的过程,也可能是个短暂的过程(如果自己中途放弃的话)。最近一段时间零零散散在了解内核网路协议栈相关的东西,有时候觉得好难,有时候觉得也就那么回事,这种感觉反反复复持续了一段时间,直到现在可以较为平静的面对这些问题的时候,决定对网络协议栈的学习做个梳理和记录,下面是阅读到的一些书籍:TCP IP详解卷1:协议 原书第2版
2017-07-03 17:46:12
3115
原创 学习Linux-4.12内核网路协议栈(1.1)——系统的初始化(do_initcalls)
我们知道,不管在什么样的平台上启动linux,它的开始都是以start_kernel()进行系统的初始化,当然网络协议栈的初始化也是在这个过程中完成,下面从start_kernel()开始跟踪:start_kernel() --> rest_kernel() --> kernel_thread(kernel_init, NULL, CLONE_FS) --> kernel_init_freea
2017-07-03 17:42:34
2589
转载 了解linux网络协议栈(五)——协议栈实现
linux网络报文接收发送浅析作者: 七伤 对于linux内核来说,网络报文由网络设备来进行接收。设备驱动程序从网络设备中读取报文,通过内核提供的网络接口函数,将报文传递到内核中的网络协议栈。报文经过协议栈的处理,或转发、或丢弃、或被传送给某个进程。 网络报文的发送与之相反,进程通过系统调用将数据送入网络协议栈,或者由网络协议栈自己发起报文的发送,然后协议栈通过调用网络接口函数
2017-05-27 16:36:16
685
转载 了解linux网络协议栈(四)——协议栈实现
Linux内核分析 - 网络[十七]:NetFilter之连接跟踪Linux内核分析 - 网络[十六]:TCP三次握手Linux内核分析 - 网络[十五]:陆由表[再议]Linux内核分析 - 网络[十四]:IP选项Linux内核分析 - 网络[八补]:IP协议补充
2017-05-06 10:23:33
972
转载 了解linux网络协议栈(三)——协议栈实现
【Linux4.1.12源码分析】virtio_net之NAPI机制【Linux4.1.12源码分析】virtio_net之中断注册【Linux4.1.12源码分析】收包软中断和NAPI【Linux4.1.12源码分析】VXLAN之remcsum实现分析【Linux4.1
2017-05-06 10:20:46
1347
转载 了解linux网络协议栈(二)——协议栈实现
第十六章PHY -基于Linux3.10第十五章 提升网络性能技术--基于Linux3.10第十四章 netlink机制--基于Linux3.10第十三章 网络命名空间(内核源码实现)--基于Linux3.10第十二章 trie路由--基于Linux3.10
2017-05-06 10:18:34
940
原创 了解linux网络协议栈(一)——内核模块初始化
linux驱动 之 module_init解析 (上)Linux内核很吊之 module_init解析 (下)linux驱动篇之 driver_register 过程分析(一)linux驱动篇之 driver_register 过程分析(二)bus_add_driverlist_for_each_entry宏函数解析
2017-04-29 11:02:48
2540
1
转载 linux内核模块初始化
内核启动过程中需要完成各个部分的初始化,比如中端、页面管理、slab分配器、任务调度器、网络、PCI设备等等的初始化,这些初始化大概可以分为两种:一种是关键的,必须完成的而且必须以特定的顺序来完成的初始化,这部分的代码往往是直接便如内核的而且是直接调用的另一种是非关键的的子系统(或者说模块、功能)的初始化,这部分根据配置可以不加载,可以以built-in的方式编到内核的可执行文件中,也可以
2017-04-29 10:23:01
2453
转载 知识的管理会比知识的存储更重要
《失控》 藏品多没什么意义,关键是索引,你能用最快的速度找到你想找的那件,这才是有意义的。在一个博尔赫斯的那种包含所有图书的图书馆,找到一本书和写出那本书同样困难,找书的过程其实就是写书的过程。狄德罗,百科全书派人物,畅想了人类知识的汇总,汇总于一个博尔赫斯的图书馆中,但是他假设任何知识都是不可压缩的,即你不能用一个更短的短语来描述一个稍长的短语,在这种情况下,索引就是知识
2017-04-02 19:04:19
559
转载 内核中_init,_exit中的作用
__init, __initdata等属性标志,是要把这种属性的代码放入目标文件的.init.text节,数据放入.init.data节──这一过程是通过编译内核时为相关目标平台提供了xxx.lds链接脚本来指导ld完成的。 对编译成module的代码和数据来说,当模块加载时,__init属性的函数就被执行; 对静态编入内核的代码和数据来说,当内核引导时,do_basic_s
2017-03-25 21:32:06
675
原创 hostapd wpa_supplicant madwifi详细分析(十五)——supplicant扫描结果排序规则
int (*compar)(const void *, const void *) = wpa_scan_result_compar;qsort(scan_res->res, scan_res->num, sizeof(struct wpa_scan_res *),compar); // qsort函数介绍static int wpa_scan_result_compar(con
2017-03-25 18:15:59
2031
转载 qsort用法--完整版(解释了cmp)【转】
qsort用法--完整版(解释了cmp)【转】用qsort快两年的时候了,却一直没有真正弄懂cmp函数的返回值1,-1,0的函数. 今天在做凸包时,郁闷了....所以请教了snoopy,终于弄懂了cmp返回值的意识:int cmp(const void *a, const void *b)返回正数就是说 cmp 传入参数第一个要放在第二个后面, 负数就是传入参数第一个要
2017-03-23 23:57:14
7436
转载 Linux下查看支持的信号列表
Linux下查看支持的信号列表我们运行如下命令,可看到Linux支持的信号列表:~$ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKI
2017-03-18 21:23:28
2240
转载 Openwrt学习笔记(四)——系统开机启动 (续)
下面是英文原版,如果访问慢,也可以直接查看这里https://wiki.openwrt.org/doc/techref/init.detail.ccInit (User space boot) reference for Chaos Calmer: procdAnalysis of how the user space part of the boot sequ
2017-03-05 23:22:12
5071
原创 Openwrt学习笔记(四)——系统开机启动
1. 内核启动bootloader将kernel从flash中拷贝到RAM以后,bootloader将退出舞台,并将这个舞台交给了kernel。中间有些交接的细节过程,这里不赘述,我们直接从kernel的启动开始分析。不同平台的kernel启动时,最开始部分的汇编脚本会有些不一样,但是从汇编跳转到C语言的代码过程中的第一条命令大多数都是start_kernel函数,比如arm平台,
2017-03-05 20:50:37
24795
7
转载 Openwrt学习笔记(三)——内核启动
本来想整理一下linux内核启动的大致过程,后来网上找到了朱老师的关于这方面的付费视频课程,讲的挺好,所以这里就自己偷偷懒,直接将笔记贴上来了,希望没影响到人家的知识产权http://edu.51cto.com/lesson/id-87648.html第一部分、章节目录2.16.1.做好内核分析的准备工作2.16.2.head.S文件分析12.16.3.内核启动的汇
2017-02-28 22:18:06
5173
1
原创 Openwrt学习笔记(二)——Flash Layout and file system
在大多数系统中,闪存不像RAM一样可以直接执行指令,所以闪存中的数据和指令需要拷贝到RAM中执行,比如存放在flash中的kernel需要bootload的帮忙,将kernel拷贝到RAM里面才能运行。大多数router都是没有硬盘的,它使用闪存来完成相应的存储功能(包括存储固件以及系统数据),这种非易失性的闪存可以避免掉电丢失的问题。我们常接触的闪存主要有两种:NOR flash 和
2017-02-25 18:30:30
21665
2
原创 Openwrt学习笔记(一)——系统架构
下表是OpenWrt系统架构和其他系统架构的对比: Desktop DistributionsOpenWrtAndroidReplicantmer-basedTypical main memory size128 MiB to 16 GiB (or more)32 MiB to 512 MiB1
2016-12-11 12:18:35
13153
sed awk讲解资料全集
2015-06-11
精通UNIX Shell脚本编程 第二版 免费 包含脚本文件
2015-06-11
netcat-0.7.1.tar.gz
2014-09-04
GitHubSetup
2014-08-31
80211r的无线局域网漫游技术的研究与实现
2018-07-01
Linux内核精髓-精通Linux内核必会的75个绝技 完整版
2017-03-19
TCP IP详解卷1:协议 原书第2版 压缩二
2017-03-19
Linux设备驱动开发详解:基于最新的Linux 4.0内核 高清完整.pdf版下载
2017-03-12
windows-use-vim-ctags-and-git
2016-08-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人