自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 资源 (8)
  • 收藏
  • 关注

原创 从零开始之驱动发开、linux驱动(五十四、linux2.6下的IIC总结[8])

2.6.35.7内核的iic设备已经分析完毕了。我们这里做一下总结。首先linux下注册iic设备的方式是有五种的。这里我们对每一种的注册和顺序进行简单总结。这里我们的参考资料如下Documentation/i2c/instantiating-devices第一种方式:在mach-xxxx.c文件里面指定号设备名称,地址。static struct i2c...

2019-03-31 18:47:08 584

原创 从零开始之驱动发开、linux驱动(五十三、linux下的IIC设备驱动cdev[7])

i2c-dev.c文件完全可以被看作是一个I2C设备驱动, 不过, 它实现的i2c_client是虚拟、 临时的, 主要是为了便于从用户空间操作I2C外设。 i2c-dev.c针对每个I2C适配器生成一个主设备号为89的设备文件, 实现了i2c_driver的成员函数以及文件操作接口, 因此i2c-dev.c的主体是“i2c_driver成员函数+字符设备驱动”。#define I2C_...

2019-03-31 15:07:25 526

原创 从零开始之驱动发开、linux驱动(五十二、linux下的IIC设备驱动[6])

I2C设备驱动要使用i2c_driver和i2c_client数据结构并填充i2c_driver中的成员函数。 i2c_client一般被包含在设备的私有信息结构体中, 而i2c_driver则适合被定义为全局变量并初始化。这种驱动通常是相对稳定的驱动程序,通常不需要改动。下面给出内核中已被初始化的i2c_driver。static struct i2c_driver ...

2019-03-31 14:22:00 659

原创 从零开始之驱动发开、linux驱动(五十一、linux下的IIC总线的通讯方法[5])

我们需要为特定的I2C适配器实现通信方法, 主要是实现i2c_algorithm的functionality() 函数和master_xfer() 函数。functionality() 函数非常简单, 用于返回algorithm所支持的通信协议。linux中定义了一下方法/* To determine what functionality is present */#define...

2019-03-31 13:07:41 698

原创 从零开始之驱动发开、linux驱动(五十、linux下的IIC适配器的注册[4])

由于I2C总线控制器通常是在内存(寄存器)上的, 所以它本身也连接在platform总线上, 要通过platform_driver和platform_device的匹配来执行。 因此尽管I2C适配器给别人提供了总线, 它自己也被认为是接在platform总线上的一个客户。 Linux的总线、 设备和驱动模型实际上是一个树形结构, 每个节点虽然可能成为别人的总线控制器, 但是自己也被认为是从上一级总...

2019-03-31 00:18:19 650

原创 从零开始之驱动发开、linux驱动(四十九、linux下的IIC核心层的接口[3])

I2C核心中的主要函数如下:(1) 增加/删除i2c_adapterint i2c_add_adapter(struct i2c_adapter *adap);void i2c_del_adapter(struct i2c_adapter *adap);增加一个adadptor/** * i2c_add_adapter - declare i2c adapter, use...

2019-03-30 21:22:46 829

原创 从零开始之驱动发开、linux驱动(四十八、linux下的IIC核心层的建立[2])

I2C核心(drivers/i2c/i2c-core.c) 中提供了一组不依赖于硬件平台的接口函数, 这个文件一般不需要被工程师修改, 但是理解其中的主要函数非常关键, 因为I2C总线驱动和设备驱动之间以I2C核心作为纽带。首先看一下i2c核心层的创建函数。static int __init i2c_init(void);static void __exit i2c_exit(v...

2019-03-30 12:40:05 777

原创 从零开始之驱动发开、linux驱动(四十七、linux下的IIC框架【1】)

I2C总线仅仅使用SCL、 SDA这两根信号线就实现了设备之间的数据交互, 极大地简化了对硬件资源和PCB板布线空间的占用。 因此, I2C总线非常广泛地应用在EEPROM、 实时钟、 小型LCD等设备与CPU的接口中。如果在裸机情况下直接操作I2C,其实很简单,只要正确把握IIC的操作时序就可以了。https://blog.csdn.net/qq_16777851/article/d...

2019-03-30 11:31:19 1172

原创 从零开始之驱动发开、linux驱动(四十六、IIC协议原理)

IIC协议是一个板级异步双向的串行协议。只使用一根数据一根时钟两根线,通常频率都不会很高,通常我们使用在几百Khz,目前最高的器件能达到Mhz级别。IIC协议的缺点:数据线只有一根既要主机传输又要从机传输,所以传输速度很慢。主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件。主器件同时也负责终止一次传输。主器件的每一次启动传...

2019-03-28 23:39:03 916

原创 从零开始之驱动发开、linux驱动(四十五、DM9000网卡驱动)

这里我们肯定不是要从零开始编写网卡驱动的。因为编写网卡驱动时,需要网络基础知识,特别是网络底层的知识,目前还没学。将来我可能选择在,网络,图像视屏,或USB这个三个方向,选择一个深入钻研。这里主要对一个真实的网卡的框架进行分析,底层和物理寄存器或网络协议相关的就略过。4.19版本的内核,平台设备这边,都是用的设备树。之前开的那个设备树专栏的学习已经有了效果,下...

2019-03-27 23:41:10 1616

原创 Git使用学习(二十二、团队协作冲突的解决)

但凡是团队合作,就一定会出现冲突。假设项目经理张小龙在它的本地改了一个bug之后,推送到了远程库。这时项目组的小张肯定不知道项目经理的推送,更不知道项目经理张小龙改了那个位置的内容。此时假设小张也修改了这个位置,此时也向远程库推送自己的修改。此时因为出现冲突,小张推送会失败。此时小张必须先把远程库的拉取到本地,完成合并后在进行推送。我们在下面演示一下上面的情况。...

2019-03-26 22:52:58 803

原创 Git使用学习(二十一、远程库github操作[4]拉取)

上一节中,项目组员,小张已经把自己的本地库的内容推送到了远程库github。本节项目负责人张小龙,准备把远程库的内容拉取到他的本地。然后检查无误后把远程库合并到他的本地开发中。可以看到,拉取之前文件里面的内容是wechat 0.1 version当然,拉取(fetch)或(pull)都从远程来读文件,所以这里是不需要登录操作的。当然我们这里拉取的文件其实并不会...

2019-03-26 22:18:18 631

原创 Git使用学习(二十、远程库github操作[3]邀请加入团队和push)

上一节我们学习到,项目组成员,因为没有被邀请加入团队,所以不能向远程库推送自己的本地更改。这里开始我们就让项目的负责人,邀请项目组成员加入这个项目。下面给出操作步骤输入邀请人的github账号邀请创建后,可以看到,已经有了协作人的信息接下来要把邀请链接发生给,要求加入的人。当然,这个链接可以使用任何方式,Q...

2019-03-26 21:32:59 1117

原创 Git使用学习(十九、远程库github操作[2]clone)

上一节中项目经理张小龙先生已经把自己搞的WeChat 0.1版本放到了远程仓库了。接下来WeChat项目组的成员,小张需要把远程库的0.1版本的WeChat clone到他的本地。然后进行增加功能。这里我们换一个方式。使用Windows下的git来实现,成员小张的所有操作。小张先从远程仓库中拿到这个项目的clone地址。然后执行克隆操作git clone r...

2019-03-26 00:25:13 380

原创 Git使用学习(十八、远程库github操作[1]creat 和 push)

什么是远程库?远程库这个叫法主要是为了和本地库做区分。远程库主要是为了集中管理一些主要的版本,以及为了方便其它开发者获取和更新这个远程库。如何使用远程库?假设一个项目由两个工程师负责,一个是项目经理,一个是项目组员。1.开始由项目经理在它本地新建了一个本地库。同时由项目经理在远程服务器上创建一个远程库。此时如下所示,两个库都是空的。2.接下...

2019-03-25 20:50:14 350

原创 Git使用学习(十七、Git的分支管理机制)

Git 的分支,其实本质上仅仅是指向提交对象的可变指针。 Git 的默认分支名字是 master。 在多次提交操作之后,你其实已经有一个指向最后那个提交对象的 master 分支。 它会在每次的提交操作中自动向前移动。注:Git 的 “master” 分支并不是一个特殊分支。 它就跟其它分支完全没有区别。 之所以几乎每一个仓库都有 master 分支,是因为 git init 命令默认创建它,...

2019-03-24 22:48:48 559

原创 Git使用学习(十六、Git的文件管理机制)

集中式版本控制工具的文件管理机制以文件变更列表的方式存储数据。这类系统将它们保存的信息看作是一组基本文件和每个文件随时间逐步累计的差异。每次的上传到服务器上文件,保存在服务器的部分都是这次和上次版本之间的差异。如果要从服务器更新到本地也是需要把原始文件的版本和每次的差异 都合并起来,组成一个版本。这样的版本我们可以看到,有点是节约服务器的存储空间,但缺点也很明显,速度慢。...

2019-03-24 21:48:18 1358 1

原创 Git使用学习(十五、哈希)

哈希是一个系列的加密算法,各个不同的哈希算法虽然加密强度(哈希碰撞)不同,但是有一下几个共同点。不管输入数据量多大,对于同一个哈希算法,得到的加密结果长度固定。 哈希算法确定,输入数据确定,输出结果能够保证不变。 哈希算法确定,输入数据有变化,输出数据一定有变化,而且通常变化很大。 哈希算法不可逆这里我用我电脑上的一个加密工具做一个演示。新建了一个txt的文件,里...

2019-03-24 21:14:58 805

原创 Git使用学习(十四、解决分支合并后产生的冲突)

什么时候会产生合并冲突?假如说我们目前我们有两个分支master和hot_fix,目前两个分支的内容是一样的。假设master分支修改了它的工作区的apple.txt文件,并做了提交。而hot_fix分支也修改了它的工作区的apple.txt文件,并做了提交。这里假设master分支修改的内容和hot_fix分支修改的内容不一样。这个时候,无论是master分支想...

2019-03-24 20:28:56 4222

原创 Git使用学习(十三、分支的简单操作)

如何查看当前所在的分支?使用git status可以查看当前所在分支,默认创建没切换过分支都是在master分支上。如何查看这个项目所有的分支?使用git branch -v如何创建分支?使用git branch 分支名下面我们创建一个hot_fix分支这里我们可以看到,新创建的分支和主分支的内容完全一样。如何切换分支?使用git ...

2019-03-24 17:36:22 391

原创 Git使用学习(十二、分支)

什么是分支?在版本控制过程中,使用多条线,同时推进多个任务。在git的版本库初始化好之后,默认会有一个分支,叫master分支假设我们开开发一个叫WeChat的项目。这里基本的底层的东西由团队负责人开始搭建好,做出了一个基本的底层,这个版本只支持基本的两个人之间的文字聊天功能。接下来要让这个WeChat项目,增加两个功能,一个是语音消息功能,一个...

2019-03-24 15:24:16 343

原创 Git使用学习(十一、文件比较操作)

git中文件的比较操作是用linux中的diff命令来完成的,其格式也是按照linux中的diff来显示的假设我们本地新建了一个文件,叫,apple.txt,里面的内容是6行的apple字符。接下来把这个文件加入到暂存区。之后修改工作区的文件。使用diff命令来对比,工作区和暂存区的文件带-的红色,表示工作区和暂存区相比,减少的内容,而带+de绿色部分,...

2019-03-24 13:36:46 783

原创 Git使用学习(十、文件的删除和撤销)

第一种:一个文件加入本地库中之后,删除工作目录下的这个文件,之后提交没这个文件的工作目录到本地库。第一步:创建一个文件,加入到本地库此时工作区,暂存区,本地库都有这个test.txt文件存在。第二步,删除文件,提交本次更改这次删除文件后的提交要注意一个点,就是git add这个命令对于删除了的文件的使用。可以看一下我之前的使用。直接使用gi...

2019-03-23 23:27:48 529

原创 Git使用学习(九、git命令参数的特点)

git的命令参数分为长参数和短参数比如我们前面的提交本地库的命令参数-m 表示后面跟的是一个提交消息记录。git commit -m "commmint message log" [pathname]这的-m是一个短参数。当然也可以使用这个的长参数,写法如下git commit --message="commmint message log" [pathna...

2019-03-23 22:06:50 427

原创 Git使用学习(八、hard和soft以及mixed参数对比)

开始之前,先看上一节的版本回滚的命令git reset --hard reset有回滚的意思,为什么这个命令要带--hard这个参数呢?那这个git reset 是不是还有其它参数呢,不然就一个参数,就没必要敲了。这里我们看一下git中关于reset的帮助文档。git help reset 可以看到git reset可带的参数很多,这里我们主要看下面这三个。...

2019-03-23 21:02:38 770

原创 Git使用学习(七、版本回滚)

git版本回滚的原理git中有一个全局变量叫HEAD,HEAD这个指针指向的版本就是当前版本。如果我们需要调出某个版本的记录,需要让HEAD指针指向这个版本,然后再从本地仓库拉取到工作区间就可以了。git进行版本回滚的方式有三种基于索引值(哈希值)的回滚 基于^符号 基于~符号这里我们主要来说一下基于索引值的回滚。这里要说一个命令,...

2019-03-23 19:00:52 800

原创 Git使用学习(六、查看历史记录的几种方式)

git中有个命令叫git log,可以用来查看版本的更新日志。简单是使用如下,也是上一节内容增加的三次版本提交。git log为了方便学习,我多增加几条版本更新因为一屏放不完,可以使用空格来一屏一屏的切换,也可以使用vim的命令来一行一行或者指定到哪一行的切换等。上面这种显示确实不方便查看,所以git可以使用一种漂亮显示的方式查看记录 git ...

2019-03-23 17:53:28 1453

原创 Git使用学习(五、git的add和status命令)

git工具的所有命令都是以git开头,就像linux中的命令那样,git是主命令,后面需要跟上其它副命令。首先学习的是查看状态的命令。假设我们git init后的目录是没文件的。查看后,打印出下面三句信息第一句表明我们现在在主分支(分支后面再学习)第二句表明git还没提交过文件到本地仓库第三局表明没有可提交的信息,建议我们自己创建或者拷贝一份文件后再使用git a...

2019-03-23 13:53:54 1762

原创 Git使用学习(四、git的初始化)

初始化本地仓库git init初始化之后,会在当前目录下创建一个.git的目录。我这边的工程里面的文件可能会随着我学习内容的变动,而git的使用暂时就一直在这个目录下(我们用Git肯定是要做大项目的^V^)。这个里面是一个虚拟网卡的驱动,暂时还在学习。里面内容可以忽略掉。只关注git本身的学习。.git目录初始化之后会放置一些文件或文件夹,这个就是g...

2019-03-23 00:47:59 641

原创 Git使用学习(三、git和代码托管中心)

什么是代码托管中心?我们看过上一节git基础的那图片,有一个仓库没说,这个就是远程仓库。代码托管中心的任务,就是用来维护这个远程的仓库。最著名的git的代码托管中心就是github,国内还有比如码云之类比较大的托管中心。当然公司里面也可以自己搭建服务器建立自己的托管中心。本地仓库和远程如何交互?这里要说的是,git和linux很相似的是对...

2019-03-23 00:20:32 725

原创 Git使用学习(二、git安装和基础)

Git的安装非常简单,这里就不贴出来了。分享几个其它博主的安装教程,不会的话参考。https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Githttps://jingyan.baidu.com/article/9f7e7ec0b17cac6f2815548d.htmlhttps://www.c...

2019-03-22 23:48:53 697

原创 Git使用学习(一、为什么要有版本管理)

问题?假设你在的公司要上线一个新功能,你们开发团队为实现这个新功能,写了大约5000行代码,上线没2天,就发现这个功能用户并不喜欢,你老板让你去掉这个功能,你怎么办?你说简单,直接把5000行代码去掉就行了,但是现在会出现一个问题,你的这个写了3周功能,也许你已经不记得新增加了哪5000行代码了?所以你急需要一个工具,能帮你记录每次对代码做了哪些修改,并且可以轻易的把代码回滚到历史上的某个状态...

2019-03-22 22:53:41 1227

原创 从零开始之驱动发开、linux驱动(四十四、虚拟网卡驱动)

网卡驱动的书写格式很简单1.申请一个网卡设备结构体2.设置这个结构体,硬件相关初始化3.注册这个网卡设备参考的韦东山老师的视屏,代码如下#include <linux/module.h>#include <linux/ioport.h>#include <linux/netdevice.h>#include <lin...

2019-03-22 00:03:16 1934

原创 从零开始学USB(二十八、usb鼠标驱动驱动实例分析[3]传输)

我们分析的这个usb鼠标是一个输入类型的中断传输。既然是输入类型,必然要做好接收。而一个端点中,一次事务中,传输的的最大字节数即量是在端点描述符中定义的。/* USB_DT_ENDPOINT: Endpoint descriptor */struct usb_endpoint_descriptor { __u8 bLength; __u8 bDescriptorTyp...

2019-03-19 23:32:52 3402 3

原创 从零开始学USB(二十七、usb鼠标驱动驱动实例分析[2]管道)

端点是USB设备的唯一可识别部分,其是主机和设备之间的通信流的终点。管道,就是一个USB主机和USB设备端点之间的数据传输的通道。站在主机的角度,它的目的是设备的某个端点。而管道这算是主机和端点之间的连线。这里我们先看一下管道在usb里的定义/* * For various legacy reasons, Linux has a small cookie that'...

2019-03-18 23:28:49 1698

原创 从零开始学USB(二十六、usb鼠标驱动驱动实例分析[1]简介)

这个驱动是在上一节的最简单的usb驱动基础上增加了输入子系统和usb包的获取和请求。首先先给出一个稍微简化了一下的usb的鼠标驱动,这里只做了鼠标的三个按键。为了方便验证,这里用鼠标的左键,右键和中间分别作为标准按键的l s enter 键。#include <linux/kernel.h>#include <linux/slab.h>#includ...

2019-03-18 00:01:41 3428

原创 从零开始学USB(二十五、4.19版本的内核支持usb驱动)

用的是S5PV210的SOC1.设备树支持设备树设备树默认是支持USB驱动的。如下: usbphy: usbphy@ec100000 { compatible = "samsung,s5pv210-usb2-phy"; reg = &lt;0xec100000 0x100&gt;; sa...

2019-03-17 00:04:13 2889

原创 设备树学习(二十九、番外篇-中断子系统之workqueue使用)

workqueue使用举例#include &lt;linux/fs.h&gt; #include &lt;linux/init.h&gt; #include &lt;linux/module.h&gt;#include &lt;linux/gpio.h&gt;#include &lt;asm/irq.h&gt;#include &lt;asm/io.h&gt;#...

2019-03-16 21:42:28 1197

原创 设备树学习(二十八、番外篇-中断子系统之workqueue处理work[4])

本文参考了下面两位博主的文章,采用4.18版本的内核分析。http://www.wowotech.net/sort/irq_subsystemhttps://blog.csdn.net/chenying126/article/details/78786406一、前言本文主要讲述下面两部分的内容:1、将work挂入workqueue的处理过程2、如何处理挂入workqu...

2019-03-15 00:32:33 2377 1

原创 设备树学习(二十七、番外篇-中断子系统之workqueue创建[3])

一、前言前一节我们知道了可以用下面几个函数来创建workqueue。#define alloc_ordered_workqueue(fmt, flags, args...) \ alloc_workqueue(fmt, WQ_UNBOUND | __WQ_ORDERED | \ __WQ_ORDERED_EXPLICIT | (flags), 1, ##args)#de...

2019-03-13 23:58:22 1504

USB_HID的两篇官方文档

Device Class Definition for Human interface Devices和 HID Usage Tables两篇官方文章,保存起来,已被更换电脑后用

2019-01-10

read-copy-update

linux锁机制的经典文档,read - copy - update。来自linux社区。

2018-09-25

输入子系统编程模板

尴尬,我自己的某个博客要用。这个东西我不想设置分数的,结果不能为0分。

2018-07-29

51单片机移植的ucosii嵌入式操作系统

对ucosii中不必要的内容进行了裁剪。因为51单片机的idata很小,这份代码用了51单片内部的idata作为当前运行任务的任务栈,其它没被运行的任务的栈则被放置在内存较大的xdata区。但因为51单片机的汇编语句少,简单,可以作为其他处理器移植ucosii的模版和参考,同时也是学习51单片机递增以及高级应用的实例。

2018-07-22

基于51单片机移植的ucosii的代码

对ucosii中不必要的内容进行了裁剪。这份代码用了51单片内部的idata作为任务栈,因为51单片机的idata很小,所以这份代码可以运行的任务数量比较少。但因为51单片机的汇编语句少,简单,可以作为其他处理器移植ucosii的模版和参考。

2018-07-22

基于51单片机写的一个多任务切换的简易OS

里面代码是本人亲自手写的一个基于51单片机的多任务切换代码,核心代码只有不到200行,可以从代码层面方便单片机开发者了解任务切换的原理和使用,里面没有使用任何复杂的算法。

2018-07-22

linux0.11源代码

里面包含有linux0.11版本的原版代码和 赵炯博士对里面所有代码的注释。

2018-07-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除