一、内核基础
1、内核下载地址www.kernel.org2、内核核心存于:/boot/vmlinuz-version, 用uname -r命令查询版本号。 内核模块存于:/lib/modules/version3、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 linux3、给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安装即可