- 自制linux系统
- /proc目录
- /sys目录
- 内核编译
一、自制linux系统
-
分区并创建文件系统
fdisk /dev/sdb
设计成:/dev/sdb1对应/boot目录 /dev/sdb2对应根目录
mkfs.ext4 /dev/sdb1
mkfs.ext4 /dev/sdb2
-
挂载boot
mkdir /mnt/boot
:子目录必须为boot,grub-install安装时会自动寻找/boot目录
mount /dev/sdb1 /mnt/boot
-
安装grub
grub-install --root-directory=/mnt /dev/sdb
-
恢复内核和initramfs文件
cp /boot/vmlinuz-2.6.32-642.el6.x86_64 /mnt/boot/
cp /boot/initramfs-2.6.32-642.el6.x86_64.img /mnt/boot
-
建立grub.conf
vim /mnt/boot/grub.conf
title DIY_linux
root (hd0,0)
kernel /vmlinuz-2.6.32-642.el6.x86_64 root=/dev/sda2 selinux=0 init=/bin/bash
//虽然制作系统时,硬盘名称为/dev/sdb,但是制作完成后硬盘拆下来作为启动磁盘时名称应为/dev/sda,故root=/dev/sda2
//selinx=0用于禁用selinux,保证启动过程顺利
//没有默认初始化程序/sbin/init,设置为/bin/bash保证系统能够启动
initrd /initramfs-2.6.32-642.el6.x86_64.img
- 创建一级目录
mkdir /mnt/sysroot
mount /dev/sdb2 /mnt/sysroot
mkdir -pv/mnt/sysroot/{etc,lib,lib64,bin,sbin,tmp,var,usr,sys,proc,opt,home,root,boot,dev,mnt,media}
- 复制bash和相关库文件
利用脚本将程序和相关依赖的库文件复制到/mnt/sysroot
二、/proc目录
-
定义:内核把自己内部状态信息及统计信息,以及可配置参数通过proc伪文件系统加以输出
-
参数:分为只读参数和可写参数
- 只读:输出信息
- 可写:可接受用户指定“新值”来实现对内核某功能或特性的配置
-
/proc/sys:有两种方式修改目录下的参数
- echo命令:通过重定向方式修改大多数参数的值
echo "VALUE" > /proc/sys/path/to/parameter
- sysctl命令:用于查看或设定此目录中诸多参数
sysctl -w path.to.parameter=VALUE
- echo命令:通过重定向方式修改大多数参数的值
-
无论是sysctl命令还是echo命令重定向,对内核参数的修改都只在本次开机中有效,重启后修改的设置消失。通过修改
/etc/sysctl.conf
文件,可以实现永久生效。 -
sysctl命令用法:
-
sysctl -w parameter=VALUE
:修改参数值,临时生效 -
sysctl -p
:重新读取配置文件/etc/sysctl.conf
使之生效,永久生效 -
sysctl -a
:查看所有生效的参数
-
-
实验:修改/proc/sys/net/ipv4/icmp_echo_ignore_all参数
1、echo修改参数值为1
2、sysctl修改参数值为0
可以看到其他主机对本机的ping命令在修改参数值为1后,忽略了icmp请求,当参数值改为0后,恢复了对icmp请求的响应。可以看到ping结果中的断层。
3、修改/etc/sysctl.conf文件,将参数改为1
在文件中加入一行net.ipv4.icmp_echo_ignore_all=1
,执行sysctl -p
重新读取配置文件
注意:删除之前增加的记录,执行sysctl -p
重新读取配置文件后,会发现参数并没有消失。这是因为sysctl -p
命令在读取配置文件后,对当前参数执行的是覆盖操作,而配置文件里面没有的参数将保留原状。
三、/sys目录
-
定义:为用户使用的伪文件系统,输出内核识别出的各硬件设备的相关属性信息,也有内核对硬件特性的设定信息;有些参数是可以修改的,用于调整硬件工作特性
-
udev通过此路径下输出的信息动态为各设备创建所需要设备文件,udev是运行用户空间程序
- udev为设备创建设备文件时,会读取其事先定义好的规则文件,一般在
/etc/udev/rules.d
及/usr/lib/udev/rules.d
目录下,使用udevadm trigger
命令可以使修改的规则文件立即生效
- udev为设备创建设备文件时,会读取其事先定义好的规则文件,一般在
四、内核编译
(一)内核的组成与管理
-
内核组成部分:一般可以理解分为内核核心和内核对象
- kernel:内核核心,一般为bzImage,通常在/boot目录下,名称为vmlinuz-VERSION-RELEASE。还有内核启动需要的辅助文件ramdisk,与kernel位于相同目录下,名称为initramfs-VERSION-RELEASE-img。
- kernel object: 内核对象,一般放置于/lib/modules/VERSION-RELEASE/目录下。
-
系统信息查询uname:
uname -n
:显示主机名称,等于hostname
命令
uname -r
:显示内核版本信息
uname -a
:显示所有信息 -
内核模块管理
-
lsmod命令:显示核心已经装载的内核模块
显示的内容来自于: /proc/modules文件 -
modinfo命令: 显示模块的详细描述信息
语法:modinfo [options] module_name
-n: 只显示模块文件路径
-p: 显示模块参数
-a: author
-d: description
-l: license -
modprobe命令:装载或卸载内核模块
语法:
modprobe module_name:装载内核模块,自动解决依赖模块
modprobe -r module_name:卸载内核模块 - depmod命令:内核模块依赖关系文件及系统信息映射文件的生成工具
- insmod module_name:装载内核模块,不自动解决依赖模块
- rmmod module_name:卸载模块
-
lsmod命令:显示核心已经装载的内核模块
(二)编译内核前的准备工作
-
准备工作一:
开发环境准备:安装Server Platform Development和Development Tools包组 -
准备工作二:获取主机硬件设备的相关信息
- 查询CPU信息:
cat /proc/cpuinfo
x86info -a
lscpu - 查看PCI设备信息:
lspci
lsusb
lsblk - 了解全部硬件设备信息
hal-device(CentOS 6专有)
- 查询CPU信息:
-
准备工作三:下载源码文件
(三)编译内核
-
第1步,内核选项配置
准备文本配置文件.config
,位于源码解压缩目录中。里面详细说明了每个内核编译选项的配置。可以复制/boot/config-VERSION-RELEASE文件,并改名为.config
,再根据需要修改。make menuconfig:配置内核选项的字符界面工具,以源码目录下的.config为模板,可以对.config文件进行微调。
菜单选项分为[ ], [M], []三种类型:[ ]指明该选项不编译,[M]指明该选项编译为内核模块,[]选项指明该选项编译进入kernel文件在general setup-->local version中,自定义内核本地版本号
-
第2步,编译过程
make [-j #]:-j 选项指定几个CPU核心用于编译内核 -
第3步,安装
make modules_install:安装模块
make install :安装内核相关文件,完成以下几个工作- 安装bzImage为/boot/vmlinuz-VERSION-RELEASE
- 生成initramfs文件
- 编辑grub的配置文件
(四)编译内核清理
- make clean:清理大多数编译生成的文件,但会保留config文件等
- make mrproper:清理所有编译生成的文件、config及某些备份文件
- make distclean:mrproper、patches以及编辑器备份文件
(五)卸载内核
- 删除/lib/modules/目录下不需要的内核库文件
- 删除/usr/src/linux/目录下不需要的内核源码
- 删除/boot目录下启动的内核和内核映像文件
- 更改grub的配置文件,删除不需要的内核启动列表
网友评论