自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

wit_732的博客

人生似水岂无涯,浮云吹作雪,世味煮成茶。

  • 博客(95)
  • 收藏
  • 关注

原创 DHCP 原理以及IP获取过程

DHCP 原理以及IP获取过程一、概述DHCP 基本定义HDCP(Dynamic Host Configuration Protocol,动态主机配置协议)。是一个局域网的网络协议,使用UDP协议工作, 主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。DHCP有3个端口,其中UDP67和UDP68为正常的DHCP服务端口,分别作为DHCP Server和DHCP Client的服务端口;546号端口用于DHCPv6 Client,而

2021-07-28 21:36:43 13313

原创 802.11无线通信帧分类及功能说明

802.11帧分类1. 数据帧数据数据包的作用是用来携带更高层次的数据(如IP数据包,ISO7层协议)。它负责在工作站之间传输数据。2. 管理帧管理数据包控制网络的管理功能管理帧负责监督,主要用来加入或退出无线网络,以及处理接入点之间连接的转移事宜。信标帧(Beacons): 在无线设备中,定时依次按指定间隔发送的有规律的无线信号(类似心跳包),主要用于定位和同步使用解除认证(Deauthentication)数据包Probe(request and response)Authentica

2021-04-03 16:03:54 3000 2

原创 WiFi基本知识总结 --- 通信框架及基础概念说明

IEEE 802.11协议族定义了无线局网的MAC和PHY层标准,下面总结常见的IEEE 802.11类协议。IEEE802.11系列常见协议•11a: for5GHz•11b: for2.4GHz•11g: for2.4GHz•11n: for5GHzand2.4GHz将上面提到的协议,整理如下:802.11MAC层相关标准:只要是无线网络里面的一些功能的规范,或是具体协议的体现,如QOS、MESH、错误检测、数据帧校验、无线安全标准;

2019-12-30 21:07:52 11211 3

原创 Linux进程间通信 —— (三) 信号量

Linux进程间通信 —— (三) 信号量一、概述在多任务操作系统中,多个进程/线程会同时运行。多个任务可能会为了完成某个目标而相互协作,这样就形成了任务之间的同步关系。同样,不同任务之间为了争夺有限的系统资源(硬件/软件资源)会进入竞争状态,这就是任务之间的互斥关系。任务之间的互斥与同步关系存在的根源在于临界资源。下面先来看两个概念:临界资源和临界区。临界资源是指在同一个时刻只允许有限个(通常只有一个)任务访问(读)或修改(写)的资源。临界资源包括:硬件资源(处理器、内存、存储器、以及其外外围

2022-01-12 17:05:39 749

原创 Linux进程间通信 - (二) 信号

Linux进程间通信 - (二) 信号1. 概述信号是在软件层面上对中断机制的一种模拟。在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说在某种程度上是一样的。信号是异步的:一个进程不必通过任何操作来等待信号的到达。事实上,进程也不知道信号什么时候会到达。信号可以直接进行用户空间进程和内核进程之间的交互,内核进程也可以利用它来通知用户进程发生了那些系统事件。信号可以在任何时候发给某一进程,而无需知道该进程的状态。如果该进程当前并未处于执行态,则该信号就由内核保存起来,直到

2021-12-29 17:16:50 658

原创 Linux进程间通信 - (一) 管道

Linux进程间通信 - (一) 管道一、概述管道是Linux进程间通信的一种方式,它把一个程序的输出直接连接到另一程序的输入。Linux的管道主要包括两种:无名管道和有名管道。无名管道只能用于具有亲缘关系的进程之间的通信(如父子进程或者兄弟进程之间)。是一个单工的通信模式,具有固定的读端和写端。管道也可以看成一种特殊的文件,对于它的读写也可以使用普通的read()、write()等函数。但是它不属于任何文件系统,并且只存在于内存中。有名管道它可以使互不相关的两个进程实现彼此通信。

2021-12-27 09:57:08 903

原创 Linux进程间通信

Linux进程间通信一、概述我们知道,每个进程创建时有自己独立的4GB空间,有自己的代码段、数据段、堆栈等资源。很多时候,不同的进程间需要交换数据,即相互通信。那么又该通过哪些机子来进行进程间的通信呢?下面我们来一起来看看进程间通信的一些机制。Linux平台的进程间通信是从Unix平台继承而来,同时也继承了不同流派的一些进程间通信的优点,这样就形成了Linux自己的进程间通信的方式。如下图所示:二、进程间通信方式现在Linux中应用比较广泛的进程间通信方式主要有一下几种无名管道(pipe)及

2021-12-26 23:55:50 594

原创 C语言 -- 常见字符串处理函数总结

C语言常用字符串函数文章目录C语言常用字符串函数一、基础知识1. 常量指针与指针常量2. 字符串的存储区3. 字符串长度二、字符串处理函数1. 字符串长度计算2. 字符串复制3. 字符串拼接4. 字符串比较函数5. 格式化字符6. 字符串查找7. 字符串分割三、总结一、基础知识为了更好的理解后面提到的一些字符串处理函数,我们先补充一些基础知识。假如你已经掌握,可以直接跳过。1. 常量指针与指针常量先来看一个例子:int a = 100; const int * p = &a; //常量

2021-12-24 19:53:03 1175

原创 wpa_supplicant中wifi断连相关的reason code含义

源文档

2021-12-13 10:50:31 3615

原创 Linux文件操作 --- (二)文件I/O

文件操作 - 文件I/O文章目录文件操作 - 文件I/O文件I/O一、基本概念1. 文件2. 虚拟文件系统(VFS)3. 文件描述符二、编程接口文件的打开和关闭文件的打开 open()文件的关闭close()文件读写文件读read()文件写write()文件的定位文件定位lseek()文件锁文件I/O在上一篇文章Linux文件操作之标准I/O简单讲了文件操作标准I/O的一些基本知识,这里我们继续来看LInux下文件操作的又一利器:文件I/O一、基本概念1. 文件上一小节,我们讲到了Linux是基

2021-12-08 16:57:39 881

原创 Linux文件操作 ---(一)标准I/O

Linux文件操作一、基础概念1. 文件的概念文件:一组相关数据的有序结合。文件名:这组数据集合的名称。文件分类:ASCALL码文件二进制文件目录字符设备块设备套接口符号链接…Linux的哲学是“Linux下一切皆文件”。从上面我们也可看出,除了常规的ASCALL码和二进制文件,其他的如字符设备,套接字等在Linux下都被看作文件。因此学习Linux文件操作不可为不重要。这样来看的话,学习Linux下的文件操作就显得很重要和必须了。2. 系统调用除此之外,还需要补充一点

2021-11-27 22:08:28 1591

原创 Linux系统将WiFi配置为AP模式 --- hostapd 和 udhcpd的使用说明

文章目录hostapd一、功能说明二、配置文件hostapd.conf1. 配置WiFi 热点为无密码模式2. 配置WiFi热点为加密模式三、hostapd的启动udhcpd一、功能说明二、配置文件udhcpd.conf的使用三、实例说明四、使用示例总结hostapd一、功能说明hostapd是Linux系统上的一个带加密功能的无线接入点(access point : AP)程序。hostapd能够使得无线网卡切换为master模式,模拟AP(路由器)功能,作为AP的认证服务器,负责控制管理stati

2021-10-29 17:04:25 17665 6

原创 C语言拾锦 --- 对指定的结构体数组成员进行初始化

对指定的结构体数组成员进行初始化概述今天在看iwlib库(一个开源的基于wext的wifi驱动的管理的库,可以支持我们在应用层面对wifi进行一些方便的操作)代码的时候发现了一种比较有用的对结构体结构体数组成员的初始化的方法,之前没有遇到过。第一次见有点儿新奇,在这里做一下记录。先贴出代码(对源代码进行了一定的简化):/* Describe how a standard IOCTL looks like. */struct ty_ioctl_description{ __u8 hea

2021-09-27 16:56:17 1978 2

原创 C语言基础 --- 结构体中的.和->的区别与联系

C语言基础 — 结构体中的.和->的区别与联系1. 基本功能这两种方式其实都是结构体成员运算符,两者都具有从左到右的结合性。不同的是:'.'是结构体引用成员变量的方式。'->' 是结构体指针引用成员变量的方式。2. 联系那么既然有了’.‘这个符号,为什么还要再弄个’->‘符号呢?这不是很麻烦吗?然而,事实并非如此,’->'恰巧是为了我们更好的使用结构体这一有利的工具。请看下面这个小例子。#include <stdio.h>struct ptr { i

2021-09-12 18:01:39 2647 1

原创 C语言 --- 一个简单内存池模型的实现

C语言 — 简单的内存池实现内存时原理说明模拟C语言内存分配函数malloc()和free(),我们这里也定义两个函数alloc和afree,进而模拟C语言内存的分配的实现。定义一个大的字符数组,模拟一块内存池。让alloc对一个大的字符数组allocbuf中的空间进行分配,该数组是alloc和afree两个函数私有的数组。由于alloc和afree处理的对象是指针而不是数组下标,因此,其他函数无需知道该数组的名字,这样可以在alloc和afree处理的对象是指针而不是数组下标,因此,其他函数无

2021-08-01 22:57:10 1033 13

原创 C语言 --- Register 寄存器变量解析

Register 寄存器变量定义register声明告诉编译器,它所申明的变量在程序中使用频率较高。其思想是:将register变量房子机器的寄存器中,这样可以使程序更小、执行速度更快。但是编译器可以忽略此选项。用法register 只适用于自动变量以及函数的参数。register申明变量的形式如下:register int a;int register b;这两种形式都是可以的,但第一种会简单明了一些。register申明函数参数int func(register char

2021-06-05 21:40:11 1823

原创 数据结构与算法 --- 嵌入式程序员必须掌握的核心知识总结

数据结构预算法核心知识点总结概述最近有看一些大佬的专栏,受益匪浅。深刻的觉察到我们要想成为一个伟大的程序员,或者说小一点,成为一个厉害的程序员,基础知识是核心竞争力也是我们不断向上提升个人能力的基石。所以最有又对一些基础知识进行了总结和回顾,并逐渐开始吧他们记录在这里。数据结构与算法本来整理的是思维导图的形式,但是这个博客并不允许直接导入思维导图。所以只能将他们截图,贴在这里,不知道是否影响观看。申明,这里本人只做了核心知识点的提要。当然肯定也会有遗漏或不足的地方,欢迎批评指正。总结当然了

2021-06-05 17:52:05 359 1

原创 RTOS 基础知识

RTOS一、定义与特点最近两年RTOS操作系统在嵌入式领域越来越流行和受欢迎了,身边也有很多人在RTOS上构建项目。所以很有必要,来了解一下RTOS操作系统到底什么,这个操作系统有哪些特点,以及我们如何使用它。RTOS全称为:Real Time OS,就是实时操作系统,强调的是:实时性。实时操作系统又分为硬实时和软实时。硬实时要求在规定的时间内必须完成操作,硬实时系统不允许超时,在软实时里面处理过程超时的后果就没有那么严格。在实时操作系统中,我们可以把要实现的功能划分为多个任务,每个任务负责实现其中

2021-05-23 20:59:54 1675

原创 Linux驱动开发 --- 设备树

设备树文章目录设备树1. 设备树由来2. 设备树的目的3. Linux设备树的使用1. 设备树由来在Linux内核源码引入内核源码的ARM体系结构引入设备树之前,相关的BSP代码中充斥了大量的平台设备代码(platform device)。而这些代码大多是重复的、杂乱的,这就给内核移植带来了巨大的困难。以至于Linux之父Linus怒斥ARM社区。为了解决此问题,设备树就被引用到Linux中来。(需要注意的是设备树并不是Linux的首创)2. 设备树的目的设备树是一个描述硬件的数据结构。它也不能

2021-04-27 15:21:39 614

原创 WIFI快连(一键配网)原理分析及优化建议

EZ配网说明文章目录EZ配网说明@[toc]EZ配网基本流程说明配网流程EZ配网原理组播广播EZ配网优缺点及优化建议优点缺点优化建议EZ配网基本流程说明EZ配网也叫wifi快连,目前市面上EZ配网的功能需要设备支持monitor模式(也称为混杂模式),即设备应当具有监听当前环境中空气包的能力。并且设备可以对相关的报文进行筛选,并解析出设备中特定信息用于完成配网。目前涂鸦EZ配网一般流程为:APP(一般为用户手机端)端发送带有AP ssid和AP passwd以及token的广播包或组播包。同时设备

2021-04-14 21:27:41 7961 4

原创 udev和驱动的自动加载

udev和驱动的自动加载一、概述在一般的驱动编写时,我们可以通过加载模块来向系统添加设备,也可以通过移除模块来删除设备。但是很多时候我们会设想到一种更加智能的的场景,即当设备被添加到系统后,驱动可以自动加载,这对于实际的可支持热插拔的硬件来说更有必要。比如说,我们插入一个USB无线网卡,那么对应的驱动就应该自动加载,而不是由用户来手动加载。要想实现这一工能,我们就需要依赖一个工具 — udev。在大多数嵌入式系统中通常使用mdev,其功能比udev要弱很多,同样的我们也可以移植udev到嵌入式系统上。

2021-03-20 20:43:16 1197

原创 Linux系统移植(四) -- 根文件系统

Linux系统移植(四) -- 根文件系统文件系统的制作和移植是系统移植的最后一道工序了,在进行这一步之前,我们需要搞懂几个问题:1.什么是文件系统? 2.如何实现文件系统? 3.常用的文件系统有哪些?为什么需要这些文件系统?首先我们先讲清楚这几个问题。文件系统我们在日常生活中则很少听说,但是它确实存在,只是名字不叫文件系统罢了,一般叫资料库。资料库里面的文件众多,我们如何快速准确的找到我们要的那份文件呢?资料库采用了分类索引的方法来实现快速查找。类似于我们学校图书馆的管理...

2021-03-07 23:30:47 2224

原创 Linux系统移植(三) -- kernel的配置、编译和移植

Linux系统移植(三) -- kernel的配置、编译和移植 将下载好的kernel源代码拷贝到主目录下解压 修改顶层目录下的Makefile,主要修改平台的体系架构和交叉编译,代码如下: 注意:这两个能量值会直接影响顶层Makefile的编译行为,即选择编译那些代码,用什么编译器进行编译。拷贝标准配置文件$ cp arch/arm/configs/ xxx_defconfig .config这里拷贝arch/arm/configs/s5pc100_defconfi..

2021-03-07 23:27:00 741 1

原创 Linux系统移植(二) -- BootLoader原理和移植

Linux系统移植(二) -- BootLoader原理和移植1. 什么是BootLoader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境,他就是所谓的引导加载程序(Boot Loader)。flash中存储文件的分布大致为:2. 为什么要移植系统前要移植BootLoader?BootLoader的任务是引导操作系统,所谓引导操作系统,就是

2021-03-07 23:21:58 1785

原创 Linux系统移植(一) -- 交叉编译工具链

Linux系统移植(一) – 交叉编译工具链系统移植在嵌入式开发工作中占据着很重要的作用,我们只有将操作系统移植到特定的开发板上面后,我们才能进行进一步的开发工作。我们编写的应用程序或者驱动程序才能才开发板上面跑起来。系统移植的工作相对来说还是比较繁琐的,有的公司里面也有专门的做系统移植的部门。系统移植虽然繁琐,但是主要也是围绕如下的四个方面来进行的:1. 搭建交叉开发环境2. BootLoader的选择和移植3. kernel的配置、编译、和移植4. 根文件系统的制作这里将以Linux系统移植

2021-03-07 23:01:35 1151

原创 80211 wifi帧格式--管理帧、数据帧、控制帧

80211帧格式--管理帧、数据帧、控制帧因为无线数据链路所带来的挑战,MAC被迫采用了许多特殊的功能,其中包括使用四个地址位。并非每个帧都会用到所有的地址位,这些地址位的值,也会因为MAC帧种类的不同而有所差异。未解决标题中所提到的问题,我们先来看一般的80211 MAC帧格式。我们可以看出802.11 MAC帧并未包含以太网帧的某些典型功能,其中最显著的是type/length位以及 preamble(同步信号) 。Preamble属于物理层, 而封装细节(如type与length) 则出现

2021-02-25 16:17:19 12738 2

原创 C语言中的类型转换

类型转换C语言中,类型转换可以说是非常复杂的存在了。有符号、无符号,整数、浮点数等等,C语言中定义了这么多类型。而很多类型之间的转换,C标准中并没有做很详细的规定。如果不对这些转换有一个基本的认识的话,那么难免会留下隐患。本文将从四个方面,对C原因中的一些隐式的类型转换做一些总结。整型提升一个C表达式中,方式可以用int、unsigned int类型做右值的地方都可以使用有符号或者无符号的char型、short型和位域。如果原来类型的取值范围能够用int表示,则其类型被提升为int,如果原始类型

2021-01-31 19:34:36 922

原创 C语言-数据结构-队列

队列1. 基本概念队列也是一组元素的集合,也提供两种基本操作:Enqueue(入队)将元素添加到队尾,Dequeue(出队)从队头取出元素并返回。就像排队买票一样,先来先服务,先入队的人也是先出队的,这种方式称为FIFO(First In First Out,先进先出),有时候队列本身也被称为FIFO。2. 环形队列栈操作的top指针在Push时增大而在Pop时减小,栈空间是可以重复利用的,而队列的head、tail指针都在一直增大,虽然前面的元素已经出队了,但它所占的存储空间却不能重复利用。一般

2021-01-17 21:14:16 152

原创 C语言-数据结构-堆栈

数据结构1. 数据结构概念数据结构(Data Structure)是数据的组织方式。程序中用到的数据都不是孤立的,而是有相互联系的,根据访问数据的需求不同,同样的数据可以有多种不同的组织方式。以前学过的复合类型也可以看作数据的组织方式,把同一类型的数据组织成数组,或者把描述同一对象的各成员组织成结构体。数据的组织方式包含了存储方式和访问方式这两层意思,二者是紧密联系的。2. 堆栈堆栈的访问规则被限制为Push和Pop两种操作,Push(入栈或压栈)向栈顶添加元素,Pop(出栈或弹出)则取出当前栈顶的

2021-01-17 20:58:37 205

原创 Wpa_supplicant工作流程分析之scan(从应用层到内核)(上)

Wpa_supplicant工作流程分析wpa_supplicant官网:https://w1.fi/wpa_supplicant/wpa_supplicant源码下载官网地址:https://w1.fi/releases/本文分析基于版本:V2.61. 初始化wpa_supplicant/main.c在main()中,完成了四件事。先看一下源代码,我们再来一一分析。int main(int argc, char *argv[]){ int c, i; struct wpa_interf

2020-12-31 15:52:18 2816

原创 wifi的工作模式

wifi的工作模式文章目录wifi的工作模式@[toc]一、概述二、wifi工作模式1. station 模式2. AP 模式3. Monitor 模式4. Ad-hoc 模式5. Repeater/WDS 模式6. mesh模式7. Client模式(客户端模式)8. Bridge模式(桥接模式)9. Managed mode(托管模式)10. Router 模式(路由模式)三、后记一、概述最近在做wifi_hal层时看开源的iwlib库的iwlib.c文件时候发现了下面这样的一个定义:/* Mo

2020-12-30 22:45:05 2936

原创 Probe Request 帧结构详细分解

Probe Request帧结构概述probe request属于管理帧,其遵循管理帧的一般格式,在《802.11无线权威指南》中管理帧的一般格式为:因为probe request属于管理帧,所以其也遵循这个格式。简单说明下各个部分的含义。帧主体中大部份的数据,如果使用长度固定的位,就称为固定式位;如果位长度不定,就称为信息元素( information element)。所谓信息元素,是指长度不定的数据区块。 每个数据区块均会标注上类型编号与大小, 各种信息元素的数据位都有特定的解释方式。M

2020-12-29 17:39:47 6528 4

原创 Makefile基本语法知识(全)

Makefile基本语法知识(全)文章目录Makefile基本语法知识(全)@[toc]一、概述Makefile 的规则目标和依赖make如何工作伪目标多目标引用其他的Makefile文件make 工作流程Makfile内容Makfile命名自动推导make运行make的退出码指定Makfile指定目标检查规则二、Makefile高级语法变量延时变量即时变量自动变量通配符环境变量变量的高级玩法目标变量多行变量overide 指示符模式变量三、条件判断ifeq 关键字ifneq关键字ifdef关键字ifnd

2020-12-20 23:37:43 551 1

原创 C 语言拾锦 —— ##和#预处理标记的用法及原理分析

先说结论:我们先来看一个例子,理解其第一点用法,并且熟悉下这种用法:将其进行编译后,两个printf都会输出:那么它具体是怎么实现的呢?其实很简单就是在其宏变量被替换,在其左右两侧加上双引号。为了探究这个过程,我们在用gcc编译的时候加上-E选项来看下编译器的预处理过程:可以看到,gcc编译器的预处理过程和我们的猜想是一致的,预处理标记的作用确实只是在我们指定的参数两旁加上双引号使其成为一个字符串了。这里也可以看出预处理标记的工作原理了。可以看到上面的例子中没有换行,我们将其晚上一下。提供两种思路

2020-08-09 22:23:26 1977 1

原创 从零开始学Linux设备驱动--Linux设备模型

Linux设备模型一、概述前面讲到了设备驱动的编写方法,但是我们会发现我们编写的驱动不够智能,或者说是实用性很差。比如:设备和驱动没有分离。这样一旦硬件信息改变,我们的驱动就无法使用了。不能查看相应的设备和驱动的的信息,比如Windows中有设备管理器,我们就可以比较方便的查看相关的设备和驱动的信息。不能自动创建设备节点驱动不能自动加载没有电源管理等等这些都是我们前面编写驱动程序的缺点,那么有什么比较好的办法可以解决吗?当然,Linux也提供了一套设备驱动模型用于Linux平台下的设

2020-07-26 22:55:32 328

原创 从零开始学Linux设备驱动--Linux内存管理与DMA(万字长文)

内存管理与DMA一、概述我们知道类似于ARM这种结构,操作硬件都是通过特殊功能寄存器(SFR)来进行的,他们和内存统一编址,也叫IO内存。下面我们一起来看一下Linux系统是如何来对内存进行管理的。二、内存管理从内存管理的方法来分,可以将计算机分为两种类型,一种是UMA(uniform memory access,一致内存访问)计算机,另一种是NUMA(non-uniform memory access,非一致内存访问)计算机。UMA计算机:每一CPU访问的都是同一块内存,分CPU对

2020-07-21 00:16:28 1419 2

原创 从零开始学Linux驱动--(9)内核中的互斥与同步

互斥与同步一、概述如果内核中有多条路径都要访问同一个资源,那么可能会导致数据的相互覆盖,并造成紊乱。例如,我们在驱动代码中定义了一个全局变量i,驱动中某个例程中执行了i++操作,而在中断服务程序中也执行了i++操作,在这种情形下我们来分析一下可能造成的数据紊乱情况。i++在ARM汇编中展开如下:ldr r1,[r0]add r1,r1,#1str r1,[r0]假设变量i所存放的值是放在r0所指向的内存中,也就是说,r0寄存器中保存了变量i的地址,并且变量i的初值为5。假设当我们执行到第一

2020-07-11 22:31:48 500

原创 从零开始学Linux设备驱动--(8)中断、事件管理及中断下半部

中断和事件管理一、中断中断进入过程为了提高外部时间处理的实时性,显示的处理器几乎都含有中断控制器,外设也都带有中断触发的功能。为了支持这一特性,Linux中设计了一个终端子系统来管理系统中的中断。很多处理器都有中断控制器,它负责进行中断管理。下面讨论一下,当中断发生了,如何调用驱动中的中断处理函数。一般在我们会实现将异常向量表写好,并标记异常向量表的起始地址,在内核启动的过程中会将异常向量表搬移到0xFFFF0000的位置,通过设置处理器的先关寄存器可以对异常向量表进行重映射当不同的中断

2020-07-05 14:19:44 476

原创 从零开始学Linux设备驱动--(7)高级Io操作

高级I/o操作一、ioctl设备操作除了之前提到的对设备的读写操作(read、write接口来实现),内核将对设备的控制操作委派给ioctl接口,ioctl也是一个系统调用。int iooctl(int d,int request,...);@ d :要操作的文件描述符@ request :代表不同操作的数字值,遵循一定的规则@ ... :C语言中可变参数函数的声明,表示第三个参数可有可无。这个是在应用层的系统调用函数,和read、write等系统调用一样,其对应的驱动接口函数式unlo

2020-06-28 22:54:49 739

原创 C语言基础--宏函数

C语言基础–宏函数1. 函数和数据类型函数式宏(宏函数)和函数类比会更加灵活,我们通过两个例子来看一下。函数#include <stdio.h>int sqr_int(int x){ return x*x;}double sqr_double(double x){ return x*x;}int main(int argc , char *argv[]){ int n; double x; printf("请输入一

2020-06-07 15:43:45 24197 10

空空如也

空空如也

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

TA关注的人

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