自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(225)
  • 收藏
  • 关注

原创 Linux进程

程序和进程程序,是指编译好的二进制文件,在磁盘上,不占用系统资源(cpu、内存、打开的文件、设备、锁....) 进程,是一个抽象的概念,与操作系统原理联系紧密。进程是活跃的程序,占用系统资源。在内存中执行。(程序运行起来,产生一个进程) 站在程序员的角度来说:进程是执行一系列指令的过程。 站在操作系统的角度来说:进程是系统资源分配的基本单位。 程序 → 剧本(纸) 进程 → 戏(...

2019-06-03 12:07:50 339

原创 linux线程同步

同步概念所谓同步,即同时起步,协调一致。不同的对象,对“同步”的理解方式略有不同。如,设备同步,是指在两个设备之间规定一个共同的时间参考;数据库同步,是指让两个或多个数据库内容保持一致,或者按需要部分保持一致;文件同步,是指让两个或多个文件夹里的文件保持一致。等等 而编程中、通信中所说的同步与生活中大家印象中的同步概念略有差异。“同”字应是指协同、协助、互相配合。主旨在协同步调,按预定的先后...

2019-06-03 12:06:44 1082

原创 Linux线程详解

并行和并发的区别1. 并发(concurrency):在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行。其中两种并发关系分别是同步和互斥。(并发是指同一时刻只能有一条指令执行,但多个进程指令被快速轮换执行,使得在宏观上有多个进程被同时执行的效果--宏观上并行,针对单核处理器)互斥:进程间相互排斥的使用临界资源的现象,就叫互斥。 ...

2019-06-03 12:06:33 10774 4

原创 进程间通信方式(管道、信号、信号量、共享内存、消息队列)

进程间通信(IPC)介绍Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问,要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication)。...

2019-06-03 12:06:24 552

原创 linux线程属性

线程属性本节作为指引性介绍,linux下线程的属性是可以根据实际项目需要,进行设置,之前我们讨论的线程都是采用线程的默认属性,默认属性已经可以解决绝大多数开发时遇到的问题。如我们对程序的性能提出更高的要求那么需要设置线程属性,比如可以通过设置线程栈的大小来降低内存的使用,增加最大线程个数。 typedef struct{ int detachstate; //线程的分离状态 ...

2019-05-28 12:54:14 654

原创 网络安全传输系统(5)—账号管理子系统设计

1.登录模块设计输入用户名和密码 根据用户名从数据库提取密码 比较用户输入密码和数据库提取密码,以决定是否登录成功2.编译客户端程序arm-linux-gcc -L ../../008/openssl-1.0.0s/_install/lib/ -lssl -lcrypto -I ../../008/openssl-1.0.0s/_install/include/ -L ../....

2019-09-02 22:22:27 165

原创 网络安全传输系统(4)—线程池优化

服务器单发模式 初始化->等待连接->处理请求->关闭连接->再次等待连接 服务器并发模式 初始化->等待连接->交给子进程处理请求->再次等待连接 单发服务器不能同时处理多个客户端请求,并发服务器则可以同时处理多个客户端请求。并发服务器一般通过创建线程来处理多个客户端请求。当处理的客户端到达上万个时,不断的创建和销毁线程对服务器是一笔很大...

2019-09-02 20:13:22 217

原创 网络安全传输系统(3)—OpenSSL加密传输

1.基本介绍1.1 未加密传输的安全弊端如果在网络传输中没有加密,就是以明文传输。传输的数据可以被抓包软件直接截获,并能读取里面的数据。1.2 加密基本原理对称加密:对称加密指的就是加密和解密使用同一个秘钥,所以叫做对称加密。对称加密只有一个秘钥,作为私钥。常见的对称加密算法:DES,AES,3DES等等。 非对称加密:加密和解密使用不同的秘钥,一把作为公开的公钥,另一把作为私钥。...

2019-09-02 10:04:07 303

原创 c语言深度剖析(32)—数组指针和指针数组分析

1. 思考题:下面的声明合法吗?int array[5];int matrix[3][3];int *pa = array;int *pm = matrix;合法,第一个为标准数组的定义,第二个为二维数组的定义,第三个为指向数组的指针,第四个为指向二维数组的指针。 问题: array代表数组首元素的地址,那么matrix代表什么? array和&array的地址值相...

2019-09-01 09:58:49 169

原创 c语言深度剖析(2)—有符号与无符号

1.数据类型1.1 计算机中的符号位有符号编码规则:数据的最高位用于标识数据的符号 最高位为1,表示这个数为负数 最高位为0,表示这个数为正数 无符号编码规则:数据的最高位不代表符号位 计算机不知道数据的正负,看人怎么看待 1.2 编程实验有符号数的符号位#include <stdio.h>int main(){ char c = -5...

2019-08-30 20:16:37 1560

原创 c语言深度剖析(1)—基本数据类型

1.数据类型1.1什么是数据类型数据类型可以理解为固定内存大小的别名 数据类型是创建变量的模子1.2数据类型的本质2.变量的本质变量是一段实际连续存储空间的别名 程序中通过变量来申请并命名存储空间 通过变量的名字可以使用存储空间3.编程实验类型与变量的关系#include <stdio.h>#include <stdlib.h...

2019-08-30 20:16:28 1291

原创 网络安全传输系统(2)—框架搭建

1.框架搭建需要实现文件上传和下载等的基本功能网络协议采用TCP协议,通过TCP协议传输文件打算采取如下的顺序(针对客户机而言): 1、先发送命令,1代表上传,2代表下载,3代表退出 2、发送文件名 3、发送文件长度 4、发送文件数据 因此对于上传文件客户机和服务器分别遵循如下顺序 客户机: 1、获取需要上传的文件名 2、打开文件 3、发送命令1 4、发送文...

2019-08-28 22:58:39 269

原创 网络安全传输系统(1)—功能介绍

1.嵌入式Linux开发方向底层:内核、驱动、Bootloader 应用层:有UI:Android,QT;无U:网络应用2.网络安全传输系统服务器运行在PC Linux系统中,客户端运行在开发板中,客户端可以把文件上传到服务器上面,也可以从服务器上面下载。 系统实现的功能: 基于客户机/服务器模型,能够实现文件的上传和下载; 对TCP包的明文数据通过OpenSSL加密; 采...

2019-08-28 10:53:36 314

原创 移动物体监控系统(4)—嵌入式web服务器的移植

一、BOA嵌入式服务器移植1. BOA简介Boa是一种非常小巧的Web服务器,其可执行代码只有大约60KB左右,作为一种单任务Web服务器,Boa只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求。但Boa支持CGI,能够为CGI程序fork出一个进程来执行,Boa的设计目标是速度和安全,是目前嵌入式领域比较流行的web服务器,智能家居的网关大部分也采用该web服务器作为主...

2019-08-28 10:02:46 293

原创 移动物体监控系统(3)—移动监控主系统的设计与开发

一. Ffmpeg的移植ffmpeg是一个开源免费跨平台的视频和音频流方案,它提供了录制、转换以及流化音视频的完整解决方案。移植ffmpeg的目的主要是为了使motion能支持将捕获到的视频流转换成avi格式的视频文件进行存储。因此,我们仅需要移植ffmpeg中如下两个库,而且要在移植Motion之前进行ffmpeg的移植: libavformat:用于各种音视频封装格式的生成和解析,包括...

2019-08-27 19:46:21 278

原创 移动物体监控系统(2)—摄像头子系统开发

一、摄像头驱动开发1.摄像头驱动架构视频监控本就是嵌入式Linux的重要应用场合,所以如何合理高效的管理摄像系统,便成为嵌入式Linux一大热点!当前最流行的摄像头软件架构就是V4L2架构,从字面意思知道是专门为Linux设计的一个视频子系统的第二个版本。V4L2有一段历史了。早在1998的时候就出现了,经过长足的发展,它于2002年11 月,发布2.5.46 时,融入了内核主干之中。然而...

2019-08-27 10:58:52 989

原创 移动物体监控系统(1)—声音报警子系统开发

一. 声卡驱动开发1.声卡驱动架构1.1 OSS架构OSS是“开放音频系统”的缩写,是Linux系统早期比较常用一种音频架构!基于文件系统的访问方式操作底层的音频设备,用户空间的程序可以像操作普通文件一样读写相应的音频设备,与之对应的抽象设备文件有: /dev/mixer:用来访问声卡中的混音器进行音量调节; /dev/dsp、/dev/audio:对该设备读相当于录音,写相当于播...

2019-08-27 10:58:48 153

原创 Linux—gcc编译参数含义

gcc and g++分别是gnu的c & c++编译器,gcc/g++在执行编译工作的时候,总共需要4步预处理,生成.i的文件:预处理器cpp 将预处理后的文件转换成汇编语言,生成.s文件:编译器egcs 由汇编变为目标代码(机器代码),生成.o的文件:汇编器as 连接目标代码,生成可执行程序:连接器ld1.总体选项-E只激活预处理,这个不生成文件,你需要把它重定向到一...

2019-08-23 10:18:53 131

原创 USB驱动程序设计(5)—USB下载线驱动设计

1.模块代码的初始化函数和退出函数static struct usb_driver dnw_driver = { .name = "dnw", /* 驱动名 */ .probe = dnw_probe, /* 捕获函数 */ .disconnect = dnw_disconnect, /* 卸载函数 */ .id_table =...

2019-08-22 09:56:19 105

原创 USB驱动程序设计(4)—Linux USB驱动程序设计

1.USB驱动模型 USB设备包括配置(configuration)、接口(interface)和端点(endpoint),一个USB设备驱动程序对应一个USB接口,而非整个USB设备。比如说一个MP4的播放设备,他可以播放视频、也可以播放声音,这2个功能称为一个接口,而每一个驱动只能驱动一个接口,所以如果需要同时播放视频和音频则需要2个驱动程序。 在Linux内核中,使用struct...

2019-08-21 16:07:10 195

原创 USB驱动程序设计(3)—Linux USB系统架构

1.软件系统架构软件的系统架构分为2中,一种是主机架构,就是说运行Linux的设备是一个主机,可以插入U盘等设备。 最底部是一个USB主控制器,这是一个硬件,在芯片里面都会带有的。为了让这个主控制器工作起来,Linux需要有一个USB主控制器驱动。 为了方便用户设计USB设备驱动,Linux内核里面实现了一些USB核心,这里面主要是一些Linux协议之类的。USB设备驱动就是针对插入到L...

2019-08-21 10:24:07 127

原创 USB驱动程序设计(2)—USB协议分析

1.USB设备逻辑结构在USB设备的逻辑组织中,包含设备、配置、接口和端点4个层次。设备通常有一个或多个配置,配置通常有一个或多个接口,接口有零或多个 端点。每个USB设备都可以包含一个或多个配置,不同的配置使设备表现出不同的功能组合,配置由多个接口组成。在USB协议中,接口代表一个基本的功能,一个功能复杂的USB设备可以具有多个接口,而接口是端点的汇集。 一个USB播放器带有音频,视...

2019-08-20 15:36:48 132

原创 USB驱动程序设计(1)—USB总线介绍

1.USB发展史USB(Universal Serial Bus ),通用串行总线,是一种外部总线标准,用于规范电脑与外部设备的连接和通讯。USB是在1994年底由英特尔、康柏、IBM、Microsoft等多家公司联合提出的,自1996年推出后,已成功替代串口和并口,成为当今个人电脑和大量智能设备的必配接口之一。 USB1.0出现在1996年的,速度只有1.5Mb/s,1998年升级为USB...

2019-08-19 21:27:29 199

原创 SPI驱动程序设计(2)—Linux SPI子系统

1.SPI子系统架构SPI 子系统架构主要有三部分组成 SPI core核心:用于连接SPI客户驱动和SPI主控制器驱动,并且提供了对应的注册和注销的接口。 SPI controller driver主控制器驱动:用来驱动SPI控制器。 SPI protocol drvier客户驱动:用来驱动SPI设备。 2.SPI控制器驱动分析1.SPI控制器驱动对应的内核文件在/dr...

2019-08-19 19:51:53 99

原创 SPI驱动程序设计(1)—SPI总线介绍

1.SPI总线结构SPI(Serial Peripheral Interface)串行外设接口,是一种高速的,全双工,同步的通信总线。采用主从模式 (Master Slave)架构,支持多个slave,一般仅支持单Master。SPI接口共有4根信号线,分别是:设备选择线(SS)、 时钟线(SCK)、串行输出数据线(MOSI)、串行输入数据线(MISO)。2.数据传输过程主节点...

2019-08-19 18:39:41 172

原创 I2C驱动程序设计(4)—I2C自编设备驱动设计

在分析驱动程序之前我们再来分析一下I2C子系统的模型。I2C的设备驱动中有2中方式,一种是通过通用驱动来编写用户驱动。另一种就是直接在I2C子系统中添加一个I2C的设备驱动,比如说针对AT24C02的驱动程序,接下来我们来学习怎么编写一个I2C设备驱动。1.驱动程序分析我们先在Linux内核代码中打开一个叫做At24.c的文件,只要是属于AT24开头的设备都可以使用这个驱动。我们接下来分析...

2019-08-19 15:19:15 165

原创 I2C驱动程序设计(3)—I2C用户态驱动程序设计

之前已经说过,有2种i2c驱动程序的设计,比如说针对EEPROM的驱动程序。我们可以专门编写一个针对EEPROM的驱动程序。另一种方式就是通过i2c-dev,即通过i2c通用通用驱动,来编写一个应用程序,来完成对设备的控制。我们现在就来实现i2c用户态驱动程序的设计。1.通用设备驱动分析首先需要分析i2c-dev,先打开i2c-dev.c这个文件,找到i2c_dev_init函数。 re...

2019-08-19 11:01:36 205

原创 I2C驱动程序设计(2)—Linux下I2C子系统的介绍

1.I2C子系统架构Linux下IIC的架构模型大概可以分为3层: 第一层是I2C的从设备驱动,它包含图中的device driver和i2c-dev。device driver需要用户编写,i2c-dev由内核实现,包含了I2C设备的通用方法,但是用户不能直接使用这个驱动,需要编写一个用户层驱动,它们2个合起来才可以实现一个驱动程序。 第二层总线驱动,它又叫做总线控制器驱动,...

2019-08-16 16:35:29 120

原创 I2C驱动程序设计(1)—I2C总线介绍

1.I2C电气特性I2C(Inter-Integrated Circuit)总线是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。硬件结构如下:I2C总线只有两根双向信号线: SDA:Serial Data Line—数据线 SCL :Serial Clock—时钟线 2.I2C总线寻址I2C总线协议规定:从设备采用7位的地址。D7~D1:从设备地址...

2019-08-16 10:29:51 98

原创 c语言深度剖析(38)—C语言中的动态内存分配

1.动态内存分配的意义C语言中的—切操作都是基于内存的 变量和数组都是内存的别名 内存分配由编译器在编译期间决定 定义数组的时候必须指定数组长度 数组长度是在编译期就必须确定的 需求:程序运行的过程中,可能需要使用—些额外的内存空间。2.malloc和freemalloc和free用于执行动态内存分配和释放malloc所分配的是—块连续的内存(虚拟内存...

2019-08-14 23:26:26 51

原创 c语言深度剖析(37)—指针阅读技巧分析

1.指针阅读技巧解析右左法则 (实在看不懂看这个) 从最里层的圆括号中未定义的标示符看起 首先往右看,再往左看 遇到圆括号或方括号时可以确定部分类型,并调转方向 重复2, 3步骤,直到阅读结束 示例:#include <stdio.h>int main(){ int (*p)(int) int (*p1)(int*, in...

2019-08-14 11:29:06 53

原创 c语言深度剖析(36)—函数与指针分析

1.函数类型C语言中的函数有自己特定的类型 函数的类型由返回值,参数类型和参数个数共同决定 int add(int i, int j) 的类型为int(int, int) C语言中通过typedef为函数类型重命名 typedef type name(parameter list) 2.函数指针函数指针用于指向—个函数 函数名是执行函数体的入口地址 可...

2019-08-14 11:07:49 63

原创 c语言深度剖析(35)—数组参数和指针参数分析

1.思考为什么C语言中的数组参数会退化为指针?2.退化的意义C语言中只会以值拷贝的方式传递参数 当向函数传递数组时: 将整个数组拷贝—份传入函数(X) 将数组名看做指针常量传数组首元素地址 ( ✔ ) C语言以高效作为最初设计目标: 参数传递的时候如果拷贝整个数组执行效率将大大下降 参数位于栈上,太大的数组拷贝将导致栈溢出 3.二维数组参数...

2019-08-13 22:04:05 68

原创 c语言深度剖析(34)—多维数组和多级指针

1.指向指针的指针指针的本质是变量 指针会占用—定的内存空间 可以定义指向指针的指针来保存指针变量的地址值int main(){ int i = 0; int *p = NULL; // 定义指针变量p int **pp = NULL; // 定义二级指针变量pp pp = &p; // 二级指针变量pp保存指针变量p的地址 *...

2019-08-13 21:24:07 64

原创 c语言深度剖析(33)—main函数与命令行参数

1.main函数的概念C语言中main函数称之为主函数,一个C语言程序是从main函数开始执行。 main函数定义的标准形式:经实验可知都正确2. main函数的本质main函数是操作系统调用的函数; 操作系统总是将main函数作为应用程序的开始 操作系统将main函数的返回值作为程序的退出状态 思考:为什么C编译器支持那么多不同的main函数原型? 操作系统是...

2019-08-13 19:51:23 80

原创 c语言深度剖析(31)—字符串典型问题分析

1.典型问题一下面的程序输出什么?为什么?#include <stdio.h>int main(){ char buf[10] = { 0 }; char src[] = "hello %s"; snprintf(buf, sizeof(buf), src); printf("buf = %s\n", buf); return 0;}运行结果: 输...

2019-08-12 16:30:29 63

原创 c语言深度剖析(30)—C语言中的字符串

1.字符串的概念字符串是有序字符的集合 字符串是程序中的基本元素之一 C语言中没有字符串的概念 C语言中通过特殊的字符数组模拟字符串 C语言中的字符串是以'\0'结尾的字符数组 2.字符数组与字符串在C语言中,双引号引用的单个或多个字符是一种特殊的字面量 存储于程序的全局只读存储区 本质为字符数组,编译器自动在结尾加上'\0'字符 char s...

2019-08-12 15:08:39 70

原创 c语言深度剖析(29)—指针和数组分析(下)

问题:数组名可以当作指针常量使用,那么指针是否也可以当作数组来使用呢?通过下标的形式访问数组中的元素int main(){ int a[5] = {0}; a[1] = 3; a[2] = 5; return 0;}通过指针的形式访问数组中的元素int main(){ int a[5] = {0}; *(a + 1) = 3;...

2019-08-12 11:53:27 68

原创 c语言深度剖析(28)—指针和数组分析(上)

1. 数组的本质数组是一段连续的内存空间; 数组的空间大小为sizeof(array_type)*array_size; 数组名可看做指向数组第一个元素的指针常量。 问题: a + 1的意义是什么?结果是什么? 指针运算的意义是什么?结果是什么?#include<stdio.h>int main(){ int a[5] = {1, 2}; ...

2019-08-12 10:26:06 76

原创 c语言深度剖析(27)—数组的本质分析

1.数组的基本概念数组是相同类型的变量的有序集合数组当中的元素没有名字,我们只能通过数组名和下标来访问数组中的元素。数组名a代表的是这5个存储空间的集合。代表的是这一段内存。 数组在—片连续的内存空间中存储元素,数组元素的个数可以显示或隐式指定#include <stdio.h>int main(){ int a[5] = { 1, 2 }; // 显...

2019-08-11 22:53:51 183

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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