首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux】《how linux work》第设备

本章是对Linux系统中内核提供的设备基础架构的基本介绍。...不幸的是,这种设备分配方案在重新配置硬件时传统上会导致问题。 例如,假设您有一个带有个磁盘的系统:/dev/sda、/dev/sdb和/dev/sdc。...设备文件管理就是一个例子:你可以在用户空间创建设备文件,为什么要在内核中这样做呢?...让我们从 SCSI 子系统及其层驱动程序开始剖析: 让我们开始解析它,首先看一下SCSI子系统及其层驱动程序: o The top layer handles operations for a class...因此,Linux内核包括一个与SCSI子系统非常相似的层USB子系统,顶部是设备类驱动程序,中间是总线管理核心,底部是主机控制器驱动程序。

11810
您找到你想要的搜索结果了吗?
是的
没有找到

Linux设备驱动程序()——字符驱动

设备号由主设备号和次设备号构成。内核提供个宏来实现这个东西的转换。...//获得dev_t dev中的次设备号 这个宏在中定义。 2、分配和释放设备编号 内核是通过设备编号找到设备的,理所当然地要建立一个字符设备必须要获得字符设备编号。...成功调用申请设备编号的函数后,在系统的 /proc/devices 下就会包含设备以及设备设备号的信息。函数在中声明。字符设备不再使用时应该释放它们占用的编号。...释放设备编号: void unregister_chrdev_region(dev_t first, unsigned int count); 这个函数在中声明。...2、自动创建设备节点 自动创建设备节点,就是在代码里调用device_create()或device_register()或device_add()方法来创建设备节点,这个方法位于<linux/device.h

40041

Linux | 块设备了解之层结构

设备是文件系统的底层支撑,完成数据的存储和访问。块设备也能脱离文件系统以螺设备的形式工作。 块设备以“块”为最小访问单元,可随机访问(定位寻址),逻辑上具有“通用设备层,物理磁盘,分区概念“。...块设备的处理流程较为复杂,包括通用块层,IO调度层和块设备驱动程序的层组织架构。 通用块设备层负责将bio 到request请求的变换和组织。...物理磁盘gendisk 逻辑分区对象hd_struct 块设备对象block_device 物理磁盘请求队列request_queue ~/Downloads/research/linux-5.15.4...first_minor; /*与磁盘关联的第一个次设备号*/ int minors; /* 次设备好的最大数量,没有分区的设备,此值为1 maximum number of minors...简述 Linux I/O 原理及零拷贝 iofsstat

1K20

Linux ALSA声卡驱动之:PCM设备的创建

每个声卡最多可以包含4个pcm的实例,每个pcm实例对应一个pcm设备文件。pcm实例数量的这种限制源于linux设备号所占用的位大小,如果以后使用64位的设备号,我们将可以创建更多的pcm实例。...、新建一个pcm: alsa-driver的中间层已经为我们提供了新建pcm的api: int snd_pcm_new(struct snd_card *card, const char *id, int...结构体保存了声卡下某个逻辑设备的上下文信息,他在逻辑设备建立阶段被填充,在逻辑设备被使用时就可以从该结构体中得到相应的信息。...把该snd_minor结构的地址放入全局数组snd_minors[minor]中 最后,调用device_create创建设备节点 4.2 设备文件的建立: 在4.1节的最后,设备文件已经建立,不过4.1...设备的f_ops,紧接着直接调用pcm设备的f_ops->open(),然后返回。

37220

课:linux内核对设备树的处理

转载请注明文章地址 http://wiki.100ask.org/Linux_devicetree 这一课是设备树中最重要的一课。...前面我们从内核文档了解到,对于设备树,它里面描述的信息可以分为这部分: Linux uses DT data for three major purposes: platform identification...事实上,内核对设备树的处理,也会分为与其对应的部分: 对于platform identification,将在第02节_对设备树中平台信息的处理(选择machine_desc)进行分析; 对于runtime...r0,r1,r2个寄存器的设置 bootloader启动内核时,会设置r0,r1,r2个寄存器, r0一般设置为0; r1一般设置为machine id (在使用设备树时该参数没有被使用); r2..., 比如 of_match_device 可以通过of_match_device找出哪一项最匹配, of文件分为类 处理DTB 处理device_node 处理 platform_device 设备相关信息

1.3K21

Linux】详解文件系统以及周边知识

一、磁盘的基本知识 磁盘中可以被划分成一个一个的环,每个环都是一个磁道。...假设磁盘每一个盘面的大小为200GB,一共有四个盘面,假设每一个扇区大小为512kb,800GB就可以被分成1677721600个扇区大小。...Linux磁盘文件特性分为文件内容加上文件属性,文件属性包括类型,大小,权限,时间,inode编号等等.........、重谈文件的增删查改 在Linux系统中,目录也是文件,其中目录的内容中就保存了目录中的文件的inode编号和文件名之间的映射关系。...五、挂载的理解         挂载(Mounting)是指由操作系统使一个存储设备(诸如硬盘、CD-ROM或网络共享)上的计算机文件和目录可供用户通过计算机的文件系统访问的一个过程。

9210

【RTOS训练营】程序框架、预习、课后作业和晚课提问

传感器呢?传感器检测到火灾的时候,发出报警信号,这也是输入。 甚至说我们还有远程控制,就像我们举的例子,你可以使用手机来控制开发板。 所以对于输入部分,我们还可以细分成各类子系统。...我们以LCD为例: 对于显示这么一个功能,他可以拆分成层。 在Linux系统中,在驱动开发,有一个原则:驱动只提供功能,不提供策略。 这句话是什么意思呢?...回到我们上面的这个图,为什么这个显示的功能,要拆分成层? 看看最底下,最底下是驱动程序,他应该提供硬件的功能:像素操作。...重要的是个函数指针,最后还有一个链表项。 为什么要加上一个链表?因为我想把多个输入设备统一管理。...怎么拆分成多个子系统,刚才我们已经介绍了方法: 先把它拆分成:输入、输出、控制逻辑(业务)个子系统。 再去细分这个子系统,得到更多、功能更加独立的子系统。

39830

Linux 内核 vs Windows 内核

计算机是由各种外部硬件设备组成的,比如内存、cpu、硬盘等,如果每个应用都要和这些硬件设备对接通信协议,这样太累了。...ELF 文件格式 ELF 把文件分成了一个个分段,每一个段都有自己的作用,具体每个段的作用这里我就不详细说明了,感兴趣的同学可以去看《程序员的自我修养——链接、装载和库》这本书。... ELF 文件怎么生成的呢?...不过,Linux 也实现了动态加载内核模块的功能,例如大部分设备驱动是以可加载模块的形式存在的,与内核其他模块解藕,让驱动开发和驱动加载更为方便、灵活。 ?...PE 文件结构 ---- 总结 对于内核的架构一般有这种类型: 宏内核,包含多个模块,整个内核像一个完整的程序; 微内核,有一个最小版本的内核,一些模块和服务则由用户态管理; 混合内核,是宏内核和微内核的结合体

16.3K30

高通平台8953 Linux DTS(Device Tree Source)设备树详解之(高通MSM8953 android7.1实例分析篇)

高通平台8953 Linux DTS(Device Tree Source)设备树详解之(高通MSM8953 android7.1实例分析篇) 本系列导航: 高通平台8953 Linux DTS...(Device Tree Source)设备树详解之一(背景基础知识篇) 高通平台8953 Linux DTS(Device Tree Source)设备树详解之二(DTS设备树匹配过程) 高通平台8953...Linux DTS(Device Tree Source)设备树详解之(高通MSM8953 android7.1实例分析篇) 在前两篇中我们了解了DTS的背景基础知识以及发挥作用的流程,这篇文章我们以...1,首先我们在该i2c设备的驱动中找到了匹配设备与驱动程序的compatible [objc] view plain copy static const struct of_device_id...相关知识可以参考: 高通平台8953 Linux DTS(Device Tree Source)设备树详解之二(DTS设备树匹配过程) ##############################

1.6K60

手工模拟实现 Docker 容器网络!

一、基础知识回顾 1.1 veth、bridge 与 namespace Linux 下的 veth 是一对儿虚拟网卡设备,和我们常见的 lo 很类似。...关于这个技术的详情,可以参考下面这篇文章: 轻松理解 Docker 网络虚拟化基础之 veth 设备! 聊聊 Linux 上软件实现的“交换机” - Bridge!...彻底弄懂 Linux 网络命名空间 但是这篇文章过后,我们还剩下一个问题没有解决,那就是虚拟出来的网络环境和外部网络的通信。...如果是转发过程,Linux 收到数据包发现不是本机的包可以通过查找自己的路由表找到合适的设备把它转发出去。...那就先是在 ip_rcv 中将包送到 ip_forward 函数中处理,最后在 ip_output 函数中将包转发出去。

69520

linux input子系统(1)《Rice linux 学习开发》

Linux input子系统,分为篇文章,第一篇:Linux input子系统的概念,第二篇:Linux input子系统的代码分析(input core),第篇:Linux input子系统的驱动程序编写...linux系统输入设备繁多,例如按键、键盘、触摸屏、鼠标。这些输入设备都属于字符设备。不过这些输入设备不同类型,不同原理,不同的输入输出信息。那么是如何统一这些输入设备的呢?...答案:linux中将所有的输入设备抽象出input子系统这套软件体系,提供了统一的接口函数,实现了大统一。 input子系统分为层: 1.输入子系统设备驱动层。...综上所述:在linux中,输入子系统作为一个内核模块存在,向上为用户层提供接口函数,向下为驱动程序提供统一的接口函数。...这样就能够将输入设备的事件通过输入子系统发送给应用层的应用程序,应用程序也可以通过输入子系统通知驱动程序完成某些任务。 下一篇:Linux input子系统的代码分析(input core)

1.9K10

使用 Android Studio 进行 Flutter 开发

“如果 Run 和 Debug 按钮不可用且未显示目标设备,则意味着 Flutter 未发现任何已连接的 iOS 、Android 设备或模拟器。你需要连接设备或启动模拟器才能继续。...” 找到选择目标下拉按钮,点击它会显示出可用设备列表。 选择你希望启动应用的设备。当连接设备或启动模拟器时, 列表中将会加入新选项。...如果 widget 在你预想不到的情况下发生了重载, 说明你可能需要重构代码,将大型的构建方法拆分成多个 widget。...可将 UI 拆分成多个具有较轻量 build() 方法的 widget。 未在屏幕上显示的 widget 发生了重载。...如果你已经在 Android Studio 中将整个项目作为 Flutter 应用打开, 则有两种方法可以打开 Android 文件,在 IDE 中进行编辑。

6K30

Linux-485收发切换延迟的解决方法

通常由CPU引出根管脚:两个UART管脚(记作PIN_RX、PIN_TX)和一个485收发方向控制管脚(记作PIN_DIR)。...如果对接的485设备,接收和应答的延迟小于20ms,方向切换不及时将导致数据接收丢失。这就是问题所在。 二、解决方法 1....知识储备 解决此问题,需要有如下知识储备: 了解485通信原理 了解Linux终端设备驱动架构,搞清楚板上串口对应的实际驱动源文件 掌握Linux设备驱动中的中断处理机制:顶半部、底半部(tasklet...实现方法 本应用中对应的串口设备驱动文件为linux/drivers/tty/serial/8250/8250_core.c 3.1 由应用程序控制是否打开串口设备的485功能 在串口驱动里切换485方向对性能有一些影响.../ add by xx@xx end ...... } 3.3 在发送过程的结束时间拉低PIN_DIR 按照推理,以为在串口传输结束位的时候,会调用serial8250_stop_tx(),在此函数中将

7.3K30

天啦噜!知道硬盘很慢,但没想到比 CPU Cache 慢 10000000 倍

问题来了,机械硬盘、固态硬盘、内存这个存储器,到底和 CPU L1 Cache 相比速度差多少倍呢? 在回答这个问题之前,我们先来看看「存储器的层次结构」,好让我们对存储器设备有一个整体的认识。...CPU Cache 通常会分为 L1、L2、L3 层,其中 L1 Cache 通常分成「数据缓存」和「指令缓存」,L1 是距离 CPU 最近的,因此它比 L2、L3 的读写速度都快、存储空间都小。...CPU 的高速缓存,通常可以分为 L1、L2、L3 这样的层高速缓存,也称为一级缓存、二次缓存、次缓存。...每个 CPU 核心都有一块属于自己的 L1 高速缓存,指令和数据在 L1 是分开存放的,所以 L1 高速缓存通常分成指令缓存和数据缓存。...再来回答,开头的问题:机械硬盘、固态硬盘、内存这个存储器,到底和 CPU L1 Cache 相比速度差多少倍呢?

77451

04Linux的磁盘分区

硬件设备Linux中的命名 Linux中每一个设备都被当成文件,所有的设备文件都在/dev这个目录下。...分区表有64bytes,被分成四个区域,每个区域记录当前磁盘的所有分区的起始和结束柱面号。...例如:一块IDE硬盘被分成四个区域: P1:/dev/hda1 P2:/dev/hda2 P3:/dev/hda3 P4:/dev/hda4 每个磁盘的分区表只能被分成四个区域,这四个区域被称为主分区或扩展分区...PS:Linux中,IDE硬盘最多有59个逻辑分区,5号-63号;SATA硬盘最多有11个逻辑分区,5号-15号。...PS:在Windows中若D、E盘都是扩展分区中的逻辑分区,那么他们可以整合成一个分区;若两个盘一个是逻辑分区,一个是主分区,他们是不能合并的。

2.9K70

linux字符设备驱动基本框架

分成这两种状态的原因是即使应用程序出现异常,也不会使操作系统崩溃。 值得注意的是,用户态和内核态是可以互相转换的。...2.驱动程序的框架 在理解设备框架之前,首先要知道驱动程序主要做了以下几件事 1.将此内核驱动模块加载到内核中 2.从内核中将驱动模块卸载 3.声明遵循的开源协议 2.1 Linux下的设备 Linux...下分成大类设备: 字符设备:字符设备是能够像字节流一样被访问的设备。...是这组设备号的大小(也是次设备号的个数) 3:第个参数:编号相关联的设备名称....mknod /dev/xxx c 主设备号 次设备号 2:第二个参数:次设备号的基准,从第几个次设备号开始分配。 3:第个参数:次设备号的个数。

5.8K53

一文知晓Linux文件权限

Linux环境安装 Linux下有两种用户: (2)root超级用户:几乎可以在linux下进行任何想要做的事情,为所欲为,不受限制. (2)普通用户:在linux下进行受很多权限约束的事情....二、权限管理 (1) 文件访问者分类: 在C++中,我们对不同的用户分成类人: 所有者:文件或文件目录的所有者 u(全称:user) 组员:文件和文件目录的所有者所在的组的用户:g(全称:Group...l:软链接: 与Windows的快捷方式类似 b:块设备文件: 硬盘、光驱等 p:管道文件: 用来通信的文件 c:字符设备文件: 键盘、显示器等文件....文件掩码通常包括个数字,分别代表所有者、组和其他人的权限。每个数字都由个位组成,分别代表读、写和执行权限。例如,一个掩码为022的文件表示所有者具有读写权限,组和其他人只具有读权限。...对于一个共享目录,有的文件我们不希望给其他人(other)看和修改.other可以删除这个文件吗?

20520

x86虚拟内存和qemu内存虚拟化

alias类型MemoryRegion适用于这种场景,大概意思就是qemu给guest提供的物理内存超过了guest的address space,这时就得用alias类型的MemoryRegion了,这儿的...memory banks是什么意思,物理内存条有rank/bank,这儿的bank应当理解成岸,类似于一个岸把湖分成两半,和真正的内存条中的rank/bank没关系。...所有进程内核空间都一样,只是用户空间不一样,这样所有进程就可以共享内核,所以需要在4G空间有一条线分成两部分。...用户态malloc一块内核,用虚拟地址访问发生pagefault,内核找一个page然后对应起来,内核分配一个page的内存,内核先得到的是这个page的物理地址,然后把物理地址转换成内核虚拟地址,总之内核管理物理内存...,配置内存个人理解是linux pci系统统一映射到内存中的,BAR是加载设备驱动时映射的,pci bar mmio理解为从pci configure space中得到bar的phy_addr,然后ioremap

1.3K10
领券