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

【驱动】串口驱动分析(二)-tty core

) { int error; int i; dev_t dev; struct device *d; /*确认是否要内核动态分配主设备*/ if (!...driver->major) { /*函数调用 alloc_chrdev_region 函数来动态分配主设备,并将分配主设备设备保存在 driver->major driver...表示 tty 设备设备,driver->major 表示 tty 设备主设备,driver->minor_start 表示 tty 设备设备起始值,index 表示 tty 设备索引...对于每个 tty 驱动程序,函数将其设备起始值结束值计算出来,如果给定设备不在这个范围内,则继续遍历下一个 tty 驱动程序。...线路规则是 tty 设备一种机制,用于处理转换用户进程到内核设备数据流。在写入 tty 设备之前,需要获取该 tty 设备线路规则,并调用其 write 方法进行处理。

48850

Linux 常见主设备设备清单

Linux 常见主设备设备清单# 在Linux系统中,设备通常通过主设备设备来标识。主设备用于区分设备大类,例如硬盘、字符设备等;次设备用于在同一大类设备中区分不同设备。...以下是一些常见设备类型及其固定主设备设备类型 主设备 设备描述 RAM disk 1 虚拟磁盘设备,其存储空间位于RAM中 TTY 4 控制台设备 tty1、tty2 等 ttyS (串行端口设备...14 音频设备 /dev/dsp(数字音频)、/dev/mixer(混音器) 请注意,不同Linux发行版不同设备驱动可能会有所不同,上述设备只是在大部分系统中常见设定。...NVMe 设备主设备是在设备驱动程序注册到内核时由内核动态分配,因此,不同系统,内核版本或配置可能会有所不同。在许多现代 Linux 系统中,NVMe 设备主设备可能是 259。...函数返回值就是分配给设备主设备。 然而,查看驱动程序源代码并不能直接告诉你在特定系统上设备是什么,因为这取决于内核在运行时动态分配。

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

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

最后通过主设备设备构成设备找到正确设备。有了操作对象(设备操作方法(驱动程序)那就可以完成了我们要求。 一个驱动程序可以操作多个设备,所以不同设备可以具有相同主设备。...因为我们在添加设备内核时候我们是关联设备,不同设备可以具有相同主设备,那不同设备相同主设备结合就可以构成不同设备了,就标识了不同设备了。...设备主设备设备构成。内核提供三个宏来实现这三个东西转换。...注意, 如果 count 太大, 那么所请求范围可能下一个主设备重叠, 但是只要请求编号范围可用, 一切都仍然会正确工作.。...如果返回值是正值,但是小于 count,只有部分数据被传送,程序很可能再次试图写入剩下数据。 如果值为 0,意味什么没有写入

51741

linux设备驱动第三篇:如何写一个简单字符设备驱动

那么主设备设备分别代表什么意义呢?一般情况下,可以这样理解,主设备标识设备对应驱动程序,也就是说1个主设备对应一个驱动程序。当然,现在也有多个驱动程序共享主设备情况。...1.1、设备编号表达 在内核中,dev_t用来保存设备编号,包括主设备设备。在2.6内核版本种,dev_t是一个32位数,其中12位用来表示主设备,其余20位用来标识次设备。...通过dev_t获取主设备设备使用下面的宏: MAJOR(dev_t dev); MINOR(dev_t dev); 相反,通过主设备设备转换为dev_t类型使用: MKDEV(int major...此函数是在已知主设备情况下使用,在未知主设备情况下,我们使用下面的函数: int alloc_chrdev_region(dev_t *dev, unsigned int firstminor,...分配到设备编号之后,我们只是拿到了营业执照,虽说现在已经准备差不多了,但是我们只是内核中申请到了设备,应用程序还是不能对此设备作任何事情,我们需要一个简单函数来把设备编号设备能实现功能连接起来

2K150

linux字符设备驱动基本框架

1.3 用户空间内核空间 Linux操作系统分为内核用户态,内核态完成与硬件交互,比如读写内存,硬件操作等。用户态运行上层程序,比如Qt等。...主设备设备统称为设备主设备用来表示一个特定驱动程序。次设备用来表示使用该驱动程序设备。...可以用MAJOR宏MINOR宏,将主设备设备,提取打印出来,看是自动分配是多少,方便我们在mknod创建设备文件时用到主设备设备。...mknod /dev/xxx c 主设备设备 2:第二个参数:次设备基准,第几个次设备开始分配。 3:第三个参数:次设备个数。...4:第四个参数:驱动名字 由于每个设备只有一个主设备,所以如果用静态分配设备时,有可能会导致分配不成功,所以采用动态分配方式。

5.8K53

Linux内核设备驱动之字符设备驱动笔记整理

(2)主设备设备 a.设备编号介绍 对字符设备访问是通过文件系统内设备文件进行。...设备通过设备来标识。设备分两部分,主设备设备。 通常,主设备标示设备对应驱动程序,linux允许多个驱动共用一个主设备; 而次设备用于确定设备文件所指设备。...方法调用,只有当file计数器归零时,才会调用release,从而释放dev结构) (7)readwrite readwrite工作是用户空间拷贝数据到内核,或是将内核数据拷贝到用户空间。...copy_to_user等函数如果返回值不等于0,则read或write应向用户空间返回-EFAULT 主设备用来表示设备驱动, 次设备表示使用该驱动设备内核dev_t 表示设备设备主设备设备组成...//动态申请设备, 由内核分配没有使用主设备, 分配好设备存在dev, baseminor指次设备多少开始, count指设备数, name设备名 int alloc_chrdev_region

4.7K20

【i.MX6ULL】驱动开发1——字符设备开发模板

字符设备最常见,最简单点灯到I2C、SPI、音频等都属于字符设备驱动 块设备驱动:以存储块为基础设备驱动,EMMC、NAND、SD卡等。对用户而言,字符设备与块设备访问方式没有差别。...当应用层通过open函数打开/dev/led 这个驱动时,因用户空间不能直接操作内核,因此会使用“系统调用”方法来用户空间“陷入”到内核空间,实现对底层驱动操作。...2.4 Linux设备 2.4.1 设备组成 Linux中每个设备都有一个设备设备主设备设备两部分组成。...,一共20位 MINORMASK:表示次设备掩码 MAJOR:用于dev_t中获取主设备,将dev_t右移20位即可 MINOR:用于dev_t中获取次设备,取dev_t低20位值即可 MKDEV...:用于将给定主设备设备值组合成dev_t类型设备 2.4.2 主设备分配 主设备分配包括静态分配动态分配 静态分配需要手动指定设备,并且要注意不能与已有的重复,一些常用设备已经被

80210

Linux 常见固定主次设备设备清单

Linux 常见固定主次设备设备清单# 在 Unix 或 Linux 系统中,一些设备主次设备是固定。...下面是一些常见设备及其固定主次设备设备前缀 设备路径 设备描述 主设备设备 c /dev/null 空设备,接收且丢弃所有输入,读取时立即返回EOF 1 3 c /dev/zero 零设备...当前终端设备 5 0 c /dev/tty0 当前虚拟控制台 4 0 c /dev/console 系统主控制台 5 1 c /dev/ptmx 伪终端主设备 5 2 c /dev/mem 物理内存访问设备...1 1 c /dev/kmem 内核虚拟内存访问设备 1 2 c /dev/full 写入总是返回磁盘已满错误,读取返回null字节 1 7 请注意,上述设备在大多数UnixLinux系统上是固定...,但这是由内核源代码中设备注册逻辑决定,因此在一些定制或者旧版本系统中可能会有所不同。

20040

【新星计划Linux】——常用命令(1)

内核、initrd或者initramfs,以及grub(bootloader) /dev: 所有设备设备文件,设备文件也称为特殊文件(仅有元数据,没有数据,是设备入口) 设备文件: 块设备...:随机访问,数据块 字符设备:线性访问,按字符为单位 设备主设备(major)设备(minor) 主设备相同设备是同类设备(使用同一个驱动程序) 通过 cat /proc/devices...命令查看当前已经加载设备驱动程序主设备 例如: ls -l /dev/sr0 brw-rw---- 1 root cdrom 11, 0 4 月 1 08:59 /dev/sr0...11 为主设备, 0 为次设备 ---- /etc : 配置文件 /home : 普通用户家目录,每一个用户家目录通常默认 为 /home/USERNAME /root...:管理员家目录; /lib :基本共享库内核模块 库文件 本质上来说库是一种可执行代码二进制形式,可以被操作系统 载入内存执行。

19550

Linux 中 proc 文件系统内容详述

; devices 系统已经加载所有块设备字符设备信息,包含主设备设备组(与主设备对应设备类型)名; diskstats 每块磁盘设备磁盘I/O统计信息列表;(内核2.5.69以后版本支持此功能...domains fb 帧缓冲设备列表文件,包含帧缓冲设备设备相关驱动信息; filesystems 当前被内核支持文件系统类型列表文件,被标示为nodev文件系统表示不需要块设备支持;通常...-> self/net pagetypeinfo partitions 块设备每个分区主设备(major)设备(minor)等信息,同时包括每个分区所包含块(block)数目; sched_debug...,而其优先级数字越低,被使用到可能性越大;下面是作者系统中只有一个交换分区时输出信息; sys 与 /proc下其它文件“只读”属性不同是,管理员可对/proc/sys子目录中许多文件内容进行修改以更改内核运行特性.../proc/sys/debug 子目录此目录通常是一空目录;/proc/sys/dev 子目录为系统上特殊设备提供参数信息文件目录,其不同设备信息文件分别存储于不同子目录中,大多数系统上都会具有的

3.4K10

【Linux】《how linux work》第三章 设备

示例3-1前两行中日期之前数字是主设备设备,它们帮助内核识别设备。 类似的设备通常具有相同主设备,比如sda3sdb1(它们都是硬盘分区)。.../dev/sr* 设备只能用于光盘中读取数据,是只读。 对于光学设备写入重写功能,您将使用“通用”SCSI设备/dev/sg0。...Linux块设备/dev/hda、/dev/hdb、/dev/hdc/dev/hdd在较旧版本Linux内核较旧硬件上很常见。 这些是基于接口01上主设备设备固定分配。...我们刚刚讨论了内核设备,但通常还有用户空间服务器(pulse-audio)来管理来自不同来源音频,并充当音频设备其他用户空间进程之间中间人。...为什么要使用SCSI通用设备呢?答案与内核代码复杂性有关。 随着任务变得更加复杂,最好将它们内核中排除。 以CD/DVD写入读取为例。

16110

【收藏转发】串口驱动到Linux驱动,嵌入式入门必备!

即一个主设备(Master),其余为设备(Slave),设备之间不能通信,所以RS-422支持点对多双向通信。接收器输入阻抗为4k,故发端最大负载能力是10×4k+100Ω(终接电阻)。...系统调用接口 SCI 层提供了某些机制执行用户空间内核函数调用。正如前面讨论一样,这个接口依赖于体系结构,甚至在相同处理器家族内也是如此。...它像chrdevs向量表一样,使用设备主设备作为索引。它条目也是device_struct数据结构。与字符设备不同是,块设备分为SCSI类IDE类。...此向量表索引是设备主设备。...用户write系统调用传下来数据就会写入这个UTXH0寄存器。发送完事之后处理器会产生一个内部中断。

3.6K20

Linux 目录结构学习与简析 Part1

=========== /sbin System Binaries 存放二进制可执行文件,与/bin不同,这里命令只有系统管理员才可用reboot /sbin/shadowconfig...由于Linux虚拟内存由物理内存(RAM)交换分区组成。tmpfs最大存储空间是物理空间交换分区大小之和。tmpfs既可以使用物理内存也可以使用交换分区。...用户应用程序可以通过proc得到系统信息,并可以改变内核某些参数。由于系统信息是动态改变,所以用户应用程序读取proc文件时,proc文件系统是动态系统内核读取所需信息并提交。...事实上,每当你存取/proc文件系统时,内核会拦截你动作,并动态为您产生文件目录内容。...已经加载文件系统列表 /proc/uptime 系统上次启动以来运行时间 /proc/partitions 存放分区表信息, 块设备每个分区主设备(major)设备

1.1K30

Android 硬件抽象层调用流程分析

但如果这个驱动程序被编译成一个模块,就只有在需要内存并将其加载到内核时才会真正占用内存空间。 对于 LKM 来说,可以根据硬件连接设备来加载对应模块。...这个节点是通过 mknod 命令建立,其中指定了主设备设备主设备表明了某一类设备,一般对应着确定驱动程序,用于内核把文件和它驱动链接在一起。...次设备一般是区分不同属性,例如不同使用方法,不同位置,不同操作。 这个设备 /proc/devices 文件中获得,所以一般是先有驱动程序在内核中,才有设备节点在目录中。...这个设备(特指主设备主要作用,就是声明设备所使用驱动程序。驱动程序设备是一一对应,当你打开一个设备文件时,操作系统就已经知道这个设备所对应驱动程序。...首先,内核加载我们驱动程序,会生成对应模块主设备。 其次,插入设备文件时,会根据文件类型分配一个对应主设备,标识用哪种驱动打开。

1.3K20

字符设备驱动程序接口

内核应用之间数据传递 copy_from_user 用户空间拷贝数据到内核空间 /* asm/uaccess.h */ static inline unsigned long __must_check...返回值:成功返回主设备, 失败返回一个负值 内核中有一个数组要来存储注册字符设备驱动,register_chrdev注册字符设备驱动信息主要就存在这个数组相应位置,该数组下标就是主设备,...可以通过查看/proc/devices文件来确定已经注册了 字符设备驱动设备驱动以及相应编号 cat /proc/devices unregister_chrdev 内核卸载字符设备驱动 /*...,但是设备只有major(主设备),而新接口中提供了minor(次设备),内核中通过dev_t类型描述设备,其实质是unsigned int类型,其中高12位为设备,低20位为次设备。.../* linux/kdev_t.h */ // 传入两个参数生成设备(dev_t),分别为主设备设备 MKDEV(ma, mi) // 传入设备(dev_t),返回主设备 MAJOR(

1.4K30

linux_file_system

代码参考是Linux早期代码,没有现代内核高级特性,VFS这部分只有介绍。...如果打开是字符设备文件,那么对于 // 主设备是4字符文件(例如/dev/tty0),如果当前进程是组首领并且当前进程 // tty字段小于0(没有终端),则设置当前进程tty...号为该i节点设备,并设置 // 当前进程tty对应tty表项父进程组等于当前进程进程组。...对于主设备是5字符文件(/dev/tty),若当前进 // 程没有tty,则说明出错,于是放回i节点申请到文件结构,返回出错码(无许可)。...更高版本Linux内核不断抽象了文件系统,不仅支持磁盘文件,块设备,字符设备,甚至socket也可以看做是一个文件处理,也就是那句经典“Linux一切皆文件” 高版本内核文件系统引入 cache

1.8K10

Linux通过设备找到设备方法

应用程序可以打开、关闭读写这些设备文件,完成对设备操作,就像操作普通数据文件一样。为了管理这些设备,系统为设备编了,每个设备又分为主设备设备。...主设备用来区分不同种类设备,而次设备用来区分同一类型多个设备。对于常用设备,Linux有约定俗成编号。 一个字符设备或者块设备都有一个主设备设备主设备设备统称为设备。...Mapper,Device Mapper 是 Linux 2.6 内核中提供一种逻辑设备到物理设备映射框架机制,在该机制下,用户可以很方便根据自己需要制定实现存储资源管理策略,当前比较流行...关于次设备主要用途,这篇博客主设备设备介绍了部分内容。...1、区分设备驱动程序控制实际设备; 2、区分不同用途设备 (misc 系列设备) 3、区分块设备分区 (partition) 通常,为了使应用程序区分所控制设备类型,内核使用主设备

6.3K11

单片机到ARM Linux驱动——Linux驱动入门篇

如果要获取led 灯状态,就用 read 函数驱动中读取相应状态。 应用程序运行在用户空间,而 Linux 驱动属于内核一部分,因此驱动运行于内核空间。...,比如 LCD 驱动显存,将帧缓冲(LCD 显存)映射到用户空间中以后应用程序就可以直接操作显存了,这样就不用在用户空间内核空间之间来回复制。...设备组成 设备主设备设备两部分组成,主设备表示某一个具体驱动,次设备表示使用这个驱动各个设备。...这 32 位数据构成了主设备设备两部分,其中高 12 位为主设备,第 20 位为次设备。...第 5 行,宏 MKDEV 用于将给定主设备设备值组合成 dev_t 类型设备

4.2K11

linux系统编程之基础必备(三):文件描述符file descriptor与inode相关知识

read 成员所指向内核函数(内核代码中实现函数可能为sys_read())以完成用户请求。...inode 结构体中保存着磁盘分区inode读上来信息, 例如所有者、文件大小、文件类型权限位等。...事实上每个终端设备都对应一个不同设备文件,/dev/tty 提供了一个通用接口,一个进程要访问它控制终端既可以通过/dev/tty 也可以通过该终端设备所对应设备文件来访问。...中间5, 0是它设备,主设备5,次设备0,主设备 标识内核一个设备驱动程序,次设备标识该设备驱动程序管理一个设备内核通过设备 找到相应驱动程序,完成对该设备操作。...我们知道常规文件这一列应该显示文件尺寸,而设 备文件这一列显示设备,这表明设备文件是没有文件尺寸这个属性,因为设备文件在磁盘上 不保存数据,对设备文件做读写操作并不是读写磁盘上数据,而是在读写设备

2.1K60

荔枝派Zero(全志V3S)驱动开发之hello驱动程序

设备驱动 块设备网络设备驱动要比字符设备驱动复杂,就是因为其复杂所以半导体厂商一般都给我们编写好了,大多数情况下都是直接可以使用。...如果要获取 led 灯状态,就用 read 函数驱动中读取相应状态。 应用程序运行在用户空间,而 Linux 驱动属于内核一部分,因此驱动运行于内核空间。...,这样就不用在用户空间内核空间之间来回复制。...驱动程序 open/read/write 2、编写驱动程序步骤 确定主设备,也可以让内核分配。 定义自己 file_operations 结构体。...,c 表示这是个字符设备,200 是设备主设备,0 是设备设备

37630
领券