内核空间和用户空间是程序执行的两种不同状态,通过系统调用和硬件中断能够完成从用户空间到内核空间的转移。
Linux内核组成:系统调用接口,进程管理,内存管理,Arch,设备驱动程序,网络协议栈,虚拟文件系统。
内核目录结构:
(1)Arch:是architecture的缩写。内核所支持的每种CPU的体系,在该目录下都有对应的子目录。每个CPU子目录,有进一步分解为boot,mm,kernel等子目录,分别包含控制系统引导,内存管理,系统调用等。
(2)block:部分块设备驱动程序。
(3)crypto:加密、压缩、CRC校验算法。
(4)documentation:内核的文档。
(5)driver:设备驱动程序。
(6)fs目录:存放各种文件系统的实现代码。每个子目录对应一种文件系统的实现,公用的源程序用于实现虚拟文件系统vfs。
(7)include目录:内核所需要的头文件。与平台无关的头文件在include/linux子目录下,与平台相关的头文件放在相应的子目录下。
(8)lib目录:库文件代码。
(9)mm目录:mm目录中的文件用于实现内存管理中与体系无关的部分。
(10)net目录:网络协议实现代码。
(11)samples:一些内核编程的范例。
(12)scripts:配置内核的版本。
(13)security:SELinux的模块。
(14)sound:音频设备驱动文件。
(15)usr:cpio命令实现。
(16)virt:内核虚拟机。
嵌入式系统:以应用为中心,软硬件可裁剪,对功耗、体积、成本等严格要求的专业计算机系统。
Linux内核具有可定制的优点具体步骤如下:
1.清除临时文件、中间文件和配置文件:make clean,删除产生的文件比如说o文件,但是不能删除配置文件;
:make mrproper,删除产生的文件和配置文件;
:make distclean,mrproper+remove editor backup and patch files;
2.确定目标系统的软硬件配置情况,比如CPU的类型、网卡的型号,所需支持的网络协议等。
3.使用如下命令之一配置内核:(1)make config,基于文本模式的交互式配置;
(2)make menuconfig,基于文本模式的菜单型配置(推荐使用);
(3)make oldconfig,使用已有的配置文件,但是会询问新增的配置选项;
(4)make xconfig,图形化配置(需要安装图形化系统)。
*和m产生->.o,而*再产生image,m只编译不链接,*编译链接
n什么也不产生
内核配置通常在一个已有的配置文件基础上,通过修改得到新的配置文件,Linux内核提供了一些列可参考的内核配置文件,位于Arch/$cpu/configs。
4.编译内核:
(1)make zlmage
(2)make bzlmage
区别:在x86平台上,zlmage只能用于小于512k的内核。
如需获取详细的信息,可使用:
(1)make zlmage V=1
(2)make bzlmage V=1
编译好的内核位于arch/
5.编译内核模块:
make modules
6.安装内核模块:
make modules_install,将编译好的内核模块从内核源代码目录copy至/lib/modules下。
7.制作init ramdisk
mkinitrd initrd-$version $version
例:mkinitrd initrd-2.6.29 2.6.29
version可以通过查询/lib/modules下的目录得到。