Linux编译内核

查看内核:

#uname [OPTION]

[OPTION]

-r 显示内核版本和release号。


用户空间访问、监控内核的方式:

/proc

/sys


伪文件系统:

/proc/sys 目录中很多文件是可读写的。

/sys 某些文件可写


设定内核参数值的方法:

临时生效,重启后失效:

#echo VALUE > /proc/sys/FILE 

#sysctl -w DIR.FILE=VALUE 

在/proc/sys目录下可以忽略/proc/sys,剩余路径用DIR.FILE表示。


例如:

#echo 1 > /proc/sys/vm/dorp_caches

#sysctl -w vm.dorp_caches=1

#sysctl -w kernel.hostname=test.com

#sysctl -w net.ipv4.ip_forward=1


永久有效,不立即生效:

修改/etc/sysctl.conf文件。修改后使用sysctl -p让系统重读文件,立即成效。


编辑格式如下:

DIR.FILE=VALUE


#sysctl [OPTION] DIR.FILE=VALUE

[OPTION]

-w 临时改变某参数的值。


-p FILE 从指定的FILE中加载系统参数,立即生效。如不指定即从/etc/sysctl.conf中加载。


-a 显示所有内核参数及其值。



内核模块管理:

#lsmod 列出当前内核中装载的模块和模块名称。

显示格式如下:

Module 模块名称

Size 大小

Used by 使用次数、被哪个文件调用等信息。


#modprobe [OPTION] MODNAME 装载名称为MODNAME的模块。会处理模块间的依赖关系。

[OPTION]

-r 卸载模块


#modinfo MODNAME 查看模块具体信息。


#insmod MODDIR 装载模块。


#rmmod MODNAME 卸载模块。


#depmod MODDIR 生成模块间依赖关系。并保存到该目录中。



例如:

#lsmod |grep floppy

#modproble -r floppy

#modinf mii

#insmod /lib/modules/KERNELVERSION/kernel/drivers/net/mii.ko

#rmmod mii



内核中的功能除了核心功能以外,在编译时,大多数功能都有3种选择:

1.不使用此功能。

2.编译成内核模块。

3.编译进内核。


编译内核:

0.安装开发库和工具:

#yum groupinstall "Development Tools" "Development Libaries"


1.内核下载完成后,解压存放在/usr/src下。可以创建软链接简化访问。


#tar -xf KERNELFILE -C /usr/src

/usr/src/KERNELVERSION

#cd /usr/src

#ln -s KERNELVERSION SIMPLENAME


2.将当前内核的配置文件复制为要编译的内核的.config文件。这样有效避免一定程度上自选功能生成的.config文件因为功能选择不当或依赖关系造成无法启动,重复进行多次编译。


#cp /boot/config-KERNEL_VERSION  /usr/src/SIMPLENAME/.config


3.开始编译:

#cd SIMPLENAME


图形界面下:

需要安装图形界面开发库。


#make geconfig Gnome环境使用。GNOME Software Development 


#make kconfig KDE环境使用。KDE Software Development 


文本:

#make menuconfig

其中:

*:编译进内核。

M:编译成模块

空: 不使用此功能。

#make

#make modules_install 编译

内核模块至/lib/modules/KERNELVERSION。


#make install


4.编译initrd

#mkinitrd INITRDFILE KERNELVERSION 创建initrd文件。


编译内核的常见情况:


1.编译内核过程中中断:

使用screen工具。


2.编译后再次编译:

删除整个文件夹重新解压后编译。


如有必要先备份.config文件。

#make clean 清理此前编译好的二级制模块。

#make mrproper 清理此前编译进行的所有操作。


部分编译:

1.编译某子目录下的相关代码:

#make DIR/

例如:

#make arch/ 只编译跟硬件平台相关的内核核心。

#make drivers/net/ 只编译网络相关的驱动。


2.编译部分模块:

#make M=DIR

例如:

#make M=drivers/net/ 只编译网络相关的模块。

3.编译某一模块

#make DIR/MODULENAME

例如:

#make drivers/net/pcnet32.ko


4.将编译完成的结果放置在其他目录中:

#make O=DIR

例如:

#make O=/tmp/testkernel


你可能感兴趣的:(linux,kernel,initrd)