linux 内核详解

内核设计风格:

单内核:Linux

微内核:Windows,Solaris 真正的支持线程

RedHat,SUSE

核心:动态加载 内核模块

内核:/lib/modules/"内核版本号命令的目录"/

用户空间访问、监控内核的方式:/proc,/sys 伪文件系统

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

/sys/:某些文件可写

设定内核参数值的方式:

echo VALUE >/proc/sys/XX

或 stsctl -w kernar.XX="xx"

上述两种方法能使设定立即生效,但不能永久有效

永久有效:修改/etc/sysctl.conf

修改完成之后,执行sysctl -p

sysctl -a:显示所有的内核参数及其值

内核模块管理

lsmod:列出内核模块

modprobe MOD_NAME:装载某模块

modprobe -r MOD_NAME:卸载某模块

modinfo MOD_NAME:查看模块的具体信息

insmod:装载模块

remod MOD_NAME

depom:

内核除了核心功能之外,在编译时大多功能都有三种选择:

1、不使用次功能

2、编译成内核模块

3、编译进内核

如何手动编译内核

make gconfig:Gnome桌面环境使用

make kconfig:KDE桌面环境使用,需要安装图形开发库

make menuconfig:需要在内核目录执行

注意:使用make menuconfig 需要安装ncurses

yum groupinstall "Development Tools" "Development Libraries"

menuconfig编译内核步骤

cd /usr/src

mv /root/linux-3.16.2.tar.xz ./

xz -d linux-3.16.2.tar.xz    #解压

tar xvf linux-3.16.2.tar    #展开

ln -s linux-3.16.2 linux    #链接

cd linux

make menuconfig

make

make modules_install

make install

二次编译时清理:清理前最好备份.config文件

make clean

make mrproper

grub-->kernel-->initrd-->ROOTFS(/sbin/init,/bin/bash)

mkinitrd initrd文件路径 内核版本号

mkinitrd /boot/initrd-`uname -r`.img `uname -r`

虚拟机实现编译系统

添加一块硬盘,对其进行分区,格式化

mkdir -p /mnt/{boot,sysroot}

mount /dev/sdb1 /mnt/boot/

mount /dev/sdb2 /mnt/sysroot/

grub-install --root-directory=/mnt /dev/sdb    #装载Grub

[[email protected] ~]# ls /mnt/boot/ #grub已经存在

grub  lost+found

cp /boot/vmlinuz-2.6.32-220.el6.x86_64 /mnt/boot/vmlinuz    #复制内核

#创建initrd

mkdir iso

cd iso

zcat /boot/initramfs-2.6.32-220.el6.x86_64.img |cpio -id

vim init    #修改init的如下行

mkrootdev -t ext3 -o defaults,ro /dev/sdb2

find . |cpio -H newc --quiet -o |gzip -9 > /mnt/boot/initrd.gz

vim /mnt/boot/grub/grub.conf

default=0

timeout=5

title my linux

root (hd0,0)

kernel /vmlinux

initrd /initrd.gz

cd /mnt/sysroot/

mkdir -pv proc sys dev etc/rc.d lib bin sbin boot home var/log usr/{bin,sbin} root tmp

#需要拷贝的两类 1./sbin/* 2./bin/*

cp /sbin/init /mnt/sysroot/sbin/

cp /bin/bash /mnt/sysroot/bin/

ldd /sbin/init    #查看init的依赖库

cp /lib/libsepol.so.1 /mnt/sysroot/lib/

cp /lib/libselinux.so.1 /mnt/sysroot/lib/

cp /lib/libc.so.6 /mnt/sysroot/lib/

cp /lib/libdl.so.2 /mnt/sysroot/lib/

ldd /bin/bash    #查看bash的依赖库

cp /lib/libtermcap.so.2 /mnt/sysroot/lib/

cp /lib/ld-linux.so.2 /mnt/sysroot/lib/

chroot /mnt/sysroot/    #测试能否使用,exit退出

sync    #同步磁盘

vim /mnt/sysroot/etc/inittab    #只需2行,默认级别和系统初始化

id:3:initdefault:

si::sysinit:/etc/rc.d/rc.sysinit

vim /mnt/sysroot/etc/rc.d/rc.sysinit

#!/bin/bash

echo -e "\twelcome to \033[31mmylinux\033[0m"

/bin/bash

chmod +x /mnt/sysroot/etc/rc.d/rc.sysinit

#需要拷贝的两类 1./sbin/* 2./bin/* 脚本

dest=/mnt/sysroot/

libcp() {

libpath=${1%/*}

[ ! -d $dest$libpath ] && mkdir -p $dest$libpath

[ ! -e $dest${1} ] && cp $1 $dest$libpath && echo "copy lib $1 finished."

}

bincp() {

binpath=${1%/*}

[ ! -d $dest$binpath ] && mkdir -p $dest$binpath

[ ! -e $dest${1} ] && cp $1 $dest$binpath

for lib in `ldd $1 | grep -o "/.*lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`; do

libcp $lib

done

}

read -p "your command: " cmd

until [ $cmd == ‘q‘ ]; do

! which $cmd && echo "wrong command" && read -p "input again: " cmd && continue

command=`which $cmd |grep -v "^alias" | grep -o "[^[:space:]]\{1,\}"`

bincp $command

echo "copy $command finished"

read -p "continue: " cmd

done

mount -n 挂载时不更新/etc/mtab文件

cat /proc/mounts 里面也有挂载的所有文件系统

#让这个小系统实现开机、关机

cd /mnt/sysroot

vim etc/rc.d/init.d/halt

#!/bin/bash

case $0 in

*reboot) command=‘/sbin/reboot‘;;

*halt) command=‘/sbin/halt -p‘;;

*) echo "Only call this script by *reboot OR *halt";;

esac

case $1 in

start)

;;

stop)

;;

status)

;;

*)

echo "usage:`basename $0`{start|stop|status}"

;;

esac

exec $command

cd etc/rc.d

mkdir rc0.d rc6.d

cd rc0.d

ln -sv ../init.d/halt S99halt

cd rc6.d/

ln -sv ../init.d/halt S99reboot

cd ../

vim rc

#!/bin/bash

RUN=$1

for i in /etc/rc.d/rc${RUN}.d/K*; do

$i stop

done

for i in /etc/rc.d/rc${RUN}.d/S*; do

$i start

done

vim etc/inittab

l0:0:wait:/etc/rc.d/rc 0

l6:6:wait:/etc/rc.d/rc 6

时间: 2024-08-10 02:11:40

linux 内核详解的相关文章

linux内核详解

一.linux的内核管理:对内核的基本认识 我们所谈到的操作系统主要指内核 以上功能据没有涉及实现文本编辑.实现字处理,也没有服务等等. 故,操作系统是一种通用软件,是平台类软件,自己并不做任何工作,只是给其他程序提供了运行环境.除操作系统之外,还有应用程序,为实现某一目的,专门设计的程序. 那么,既然内核有这么多功能,模块化设计?各功能独立成子系统? 显然将功能整合在一起,内核将变得非常复杂. 二.内核的设计流派 说说内核设计的两大流派: 从根本上讲,将一个事情拆成各个小问题,然后每个小问题只

Linux 目录详解 树状目录结构图

1.树状目录结构图 2./目录 目录 描述 / 第一层次结构的根.整个文件系统层次结构的根目录. /bin/ 需要在单用户模式可用的必要命令(可执行文件):面向所有用户,例如:cat.ls.cp,和/usr/bin类似. /boot/ 引导程序文件,例如:kernel.initrd:时常是一个单独的分区[6] /dev/ 必要设备, 例如:, /dev/null. /etc/ 特定主机,系统范围内的配置文件. 关于这个名称目前有争议.在贝尔实验室关于UNIX实现文档的早期版本中,/etc 被称为

Gentoo Linux安装详解--根据官方WiKi整理

1. 前期准备 远程登录: 开启ssh服务: /etc/init.d/sshd start 设置密码: passwd 以便使用putty.ssh client远程登录上传stage等(有时在线下载很慢,而局域网上传很快) 准备磁盘: 分区: fdisk /dev/sda /dev/sda1 : /boot 100M(32-100M) 设启动笔记-a/dev/sda2 : / 20G/dev/sda3 : /home 20G/dev/sda5 : /swap 1G (内存< 512 MB,分区分配

PXE的概述及Linux使用详解

PXE的概述及使用详解 现在企业采购的很多计算机都是没光驱的,怎么安装系统呢?另外,如何能快速大规模安装Linux服务器操作系统呢,有什么好办法吗? 答案是有的,那就是本文要说的:PXE PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial filet

Gentoo Linux安装详解

1. 前期准备 远程登录: 开启ssh服务: /etc/init.d/sshd start 设置密码: passwd 以便使用putty.ssh client远程登录上传stage等(有时在线下载很慢,而局域网上传很快) 准备磁盘: 分区: fdisk /dev/sda /dev/sda1 : /boot 100M(32-100M) 设启动笔记-a/dev/sda2 : / 20G/dev/sda3 : /home 20G/dev/sda5 : /swap 1G (内存< 512 MB,分区分配

10.Linux系统启动详解

10.Linux系统启动详解 ·1.BIOS,负责检查硬件并且查找可启动设备, ·2.MBR:Boot Code, ·bios找到可启动设备后执行其引导代码,MBR的前446字节, ·/boot/grub/stage1内容为当前硬盘MBR的镜像, ·3.执行引导程序-GRUB ·grub是现在Linux使用的主流引导程序,可以用来引导大多数主流系统, ·Linux的grub可以识别windows的启动程序,但windows的会覆盖Linux的,故先windows后Linux, ·grub相关文件

Linux procfs详解

1.0 proc文件系统总览在类Unix系统中体现了一种良好的抽象哲学,就是几乎所有的数据实体都被抽象成一个统一的接口--文件来看待,这样我们就可以用一些简单的基本工具完成大量复杂的操作.在Linux中存在着一类特殊的伪文件系统,用于使用与文件接口统一的操作来完成各种功能,例如ptyfs.devfs.sysfs和procfs.而procfs就是其中应用最广泛的一种伪文件系统.procfs是Linux内核信息的抽象文件接口,大量内核中的信息以及可调参数都被作为常规文件映射到一个目录树中,这样我们就

Linux内存详解

--Linux内存详解 -----------------2014/05/24 Linux的内存上表现的不像windows那么直观,本文准备详细的介绍一下Linux的内存. 请看这下有linux命令free和vmstat输出的内存信息. Mem行used表示已经分配的内存,free表示尚未分配的内存,shared表示共享内存. 计算方法:缓存统计行free=Mem(free)+Mem(buffers)+Mem(cached) 共享内存 对于共享内存(Shared memory),主要用于在UNI

Linux Ptrace 详解

转 https://blog.csdn.net/u012417380/article/details/60470075 Linux Ptrace 详解 2017年03月05日 18:59:58 阅读数:6331 一.系统调用 操作系统提供一系列系统调用函数来为应用程序提供服务.关于系统调用的详细相关知识,可以查看<<程序员的自我修养>第十二章. 对于x86操作系统来说,用中断命令"int 0x80"来进行系统调用,系统调用前,需要将系统调用号放入到%EAX寄存器中,将