您的位置:首页 > 其它

认识内核,并编译安装新内核

2012-03-06 20:15 253 查看
认识内核,并编译安装新内核

一、内核组成部分:
Kernel
initrd
/lib/modules/`uname -r`/

内核的功能:
文件系统
进程管理
内存管理
驱动程序
网络子程序
安全管理(selinux)
虚拟化

二、
/proc, /sys

/proc: 用于查看进程和内核参数的接口(可以设定)
/sys: 用于查看硬件设备和驱动程序相关数据(可以设定)
cd /proc
ls
以数字开头的目录,其数字表明进程号,其目录下存放的是其PID文件和相关进程参数。
cmdline: 启动此进程的命令是什么(不是进程)
cpuset: cpu集合,说明当前的进程可在哪些cpu上运行(/表示当前系统上的所有cpu)
statm: 数值
stat: 一大串数值
status: 有详细说明数字的意思
mem:与内存相关的东西
cpuinfo:当前系统上cpu 的信息
meminfo:内存使用的相关信息
filesystem:文件系统
modules: 模块名称
mounts:挂载的所有文件系统
swaps:交换分区
uptime: 系统启动时长

/proc/sys/net/ipv4
icmp_echo_ignore_all 若为0 ,表示不启用忽略
echo 1 > icmp_echo_ignore_all 启用忽略
ip_forward: 用于ip转发
/proc/sys/kernel下
hostname 主机名
/proc/sys/vm 虚拟内存
drop_caches 释放缓存,默认为0
echo 1 > drop_caches 启用释放缓存,在此修改后,重启之后就会无效,若是想要永久生效,要写至/etc/sysctl.conf下。
/etc/sysctl.conf 在此文件下设定内核参数
路径名以.分隔,并且不用写/proc/sys
sysctl -p 让内核重新读取/etc/sysctl.conf参数文件,调用新的设定参数。(可以不用重启,让已修改的文件生效)
-a 显示内核及所有内核使用参数和使用的值
-w net.ipv4.ip_forward=0 临时改变内核参数的值 , 临时有效

查看硬件信息:
# lspci :显示PCI总线的设备信息
# lsusb :专门显示USB设备的相关信息

# cat /proc/cpuinfo: 显示cpu的详细信息

x86, x64
# x86info 显示x86 下的cpu信息

# hal-device: 硬件抽象层,与内核打交道,保存能被内核识别的所有硬件的详细信息(大约122个,0-121)
# hal-device-manager : 图形界面下显示硬件设备的详细信息

/dev下
udev:系统初始化时,将内核所探测到的硬件信息输出在/dev目录下。(实现动态的为硬件创建相应的设备文件,是一个程序,是重量级/dev的终结者。)
让用户定义udev的规则,从而实现现在创建设备文件使用不同的设备文件名
如:
/dev/sdb1 --> /dev/usb1
/dev/sda5 --> /dev/mydata
/dev/udev/rules.d 下,以数字开头,表示优先级,数值越小,优先级越高。

手动创建设备文件:
# mknod [options] NAME TYPE [MAJOR(主设备号,用于标示类型) MINOR(次设备号,在同一种类下,标示不同的设备)]
-m MODE 权限模型
如: mknod /dev/mydev b 15 1 默认权限是644,取决于umask
mknod -m 640 /dev/mydev2 b 15 2

/dev/null,/dev/zero 经常使用,就不多说了。
熵池是一段内存空间,可认为是一个设备(基于敲击键盘的力度与间隔时间等毫无规律可循)
/dev/random : 可实现随机数,对操作系统至关重要,比如随机密码。
也是使用熵池,但是当熵池使用耗尽时,就会用软件模拟生成的随机数。

/dev/urandom : 所有的随机数都来自熵池,
如 $[$RANDOM]随机数表示
echo $[$RANDOM], -n 后边跟上n个数
使随机数只保留数字,不要字母:
dd if=/dev/urandom bs=256 count=1 读取随机数
dd if=/dev/urandom bs=256 count=1 | md5sum 生成校验码
dd if=/dev/urandom bs=256 count=1 | md5sum | cut -d' ' -f1 | tr -d 'a-zA-Z' 删除字母

三、模块:
/lib/modules/`uname -r`
/proc/modules

查看内核已经装载的模块:
# lsmod

s手动装载/卸载模块:
# modprobe MODULE
# modprobe -r MODULE

# insmod /path/to/MODULE : 插入模块,必须明确给出模块路径
# rmmod MODULE : 移除模块,只需指出模块名,不用指路径

查看模块的信息
# modinfo MODULE
mii 是硬件支持库

# depmod 用于生成对应模块依赖关系及映射(map)文件

initrd: 文件是用脚本生成的,而不是系统自带的。在RedHat上,使用mkinitrd 生成,是bash 脚本。
# mkinitrd /boot/initrd-`uname -r`.img `uname -r`
# mkinitrd --with=scsi_mod /boot/initrd-`uname -r`.img `uname -r` : 明确带上SCSI的设备文件的驱动

配置文件:
/etc/modprobe.conf: 用于定义modprobe加载某个模块时,可向其传递参数,或者为其定义别名

四、编译安装新内核
(1)下载新版本的内核
(2)配置新内核,选定要使用的功能或模块(/usr/src下存放内核)
我们是在老师的ftp服务器上下载的,如linux-2.6.28.10
下载至/usr/src/linux下
cd /usr/src
ln -sv linux-2.6.28.10 linux
cd /usr/src/linux
yum groupinstall "Developments Libraries" "Development Tools"
make menuconfig
选择要编译安装的内核模块等
(3)编译新内核
make
(4)安装
make modules_install
make install
安装完成后必须重启,选择新的内核模块
五、
1、配置内核的替代方法
yum groupinstall "KDE Software Development"
make xconfig //打开图形化界面

yum groupinstall "GNOME Software Development"
make gconfig

make config
2、在以编译过的内核源码基础上重新编译
make clean
make mrproper

sreen: 屏幕,确保屏幕已装过(yum install screen)
quit : 退出屏幕
Ctrl+a,d : 拆掉screen
用screen -ls 查看已经拆掉的列表
screen_id : 会话号
screen -r screen_id : 恢复screen

${FILENAME#*pattern} : 固定格式,从左至右匹配pattern,并将其去掉
${FILENAME##*pattern} : 从左至右贪婪匹配pattern,并去掉
如 FILENAME=/usr/src/sbin
${FILENAME#*/} 就剩 usr/src/sbin
${FILENAME##*/} 就剩sbin
${FILENAME%pattern*} : 固定格式,从右至左匹配pattern,并将其去掉
${FILENAME%%pattern*} : 从右至左贪婪匹配pattern,并去掉
如 FILENAME=/usr/src/sbin
${FILENAME%/*} : 就剩 /usr/src
${FILENAME%%s*} : 就剩 /u
3、仅编译某个目录中的源代码
make SUBDIR=arch1
4、仅编译某个目录中的模块
make M=drivers/net/
本文出自 “无辜de心碎” 博客,请务必保留此出处http://chenjiuling.blog.51cto.com/3057028/798521
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: