1. Linux内核和用户层的应用程序都有自己的保护地址空间。每个用户空间的进程都有自己的虚拟地址空间,内核则有独立的地址空间。一般情况下应用程序时无法直接访问内核空间的,要通过一个特殊的系统调用接口来访问。但是又有一个问题,当频繁的使用系统调用时,会加大系统的开销等。这就好比去银行取钱,假如我们要取1000元,那么你是一次取1000元好呢,还是分十次每次取100元好。很明显,我们是一次性就搞定的。所以,在发生系统调用的时候内核也是希望你一次就搞定,不要老是来麻烦他。在这种情况下有些高手们就开发了一个标准C库这个新的链接内核的接口,这些接口的本质还是通过系统调用来跟内核打交道的。唯一的好处是这些表尊库函数都带有缓冲区,将应用程序的多次请求操作合并为一次,有效的提高了内核的效率。这样就好比去银行1000元钱是一次取而不是分十次取。
虚拟文件系统(VFS):虚拟文件系统是一个很重要的组件,VFS在SCI 和内核所支持的文件系统之间提供了一个交换层。在VFS向上是对一些如read、write、open、close等的一些SCI 的抽象, 向下是对内核所支持的文件系统的抽象。在内核所支持的文件系统之下(注意不是VFS而是内核实际所支持的一些文件系统如ext3,ext4,fast,nfs等)有一个缓冲区缓存,用于跟设备驱动程序打交道,这个缓冲区缓存可以优化对特殊设备接口的访问。
3.内核源码目录中的usr是存放一些打包压缩的算法。
内核驱动的移植:
a、将自己的源代码复制到Linux内核代码的对应的目录下。
b、在该目录的Kconfig文件中增加自己代码的配置选项。
c、在该目录的Makefile中增加对自己的源代码的编译选项。
比如在内核的drivers/led中添加一个驱动:
第一步:在该目录下添加自己的源码:led_dri.c
第二步:在该目录下的Kconfig中添加自己的菜单选项
config LED_DRI_XXX
tristate "XXX Soc LED driver"
depends on ARCH_EXYNOS
help
xxxx
第三步:在该目录下的Makefile中使能自己的编译开关
obj-$(CONFIG_LED_DRI_XXX) +=led_dir.o