一、内核基础

1、内核下载地址www.kernel.org

2、内核核心存于:/boot/vmlinuz-version, 用uname  -r命令查询版本号。
   内核模块存于:/lib/modules/version


3、linux内核设计:   单内核+模块

4、用户空间访问、监控内核的方式:通过修改/proc, /sys,这两个目录中文件的内容,来访问、修改、监控内核的特性。

     /proc  :大部分是只读的。
     /proc/sys:大多数是可读写的。
 设定内核数值的方法::
     修改/proc/sys下的文件,不能直接用vim打开(以下方法,重启后将失效,能立即生效)
     (1)要用echo命令。
            如: echo >1 /proc/sys/vm/drop_caches
     (2)sysctl命令。  sysctl -w vm.drop_caches=1
     
     永久有效,但不能立即生效的方法:
     修改/etc/sysctl.conf文件后,执行sysctl -p可以永久生效。
     sysctl  -a 查看所有内核参数值。


5、内核模块管理

 lsmod命令:查看所有内核装载的模块。

 modproble 模块名:装载某模块

modproble -r 模块名:卸载某模块。

modinfo 模块名  :查看模块的具体信息和依赖关系。

insmod 模块路径: 装载模块。  先用modinfo找到模块路径。
rmmod  模块名   :卸载模块和modproble -r 作用一样。   

内核模块必须与内核版本完全一致。

6、内核的非核心功能在编译时可以做三种选择:
不使用此功能
编译成内核模块
编译进内核


二、手动编译升级内核

1、下载相应的内核,然后解压到/usr/src目录下。
2、给解压后的内核目录做一个软链接在当前目录下。如;ls -s linux-3.0.40  linux
3、给linux安装开发工具和开发库,即gcc和ncurses-devel-5.7-3.20090208.el6.x86_64.rpm软件。
4、在内核目录下,即/usr/src/linux目录下,输入make menuconfig,进行menuconfig图形界面。还有make xconfig 或 make gconfig,先要先安装这两个桌面的程序才能使用。
5、menuconfig界面介绍:

   (1)操作:* 表示编译进内核, M表进编译进模块,空表示不编译此功能,用空格键可以循环这三项选择。

在menuconfig中选择完所有选项后,保存退出,此时当前源码目录linux下会生成一个.configure文件。
因为.configure文件容易选择错误,为了保证配置正确性,我们可以进入/boot目录下,把正在运行的内核的配置文件复制到当前的linux目录下,替换现在的.configure文件后,进入menumconfig程序中再进行修改,这样成功性会最大。

6、make bzImages  //创建压缩内核镜像
7、make modules  //编译模块

注:make 命令可以代替上面6、7两步。

8、make modules_instll 先安装模块(建议先备分原有的模块数据再运行此命令,因为运行此命令后会覆盖原有的,存于/lib/modules/内核版目号/目录下)
9、make install   安装内核。
10、进入/boot/grub目录下的grub.conf配置文件,把默认启动内核改为新内核数字。0表示第一个,1表示第二个。


三、内核主要文件

1、内核需要的文件:内核文件镜像和vmlinuz-版本号和system.map文件。
经过以上编译,并执行make install时会自动把两文件复制到boot目录下。

手工复制方法:
cp /usr/src/linux/arch/x86/boot/bzImage  /boot/vmlinuz-3.0.40  //把编译好的内核镜像复制到/boot目录下,且名称改为vmlinuz-3.0.40。

cp /usr/src/linux/system.map  /boot/system.map-3.0.40  //手工复制system.map 文件以复制到/boot目录下


四、编译时常见错误解决方法
1、在vmware虚拟机中使用make install安装内核时,提示
ERROR: modinfo: could not find module vmware_balloon找不到 vmware_balloon 模块。
原因有2:
首先,确认你的 .config 文件里面有  CONFIG_VMWARE_BALLOON=m 这一行,或者你可以用 make menuconfig 进去内核编译菜单,选中 Device Drivers -> MISC devices -> VMware Balloon Driver 为 M 或者 *
其次,而这个模块在后面的版本中,已经更名为 vmw_balloon,所以 可以用下面的命令来解决:
cd /lib/modules/3.x.xx/kernel/drivers/misc #将版本号改成你自己的
ln -s vmw_balloon.ko vmware_balloon.ko #建立软连接
最后 make install 的时候有很多 could not find module xxxx 的错误,而你又不知道其对应的是 .config 中哪一项的时候,可以用这条命令:grep -R --include=Makefile '\bNAME\.o\b'

2、在ubuntu的高级版本中在内核中使用make menuconfig时出现:'make menuconfig' requires the ncurses libraries.
这时需要安装ncurses库,使用apt-get install libncurses5-dev安装即可