- 博客(15)
- 收藏
- 关注
原创 2021-04-11
8.Linux设备驱动中的阻塞和非阻塞I/O 8.1.堵塞与非堵塞IO 8.1.1.阻塞 阻塞操作是指再执行设备操作时,若不能获得资源,则挂起进程直到满足操作所需的条件后再进行操作,被挂起的进程进入休眠状态(不占用CPU资源),从调度器的运行队列转移到等待队列,直到条件满足。 8.1.2. 非堵塞 非阻塞操作是指在进行设备操作时,若操作条件不满足并不会挂起,而是直接返回或重新查询(一直占用CPU资源)直到操作条件满足为止。 当用户空间的应用程序调用read(), write()等方法时,若设备的资源不能被获
2021-04-11 11:12:13
195
原创 2021-04-11
7.Linux设备驱动的并发控制 并发(concurrency)------指的是多个执行单元同时、并行被执行 竞态(race conditions)-------并发的多个执行单元对共享资源的不合顺序地访问,两个以上线程在同一个临界区内同时执行 共享资源-----硬件资源和软件上的全局变量、静态变量等 解决竞态问题-------保证共享资源互斥访问 互斥访问------指一个执行单元在访问共享资源的时候,其他的执行单元被禁止访问 实现互斥访问------用中断屏蔽、原子操作、自旋锁和信号量等机制对临界区进
2021-04-11 11:11:21
184
原创 2021-04-11
6.字符设备驱动 6.1. Linux 字符设备驱动结构 6.1.1.cdev结构体 cdev结构体描述一个字符设备 struct cdev { struct kobject kobj; //内嵌的kobject对象 struct module *owner; //所属模块 const struct file_operations *ops;//文件操作结构 struct list_head list; dev_t dev; //设备号,int 类型 unsigned int coun
2021-04-11 11:10:02
191
原创 2021-04-11
5.Linux文件系统与设备文件 5.1. Linux文件操作 5.1.1.文件操作系统的调用 Linux的文件操作系统调用涉及创建、打开、读写和关闭文件。 1.创建 int create(const char *filename, mode_t mode) 参数mode指定新文件的存取权限,它同umask一起决定文件的最终权限(mode&umask),其中,umask代表了文件在创建时需要去掉的一些存取权限。umask代表了文件在创建时需要去掉的一些存取权限。umask可以通过系统调用umask(
2021-04-11 11:08:21
137
原创 2021-04-11
4.Linux内核模块 4.1.Linux内核模块 Linux提供了一种被叫为模块(Module)的机制。模块具有以下特点: 模块本身不被编译如内核镜像,从而控制内核大小。 模块一旦被加载,它就和内核中的其他部分一样。 例子: 这个简单的内核模块只包含内核模块加载函数、卸载函数和对GPL v2许可权限的声明以及一些可描述信息,在编写一个Makefile函数。运行make命令就可以得到模块直接在PC上运行。(CURDIR是make的内嵌变量,自动设置为当前目录) 如果模块包括多个.c文件(如file1.c、f
2021-04-11 10:53:40
122
原创 2021-04-11
3.Linux内核及内核驱动编程 3.1.Linux 内核的发展与演变 Linux 操作系统诞生于 1991 年 10 月 5 日(第一次正式向外公布的时间)。 Linux 操作系统的诞生、发展和成长过程依赖于 UNIX 操作系统、 MINIX 操作系统、 GNU 计划、 POSIX 标准和 Internet。 3.1.1.UNIX 操作系统 UNIX 操作系统是美国贝尔实验室的 Ken. Thompson和 Dennis Ritchie于 1969 年在 DEC PDP-7 小型计算机上开发的一个分时操作
2021-04-11 10:52:26
360
原创 2021-04-11
2.驱动设计的硬件基础 2.1.处理器 2.1.1.处理器–通用处理器 目前主流的通用处理器(GPP)多采用 SoC(片上系统)的芯片设计方法,集成了各种功能模块,每一种功能都是由硬件描述语言设计程序,ARM 主控芯片的集成度非常高,除了集成多核 ARM 以外,还可能集成图形处理器、视频编解码器、浮点协处理器、GPS、WiFi、蓝牙、基带、Camera 等一系列功能。 中央处理器的体系结构可以分为两类: 1.冯·诺依曼结构:ARM的ARM7、MIPS公司的M
2021-04-11 10:39:04
305
原创 2021-03-05
C与指针课后习题答案 一、编写一个程序,从标准输入读取几行输入。每行输入都要打印到标准输出上,前面要加上行号。编写这个程序的时候要使这个程序能够处理的输入行的长度没有限制。 #include<stdio.h> int main() { int ch,n=1; while(1) { ch=getchar(); if(ch=='\n') { printf(":%d",n); n++; } putchar(ch); } return 0; } 二、编写一个
2021-04-11 10:38:10
153
原创 2021-04-11
2.驱动设计的硬件基础 2.1.处理器 2.1.1.处理器–通用处理器 目前主流的通用处理器(GPP)多采用 SoC(片上系统)的芯片设计方法,集成了各种功能模块,每一种功能都是由硬件描述语言设计程序,ARM 主控芯片的集成度非常高,除了集成多核 ARM 以外,还可能集成图形处理器、视频编解码器、浮点协处理器、GPS、WiFi、蓝牙、基带、Camera 等一系列功能。 中央处理器的体系结构可以分为两类: 1.冯·诺依曼结构:ARM的ARM7、MIPS公司的M
2021-04-11 10:32:56
486
原创 2021-04-11
2.驱动设计的硬件基础 2.1.处理器 2.1.1.处理器–通用处理器 目前主流的通用处理器(GPP)多采用 SoC(片上系统)的芯片设计方法,集成了各种功能模块,每一种功能都是由硬件描述语言设计程序,ARM 主控芯片的集成度非常高,除了集成多核 ARM 以外,还可能集成图形处理器、视频编解码器、浮点协处理器、GPS、WiFi、蓝牙、基带、Camera 等一系列功能。 中央处理器的体系结构可以分为两类: 1.冯·诺依曼结构:ARM的ARM7、MIPS公司的M
2021-04-11 10:31:55
596
原创 2021-04-11
1.Linux 设备驱动概述及开发环境构建 1.1.设备驱动的作用 设备驱动是与底层硬件直接打交道,按照硬件设备的具体工作方式读写设备寄存器,完成设备的轮询、中断处理、DMA通信,进行物理内存向虚拟内存的映射,最终使通信设备能够收发数据,使显示设备能够显示文字和画面,使存储设备能够记录文件和数据 1.2.无操作系统的驱动 在单任务的系统中,虽然不存在操作系统,但是设备驱动是必须存在的。一般情况下,对每一种设备驱动都会定义为一个软件模块,包含.h文件和.c文件,前者定义该设备驱动的数据结构并声明外部函数,后者
2021-04-11 10:27:25
123
原创 2021-02-28
SPI模块设计文档 一、硬件模块学习 1.SPI总线概述 SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多
2021-02-28 19:36:23
523
转载 2021-02-21
柔性数组(摘抄自 公众号:C语言与CPP编程) 一、引言 1.定长数组包 在平时的开发中,缓冲区数据收发时,如果采用缓冲区定长包,假定大小是 1k,MAX_LENGTH 为 1024。: 结构体如下(示例): // 定长缓冲区 struct max_buffer { int len; char data[MAX_LENGTH]; }; 数据结构大小>= sizeof(int) + sizeof(char) * MAX_LENGTH 为了为了防止数据溢出的情况,data 的长度
2021-02-21 11:05:18
159
原创 2020-09-01
嵌入式系统知识总结 本文主要记录嵌入式的一些基础知识 1.嵌入式系统的定义 (1) 定义:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 (2)嵌入式系统发展的四个阶段:无操作系统阶段、简单操作系统阶段、实时操作系统阶段、面向Internet阶段。 (3)知识产权核(IP核):具有知识产权的、功能具体、接口规范、可以在多个集成电路设计中重复使用的模块,是实现系统芯片(SOC)的基本构件。 (4)IP核模块有行为、结构和物理3级不同程度的
2020-09-13 15:34:15
178
原创 ARM汇编基础
ARM汇编基础 GNU 汇编语法 GNU 汇编语法适用于所有的架构,并不是 ARM 独享的,GNU 汇编由一系列的语句组成, 每行一条语句,每条语句有三个可选部分,如下: label: instruction@comment label 即标号,表示地址位置,有些指令前面可能会有标号,这样就可以通过这个标号得到指令的地址,标号也可以用来表示数据地址。注意 label 后面的“:”,任何以“:”结尾的标识符都会被识别为一个标号。 instruction 即指令,也就是汇编指令或伪指令。 @符号,
2020-08-12 07:34:51
555
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅