linux内核介绍及编译

Linux Kernel:
    单内核体系设计、但充分借鉴了微内核设计体系的优点,为内核引入模块化机制。
        内核组成部分:
            kernel: 内核核心,一般为bzImage,通常在/boot目录下,名称为vmlinuz-VERSION-RELEASE;
            kernel object: 内核对象,一般放置于/lib/modules/VERSION-RELEASE/
                [ ]: N
                [M]: M
                [*]: Y

辅助文件:ramdisk
                initrd
                initramfs

运行中的内核:

uname命令:
            uname - print system information
            uname [OPTION]...
                -n: 显示节点名称;
                -r: 显示VERSION-RELEASE;

模块:
            lsmod命令:
                显示由核心已经装载的内核模块

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

modinfo命令:
                显示模块的详细描述信息

modinfo [ -k kernel ]  [ modulename|filename... ]
                    -n: 只显示模块文件路径
                    -p: 显示模块参数
                    -a: author
                    -d: description
                    -l: license
[[email protected] ~]# modinfo ext4
filename:       /lib/modules/2.6.32-504.el6.x86_64/kernel/fs/ext4/ext4.ko
license:        GPL
description:    Fourth Extended Filesystem
author:         Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts‘o and others
srcversion:     2DA002AAC5B453054C69FB2
depends:        mbcache,jbd2
vermagic:       2.6.32-504.el6.x86_64 SMP mod_unload modversions
[[email protected] ~]# modinfo Ip
ERROR: modinfo: could not find module Ip
[[email protected] ~]# modinfo stp
filename:       /lib/modules/2.6.32-504.el6.x86_64/kernel/net/802/stp.ko
license:        GPL
srcversion:     ADE6C8A333621C77ACAC02C
depends:        llc
vermagic:       2.6.32-504.el6.x86_64 SMP mod_unload modversions

modprobe命令:
                装载或卸载内核模块

modprobe [ -C config-file ]  [ modulename ]  [ module parame-ters... ]
                    配置文件:/etc/modprobe.conf, /etc/modprobe.d/*.conf

modprobe [ -r ] modulename...
                
[[email protected] ~]# modprobe   xfs
[[email protected] ~]# lsmod | grep xfs
xfs                  1124960  0
exportfs                4236  1 xfs
[[email protected] ~]# modprobe   -r  xfs

[[email protected] ~]# modinfo -n  xfs
/lib/modules/2.6.32-504.el6.x86_64/kernel/fs/xfs/xfs.ko

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

装载或卸载内核模块:
                  insmod命令:
                      insmod [ filename ]  [ module options... ]

rmmod
                      rmmod [ modulename ]

/proc目录:
        内核把自己内部状态信息及统计信息,以及可配置参数通过proc伪文件系统加以输出;
[[email protected] ~]# sysctl -a | wc -l
736
[[email protected] ~]# cat /proc/sys/kernel/hostname
slave
        参数:
            只读:输出信息
            可写:可接受用户指定“新值”来实现对内核某功能或特性的配置
                /proc/sys

(1) sysctl命令用于查看或设定此目录中诸多参数;
                    sysctl -w path.to.parameter=VALUE
[[email protected] ~]# sysctl -w kernel.hostname=www.magedu.com
kernel.hostname = www.magedu.com
[[email protected] ~]# hostname
www.magedu.com
[[email protected] ~]# sysctl -w kernel.hostname=slave
kernel.hostname = slave
[[email protected] ~]# hostname
slave
                    ~]# sysctl -w kernel.hostname=mail.magedu.com

(2) echo命令通过重定向的方式也可以修改大多数参数的值;
                    echo "VALUE" > /proc/sys/path/to/parameter

~]# echo "www.magedu.com" > /proc/sys/kernel/hostname

sysctl命令:
                默认配置文件:/etc/sysctl.conf
                永久有效
                /etc/sysctl.conf
                
                    (1) 设置某参数
                        sysctl -w parameter=VALUE
                    (2) 通过读取配置文件设置参数
                        sysctl -p [/path/to/conf_file]

内核中的路由转发:
                /proc/sys/net/ipv4/ip_forward
[[email protected] ~]# cat /proc/sys/net/ipv4/ip_forward
0

使内核生效
sysctl -p

sysctl -w  net.ipv4.ip_forward=1
                常用的几个参数:
                    net.ipv4.ip_forward
                    vm.drop_caches
                    kernel.hostname

/sys目录:

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

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

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

ramdisk文件的制作:

(1) mkinitrd命令
            为当前正在使用的内核重新制作ramdisk文件
            mv /boot/initramfs-2.6.32-504.el6.x86_64.img /root
                ~] # mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)

看一下是什么
                
[email protected] ~]# file initramfs-2.6.32-504.el6.x86_64.img
initramfs-2.6.32-504.el6.x86_64.img: gzip compressed data, from Unix, last modified: Tue Jan 27 14:53:45 2015, max compression
[[email protected] ~]# mv initramfs-2.6.32-504.el6.x86_64.img  initramfs-2.6.32-504.el6.x86_64.img.gz
解压缩
[[email protected] ~]# gzip  -d initramfs-2.6.32-504.el6.x86_64.img.gz

[[email protected] ~]# file initramfs-2.6.32-504.el6.x86_64.img
initramfs-2.6.32-504.el6.x86_64.img: ASCII cpio archive (SVR4 with no CRC)

(2) dracut命令
            为当前正在使用的内核重新制作ramdisk文件
                ~] # dracut /boot/initramfs-$(uname -r).img $(uname -r)

编译内核:
        前提:
            (1) 准备好开发环境;
            (2) 获取目标主机上硬件设备的相关信息;
            (3) 获取到目标主机系统功能的相关信息,例如要启用的文件系统;
            (4) 获取内核源代码包;
                www.kernel.org

准备好开发环境:
            包组(CentOS 6):
                Server Platform Development
                Development Tools

目标主机硬件设备相关信息:
            CPU:
                ~]# cat /proc/cpuinfo
                ~]# x86info -a
                ~]# lscpu

PCI设备:
                ~]# lspci
                    -v
                    -vv

~]# lsusb
                    -v
                    -vv

~]# lsblk

了解全部硬件设备信息
                ~]# hal-device

简单依据模板文件的制作过程:
            ~]# tar xf linux-3.10.67.tar.xz -C /usr/src
            ~]# cd /usr/src
            ~]# ln -sv linux-3.10.67 linux
            ~]# cd linux
            ~]# cp /boot/config-$(uname -r) ./.config

~]# make menuconfig
            ~]# screen
            ~]# make -j #
             make -j 4      #4表示开4个线程编译

~]# make modules_install
            ~]# make install

重启系统,并测试使用新内核;

时间: 2024-12-28 18:21:15

linux内核介绍及编译的相关文章

【华为云技术分享】Linux内核的分布式编译(1)

上一期中我们介绍了Linux内核模块依赖图的绘制方法,这一期中我们将介绍Linux内核的分布式编译方法和分布式编译工具distcc的安装过程. 一.Linux内核的分布式编译 分布式编译是指将源程序通过网络中的多台计算机的协同编译过程编译成目标程序的技术.分布式编译一般通过TCP或SSH等协议将编译任务分配至网络中不同的计算机上,使这些计算机协同完成编译工作.Linux内核可以使用distcc[1]进行分布式编译. distcc是一个通过网络中的多台计算机对C.C++.Objective C或O

linux内核裁剪及编译可加载模块

一:linux内核裁剪: (1):编译内核源码: 在邦飞的课程学习已经接近尾声:这周的重点内容是内核驱动的编写,在编写驱动之前首先的了解linux内核源码,linux主要是由五个子系统组成:进程调度,内存管理,文件系统,网络接口以及进程间通信:下面是解压的linux内核源码文件: 下面对linux内核里面的文件进行简单的说明: arch目录中包含于体系结构有关的子目录和文件,arm的相关平台信息在arch/arm目录下. scripts目录中存放着对核心配置的脚本文件. crypto目录中包含着

linux内核系列(一)编译安装Linux内核 2.6.18

1.配置环境 操作系统:CentOS 5.2 下载linux-2.6.18版本的内核,网址:http://www.kernel.org 说明:该编译文档适合2.6.18以上的Linux内核版本,只需所编译的 Linux内核版本不能低于Linux操作系统自身的内核版本,不然会遇到很多问题:   2.开始编译 cp  ./ linux-2.6.18.tar.gz  /usr/src/ tar –zxvf ./linux-2.6.18.tar.gz cd /usr/src/linux-2.6.18 /

LINUX内核配置与编译

移植LINUX内核,就是为了让LINUX系统在自己的硬件平台上运行起来,能正常工作.其中最重要的还是驱动的移植,只有驱动程序能驱动硬件设备,上层的应用程序才能正常运行. 目前,LINUX支持内核的系列主要有以下,解压linux-3.5-20131028.tgz文件,进入到文件夹里面, 除了arch文件夹里面,都是大多数平台相同的文件: 在kernel文件夹里面,包含着一些内核的文件: 在arch文件里面是支持的各种平台文件,里面是一些芯片公司支持的一些驱动程序: 一般来说,LINUX系统剪裁都分

Linux内核配置、编译及Makefile简述

Hi,大家好!我是CrazyCatJack.最近在学习Linux内核的配置.编译及Makefile文件.今天总结一下学习成果,分享给大家^_^ 1.解压缩打补丁 首先是解压缩你获取到的Linux内核.这里我用到的是linux.2.22.6版本的内核.在Linux下命令行通过tar xjf linux.2.22.6.tar.bz2解压内核.然后,如果你需要对这个内核打补丁的话,用patch命令:patch -px <../linux.2.22.6.patch.这里的px指的是忽略掉补丁文件中描述的

一、linux 内核介绍

参考文档: linux 内核剖析:https://www.ibm.com/developerworks/cn/linux/l-linux-kernel/ 1.1 linux 内核历史 在 20 世纪 60 年代,MIT(Massachusetts Institute of Technology)和一些公司为 GE-645 开发了一个名为 Multics(Multiplexed Information and Computing Service)的实验性的操作系统.这个操作系统的开发者之一 AT&

[国嵌攻略][099][Linux内核配置与编译]

为什么要配置内核 基于硬件和软件的需求选出需要的功能,去掉不要的功能. 内核配置的方法 make config:基于文本交互的配置. make menuconfig:基于图形菜单的配置. make menuconfig配置方法 1.菜单项的分类 processor type and features   处理器类型 networking support            网络协议支持 device drivers                设备驱动支持 file systems     

Linux 内核配置和编译

一.配置内核 (1). 为什么要配置内核 1. 硬件需求 2. 软件需求 选出需要的,去掉不要的 (2). 如何配置内核 1. make  config 基于文本模式的交互式配置 2. make  menuconfig 基于文本模式的菜单式配置  优点:直观,简单,高效 <  > 不选择该功能  <m> 内核模块 不是随时随刻要使用的  B.o文件存到硬盘中,需要才添加到内存里面.节省内存  <*>B.O文件存到内存中,随时随地可使用的. (3). 内核配置结果 ls

Linux内核和驱动编译常见问题

1.获取内核源码应为 git clone depth=1  不然编译时会报错 2.有些RTL188CUS网卡与wpa_supplicant兼容有问题 更新下wpasupplicant或许能解决 这里用iwconfig临时解决下 具体操作打开/etc/network/interface 注释掉wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf 加入pre-up iwconfig wlan0 essid <ssid>