其实我觉得对于linux内核,真的不知道从哪里入手是好,因为各个环节关联性太强了,以至于看到这里就不得不翻一下那里是怎么实现的,所以对于入门的确是一件很头疼的事情,我也大概在这里折腾了一个多月,把《linux内核设计与实现》也看了两三遍,还是有点摸不着头脑,不过随着接触多了也就对整体有了一定的认识,在西电的一本《linux操作系统分析》的书上,我发现它首先是从linux内核的启动开始的,这让我觉得是个不错的注意,于是我也就从这里看起。
就像在使用软件之前要读一下README一样,内核也有这样的一个文件,何不尝试阅读以下提取一些有用的信息呢。
Linux是UNIX操作系统的一个衍生类型的操作系统,它是由Linus Torvalds创造完成,并且和散布在世界各地的、无组织的内核黑客们通过网络共同编写和维护的操作系统,它遵守POSIX和Single UNIX Specification的规约。
Linux具有你对一个现代的、成熟的、全面的操作系统一切能够期望功能,包括真正的多任务、虚拟内存管理、共享库、动态模块、写时复制、内存管理和覆盖IPV4和IPV6的网络支持。并且它是在GNU General Public License规约下发布的,可以被任何使用者使用、传播,但是要在free的前提下。
Linux能够很轻松的移植到任何通用的32位和64位体系结构上,只要该系统具有分页式内存管理单元(PMMU)和一定的GCC编译器端口的功能,并且Linux还可以一直到不具有PMMU功能的架构上,虽然一些功能会受到限制。
安装内核:
1、首先将内核下载到本地的任何一个目录下,当然最好不要使用/usr/src/linux目录,因为这里已经包含一部分的源代码,可能产生混乱,然后对它进行解压:
gzip -cd linux-3.X.tar.gz | tar xvf - 或者 bzip2 -dc linux-3.X.tar.bz2 | tar xvf -
这里的X表示的是版本号,我们这里使用的是3.0.16版本的内核。
2、可以不在本目录下编译,这时候就需要在make命令下增加一定的选项,使用"make O=output/dir"可以在执行目录下对源代码进行编译,如下例:
kernel source code: /usr/src/linux-3.N
build directory: /home/name/build/kernel
To configure and build the kernel use:
make O=/home/name/build/kernel menuconfig
make O=/home/name/build/kernel
sudo make O=/home/name/build/kernel modules_install install
可以看到,对于内核的编译也是通过类似于编译软件的方式make config / make / make install三步。
3、配置内核,一般使用make config之类的方式进行内核的配置,通常我们会有以下几个可以选择的方式:
"make config" 基于文本的配置
"make menuconfig" 基于图形界面的配置方式
"make xconfig" 基于X-windows(QT)图形界面的配置方式
"make oldconfig" 如果只希望在当前的版本上完成新的选项的配置,它将使用./.config的配置信息完成已存在的配置,然后进行新的配置
"make defconfig" 使用arch/$ARCH/defconfig或者arch/$ARCH/configs/${PLATFORM}_defconfig的配置信息进行配置,并在当前目录下创建一个config文件,使用默认的配置选项。
4、编译内核,首先保证你的GCC编译器版本至少在3.2以上,然后使用make命令会将内核编译成一个压缩的内核映像,为了能够启动新的内核,需要将这个映像(在具体的架构目录的boot目录下的bzImage文件)移动到一般的内核启动的映像所在的目录。
5、修改/etc/lilo.conf文件的一些关于新编译内核的信息,以至于重新启动的时候可以选择新内核启动,配置好这些属性之后就可以重新启动,选择新内核就可以运行新编译的内核了。
以上内容是自己对整个内核编译和使用的理解,关键在于配置内核信息和编译内核,这会消耗一定的时间,最后要选择使用的引导程序完成内核启动时的引导配置,这样就能够使用新编译的属于自己的内核了。