TTY之struct console
来源:互联网 发布:js自定义弹出框 编辑:程序博客网 时间:2024/06/05 06:11
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;}
0 0
- TTY之struct console
- TTY之struct tty_buffer
- TTY之struct tty_ldisc
- TTY之struct consw
- console tty
- /dev/null /dev/zero /dev/console /dev/tty 之问题
- LINUX设备驱动之tty及console驱动(一)
- LINUX设备驱动之tty及console驱动(二)
- LINUX设备驱动之tty及console驱动(二)
- ·LINUX设备驱动之tty及console驱动(一)
- tty和console
- tty和CONSOLE
- console tty 串口
- console tty 串口
- /dev/console /dev/tty[]
- linux console tty理解
- 终端 /dev/console /dev/tty tty
- 终端 /dev/console /dev/tty tty
- C语言和Lua交互(一)
- TTY之struct consw
- cocos-Lua中的class与require机制(小积累)
- 公牛和母牛竞猜游戏《c++程序设计原理与实践》第5章习题12,13
- etcd 安装部署及常见使用场景
- TTY之struct console
- 【C/C++开发】值得学习的C语言开源项目
- 多线程简介
- JavaScript 发送短信案例
- Html5本地存储
- [Codeforces343D]Water Tree(树链剖分)
- centOS连不上网
- TTY之register_console
- 一个来自于知乎对数据结构的回复