⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 memcons.c

📁 microwindows移植到S3C44B0的源码
💻 C
字号:
/* * arch/v850/kernel/memcons.c -- Console I/O to a memory buffer * *  Copyright (C) 2001,2002  NEC Corporation *  Copyright (C) 2001,2002  Miles Bader <miles@gnu.org> * * This file is subject to the terms and conditions of the GNU General * Public License.  See the file COPYING in the main directory of this * archive for more details. * * Written by Miles Bader <miles@gnu.org> */#include <linux/kernel.h>#include <linux/console.h>#include <linux/tty.h>#include <linux/tty_driver.h>#include <linux/init.h>/* If this device is enabled, the linker map should define start and   end points for its buffer. */extern char memcons_output[], memcons_output_end;/* Current offset into the buffer.  */static unsigned long memcons_offs = 0;/* Spinlock protecting memcons_offs.  */static spinlock_t memcons_lock = SPIN_LOCK_UNLOCKED;static size_t write (const char *buf, size_t len){	int flags;	char *point;	spin_lock_irqsave (memcons_lock, flags);	point = memcons_output + memcons_offs;	if (point + len >= &memcons_output_end) {		len = &memcons_output_end - point;		memcons_offs = 0;	} else		memcons_offs += len;	spin_unlock_irqrestore (memcons_lock, flags);	memcpy (point, buf, len);	return len;}/*  Low-level console. */static void memcons_write (struct console *co, const char *buf, unsigned len){	while (len > 0)		len -= write (buf, len);}static kdev_t memcons_device (struct console *co){        return MKDEV (TTY_MAJOR, 64 + co->index);}static struct console memcons ={    name:	"memcons",    write:	memcons_write,    device:	memcons_device,    flags:	CON_PRINTBUFFER,    index:	-1,};void memcons_setup (void){	register_console (&memcons);	printk (KERN_INFO "Console: static memory buffer (memcons)\n");}/* Higher level TTY interface.  */static struct tty_struct *tty_table[1] = { 0 };static struct termios *tty_termios[1] = { 0 };static struct termios *tty_termios_locked[1] = { 0 };static struct tty_driver tty_driver = { 0 };static int tty_ref_count = 0;int memcons_tty_open (struct tty_struct *tty, struct file *filp){	return 0;}int memcons_tty_write (struct tty_struct *tty, int from_user,		       const unsigned char *buf, int len){	return write (buf, len);}int memcons_tty_write_room (struct tty_struct *tty){	return &memcons_output_end - (memcons_output + memcons_offs);}int memcons_tty_chars_in_buffer (struct tty_struct *tty){	/* We have no buffer.  */	return 0;}int __init memcons_tty_init (void){	tty_driver.name = "memcons";	tty_driver.major = TTY_MAJOR;	tty_driver.minor_start = 64;	tty_driver.num = 1;	tty_driver.type = TTY_DRIVER_TYPE_SYSCONS;	tty_driver.refcount = &tty_ref_count;	tty_driver.table = tty_table;	tty_driver.termios = tty_termios;	tty_driver.termios_locked = tty_termios_locked;	tty_driver.init_termios = tty_std_termios;	tty_driver.open = memcons_tty_open;	tty_driver.write = memcons_tty_write;	tty_driver.write_room = memcons_tty_write_room;	tty_driver.chars_in_buffer = memcons_tty_chars_in_buffer;	tty_register_driver (&tty_driver);}__initcall (memcons_tty_init);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -