Linux内核@系统组成与内核配置编译
Linux系统由什么组成?
由用户空间(应用程序+GNU C标准库)和内核空间(系统调用接口+内核+内核架构代码)组成。
Linux内核到底是什么?以及组成。
ARM的七种操作级别?
内核网络协议栈(Network Stack)的作用?
为Linux提供了丰富的网络协议(TCP/IP、PPPOE)实现。将网络协议栈放在内核中为了提高网络性能,减少CPU开销。
虚拟文件系统的作用?
为了支持多种文件系统,并为它们提供统一的操作接口。
Linux内核源代码结构
关于每个文件夹中的具体内容分析:参考http://blog.chinaunix.net/uid-24219701-id-2843452.html
Fedoar14系统中内核代码目录:
Linux内核配置与编译
内核配置命令(在内核根目录执行):
执行配置命令前若原来已经编译过内核则先 $make mrproper
$make config 基于文本模式的交互式配置。
$make menuconfig 基于文本模式的菜单型配置(使用较多)。 y m n 三种形式。
$make gconfig 基于gtk+的图形工具。
$make defconfig
$make xconfig 基于Tcl/Tk的X图形配置界面。
$make oldconfig 使用原有的配置文件(.config),但是会询问新增加的内核功能。
常用内核配置选项参考:http://www.cnblogs.com/Robyte/archive/2010/06/09/2591274.html
内核配置命令详细参考《Linux内核设计与实现》
内核编译:
内核配置完成之后,直接$make(注意如果内核是2.6之前的版本需要首先运行一下$make dep,2.6以后的版本不用因为代码之间的依赖关系会自动维护),在内核代码根目录下产生elf文件,但是此文件不是可执行的二进制文件。
如果有模块编译一下模块:$make modules;
然后安装模块:$make modules_install;
然后:$make install,安装到/boot目录下。(这个过程也是内核安装过程,下面的内核安装是另一种方法)
要生成可执行的二进制的内核文件还需要使用$make zImage或$make bzImage(前者用于编译小于512K的内核,后者用于编译大内核)。编译好后在arch/<cpu>/boot/下会生成二进制的内核文件。
内核安装(x86平台):
1. cp arch/i386/boot/bzImage /boot/vmlinuz-$version
2. cp System.map /boot/System.map-$version
3. rm /boot/System.map
4. ln -s /boot/System.map-$version /boot/System.map
5. 修改/etc/grub.conf 或者/etc/lilo.conf,添加一个新的title(类似下面)
注:/boot/grub/menu.lst 可以查看当前系统加载的二进制内核文件。
内核更新详细步骤参考:http://www.2cto.com/os/201312/265425.html
内核模块编写、编译、安装、运行和卸载
编译时asm/linkage.h找不到的问题:http://www.cnblogs.com/QuLory/archive/2012/10/23/2736339.html
2.6以上的Linux内核使用kbuild的Makefile进行编译。
关于kbuild参考系列文章:http://blog.csdn.net/yunsongice/article/details/6046537