����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