linux内核编译原理,linux之内编译核

Linux 之内核详解及编译

内核编译原理详解:

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

内核的组成部分:

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

kernel object : 内核对象,一般放置于 /lib/modules/VERSION-RELEASE/ 目录下

[] :N      #没有选中

[M] : M    #模块化,不放到内核里

[*] : Y    #直接打到核心了

辅助文件 : ramdisk

initrd

initramfs

运行中的内核:

uname 命令:

uname [options]...

-n :显示节点名称

-r :显示VERSION-RELEASE;

-a :显示所有信息

1473511164294230.png

lsmod 命令:

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

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

modinfo 命令:

显示模块的详细描述信息

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

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

-p : 显示模块参数

-a : author

-d : description

-l : license

lsmod|grep xfs

modinfo xfs

1473511399214174.png

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`

insmod `modinfo -n xfs`

rmmod 命令 :卸载模块

rmmod [modulename]

rmmod xfs

1473513355799324.png

/proc 目录:

内核把自己内部状态信息及统计信息,以及可配置参数通过proc伪文件系统加以输出

参数 : 只读 :输出信息

可写 : 可接受用户指定'新值'来实现对内核某功能或特性的配置

/proc/sys

(1) sysctl 命令用于查看或设定此目录中诸多参数

sysctl -w path.to.parameter=VALUE

sysctl -w kernel.hostname=nineven.com

(2) echo 命令通过重定向方式也可以修改大多参数的值

echo "VALUE" > /proc/sys/path/to/parameter

echo "websrv" > /proc/sys/kernel/hostname

sysctl 命令:

默认配置文件: /etc/sysctl.conf

(1) 设置某参数

sysctl -w parameter=VALUE

(2) 通过读取配置文件设置参数

sysctl -p [/path/to/conf_file]

内核中的路由转发:

/proc/sys/net/ipv4/ip_forward

常用的几个参数:

net.ipv4.ip_forward

net.ipv4.icmp_echo_ignore_all

1473560064114962.png

vm.drop_caches #清空缓存

1473561671776967.png

若果想永久生效,需要改配置文件

/etc/systclt.conf

systctl -p  #重新读取配置文件,使之生效

/sys 目录:

sysfs : 为用户使用的伪文件系统,输出内核识别出的各硬件设备的相关属性信息,也有内核对硬件特性的设定信息,有些参数是可以修改的,用于调整硬件工作特性

udev : 通过此路径下输出的信息动态为各设备创建所需要设备文件,udev 是运行用户空间程序

专用工具 : udevadmin  hotplug

udev 为设备创建设备文件时,会读取其事先定义好的规则文件,一般在 /etc/udev/rules.d 及 /usr/lib/udev/rules.d 目录下

ramdisk 文件的制作:

(1) mkinitrd 命令

为当前正在使用的内核重新制作 ramdisk 文件

mkinitrd /root/initramfs-`uname -r`.img `uname -r`

(2) dracut 命令

为当前正在使用的内核重新制作 ramdisk 文件

dracut /boot/initramfs-$(uname -r).img $(uname -r)

编译内核操作 :

前提:

(1) : 准备好开发环境

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

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

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

(4) : 获取内核源代码包

开发包组(CentOS 6):

Service Platform Development

Development Tools

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

CPU :

cat /proc/cpuinfo

lscpu

PCI :

lspci [-v|-vv]

lsusb [-v|-vv]

lsblk 块设备

了解全部硬件设备信息

hal-device

内核编译安装系统:安装开发包组

下载源码

.config :准备文本配置文件

make menuconfig :配置内核选项

make [-j #]

make modules_install :安装模块

make install :安装内核相关文件安装 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 : 基于cruse的文本窗口界面

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

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

支持"全新配置"模式进行配置:

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

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

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

(2)编译

全编译: make [-j #] :#指cpu核心数

编译内核的一部分功能:

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

cd /usr/src/linux

make dir/

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

cd /usr/src/linux

make dir/file.ko

例如:只为e1000编译驱动

# 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以及编辑器备份文件

我直接下载的是最新版的,下载链接如下

(1)先安装开发包组 Development tools

1473506478861030.png

1473506943315905.png

1473507167769496.png

1473507206722367.png

1473507257636431.png

1473507300369874.png

1473507368201487.png

参数自己可以修改,安装自己的需求,我新增了支持ntfs功能

1473555680927411.png

1473507544280565.png

存储空间还可以,至少预留10G的空间,因为编译会生成好多临时文件

1473507624550791.png

1473507738703099.png

报错了,解决

1473507768250988.png

恩,正在编译中,发现cpu快要爆了

1473507856159195.png

1473509151669466.png

1473511602449003.png

1473511707317583.png

竟然消耗了8.2G的存储空间,太占空间了

1473555114444816.png

1473555158448567.png

进入系统查看

1473555724914611.png

查看新增加的功能是否支持ntfs

1473556090112076.png

恩,已经成功实现该功能

转自:http://liuyuworld.com/2016/09/10/linux-%e4%b9%8b%e7%bc%96%e8%af%91%e5%86%85%e6%a0%b8/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值