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

📄 printk.c

📁 一个用于学习的操作系统
💻 C
字号:
/*文件名: panik.c
  说明:   内核中打印信息
  作者:   marsinfan
  日期:   2005/12/20
*/

#include <stdarg.h>
#include <fairysky/types.h>

static char buf[1024];
static unsigned long log_page = 0;
static unsigned long log_start = 0;
static unsigned long log_size = 0;

extern int vsprintf(char *buf, const char *fmt, va_list args);
extern void console_print(const char *);

//在内核中在屏幕上直接打印信息
int printk(const char *fmt, ...)
{
    va_list args;
    int i, j;
    char *p;

    va_start(args, fmt);
    i = vsprintf(buf, fmt, args);
    va_end(args);
    for (j = 0; j < i && log_page ; j++) {
        p = (char *) log_page + (4095 & (log_start + log_size));
        *p = buf[j];
        if (log_size < 4096) {
            log_size++;
        } else {
            log_start++;
        }
    }
    //if (log_page)
    //  wake_up(&log_wait);
    console_print(buf);
    return i;
}

int sprintf(char *str, const char *fmt, ...)
{
    va_list args;
    int i;

    va_start(args, fmt);
    i = vsprintf(str, fmt, args);
    va_end(args);
    return i;
}

void print_hex(void *buf, size_t count)
{
    int i;
     for (i = 0; i < count; i++) {
        if (i != 0) {
            if (i % 16 == 0) {
                printk("\n");
            } else if (i % 8 == 0) {
                printk("   ");
            }
        }
        printk("%02X ", ((u8 *)buf)[i]);
    }
}

⌨️ 快捷键说明

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