![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux驱动
文章平均质量分 91
一口Linux
《从零开始学ARM》作者,长期分享嵌入式、linux、网络、arm知识。
展开
-
fs4412 I2C驱动基于Cortex-A9,mpu6050裸机程序,驱动,I2C架构,有这一篇够了
本文基于三星Cortex-A9架构,Exynos4412讲解I2C原理、以及基于I2C的mpu6050陀螺仪的数据读取实例(包括在裸机模式下数据的读取以及基于Linux驱动的读取)。还会分析Linux内核I2C架构,篇幅过长,绝对干货。裸机篇本篇首先详细讲解I2C时序,然后讲解如何基于三星I2C控制实现裸机读取从设备信息方法。前言I2C(Inter-Integrated Circuit)总线(也称 IIC 或 I2C) 是有PHILIPS公司开发的两线式串行总线,用于连接微控制器及外围设备,是微电子原创 2020-08-24 18:52:31 · 1495 阅读 · 5 评论 -
16.从0学arm,基于Cortex-A9 ADC裸机驱动详解
前言在嵌入式开发中,ADC应用比较频繁,本文主要讲解ADC的基本原理以及如何编写基于ARM的裸机程序和基于Linux的驱动程序。ARM架构:Cortex-A9Linux内核:3.14在讲述ADC之前,我们需要先了解什么是模拟信号和数字信号。模拟信号主要是与离散的数字信号相对的连续的信号。模拟信号分布于自然界的各个角落,如每天温度的变化,而数字信号是人为的抽象出来的在时间上不连续的信号。电学上的模拟信号是主要是指幅度和相位都连续的电信号,此信号可以被模拟电路进行各种运算,如放大,相加,相乘等。模原创 2020-08-23 09:04:00 · 3964 阅读 · 1 评论 -
瑞芯微-I2S | 音频驱动调试基本命令和工具-基于rk3568
基于Linux嵌入式设备常用调试方法很多,本文一口君把调试语音用到的工具和方法给大家做一个简单的介绍。原创 2024-04-01 21:32:05 · 1645 阅读 · 0 评论 -
嵌入式软件开发人员有必要学习系统移植的知识吗?【ppt获取见文末】
用户只需要一条命令就能制作所需要的uboot、kernel、文件系统,而书中除了ARM汇编、裸机开发等知识,还涉及到系统移植的一些知识点。可以说要想成一个资深的底层工程师,这些知识都是必须掌握的。视频中配套开发板使用的是讯为的exynos4412全能板。将很多系统移植的软件包、制作工具等都封装在sdk中,我个人觉得,要想真正的理解和掌握嵌入式系统,而且虽然厂家提供的sdk封装的已经非常好了,为了让粉丝更好的学习我的新书里面的知识,作为使用者,几乎不用考虑这方面的内容,我觉得只要有时间,随时都可以学习,原创 2024-01-14 19:23:21 · 619 阅读 · 0 评论 -
Linux系统内核概述
单内核体系设计、但充分借鉴了微内核设计体系的优点,为内核引入模块化机制。kernel内核核心,一般为 bzImage通常在 /boot 目录下,名称为 vmlinuz-VERSION-RELEASEkernel object内核对象,一般放置于 /lib/modules/VERSION-RELEASE/[ ] ==> N ==> 不编译进内核[M] ==> M ==> 编译为模块文件[*] ==> Y ==> 编译进内核辅助文件(ramdisk)initrdinitramfs。原创 2022-11-26 21:26:35 · 5671 阅读 · 5 评论 -
几道简单的Linux驱动相关面试题,你看你会几题?
中断:是指CPU在执行程序的过程中,出现了某些突发事件时CPU必须暂停执行当前的程序,转去处理突发事件,处理完毕后CPU又返回源程序被中断的位置并继续执行。中断发生后,ARM核的操作步骤可以总结为4大步3小步。GPIO是相对于芯片本身而言的,如某个管脚是芯片的GPIO脚,则该脚可作为输入或输出高或低电平使用,当然某个脚具有复用的功能,即可做GPIO也可做其他用途。原创 2022-10-24 19:55:21 · 4687 阅读 · 0 评论 -
Linux内核 RTC时间架构
上一篇文章我们给大家讲解了基于瑞芯微rk3568平台芯片hym8563驱动的移植,本文给大家详细讲解Linux内核的时间子系统。《》原创 2022-10-12 21:41:30 · 2128 阅读 · 5 评论 -
Linux驱动|rtc-hym8563移植笔记
RTC:实时时钟的缩写是(Real_Time Clock)。RTC 是集成电路,通常称为时钟芯片。HYM8563是一款低功耗CMOS实时时钟/日历芯片,由武汉昊昱公司设计生产。它提供一个可编程的时钟输出,一个中断输出和一个掉电检测器,所有的地址和数据都通过I2C总线接口串行传递。最大总线速度为400Kbits/s,每次读写数据后,内嵌的字地址寄存器会自动递增。原创 2022-09-27 21:48:16 · 3720 阅读 · 2 评论 -
Linux驱动小技巧 | 利用DRIVER_ATTR实现调用内核函数
1. 前言很多朋友在调试驱动的时候,都会遇到这样一个场景:修改一个参数,然后调用某个内核中的函数。比如将某个gpio的值拉高/拉低,修改某个寄存器的值等等。如果每一个参数都通过字符设备的ioctl接口,增加对应的cmd,会比较麻烦。而内核提供了DRIVER_ATTR这个宏,可以帮助我们实现快速实现这个需求。下面一口君通过一个简单的实例,带着大家一步步讲解。2. DRIVER_ATTR定义该宏定义的文件如下:include/linux/device.h#define DRIVER_ATTR原创 2022-01-24 23:19:02 · 1733 阅读 · 0 评论 -
Linux驱动 | 从0写一个设备树节点实例
前言设备树是每一个Linux驱动工程师都必须掌握的一个知识点,很多粉丝留言说,只会修改设备树,还有就是对设备树如何填写表示一头雾水。其实设备树的使用并没有大家想像的那么复杂,对于大部分工程师来说,只要会修改即可。在学习设备树之前,大家一定要搞清楚什么是platform总线,请详细学习下面这篇文章:《手把手教Linux驱动10-platform总线详解》关于设备树理论部分内容请学习下面这篇文章:《手把手教linux驱动11-linux设备驱动统一模型》关于驱动基础文章,可以去B站学习一口君的入门原创 2022-01-17 20:00:39 · 2470 阅读 · 0 评论 -
需要多久才能看完linux内核源码?
内核代码大小Linux内核分为CPU调度、内存管理、网络和存储四大子系统,针对硬件的驱动成百上千。代码的数量更是大的惊人。看看内核代码量的统计。从图中可以看出,2020年1月份,内核的代码量大约是2千6百万行。按照一天一万行的速度,也需要2600天,也需要7年多。这还是建立在所有单次都认识,所有代码逻辑看了的都懂,而且都不忘记的基础上。实际上即使我们真的看完了,几年后内核又会有非常大的变化,可以说一辈子都看不完Linux内核的代码。linux 0.11的内核源码,结合下面这本书,我花原创 2021-12-29 22:43:34 · 2678 阅读 · 0 评论 -
Linux嵌入式所有知识点-思维导图-【一口君吐血奉献】
嵌入式学习知识点汇总原创 2021-09-22 22:50:13 · 8187 阅读 · 12 评论 -
Linux驱动|cdev_init、cdev_alloc区别
这两个函数是字符设备初始化相关的内核函数。要想了解这两个函数,必须要知道字符设备的架构,以及字符设备创建的流程。关于字符设备可以参考下面这篇文章《手把手教Linux驱动3-之字符设备架构详解,有这篇就够了》一、字符设备架构二、字符设备创建的流程三、函数功能和定义1. cdev_init()原型void cdev_init(struct cdev *cdev, const struct file_operations *fops)功能参数/** * cdev_init原创 2021-09-14 19:19:46 · 3213 阅读 · 3 评论 -
Linux input 子系统详解
1. 模块概述1.1.相关资料和代码研究drivers/input/include/uapi/linux/input-event-codes.h2. 模块功能linux核心的输入框架3. 模块学习3.1.概述Linux输入设备种类繁杂,常见的包括触摸屏、键盘、鼠标、摇杆等;这些输入设备属于字符设备,而linux将这些设备的共同特性抽象出来,Linux input 子系统就产生了。3.2.软件架构输入子系统是由设备驱动层(input driver)、输入核心层(input core)、输原创 2021-09-05 09:43:57 · 2894 阅读 · 0 评论 -
从0学Linux驱动第一期视频已经录制完毕,资料全部奉送
历时4个多月,第一期Linux驱动视频录制完毕,一共32期,现在全部同步到了B站。如果你觉得视频对你有用,建议大家多多点赞,投投免费硬币,算是对我辛苦的劳动的认可。视频中ppt、代码、ubuntu环境请扫描下面二维码,回复:ubuntu,即可获得一、楔子第一次发布教学视频,走了些弯路,也有很多不足,有很多收获。录制视频之后才发现,这个事情实在太耗费精力了,除了要构思讲课内容、制作PPT、还要编写测试程序验证知识点,视频中代码都是我一个字母一个字母敲出来的,有的代码我还在视频中现场原创 2021-07-19 22:59:07 · 1009 阅读 · 7 评论 -
Linux内核信号SIGIO使用实例讲解
一、信号1. 基本概念信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。例如键盘输入中断按键(^C),它的发生在程序执行过程中是不可预测的。信号是进程间通信机制中唯一的异步通信机制,可以看作是异步通知,通知接收信号的进程有哪些事情发生了。硬件异常也能产生信号,例如被零除、无效内存引用(test里产生的就是这种错误)等。这些条件通常先由内核硬件原创 2021-07-11 22:45:56 · 4882 阅读 · 0 评论 -
呕心沥血整理的的嵌入式学习路线
曾经是某见的教学总监,我带出来的学生也有大几千了,基本都从事linux相关工作。网上看了很多的嵌入式学习路线,有的还凑活,有的纯粹是打广告卖板子,有的东拼西凑,简直是嵌入式劝退指南。大致给你梳理一下我从事的一个嵌入式的课程培训体系吧。基础1. linux基本操作:个人建议只要会一些基本的操作就行了,不需要太深入的学习每一个命令,用到的时候会去搜索就行了。需要掌握的知识如下:环境的搭建;Linux目录结构;文件类型;基本目录操作,文件操作,vim,ifconfig,ping,cd,cp,m原创 2020-09-10 19:39:53 · 29665 阅读 · 16 评论 -
鸿蒙2.0都来了,一起把环境搭建起来!
首款鸿蒙平板6月2日发布。这是一个非常值得庆贺的事情。针对华为发布的鸿蒙系统,网上评论褒贬不一,有吹捧的,有无脑黑的。在这里一口君就不做评价了,但是有2点:对任何一个新兴事物,我们都要保持最旺盛的求知欲,在自己没有亲自实践就妄下评论的行为是缺乏智慧和不负责任的。废话不多说,让我们一起搭建一个鸿蒙的运行环境,来一窥神秘的鸿蒙。HarmonyOS 简介HarmonyOS鸿蒙操作系统,是面向万物互联时代的全场景分布式操作系统。OpenHarmony在传统的单设备系统能力的基础上,创造性地提出了原创 2021-05-31 13:25:09 · 1748 阅读 · 0 评论 -
Linux模块文件如何编译到内核和独立编译成模块?
一、 问题描述1. 内核目录Linux内核源代码非常庞大,随着版本的发展不断增加。它使用目录树结构,并且使用Makefile组织配置、编译。关于linux内核的学习,可以参考华清远见《Linux内核修炼培训班》的课程大纲。初次接触Linux内核,好仔细阅读顶层目录的readme文件,它是Linux内核的概述和编译命令说明。readme的说明侧重于X86等通用的平台,对于某些特殊的体系结构,可能有些特殊的说明。顶层目录的Makefile是整个内核配置编译的核心文件,负责组织目录树中子目录的编译管理,原创 2021-05-17 22:56:19 · 5448 阅读 · 3 评论 -
Linux信号量(3)-内核信号量
概念Linux内核的信号量在概念和原理上和用户态的System V的IPC机制信号量是相同的,不过他绝不可能在内核之外使用,因此他和System V的IPC机制信号量毫不相干。如果有一个任务想要获得已经被占用的信号量时,信号量会将其放入一个等待队列(它不是站在外面痴痴地等待而是将自己的名字写在任务队列中)然后让其睡眠。当持有信号量的进程将信号释放后,处于等待队列中的一个任务将被唤醒(因为队列中可能不止一个任务),并让其获得信号量。这一点与自旋锁不同,处理器可以去执行其它代码。应用场景由于争用信号量原创 2020-11-03 21:45:29 · 873 阅读 · 1 评论 -
是时候深入了解Linux的系统结构了
什么是 Linux ?如果你以前从未接触过Linux,可能就不清楚为什么会有这么多不同的Linux发行版。在查看Linux软件包时,你肯定被发行版、LiveCD和GNU之类的术语搞晕过。初次进入Linux世界会让人觉得不那么得心应手。在开始学习命令和脚本之前,本章将为你稍稍揭开Linux系统的神秘面纱。首先,Linux可划分为以下四部分:↪ Linux内核 ↪ GNU工具链 ↪ GUI桌面环境 ↪ 应用软件 ...|--------------------------||原创 2021-04-25 20:32:20 · 370 阅读 · 0 评论 -
【问答23】Linux移植:如何制作rootfs?
制作rootfs原创 2021-04-25 20:11:15 · 587 阅读 · 0 评论 -
一篇就让你了解进程的虚拟地址与物理地址是如何进行映射的
这篇文章可以让你了解进程的虚拟地址是如何映射物理地址的,在刚开始接触虚拟地址的概念时,真的是一头雾水,不知道它到底是个什么东西,一直有这个疑惑,为什么要用虚拟地址,虚拟地址的作用是什么?经过这么多年做过的项目,积攒经验后,我可以略知一些虚拟地址的作用:1. 代码的移植性变得更加的好,在不同的平台进行编译后,就可以直接运行,因为代码和虚拟地址打交道,到别的系统上,都会将你的虚拟地址转换为物理地址,如果不用虚拟地址,用物理地址,那么到了别的平台,就得考虑代码当前使用的物理地址,是否被别人使用了。2.原创 2021-04-24 21:36:00 · 2852 阅读 · 4 评论 -
rtc驱动模型及rx8025驱动学习
rtc驱动模型及rx8025驱动学习一、芯片简单了解RX8025-T是一款拥有I2C接口和温度补偿功能的新型实时时钟芯片,内部集成32.768KHz温度补偿晶体振荡器,可用于各种需要高精度时钟的场合。通过设置相应补偿的控制位,可以实现不同间隔的温度补偿功能,从而大大提高了时钟的精度。芯片可设置四种不同的时段进行温度补偿,默认设置是2S补偿。该芯片采用C-MOS工艺生产,具有极低的功能消耗,可长期使用电池供电。芯片特点:1.内置高稳定度的32.768KHz 的DTCXO (数字温度补...原创 2021-04-22 21:49:24 · 3713 阅读 · 0 评论 -
手把手教linux驱动11-linux设备驱动统一模型-设备树
1. 设备树概念1.1.设备树感性认识设备树(Device Tree),将这个词分开就是“设备”和“树”,描述设备树的文件叫做DTS(Device Tree Source),这个DTS 文件采用树形结构描述板级设备,比如CPU 数量、 内存基地址、IIC 接口上接了哪些设备、SPI 接口上接了哪些设备等等。设备树是树形数据结构,具有描述系统中设备的节点。每个节点都有描述所代表设备特征的键值对。每个节点只有一个父节点,而根节点则没有父节点。 1.2.DTS、DTB、DTCDTS:设备树源码文件;原创 2021-04-11 21:29:45 · 4498 阅读 · 5 评论 -
【粉丝问答20】Linux内核定时器使用及其他时间操作
问题描述原创 2021-04-06 20:52:17 · 391 阅读 · 0 评论 -
【粉丝问答17】Linux内核如何判断地址是否位于用户空间?
一、 问题描述access_ok函数是永原理?二、问题分析我们在内核空间和用户空间进行数据拷贝的时候必须判断用户空间地址是否合法。主要通过偶函数access_ok来判断。1. Linux用户空间与内核地址空间Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对应的数据可能不在内存中。通常32位Linux内核地址空间划分03G为用户空间,34G为内核空间原创 2021-03-22 18:10:44 · 695 阅读 · 0 评论 -
【粉丝问答15】Linux内核中如何访问另外一个模块的函数和变量
一、问题整理内核中两个模块,一个A,一个B,A模块中有操作函数,B模块要调用A模块的函数。二、分析这是一个驱动工程师经常遇到的一个问题,该问题其实是模块符号导出问题,实现该功能比较简单,借助EXPORT_SYMBOL()即可。1. 什么是符号?这里的符号主要指的是全局变量和函数。2. 为什么要导出符号?↓Linux内核采用的是以模块化形式管理内核代码。内核中的每个模块相互之间是相互独立的,也就是说A模块的全局变量和函数,B模块是无法访问的。有些时候,我们写一些模块代码的时候,发现部分函数原创 2021-03-10 18:18:16 · 1450 阅读 · 2 评论 -
【粉丝问答14】如何在内核中操作某个文件?
一、问题描述如何在内核中操作某个文件?二、操作函数1. 分析在用户态,读写文件可以通过read和write这两个系统调用来完成(C库函数实际上是对系统调用的封装)。 但是,在内核态没有这样的系统调用,我们又该如何读写文件呢?阅读Linux内核源码,可以知道陷入内核执行的是实际执行的是sys_read和sys_write这两个函数,但是这两个函数没有使用EXPORT_SYMBOL导出,也就是说其他模块不能使用。在fs/open.c中系统调用具体实现如下(内核版本3.14):SYSCALL_DE原创 2021-03-08 12:05:47 · 329 阅读 · 1 评论 -
你应该知道Linux内核softirq
说起这个softirq ,很多人还是一头雾水,觉得这个是什么东西,跟tasklets 和 workqueue有什么不同。每次谈到这个,很多人,包括我,都是有点紧张,特别是面试的时候,因为你一旦说错了什么,那么你这次面试估计就歇菜了。谈到这个,我们不得不说中断,中断处理,我相信很多人都是知道的,中断分为上半部和下半部,原来的Linux 内核是没有下半部的,中断来了,就在中断里处理事件,说白了,就是执行一些函数操作,但是这个会导致一个问题,就是系统调度慢了,对于用户来说,你用手机的时候,感觉到十分卡顿,原创 2021-03-07 15:50:43 · 631 阅读 · 0 评论 -
Linux下SPI驱动详解
更多嵌入式原创文章,请关注公众号:一口Linux1. SPI总线1.1. SPI总线概述SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正原创 2021-03-04 22:29:47 · 11096 阅读 · 6 评论 -
Linux内核网络设备驱动
1. 接收数据包过程概述介绍数据包收包过程,有助于我们了解Linux内核网络设备在数据收包过程中的位置,下面从宏观的角度介绍数据包从被网卡接收到进入 socket 接收队列的整个过程:加载网卡驱动,初始化 数据包从外部网络进入网卡 网卡(通过DMA)将包拷贝到内核内存中的ring buffer 产生硬件中断,通知系统收到了一个包 驱动调用 NAPI ,如果轮询(poll)还没有开始,就开始轮询 ksoftirqd软中断调用 NAPI 的poll函数从ring buffer收包(poll 函原创 2021-03-04 19:55:03 · 989 阅读 · 0 评论 -
Linux Namespace : 简介
namespace 的概念namespace 是 Linux 内核用来隔离内核资源的方式。通过 namespace 可以让一些进程只能看到与自己相关的一部分资源,而另外一些进程也只能看到与它们自己相关的资源,这两拨进程根本就感觉不到对方的存在。具体的实现方式是把一个或多个进程的相关资源指定在同一个 namespace 中。Linux namespaces 是对全局系统资源的一种封装隔离,使得处于不同 namespace 的进程拥有独立的全局系统资源,改变一个 namespace 中的系统资源只会影响原创 2021-02-22 23:39:16 · 866 阅读 · 1 评论 -
基于Linux的tty架构及UART驱动详解
一、模块硬件学习1.1. Uart介绍通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称为UART,是一种异步收发传输器,是电脑硬件的一部分。它将要传输的资料在串行通信与并行通信之间加以转换。作为把并行输入信号转成串行输出信号的芯片,UART 通常被集成于其他通讯接口的连上。UART 是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设备中,UART 用于主机与辅助设备通信,如汽车音与外接AP 之间原创 2021-02-04 22:16:01 · 3221 阅读 · 2 评论 -
手把手教Linux驱动10-platform总线详解
platform总线是学习linux驱动必须要掌握的一个知识点原创 2021-02-03 22:47:53 · 2670 阅读 · 12 评论 -
Linux 虚拟文件系统四大对象:超级块、inode、dentry、file之间关系
一:文件系统1. 什么是文件系统?操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。通常文件系统是用于存储和组织文件的一种机制,便于对文件进行方便的查找与访问。文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。随着文件种类的增多,扩增了更多的文件系统,为了对各种文件系统进行统一的管理与组织。2. Linux文件系统Linux将文件系原创 2021-01-28 10:00:34 · 1990 阅读 · 0 评论 -
ARM linux 的原子操作分析
ARM linux 的原子操作分析linux ARM的原子操作源文件位于linux/arch/arm/include/asm/atomic.hlinux源码宏展开最开始由如下宏定义,linux的各种宏太复杂了,分析起来有点费劲#define ATOMIC_OP(op, c_op, asm_op) \ <-------------------|static inline void atomic_##op(int i, atomic_t *v) \ .原创 2020-11-14 10:56:45 · 629 阅读 · 1 评论 -
100ASK_IMX6ULL arm板子如何移植刷卡器
最近为了在arm板子上移植刷卡器,比较简单,但也遇到了坑,现在和大家分享下。购买刷卡器某宝很多,应该选哪一种呢?一口君一共买了4种刷卡器,有2种可以用,还有2种不能用。为了避免做广告嫌疑,就不贴购买链接了,刷卡器长下面这个样子,但是切记:一定要买带serial芯片的,比如ch341或者rs232要不即使和这个刷卡器一样,也可能无法使用,切记。价格大概45左右,如果怕买错,就给一口君留言。移植USB转串口驱动进入内核找到对应的USB转串口驱动,位置如下:选中该驱动保存退出,重新编译内原创 2020-10-10 22:36:54 · 414 阅读 · 0 评论 -
手把手教Linux驱动9-等待队列waitq
在上一篇《手把手教Linux驱动8-Linux IO模型》我们已经了解了阻塞、非阻塞、同步和异步等相关概念,本文主要讲解如何通过等待队列实现对进程的阻塞。应用场景:当进程要获取某些资源(例如从网卡读取数据)的时候,但资源并没有准备好(例如网卡还没接收到数据),这时候内核必须切换到其他进程运行,直到资源准备好再唤醒进程。 waitqueue (等待队列)就是内核用于管理等待资源的进程,当某个进程获取的资源没有准备好的时候,可以通过调用 add_wa...原创 2020-09-28 11:38:57 · 914 阅读 · 0 评论 -
手把手教Linux驱动8-Linux IO模型
更多Linux驱动知识,请关注 一口Linux对于一个应用程序即一个操作系统进程来说,它既有内核空间(与其他进程共享),也有用户空间(进程私有),它们都是处于虚拟地址空间中。用户进程是无法访问内核空间的,它只能访问用户空间,通过用户空间去内核空间复制数据,然后进行处理。什么是IO?IO模型中,先讨论下什么是IO?在计算机系统中I/O就是输入(Input)和输出(Output)的意思,针对不同的操作对象,可以划分为磁盘I/O模型,网络I/O模型,内存映射I/O, Di...原创 2020-09-28 11:37:50 · 927 阅读 · 0 评论