自定义print函数缓存打印数据到环形缓冲区
#include "linux/module.h"
#include "linux/kernel.h"
#include "linux/fs.h"
#include "linux/init.h"
#include "linux/delay.h"
#include "asm/uaccess.h"
#include "asm/irq.h""
#include "asm/io.h"
#include "asm/arch/regs-gpio.h"
#include ""asm/hardware.h"
#include "linux/proc_fs.h"
#define MYLOG_BUF_LEN 1024
struct proc_dir_entry *myentry;
static char mylog_buf[MYLOG_BUF_LEN];
static char tmp_buf[MYLOG_BUF_LEN];
static int mylog_r = 0;
static int mylog_r_for_read = 0;
static int mylog_w = 0;
static DECLARE_WAIT_QUEUE_HEAD(mymsg_waitq);
static int is_mylog_empty(void)
{
}
static int is_mylog_empty_for_read(void)
{
}
static int is_mylog_full(void)
{
}
static void mylog_putc(char c)
{
}
static int mylog_getc(char *p)
{
}
static int mylog_getc_for_read(char *p)
{
}
int myprintk(const char *fmt, ...)
{
}
static ssize_t mymsg_read(struct file *file, char __user *buf,
{
}
static int mymsg_open(struct inode *inode, struct file *file)
{
}
const struct file_operations proc_mymsg_operations = {
};
static int mymsg_init(void)
{
}
static void mymsg_exit(void)
{
}
module_init(mymsg_init);
module_exit(mymsg_exit);
EXPORT_SYMBOL(myprintk);
MODULE_LICENSE("GPL");
===============================================================
解析:
当其他驱动程序调用自定义的myprintk函数打印数据时不会立即把数据打印在前台显示,而是把数据放在mylog_buf环形缓冲区中保存,当应用程序查看proc/mymsg时,即执行:cat /proc/mymsg时会调用mymsg_read函数读取环型缓冲区,如果缓冲区中有数据会调用__put_user返回,如果没有数据系统会休眠。
print函数打印数据环形缓冲 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)