<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[lingfeng5的专栏]]></title><description><![CDATA[山不向我走来  我便向山走去]]></description><link>https://blog.youkuaiyun.com/lingfeng5</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; lingfeng5]]></copyright><item><title><![CDATA[用redis实现scrapy的url去重与增量爬取]]></title><link>https://blog.youkuaiyun.com/lingfeng5/article/details/81036975</link><guid>https://blog.youkuaiyun.com/lingfeng5/article/details/81036975</guid><author>lingfeng5</author><pubDate>Fri, 13 Jul 2018 20:11:16 +0800</pubDate><description><![CDATA[scrapy 自带了去重方案，通过RFPDupeFilter类完成去重，查看源码。


def request_seen(self, request):
        fp = self.request_fingerprint(request)
        if fp in self.fingerprints:
            return True
        self.fin...]]></description><category></category></item><item><title><![CDATA[scrapy学习笔记—— CrawlSpider Requests添加header]]></title><link>https://blog.youkuaiyun.com/lingfeng5/article/details/80614567</link><guid>https://blog.youkuaiyun.com/lingfeng5/article/details/80614567</guid><author>lingfeng5</author><pubDate>Thu, 07 Jun 2018 20:29:42 +0800</pubDate><description><![CDATA[ CrawlSpider爬虫，在使用rule提取链接后，如何添加headers、cookies--------------------------------Scrapy框架中分两类爬虫，Spider类和CrawlSpider类。在scrapy中，对有规律或者无规律的网站进行自动爬取时，常用到CrawlSpider类，它通过定义了一些规则(Rule类)提取页面的url，并自动发起request跟进...]]></description><category></category></item><item><title><![CDATA[git使用之撤销部分修改]]></title><link>https://blog.youkuaiyun.com/lingfeng5/article/details/76167102</link><guid>https://blog.youkuaiyun.com/lingfeng5/article/details/76167102</guid><author>lingfeng5</author><pubDate>Wed, 26 Jul 2017 22:52:50 +0800</pubDate><description><![CDATA[修改了文件a、b，假设需要撤销文件a的修改，使用git命令：
情况1、如果没有被git add到索引区
git checkout a 便可撤销对文件a的修改
2、如果被git add到索引区，但没有做git commit提交
1）使用git reset将a从索引区移除（但会保留在工作区）
git reset HEAD a
2）撤销工作区中文件a的修改
git checkout a 
3、如果已被提]]></description><category></category></item><item><title><![CDATA[linux中断的上半部和下半部]]></title><link>https://blog.youkuaiyun.com/lingfeng5/article/details/74905508</link><guid>https://blog.youkuaiyun.com/lingfeng5/article/details/74905508</guid><author>lingfeng5</author><pubDate>Sun, 09 Jul 2017 19:50:41 +0800</pubDate><description><![CDATA[linux中断机制
处理器一旦接收到中断，就会打断正在执行的代码，调用中断处理函数。如果没有禁止中断，该中断处理函数执行过程中仍有可能被其他中断打断。所以，中断处理函数执行得越快越好。另外，中断上下文中不能阻塞，这也限制了中断上下文中能干的事。因此，基于上面的原因，内核将整个的中断处理流程分为了上半部和下半部。
上半部就是之前所说的中断处理函数，而一些需要在中断处理函数后继续执行的操作，内核建议把它放在下半部执行。
有三种方法来实现下半部：软中断、tasklet和等待队列。]]></description><category></category></item><item><title><![CDATA[Linux网络驱动框架]]></title><link>https://blog.youkuaiyun.com/lingfeng5/article/details/74901788</link><guid>https://blog.youkuaiyun.com/lingfeng5/article/details/74901788</guid><author>lingfeng5</author><pubDate>Sun, 09 Jul 2017 18:56:29 +0800</pubDate><description><![CDATA[Linux网络驱动框架，Linux网卡驱动框架
网络协议接口层向网络层协议提供提供统一的数据包收发接口，都通过dev_queue_xmit()函数发送数据，并通过netif_rx()函数接受数据。这一层的存在使得上层协议独立于具体的设备。网络设备接口层向协议接口层提供统一的用于描述具体网络设备属性和操作的结构体net_device，该结构体是设备驱动功能层中各函数的容器。设备驱动功能层各函数是网络设备接口层net_device数据结构的具体成员，网络设备与媒介层是完成数据包发送和接受的物理实体。]]></description><category></category></item><item><title><![CDATA[分析usb驱动框架（usb-skeleton）]]></title><link>https://blog.youkuaiyun.com/lingfeng5/article/details/74502917</link><guid>https://blog.youkuaiyun.com/lingfeng5/article/details/74502917</guid><author>lingfeng5</author><pubDate>Wed, 05 Jul 2017 21:42:19 +0800</pubDate><description><![CDATA[分析usb驱动框架（usb-skeleton）

以下是linux2.6.28 内核代码树 drivers/usb/中的文件usb－skeleton.c，usb－skeleton是usb驱动的框架通过修改一下部分代码就可一轻松的实现一个简单的设备驱驱动

每一个USB设备在内核中抽象为一个数据结构 usb_device,它描述了一个USB设备的所有的特性。

linux中的驱动一部分被编译进内核，一部分是以模块的形式可动态的加载到内核，驱动是以模块被加载到内核，驱动在加载时是按模块来加载的。模块的入口函数是]]></description><category></category></item><item><title><![CDATA[TX2440开发板Uboot移植教程]]></title><link>https://blog.youkuaiyun.com/lingfeng5/article/details/74019005</link><guid>https://blog.youkuaiyun.com/lingfeng5/article/details/74019005</guid><author>lingfeng5</author><pubDate>Sat, 01 Jul 2017 00:06:33 +0800</pubDate><description><![CDATA[tx2440开发板 uboot移植]]></description><category></category></item><item><title><![CDATA[基于python的web框架——Flask 学习笔记]]></title><link>https://blog.youkuaiyun.com/lingfeng5/article/details/73928903</link><guid>https://blog.youkuaiyun.com/lingfeng5/article/details/73928903</guid><author>lingfeng5</author><pubDate>Thu, 29 Jun 2017 22:46:45 +0800</pubDate><description><![CDATA[Flask Web开发：基于Python的Web应用开发实战。]]></description><category></category></item><item><title><![CDATA[Python使用Telnetlib模块实现telnet远程操作]]></title><link>https://blog.youkuaiyun.com/lingfeng5/article/details/73744698</link><guid>https://blog.youkuaiyun.com/lingfeng5/article/details/73744698</guid><author>lingfeng5</author><pubDate>Mon, 26 Jun 2017 21:44:33 +0800</pubDate><description><![CDATA[Python使用Telnetlib模块实现telnet远程操作，Python内置了telnetlib模块，支持telnet远程操作，只要直接import就可以。
TypeError: 'in <string>' requires string as left operand, not bytes。tn.read_until('login: '.encode('utf-8'))]]></description><category></category></item><item><title><![CDATA[Git简明教程]]></title><link>https://blog.youkuaiyun.com/lingfeng5/article/details/73478096</link><guid>https://blog.youkuaiyun.com/lingfeng5/article/details/73478096</guid><author>lingfeng5</author><pubDate>Mon, 19 Jun 2017 23:18:56 +0800</pubDate><description><![CDATA[Git简明教程。git代码回退命令。
git工作流和四大域，本地仓库由 git 维护的三棵“树”组成。工作目录，它持有实际文件；暂存区（Index），它像个缓存区域，临时保存你的改动；最后是 HEAD，它指向你最后一次提交的结果。回退或者撤销代码。git status  git stash   git reset]]></description><category></category></item><item><title><![CDATA[Linux platform设备驱动开发框架概述]]></title><link>https://blog.youkuaiyun.com/lingfeng5/article/details/73478036</link><guid>https://blog.youkuaiyun.com/lingfeng5/article/details/73478036</guid><author>lingfeng5</author><pubDate>Mon, 19 Jun 2017 23:07:22 +0800</pubDate><description><![CDATA[Linux platform设备驱动开发框架概述。通过一个实例来深入学习Linux platform设备驱动开发流程。  platform模型驱动编程，需要实现platform_device(设备)与platform_driver（驱动）在platform(虚拟总线)上的注册、匹配，相互绑定，然后再做为一个普通的字符设备进行相应的应用，总之如果编写的是基于字符设备的platform驱动，在遵循并实现platform总线上驱动与设备的特定接口的情况下，最核心的还是字符设备的核心结构：cdev、 file_op]]></description><category></category></item><item><title><![CDATA[很清晰的解读i2c协议]]></title><link>https://blog.youkuaiyun.com/lingfeng5/article/details/73361833</link><guid>https://blog.youkuaiyun.com/lingfeng5/article/details/73361833</guid><author>lingfeng5</author><pubDate>Sat, 17 Jun 2017 02:15:29 +0800</pubDate><description><![CDATA[很清晰的解读i2c协议。
I2C协议：2条双向串行线，一条数据线SDA，一条时钟线SCL。
   SDA传输数据是大端传输，每次传输8bit，即一字节。
   支持多主控(multimastering)，任何时间点只能有一个主控。
i2c起始信号、结束信号、应答信号。
i2c读写流程概述。]]></description><category></category></item><item><title><![CDATA[linux下 i2c设备驱动开发（2）]]></title><link>https://blog.youkuaiyun.com/lingfeng5/article/details/73360652</link><guid>https://blog.youkuaiyun.com/lingfeng5/article/details/73360652</guid><author>lingfeng5</author><pubDate>Sat, 17 Jun 2017 01:58:15 +0800</pubDate><description><![CDATA[I2C设备驱动的编写方式: 
一种是直接操作CPU的I2C控制器，正对于某一个设备写一个字符驱动，这种驱动相对来说比较直接，不需要太依赖于内核相关配置，但是这类设备驱动依赖CPU，可移植性较差。 
一种是基于linux内核I2C子系统完成设备驱动的编写，一般内核会继承相关CPU的控制器驱动即使没有也可以通过技术支持可以获得，所以我们只需要使用linux下I2C子系统提供的相关接口来构建我们的设备驱动就行了。这样我们的设备驱动并不依赖于某一个特定的CPU，可移植性较好。]]></description><category></category></item><item><title><![CDATA[linux下 i2c设备驱动开发（1）]]></title><link>https://blog.youkuaiyun.com/lingfeng5/article/details/73360644</link><guid>https://blog.youkuaiyun.com/lingfeng5/article/details/73360644</guid><author>lingfeng5</author><pubDate>Sat, 17 Jun 2017 01:49:08 +0800</pubDate><description><![CDATA[3.编写驱动需要完成的工作

   编写具体的I2C驱动时，工程师需要处理的主要工作如下：
1).提供I2C适配器的硬件驱动，探测，初始化I2C适配器(如申请I2C的I/O地址和中断号)，驱动CPU控制的I2C适配器从硬件上产生。

2).提供I2C控制的algorithm, 用具体适配器的xxx_xfer()函数填充i2c_algorithm的master_xfer指针，并把i2c_algorithm指针赋给i2c_adapter的algo指针。

3).实现I2C设备驱动中的i2c_driver接口，用]]></description><category></category></item><item><title><![CDATA[linux I2C 设备驱动学习笔记]]></title><link>https://blog.youkuaiyun.com/lingfeng5/article/details/73312728</link><guid>https://blog.youkuaiyun.com/lingfeng5/article/details/73312728</guid><author>lingfeng5</author><pubDate>Fri, 16 Jun 2017 00:02:14 +0800</pubDate><description><![CDATA[linux下的驱动思路:内核态驱动和用户态驱动
 一是把I2C设备当作一个普通的字符设备来处理，用i2c-dev.c文件提供的API，封装设备时序数据，直接操作i2c适配器驱动对应的设备文件，实现与设备的通讯。属于用户态驱动。
   二是利用linux下I2C子系统框架体系来实现。属于内核态度驱动，用户空间的应用程序直接操作从器件对应的设备文件，既可用通用的API实现与从器件的数据交互。]]></description><category></category></item><item><title><![CDATA[linu spi子系统驱动开发笔记之实例（2）]]></title><link>https://blog.youkuaiyun.com/lingfeng5/article/details/73252431</link><guid>https://blog.youkuaiyun.com/lingfeng5/article/details/73252431</guid><author>lingfeng5</author><pubDate>Wed, 14 Jun 2017 21:21:17 +0800</pubDate><description><![CDATA[Linux SPI子系统驱动开发
介绍基于SPI子系统驱动开发框架，并以FS_S5PC100上的M25P10芯片为例（内核版本2.6.29），写了一个Linux SPI驱动实例。
实现流程：实现platform设备，实现platform驱动。主要设计结构体Platform_driver，Platform_device.]]></description><category></category></item><item><title><![CDATA[linu spi子系统驱动开发笔记之实例（1）]]></title><link>https://blog.youkuaiyun.com/lingfeng5/article/details/73196489</link><guid>https://blog.youkuaiyun.com/lingfeng5/article/details/73196489</guid><author>lingfeng5</author><pubDate>Tue, 13 Jun 2017 23:30:50 +0800</pubDate><description><![CDATA[linu spi子系统驱动开发实例
以W25Q32BV芯片为例子，介绍了 linu spi子系统驱动开发流程。platform_device设备定义及注册。platform_driver设备驱动实现。]]></description><category></category></item><item><title><![CDATA[Linux SPI 子系统驱动笔记之Linux spi设备驱动与SPI控制器驱动的匹配问题]]></title><link>https://blog.youkuaiyun.com/lingfeng5/article/details/73196359</link><guid>https://blog.youkuaiyun.com/lingfeng5/article/details/73196359</guid><author>lingfeng5</author><pubDate>Tue, 13 Jun 2017 23:07:40 +0800</pubDate><description><![CDATA[Linux SPI 子系统驱动开发之Linux spi设备驱动与SPI控制器驱动的匹配问题。1.SPI协议层驱动是怎么与SPI控制器（spi_master）匹配的。2.spi控制器是怎么区分多个spi设备的。在SPI协议层中，spi_device是通过spi_register_board_info来注册的（在注册spi控制器驱动即spi_master之前）。首先创建一个spi_board_info结构描述spi设备板级信息，然后调spi_register_board_info()将其添加到board_lis]]></description><category></category></item><item><title><![CDATA[Linux SPI 子系统驱动程序开发笔记]]></title><link>https://blog.youkuaiyun.com/lingfeng5/article/details/73070551</link><guid>https://blog.youkuaiyun.com/lingfeng5/article/details/73070551</guid><author>lingfeng5</author><pubDate>Sun, 11 Jun 2017 22:32:05 +0800</pubDate><description><![CDATA[Linux SPI 子系统驱动程序开发笔记。介绍了SPI协议及总结了linux spi 子系统驱动开发流程。然后用SPI接口的FLASH芯片W25Q32BV为例，具体概述了linux spi 子系统驱动开发流程。
1.注册平台设备
2.注册平台驱动
  .probe()函数中注册描述spi控制器的spi_master
3.注册spi设备：spi_board_info
4.注册spi_driver
  .probe()函数中注册描述外设的设备结构体，如char设备
5.用户操作API实现。read()/wri]]></description><category></category></item></channel></rss>