linux 内核头文件及内核库文件

与用户空间应用不同的是,内核不能调用标准C库或其它任何不属于内核的库。主要原因是,速度及大小的限制。

标准C库对内核而言实在是太大了。

 

许多常用的的 libc 函数已经在内核中实现了。内核中的库文件是在内核的根目录下 lib 目录下存放。

如常用的字符串操作函数是在 lib/string.c 中定义的,调用时主需要将头文件 <linux/string.h>包含进即可。

 

关于内核的头文件,内核是不能包含内核之外的头文件的,如同内核不能调用内核之外的库一样。

1)基本的头文件放在内核的 include/ 目录下,比如以下引用的头文件

#include <linux/i2c.h>

位于 include/linux/i2c.h

2)平台相关的头文件位于 arch/<architecture>/include/asm 下,在包含这些头文件时以 asm/ 为前缀,如下:

#include <asm/ioctl.h>

 

内核中不能调用 printf(), 但内核提供了 printk() 供我们使用。

printk() 与printf()的用法很相似,如下:

printk("Hello world! A string '%s' and an integer '%d'\n", str, i);

 

printk() 与 printf() 一个显著的区别是,printk() 允许使用优先级标记。该优先级标志被 syslogd 进程用来决定在哪显示

内核打印信息。如下例:

printk(KERN_ERR "this is an error!\n");

注意,在优先级标记 KERN_ERR 后面没有逗号。

posted @ 2015-04-08 21:57  阿青1987  阅读(...)  评论(... 编辑 收藏