TTY之struct console

2024-02-17 13:48
文章标签 console struct tty

本文主要是介绍TTY之struct console,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

console是个控制端口,这当然也是一个串口。这里我们利用struct console描述串口驱动,
struct console实例来把kernel log导出。当然这里侧重描述其数据处理。
这类设备可以进行读写。读一般是指从硬件读取数据,然后把数据分发到相应的进程中去。而写则是把内核一些log
通过硬件传递给客户。
串口设备驱动描述:
struct console {char name[16];void (*write)(struct console *, const char *, unsigned);int (*read)(struct console *, char *, unsigned);struct tty_driver *(*device)(struct console *, int *);void (*unblank)(void);int (*setup)(struct console *, char *);int (*match)(struct console *, char *name, int idx, char *options);short flags;short index;int cflag;void *data;struct  console *next;
};
 
当然对象console是通过函数register_console()注册,而unregister_console()则进行注销操作。
所有的console通过next链接起来。宏for_each_console()可以对所有注册的console迭代。
 
/** for_each_console() allows you to iterate on each console*/
#define for_each_console(con) \for (con = console_drivers; con != NULL; con = con->next)
所有的console以console_drivers为头,并console_sem保护。
static DEFINE_SEMAPHORE(console_sem);
struct console *console_drivers;
EXPORT_SYMBOL_GPL(console_drivers);
 
如果想独占使用console,则可以调用函数console_lock()锁住console,使用函数console_unlock()解锁。
或者尝试性使用console_trylock()获取锁。成功获取锁的标识是console_locked被设置为1.当然在系统suspend时候
是不允许持有这个console_locked的。而console_suspended是console是否Suspen和resume的标志,如果
console_suspended为真,说明系统处于suspend当中,这时获取console_locked时失败,不会设置
console_locked。
注意,获取锁也会设置console_sem信号量。
 

void console_lock(void) {might_sleep();

 down_console_sem();if (console_suspended)return;console_locked = 1;console_may_schedule = 1; } EXPORT_SYMBOL(console_lock);

 
int console_trylock(void)
{if (down_trylock_console_sem())return 0;if (console_suspended) {up_console_sem(); return 0;}
 console_locked = 1;console_may_schedule = !oops_in_progress &&preemptible() &&!rcu_preempt_depth();return 1;
}
EXPORT_SYMBOL(console_trylock);
 
int is_console_locked(void)
{return console_locked;
}
 
 
 

这篇关于TTY之struct console的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/717952

相关文章

C和指针:结构体(struct)和联合(union)

结构体和联合 结构体 结构体包含一些数据成员,每个成员可能具有不同的类型。 数组的元素长度相同,可以通过下标访问(转换为指针)。但是结构体的成员可能长度不同,所以不能用下标来访问它们。成员有自己的名字,可以通过名字访问成员。 结构声明 在声明结构时,必须列出它包含的所有成员。 struct tag {member-list} variable-list ; 定义一个结构体变量x(包含

centos7 安装rocketmq4.7.0以及RocketMQ-Console-Ng控制台

一、前置工作 1.1安装jdk8 https://blog.csdn.net/pang_ping/article/details/80570011 1.2安装maven https://www.cnblogs.com/116970u/p/11211963.html 1.3安装git https://blog.csdn.net/xwj1992930/article/details/964

Linux block_device gendisk和hd_struct到底是个啥关系

本文的源码版本是Linux 5.15版本,有图有真相: 1.先从块设备驱动说起 安卓平台有一个非常典型和重要的块设备驱动:zram,我们来看一下zram这个块设备驱动加载初始化和swapon的逻辑,完整梳理完这个逻辑将对Linux块设备驱动模型有深入的理解。 zram驱动加载的时候会调用zram_add函数,源码如下: 1887/*1888 * Allocate and initia

浅析c/c++中 struct的区别

(1)C的struct与C++的class的区别。 (2)C++中的struct和class的区别。 在第一种情况下,struct与class有着非常明显的区别。C是一种过程化的语言,struct只是作为一种复杂数据类型定义,struct中只能定义成员变量,不能定义成员函数(在纯粹的C语言中,struct不能定义成员函数,只能定义变量)。例如下面的C代码片断: 复制代码代码如下:

c++ error: redefinition of ‘struct ac::bd’ struct ac::bd:fg

#include <iostream> #include <stdio.h> class ac {     public:         class bd; }; class ac::bd {     public:         struct fg; }; struct ac::bd:fg {     int a = 1; }; int main() {     return 0;

Go-struct嵌套初始化与赋值

struct嵌套的几种用法。 示例一 package mainimport "fmt"import "encoding/json"type Point struct {X, Y int}type Circle struct {Center PointRadius int}type Wheel struct {Circle CircleSpokes int}func foo() {var

如何在 Adobe Admin Console 中创建和管理 Marketo Engage 产品配置文件

好的,下面是更加详细的步骤和每一步可能遇到的具体问题及解决方案,帮助你在 Adobe Admin Console 中创建和管理 Marketo Engage 产品配置文件。 1. 进入 Adobe Admin Console 步骤: 通过浏览器访问 Adobe Admin Console。使用拥有管理员权限的 Adobe ID 登录。在页面顶部导航栏中,选择 "Marketo Engage"

golang 结构体struct、数组、结构体数组 定义与赋值 、json string转struct

文章目录 1.结构体struct1.1 声明结构体1.2 初始化结构体 以及 传参 2. 结构体数组、append3. 接口返回 含数组的结构体 常用写法json string转struct 1.结构体struct 看这个文章,看一个struct 1.1 声明结构体 // studenttype Student struct {Name stringAge uint64

Unity3D DOTS系列之Struct Change核心机制详解

前言 在Unity3D的DOTS(Data-Oriented Technology Stack)体系中,Struct Change是一个核心的内存管理机制,它涉及对Entity和Component数据的重新排列和内存分配。DOTS通过ECS(Entity Component System)模型,将游戏中的对象(Entity)、属性(Component)和行为(System)分离,以数据驱动的方式

c++ struct结构体的用法

在 C++ 中,struct(结构体)是一种用户自定义的数据类型,可以用来组合不同类型的数据。结构体的使用非常广泛,尤其在需要将多个相关的数据组合在一起时。 定义结构体 使用 struct 关键字定义一个结构体的基本语法如下: struct StructName {// 数据成员DataType member1;DataType member2;// ...}; 示例 下面是一个简单