- 博客(81)
- 资源 (1)
- 收藏
- 关注
原创 802协议族&太网帧格式
以太网帧格式以太网帧发展1980 DEC,Intel,Xerox制订了Ethernet I的标准;1982 DEC,Intel,Xerox又制订了Ehternet II的标准;1982 IEEE开始研究Ethernet的国际标准802.3;1983 迫不及待的Novell基于IEEE的802.3的原始版开发了专用的Ethernet帧格式;1985 IEEE推出IEEE 802.3规范;后来为解决EthernetII与802.3帧格式的兼容问题推出折衷的Ethernet SNAP格...
2022-03-22 17:25:21
7944
转载 MAC/PHY/MII/RMII/GMII/RGMII基本介绍(转载)
1.MAC和PHY结构从硬件角度来看以太网是由CPU,MAC,PHY三部分组成的,如下图示意:上图中DMA集成在CPU,CPU,MAC,PHY并不是集成在同一个芯片内,由于PHY包含大量模拟器件,而MAC是典型的数字电路,考虑到芯片面积及模拟/数字混合架构的原因,将MAC集成进CPU而将PHY留在片外,这种结构是最常见的。 下图是网络接口内部结构图,虚框表示CPU,MAC集成在CPU中,PHY芯片通过MII接口与CPU上的MAC连接:以上是以太网结构大框架,下面分别介绍各个部分。2.MAC:MAC
2022-03-14 14:07:47
1276
转载 Contiki系统介绍
Contiki系统介绍本文内容来源为contiki英文介绍,自己为了学习,将其大致翻译成中文,以便了解。欢迎转载,转载请注明来源,如果有什么翻译不合适的地方,请留言指出,相互交流学习。介绍Contiki是一个开放源码、多任务事件驱动的嵌入式网络专用操作系统,轻量级的资源占用使得它很适合存储资源紧张的微控制器。Contiki由几个独立的模块组成,包括一个类似线程的多任务事件驱动protothread库,uIP TCP/IP(v4 and v6)协议栈,无线传感网络协议栈Rime..
2021-02-04 15:32:54
2657
转载 SPI总线时钟的极性(CPOL)与相位(CPHA)
文章来源:转来转去的不知道是谁的了。。SPI由于接口相对简单(只需要4根线),用途算是比较广泛,主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。即一个SPI的Master通过SPI与一个从设备,即上述的那些Flash,ADC等,进行通讯。而主从设备之间通过SPI进行通讯,首先要保证两者之间时钟SCLK要一致,互相要商量好了,要匹配,否则,就没法正常通讯了,即保证时序上的一致才可正常讯。而这里的SPI中的时钟和相位,指的就是SCLk时钟的特性,即保证主从设
2020-07-11 16:39:13
5626
2
转载 linux git使用说明
一些认识之前对github和git一直傻傻分不清,以为是两种不同的版本管理工具。现在才认识到git是一种版本管理工具,而github只是一个远程仓库。实际上没有github这种远程仓库,你计算机中git也会建立一个本地的仓库,或者链接到其他的远程仓库。1. git的安装输入命令安装git,并查看版本以确认安装成功。sudo apt-get install gitgit --ve...
2018-12-14 14:56:53
713
原创 linux i2c驱动
1、Linux 的 I2C 体系结构分为 3 个组成部分( 1) I2C 核心(层)。I2C 核心提供了 I2C 总线驱动和设备驱动的注册、注销方法, I2C 通信方法(即“ algorithm”)上层的、与具体适配器无关的代码以及探测设备、检测设备地址的上层代码等。( 2) I2C 总线驱动(适配器层)。I2C 总线驱动是对 I2C 硬件体系结构中适配器端的实现,适配器可由 CPU 控制...
2018-11-23 11:38:59
282
原创 linux设备驱动 阻塞与非阻塞 I/O、异步通知与异步IO
1、阻塞与非阻塞 I/O阻塞操作是指在执行设备操作时,若不能获得资源,则挂起进程直到满足可操作的条件后再进行操作。被挂起的进程进入休眠状态,被从调度器的运行队列移走,直到等待的条件被满足。非阻塞操作的进程在不能进行设备操作时,并不挂起,它或者放弃,或者不停地查询,直至可以进行操作为止。 阻塞从字面上听起来似乎意味着低效率,实则不然,如果设备驱动不阻塞,则用户想获取设备资源只能不停...
2018-11-22 11:33:00
619
原创 linux内核 信号量、自旋锁、completion、互斥体、延时函数
访问共享资源的代码区域称为临界区( critical sections),临界区需要被以某种互斥机制加以保护,方法有中断屏蔽、原子操作、自旋锁和信号量等。 在驱动程序中,当多个线程同时访问相同的资源时(驱动程序中的全局变量是一种典型的共享资源),可能会引发"竞态",因此我们必须对共享资源进行并发控制。Linux内核中解决并发控制的最常用方法是自旋锁与信号量(绝大多数时候...
2018-11-20 13:30:19
1565
1
转载 linux设备驱动模型之Kobject、kobj_type、kset
一、sysfs文件系统简介:1、sysfs概述sysfs文件系统是内核对象(kobject)、属性(kobj_type)、及它们相互关系的一种表现。sysfs非常重要的特征:用户可以从sysfs中读出内核数据,也可以将用户数据写入内核。2、内核结构与sysfs对应关系:kobject -->目录kobj_type-->属性文件3、特点sysfs文件系统...
2018-11-19 10:34:16
648
转载 linux驱动---字符设备的注册register_chrdev说
首先我们在注册函数里面调用了register_chrdev(MEM_MAJOR,"mem",&memory_fops),向内核注册了一个字符设备。第一个参数是主设备号,0代表动态分配,这里的MEM_MAJOR是1。第二个参数是设备的名字,第三个参数是文件操作指针。每个设备文件对应有两个设备号:一个是主设备号,标识该设备的种类,也标识了该设备所使用的驱动程序;另一个是次设备号,标识使...
2018-11-05 11:02:15
1414
1
转载 字符设备号管理
在《深入Linux设备驱动程序机制》书中 在第二章讲解字符设备的时候,个人觉得比较有收获的主要是两个方面的知识:1、字符设备号的管理原理(char_device_struct)2、字符设备驱动的file_operation中的函数如何与file结构体中的相应结构对应上,并被应用程序调用。 对于以上两个主要的知识点,我觉得书上的条理已经很清楚的,很容易看懂...
2018-11-05 10:50:19
984
转载 Linux设备驱动之Kobject、Kset
LDD3中说,Kobject的作用为: 1、sysfs 表述:在 sysfs 中出现的每个对象都对应一个 kobject, 它和内核交互来创建它的可见表述。 2、热插拔事件处理 :kobject 子系统将产生的热插拔事件通知用户空间。 3、数据结构关联:整体来看, 设备模型是一个极端复杂的数据结构,通过其间的大量链接而构成一个多层次的体系结构。kobject 实现了该结...
2018-11-05 09:12:58
466
转载 BLE4.0广播连接过程的底层剖析
一、实验目的1、在实验过程中遇到很多问题,都不知道从何下手,所以决定深入了解蓝牙协议栈的底层,看是如何运行的,了解后,遇到问题就知道从哪里开始找问题,你懂得;二、说明1、由于空间有限,这里只是贴出部分代码,有些不能理解的要配合源代码来理解,这里只是大概指向(红色部分),能让你大部分明白是怎么跑起来的,细节上自己去理解,不懂可以提问;三、实验平台1、蓝牙协议栈:1.3.22、...
2018-10-24 14:55:19
763
转载 BLE4.0配对绑定过程的底层剖析
一、实验目的1、了解主从配对绑定的过程中底层是怎么运行的;二、说明1、关于配对于绑定,网上查了很多资料都没查到什么,问了很多人也没有回答的,所以我决定自己深入了解底层关于配对与绑定是如何运行的,我用了接近两个星期来理解的,效率很低,在这里总结一下,希望能帮助到别人。2.这里之是大概讲了一个方向,因为涉及的点太多,无法一一列出,需要研究细节的,自己去探讨一下,不懂可以在群上讨论三...
2018-10-24 14:53:54
673
转载 OSAL启动过程分析
一、SimpleBLEBroadcaster OSAL启动过程分析:Main()==> HAL_BOARD_INIT();//初始化硬件==> InitBoard( OB_COLD );//初始化板卡IO==> HalDriverInit(); //hal层驱动初始化==> osal_snv_init();//初始化Flash==> osal...
2018-10-24 14:47:25
579
转载 蓝牙4.0 BLE SimpleBLEPeripheral_添加新CHAR值及UUID
UUID, 就是用来唯一识别一个特征值的ID.handle,就是对应的attribute 的一个句柄。所有对特征值的操作,都是通过对UUID 的搜索得到对应的handle之后,通过handle来操作特征值的。 添加新的特征值CHAR6下面对主要几个文件进行修改simpleGATTprofile.h 文件添加以下定义#define SIMPLEPROF...
2018-10-19 16:29:29
2129
1
转载 蓝牙解析(3):BLE协议栈解析
转自http://www.wowotech.net/bluetooth/ble_stack_overview.html1. 前言本文从协议栈设计者的角度,思考如下问题:为什么会有蓝牙协议栈(Why)?怎样实现蓝牙协议栈(How)?蓝牙协议栈的最终样子是什么(What)?我们知道,当前的蓝牙协议包含BR/EDR、AMP、LE三种技术,为了降低复杂度,本文将focus在现在...
2018-09-28 10:09:45
3145
转载 蓝牙解析(2):协议架构分析
转自http://www.wowotech.net/bluetooth/bt_protocol_arch.html 1. 前言 本文是蓝牙解析的第二篇文章,在part1的基础上,从整体架构的角度,了解蓝牙协议的组成,以便加深对蓝牙的理解。2. 协议层次蓝牙协议是通信协议的一种,为了把复杂问题简单化,任何通信协议都具有层次性,特点如下:从下到上分层,通过层层封装,每一层...
2018-09-28 10:04:02
610
转载 蓝牙解析(1):蓝牙的基本概念
2. 蓝牙技术的概述2.1 两种蓝牙技术:Basic Rate(BR)和Low Energy(LE) 蓝牙协议包括两种技术:Basic Rate(简称BR)和Low Energy(简称LE)。这两种技术,都包括搜索(discovery)管理、连接(connection)管理等机制,但它们是不能互通的!这也是蜗蜗抱怨蓝牙协议不优雅的原因之一。厂商要么实现这两种技术中的一种,这时就只能...
2018-09-28 10:03:11
5828
转载 usb设计中的管道pipe描述
usb设计中的管道pipe描述 在USB设计中,常有描述管道的说明,对应的图示为: 在实际设计中:pipe为一个int数 定义如下: 以32位系统为例,int为32 bit.bit:31-30:为管道传输的流类型00: isochronous flow 01: interrupt flow 02: control flow 03: bulk flowbit:29-20:暂...
2018-09-20 10:14:35
3914
转载 Linux下搭建FTP服务器(Ubuntu16.04)
搞了下FTP服务器,基本上能遇到的问题都遇到了-。-!先说步骤:1.安装vsftpd软件包sudo apt-get install vsftpd2.打开配置文件vim /etc/vsftpd.conf3.修改参数一些参数可以去掉注释激活,为了方便,你也可以注释全部,然后添加下面的设置 #这些设置系统默认是开启的,可以不管listen=NOlisten_...
2018-09-13 17:32:12
192
转载 USB Gadget Storage功能调试
由于工作的需要,实现板卡通过Micro USB线与PC连接,作为PC的 外设存储,PC拷贝数据到板卡中,或者把板卡中的数据通过USB线拷贝到PC端,实现数据的交互,板卡采用Linux操作系统,笔者采用的是AM335X 处理器平台: 开发过程中修改文件顺序记录如下: 如果板卡作为PC的外设,通过USB线连接,那么板卡处于USB Device工作模式,也即是USB Gadg...
2018-09-11 10:34:39
5075
1
转载 Ubuntu 16.04 远程桌面
本文主要是讲解如果理由VNC实现Windows远程访问Ubuntu 16.04,其实网上有很多类似教程,但是很多需要安装第三方桌面(xfce桌面等等),而且很多人不太喜欢安装第三方桌面,很多人像笔者一样喜欢原生自带的桌面(O(∩_∩)O哈哈~有点强迫症)。今天笔者给大家介绍一下,不需要安装其他桌面,使用Ubuntu 16.04原生自带桌面如何进行远程访问。一、设置Ubuntu 16.04 允许...
2018-08-22 11:04:01
23490
8
转载 Ubuntu 16.04 重置密码(忘记密码)
Ubuntu 16.04 重置密码(忘记密码)http://blog.topspeedsnail.com/archives/6042忘记了你的Ubuntu用户密码,登录不了系统;不要紧,在Ubuntu上重置密码是很简单的,即使你忘记了用户名。 #1 进入Recovery ModeRecovery Mode即恢复模式;在Grub启动菜单选择“Advanced Options fo...
2018-08-21 16:51:23
62245
4
转载 linux设备:cdev和kobj_map
Linux kernel v3.6.7先看kobj_map相关的代码涉及到的文件<linux/kobj_map.h><drivers/base/map.c>typedef struct kobject *kobj_probe_t(dev_t, int *, void *);struct kobj_map;int kobj_map(...
2018-08-17 15:00:14
2513
2
转载 视频驱动V4L2子系统驱动架构 - ioctl
ioctl详解进入ioctl都是从cdev->ops->ioctl进入的,一般的驱动cdev都是驱动自己初始化的,在v4l2架构中,cdev都已经初始化完成,不需要驱动开发者来初始化,下面是v4l2的cdev->ops结构体v4l2_fops :static const struct file_operations v4l2_fops = { .owner = ...
2018-08-16 17:24:48
1756
转载 视频驱动V4L2子系统驱动架构-框架
V4L2驱动框架v4l2驱动架构如图所示,v4l2也就是video for linux two,那么也就是说还有One了,v4l2前面还有v4l图中芯片模块对应Soc的各个子模块,video_device结构体主要用来控制Soc的video模块,v4l2_device会包含多个v4l2_subdev ,每个v4l2_subdev 用来控制各自的子模块,某些驱动不需要v4l2_subdev ...
2018-08-16 16:07:32
15355
2
原创 虚拟视频驱动程序vivi.c源码分析-笔记
v4l2_devicev4l2_device在v4l2框架中充当所有v4l2_subdev的父设备,管理着注册在其下的子设备。可以看出v4l2_device的主要作用是管理注册在其下的子设备,方便系统查找引用到。V4l2_subdevV4l2_subdev代表子设备,包含了子设备的相关属性和操作。每个子设备驱动都需要实现一个v4l2_subdev结构体,v4l2_subdev可以...
2018-08-15 18:01:48
639
转载 虚拟视频驱动程序vivi.c源码分析
以下先把上一篇文章中的最后一段,放在这里利于程序源码的分析:vivi.c 虚拟视频驱动程序----- 此代码模拟一个真正的视频设备V4L2 API (位于drivers/media/video目录下)入口:+int __init vivi_init(void) + vivi_create_instance(i) /*创建设备*//**/。 ...
2018-08-15 17:58:00
795
转载 Linux V4L2驱动架构解析与开发导引
Linux V4L2驱动架构解析与开发导引众所周 知,linux中可以采用灵活的多层次的驱动架构来对接口进行统一与抽象,最低层次的驱动总是直接面向硬件的,而最高层次的驱动在linux中被划分为 “面向字符设备、面向块设备、面向网络接口”三大类来进行处理,前两类驱动在文件系统中形成类似文件的“虚拟文件”,又称为“节点node”,这些节点拥 有不同的名称代表不同的设备,在目录/dev下进行统...
2018-08-15 11:10:44
689
转载 linux .so动态库makefile的嵌套调用
1、动态库的编译下面通过一个例子来介绍如何生成一个动态库。这里有一个头文件:test.h,三个.c文件:test_a.c、test_b.c、test_c.c,我们将这几个文件编译成一个动态库:libtest.so。test.h: #include "stdio.h"void test_a();void test_b();void test_c(); test...
2018-08-03 13:23:39
3903
转载 Linux SPI总线和设备驱动架构之四:SPI数据传输的队列化
我们知道,SPI数据传输可以有两种方式:同步方式和异步方式。所谓同步方式是指数据传输的发起者必须等待本次传输的结束,期间不能做其它事情,用代码来解释就是,调用传输的函数后,直到数据传输完成,函数才会返回。而异步方式则正好相反,数据传输的发起者无需等待传输的结束,数据传输期间还可以做其它事情,用代码来解释就是,调用传输的函数后,函数会立刻返回而不用等待数据传输完成,我们只需设置一个回调函数,传输完成...
2018-07-27 15:55:01
384
转载 Linux SPI总线和设备驱动架构之三:SPI控制器驱动
我们已经知道,整个SPI驱动架构可以分为协议驱动、通用接口层和控制器驱动三大部分。其中,控制器驱动负责最底层的数据收发工作,为了完成数据的收发工作,控制器驱动需要完成以下这些功能:1. 申请必要的硬件资源,例如中断,DMA通道,DMA内存缓冲区等等;2. 配置SPI控制器的工作模式和参数,使之可以和相应的设备进行正确的数据交换工作;3. 向通用接口层提供接口,使得上层的协...
2018-07-27 15:50:25
256
转载 Linux SPI总线和设备驱动架构之二:SPI通用接口层
软件架构在内核的SPI驱动的软件架构中,进行了合理的分层和抽象,如下图所示: 图2.1 SPI驱动的软件架构SPI控制器驱动程序SPI控制器不用关心设备的具体功能,它只负责把上层协议驱动准备好的数据按SPI总线的时序要求发送给SPI设备,同时把从设备收到的数据返回给上层的协议驱动,因此,内核把SPI控制器的驱...
2018-07-27 15:44:15
2589
转载 Linux SPI总线和设备驱动架构之一:系统概述
SPI是串行外设接口"Serial Peripheral Interface" 的缩写,是一种四线制的同步串行接口技术,是一种高速的,全双工,同步的通信总线,用来连接微控制器、传感器、存储设备,SPI设备分为主设备和从设备两种。一、技术性能SPI接口是Motorola 首先提出的全双工三线同步串行外围接口,采用主从模式(Master Slave)架构;支持多slave模式应用,一般仅支持单M...
2018-07-27 15:30:26
526
转载 linux I2C 驱动之----i2c_client 的注册
linux的设备模型将设备分成了driver,device两大部分,driver即是设备的驱动,device即是硬件设备的具体描述,比如说:设备所拥有的中断,地址等,这里分析一下I2C驱动中device,也即i2c_client的注册。(注:这里所说明的是linux 系统i2c设备新采用的方法。) 在注册i2c驱动的时候,会去linux系统中的全局变量_i2c_board_list链表...
2018-07-03 17:56:48
602
转载 I2C——i2c_driver的注册及probe探测函数调用过程
在 linux I2C 驱动之----i2c_client 的注册中介绍了i2c_client的注册,现在再来说说i2c_driver的注册过程。 每一个驱动程序都有 module_init(xxxx_init) 这个语句,它代表系统启动的时候会自动执行 xxxx 这个函数,也就是说驱动的人口函数是由module_init来定义的。当然还有module_exit(XXXX),它代表系统...
2018-07-03 17:48:37
5996
2
转载 Linux 设备驱动之 ——I2C总线
2 I2C子系统2.1 LinuxI2C子系统架构在内核中已经提供I2C子系统,所以在做I2C驱动之前,就必须要熟悉该子系统。2.2 三大组成部分1、I2C核心(i2c-core)I2C核心提供了I2C总线驱动和设备驱动的注册、注销方法,I2C通信方法(algorithm)上层的、与具体适配器无关的代码以及探测设备、检测设备地址的上层代码等。2、I2C总线驱动(I2Cadapter/Algo d...
2018-07-03 17:46:28
309
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人