用户空间访问、监控内核的方式:
/proc,/sys
伪文件系统:
/proc/sys:此目录中的文件很多事可读写的
/sys/:某些文件可写
设定内核参数值得方法:
echo VALUE>/proc/sys/TO/SOMEFILE
sysctl -w kernel.hostname=HOSTNAME 这里的写法相当于
echo HOSTNAME > /proc/sys/kernel/hostname
永久有效:/etc/sysctl.conf 修改完立即生效: sysctl -p
sysctl -a:显示所有内核参数以及值
内核模块管理:
lsmod:查看
modprobe MOD_NAME 装载某模块
modprobe -r MOD_NAME 卸载某模块
modinfo:查看模块的具体信息
insmod /PATH/TO/MODULE_FILE 装载模块
rmmod MOD_NAME
depmod /PATH/TP/MODILES_DIR
内核的编译:
编译的3种选择:
1.不使用此功能
2.编译成内核模块
3.编译进内核
如何手动编译内核:
make gconfig:Gnome桌面使用,需安装图形开发库工具
make kconfig:KDE桌面使用
make menuconfig:文件界面
(默认我们选择完后,会在编译内核的目录下生成.config文件,不想一个一个选的话也可以拷贝/boot/config-`uname -r` 文件到当前,并更名为.config,然后再选择修改)
make
make module
make module_install
make install
二次编译时清理,清理前,有需要的话记得备份.config
make clean 删除大多数的编译生成文件,但是会保留内核的配置文件.config,还有足够的编译
make mrproper 删除所有的编译生成文件, 还有内核配置文件, 再加上各种备份文件
make distclean mrproper删除的文件, 加上编辑备份文件和一些补丁文件。
下面开始diy mini linux
-
給虚拟机挂载新的硬盘
过程略
-
给新硬盘分区、格式化、并挂载
mke2fs -j /dev/sdb2
mkdir /mnt/{boot,sysroot} -p
mount /dev/sdb1 /mnt/boot
mount /dev/sdb2 /mnt/sysroot
-
安装boot分区并提供grub.conf文件
grub-install --root-directory=/mnt/ /dev/sdb
(这里的目录指定的是新硬盘boot目录所在的父目录,完成后会在boot里面生成grub文件目录)
4.复制内核和initrd文件到/boot下
cp /boot/vmlinuz-`uname -r` /mnt/boot/vmlinuz
(initrd文件不能直接用,需要修改几个地方,因此我们先解压到某个目录)
mkdir /mnt/init
cd /mnt/init
zcat /boot/initrd-`uname -r`.img |cpio -id
vi /mnt/init/init修改以下几项:
(lvm我们暂时不需要用到,所以先注销掉,mkrootdev里面的设备要注意一点,我们当前系统上已有sda,所以识别新硬盘为sdb,但是新硬盘单独用的时候会被识别为sda,而根文件系统所在分区为第2个分区,所以这里要替换成/dev/sda2)
find . |cpio -H NEWC --quiet -o|gzip -9 >/mnt/boot/initrd.img
5.创建根文件系统,并拷贝程序:
mkdir bin sbin boot etc/{rc.d,init.d} usr/{local,bin,sbin,lib} lib lib64 proc sys dev tmp home -p
(为了节约时间,写了个脚本,直接拷贝 bash 、init、ls等命令)
测试是否可以chroot
6.提供配置文件inittab,和rc.sysinit
vi /mnt/sysroot/etc/inittab添加如下两行即可:
id:3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
vi /mnt/sysroot/etc/rc.d/rc.sysinit
chmod +x /mnt/sysroot/etc/rc.d/rc.sysinit
7.至此,一个不怎么完善的mini linux 已经可以启动了,下一篇再谈谈怎么执行运行级别人物和挂载根分区为读写,让系统可以开关机等,现在先测试,应该可以启动了的。