����8-11 linux/kernel/printk.c


  1 /*

  2  *  linux/kernel/printk.c

  3  *

  4  *  (C) 1991  Linus Torvalds

  5  */

  6

  7 /*

  8  * When in kernel-mode, we cannot use printf, as fs is liable to

  9  * point to 'interesting' things. Make a printf with fs-saving, and

 10  * all is well.

 11  */

    /*

     * �������ں�ģʽʱ�����Dz���ʹ��printf����Ϊ�Ĵ���fsָ������������Ȥ

     * �ĵط����Լ�����һ��printf����ʹ��ǰ����fs��һ�оͽ���ˡ�

     */

    // ��׼����ͷ�ļ����Ժ����ʽ������������б�����Ҫ˵����-������(va_list)��������

    // va_start��va_arg��va_end������vsprintf��vprintf��vfprintf������

 12 #include <stdarg.h>

 13 #include <stddef.h>       // ��׼����ͷ�ļ���������NULL, offsetof(TYPE, MEMBER)��

 14

 15 #include <linux/kernel.h> // �ں�ͷ�ļ�������һЩ�ں˳��ú�����ԭ�ζ��塣

 16

 17 static char buf[1024];    // ��ʾ����ʱ��������

 18

    // ����vsprintf()������linux/kernel/vsprintf.c��92�п�ʼ����

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

 20

    // �ں�ʹ�õ���ʾ������

 21 int printk(const char *fmt, ...)

 22 {

 23         va_list args;                  // va_listʵ������һ���ַ�ָ�����͡�

 24         int i;

 25

    // ���в���������ʼ������Ȼ��ʹ�ø�ʽ��fmt�������б�args�����buf�С�����ֵi

    // ��������ַ����ij��ȡ������в����������������������ÿ���̨��ʾ������������ʾ

    // �ַ�����

 26         va_start(args, fmt);

 27         i=vsprintf(buf,fmt,args);

 28         va_end(args);

 29         console_print(buf);            // chr_drv/console.c����995�п�ʼ��

 30         return i;

 31 }

 32