初学_简单的内核编译

内核编译

单内核体系设计、但充分借鉴了微内核设计体系的优点,为内核引入模块化机制

内核组成部分:

kernel: 内核核心,一般为bzImage,通常在/boot目录下,名称为vmlinuz-VERSION-RELEASE

kernel object: 内核对象,一般放置于

/lib/modules/VERSION-RELEASE/

cd /etc/udev/rules.d/

[ ]: N

[M]: M

[*]: Y

辅助文件:ramdisk

initrd

initramfs

内核版本

运行中的内核:

uname命令:

uname - print system information

uname [OPTION]...

-n: 显示节点名称

-r: 显示VERSION-RELEASE

-a:显示所有信息

 

内核模块命令

lsmod命令:

显示由核心已经装载的内核模块

显示的内容来自于: /proc/modules文件

umodinfo命令:

显示模块的详细描述信息

modinfo [ -k kernel ] [ modulename|filename... ]

-n: 只显示模块文件路径

-p: 显示模块参数

-a: author

-d: description

-l: license

lsmod |grep xfs;modinfo xfs

内核模块管理

modprobe命令:

装载或卸载内核模块

modprobe [ -C config-file ] [ modulename ] [ module parame-ters... ]

配置文件:/etc/modprobe.conf, /etc/modprobe.d/*.conf

modprobe [ -r ] modulename… 加载模块

depmod命令:

内核模块依赖关系文件及系统信息映射文件的生成工具

装载或卸载内核模块:

insmod命令:指定模块文件,不自动解决依赖模块

insmod [ filename ] [ module options... ]

insmod `modinfo –n exportfs`

lnsmod `modinfo –n xfs`

rmmod命令:卸载模块

rmmod [ modulename ]

rmmod xfs

rmmod exportfs

 

编译内核

前提:

(1) 准备好开发环境

(2) 获取目标主机上硬件设备的相关信息

(3) 获取目标主机系统功能的相关信息

例如:需要启用相应的文件系统

(4) 获取内核源代码包

www.kernel.org

开发环境准备

包组(CentOS 6):

Server Platform Development

Development Tools

目标主机硬件设备相关信息:

CPU: //查看cpu 信息

cat /proc/cpuinfo

x86info -a

lscpu

硬件设备

uPCI设备: ///硬盘接口

lspci

-v

-vv

lsusb

-v

-vv

lsblk 块设备

了解全部硬件设备信息

hal-device:CentOS6

内核编译安装系统

安装开发包组

下载源码文件

.config:准备文本配置文件

make menuconfig:配置内核选项

make [-j #]

make modules_install:安装模块 //////usr/lib/modules

make install :安装内核相关文件 ////boot/ vmlinuz-3.10.0-862.el7.x86_64 及其他文件

安装bzImage为/boot/vmlinuz-VERSION-RELEASE

生成initramfs文件

编辑grub的配置文件

编译安装内核示例

tar xf linux-3.10.67.tar.xz -C /usr/src

cd /usr/src

ln -sv linux-3.10.67 linux

cd /usr/src/linux

cp /boot/config-$(uname -r) ./.config

make help

make menuconfig

make -j 2

make modules_install

make install

reboot

编译内核

(1) 配置内核选项

支持“更新”模式进行配置:make help

(a) make config:基于命令行以遍历的方式配置内核中可配置的每个选项

(b) make menuconfig:基于curses的文本窗口界面

(c) make gconfig:基于GTK (GNOME)环境窗口界面

(d) make xconfig:基于QT(KDE)环境的窗口界面

支持“全新配置”模式进行配置

(a) make defconfig:基于内核为目标平台提供的“默认”配置进行配置

(b) make allyesconfig: 所有选项均回答为“yes“

(c) make allnoconfig: 所有选项均回答为“no

编译内核

(2) 编译

全编译:make [-j #]

编译内核的一部分功能:

(a) 只编译某子目录中的相关代码

cd /usr/src/linux

make dir/

(b) 只编译一个特定的模块

cd /usr/src/linux

make dir/file.ko

例如:只为e1000编译驱动:

make drivers/net/ethernet/intel/e1000/e1000.ko

编译内核

如何交叉编译内核:

编译的目标平台与当前平台不相同

make ARCH=arch_name

要获取特定目标平台的使用帮助

make ARCH=arch_name help

make ARCH=arm help

内核编译

在已经执行过编译操作的内核源码树做重新编译

需要事先清理操作:

make clean:清理大多数编译生成的文件,但会保留config文件等

make mrproper: 清理所有编译生成的文件、config及某些备份文件

make distclean:mrproper、patches以及编辑器备份文件

卸载内核

删除/lib/modules/目录下不需要的内核库文件

删除/usr/src/linux/目录下不需要的内核源码

删除/boot目录下启动的内核和内核映像文件

更改grub的配置文件,删除不需要的内核启动列表

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

内核文件存放位置

# /boot/config-3.10.0-862.el7.x86_64

[13:18:[email protected] boot]#ls /usr/lib/modules

 

 

///////////////////////////////////////////////////////////////////////////////////////////////

编译内核 流程

www.kernel.org ////下载最新内核

解包

tar xvf linux-4.18.5

yum groupinstall "development tools" ///安装开发工具

cp /boot/config-3.10.0-862.el7.x86_64 .config ///参考系统的模版

make menuconfig ////

yum -y install ncurses-devel

cd linux-4.18.5/

make menuconfig

初学_简单的内核编译

改内核名

启用 ntfs文件系统

初学_简单的内核编译

grep -i ntfs .config

screen ////使用 screen /nohup 防止网络中断

nohup

make -j 8 && for i in {1..10};do echo -e '\a' ; sleep 0.5;done

yum -y install elfutils-libelf-devel

yum -y install openssl-devel

make -j 8 && for i in {1..10};do echo -e '\a' ; sleep 0.5;done

du -fs

ls /lib/modules

make modules_install

du -sh /lib/modules

ls /lib/modules

du -sh /lib/modules/4.18.5-1.0-wanglinux/ -s

make install

 

编译完成后重启

updatedb

locate ntfs.ko

 

grub /linux-4.8.5/vmlinuz /sbin/init

vim /linux-4.8.5/init/main.c

测试 :

初学_简单的内核编译

启用epel 源

初学_简单的内核编译

yum search ntfs

yum -y install ntfs-3g

rpm -ql ntfs-3g