linux 查看安装的内核参数,第14课   linux内核参数设定及内核编译安装

1、linux内核参数设定及initramfs的生成

2、linux内核编译安装

一、回顾启动流程

post--引导次序(BIOS)--bootloader(MBR)--Kernel+ramdisk--根切换(footfs)--/sbin/init(配置文件:设置默认运行级别runlevel--制定系统初始化脚本进行系统初始化sysinit--启动服务(/etc/rc.d/rcn.d,/etc/rc.d/init.d)--/etc/rc.d/rc.local--设置Ctrlaltdel组合键--启动终端(mingetty),并在终端附加登陆程序(login)--如果级别是5则启动x server

ramdisk  contos5:initrd   ram disk:块设备

contos6:initfamfs fam fs:

配置文件:

c5:sysv init, /etc/inittab

c6:upstart,/etc/inittab+/etc/init/*.conf

c7:systemd,/usr/lin/sysemd

用户登陆过程:login,password,

nsswich:检测用户账户是否存在,如果存在,还能将其解析为UID,库(API),而非服务

/usr/lib64/linnss*、/lib64/libnss*

pam:pluggable authentication module,做用户认证,库(API)

/lib64/security/*

GRUB:GRand Unified Bootloader  配置文件路径(/boot/grub)

stage1

stage1_5

stage2

命令行接口:grub>

配置文件接口:/boot/grub/grub.conf

例1 如何将一块新硬盘挂载到宿主机(host)上制作启动程序,使其能挂载到另一台机器上启动!!!

1、将新硬盘装host主机识别为hdb,分区(fdisk sdb)为sdb1、sdb2,

格式化分区(mke2fs -t ext4 /dev/sdb1),分别挂载到host主机/mnt/boot和/mnt/sysroot下(前提在host创建mnt/boot,/mnt/sysroot、如:mount /dev/sdb1 /mnt/boot)

2、#grub-install --root-directory=/mnt /dev/sdb  #ls /mnt/boot/grub/ 验证grub

3、复制内核和boot文件

#cp /boot/vmlinuz-2.6.32-43l.el6.x86_64 /mnt/boot/vmlinuz

#cp /boot/initramfs-2.6.32-431.el6.x86_64.img /mnt/boot/initramfs.img

#vi /mnt/boot/grub/grub.conf

default=0

timeout=5

title TestOS

root (hd0,0)

kernel /vmlinuz ro root=/dev/sda2 quiet selinux=0 init=/bin/bash

initrd /initramfs.img

#cd /mnt/sysroot

#mkdir -pv etcdev proc sys bin sbin lib64 usr var home (红色必须有)

#ldd ‘which /bin/bash’ 复制bash

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

#cp (/lib64/libtinfo.so.5 /lib64/libdl.so.2 /lib64.libc.so6 /lib64/ld-linux-x86-64.so.2) /mnt/sysroot/lib64  分别拷贝到此目录

#chroot /mnt/sysroot 切换目录测试 # cd /var

#which is 查看ls命令在那里

#ldd /bin/ls 查看ls的库文件

#cp /lib64/libselinux.so.1 /mnt/sysroot/lib64/(6个库文件都拷贝过去)

#cp /bin/ls /mnt/sysroot/bin/  拷贝ls命令本身

#chroot /mnt/sysroot  #ls 测试   #sync 同步配置

4、 将硬盘挂载到新主机上,开机测试ls、cd都成功,但ifconfig命令不能用,下面我们学习              如何装载和卸载模块。

linux内核是单内核,支持模块化机制,所以好多功能都编译成模块。

内核的某些功能:

编译进内核本体【*】

编译成内核模块【M】

不选择使用    【 】

内核的组成部分:/boot/vmlinuz-VERSION

/lib/modules/VERSION/

*.ko:kernel object

模块之间也存在依赖关系

内核模块管理:

lsmod:显示内核已装载的模块

动态装卸载模块:

卸载:modprobe -r mod_name

装载:modprobe mod_name

另一种装卸载:insmod /path/to/module_file

rmmod mod_name

查看某模块的信息:modinfo mod_name

检测并生成模块间依赖关系的命令:depmod

例2:希望目标系统能运行ifconfig

#ldd 'which ifconfig'  出现ifconfig的库文件

#cp /sbin/ifconfig /mnt/sysroot/sbin

#ldd 'which ping' 查看ping的库文件

#cp /bin/ping /mnt/sysroot/bin/

#cp /lib64/libidn.so.ll /mnt/sysroot/lib64

#which insmod #ldd /sbin/insomd

#cp /sbin/insmod /mnt/sysroot/sbin

#which lsmod  #ldd /sbin/lsmod

#cp /sbin/lsmod /mnt/sysroot/sbin

#modinfo e1000  找到文件e1000路径

#cp /lib/module……/e1000/e1000.ko /mnt/sysroot/lib/module(这个目录不存在,需创建)

#mkdir -pv /mnt/sysroot/lib/modules  #sync(同步配置文件)

登陆新主机   #lsmod  查看新主机模块

#ifconfig 没有配置

#insmod /lib/modules/e1000.ko 装载这个网卡模块

#lsmod  #ifconfig -a  查看并配置ip地址,ping地址测试。

二、linux内核编译安装

插播知识:

lftp: ftp客户端工具

-u USERNAME,PASSWORD:指定用户名和密码。

-p PORT:指定端口。

-e 'CMD':执行一个命令 :例如 lftp -u root,root -p 123 192.17.54.1

lftp: 命令:

help: 获取帮助

cd: 切换远程服务器上的文件系统目录

lcd: 切换本地文件系统目录

get FILE: 下载、mget FILE1...: 下载多个文件,支持使用通配符

!COMMAND: 执行本地shell命令,而非ftp服务器上命令

mirror DIR: 镜像目录至本地

put FILE:上传文件、mput FILE1...:上传多个文件

lftpget类似于wget: 下载指定URL

kernel:www.kernel.org 内核源码官方站点

版本号:mainline 主线,stable 稳定版,longterm 长期维护版

RHEL6:6.0,6.1,6.2 内核版本号都为2.6.32,功能升级有可能是2.6.32-2

RHEL7:

查看硬件信息:

查看cpu信息:cat /proc/cpuinfo ,lscpu ,x86info(yum install x86info)

查看PCI信息:lspci -v

查看USB信息:lsusb

查看块设备:lsblk -v -a

查看硬件信息:hal-device

交叉编译:cross-compiling ,编译运行在不同的平台叫交叉编译。

编译内核的步棸:(安装好开发环境,c6:devilopment tools,server platform development,curses-devel) yum list all--->查看是否安装开发环境

第一步:配置内核

make config make allyesconfig make allnoconfig

make menuconfig(图形界面更直观,推荐)

make gconfig(依赖GNome桌面环境及GNome的图形开发环境,gtk2)

make kconfig(依赖KDE桌面环境及KDE的图形开发环境,qt)

第二步:编译 make

第三步:安装内核模块 make modules_install

第四步:安装内核 make install

获取源代码,linux-3.10.10.tar.gz

展开指定的目录:tar -xf linux-3.10.10.tar.gz -C /usr/src

ln -sv linux-3.10.10 linux ,创建软件连接linux,以后就通过linux来访问这个文件。

linux# cd linux

linux# make menuconfig 图形化界面,可以选择编译内核模块  #uname -r 查看内核版本

linux#ls -a 查看有.config的配置文件,编译好的内核都保存在此。

刚才编译好的内核很可能启动不了,所以建议cp /boot/config-2.6.32.el6.x86_64 ./.config然后再make menuconfig进行修改内核,即可。

linux# make 是一个很长的过程,可以另外打开一个终端来完成。screen

linux# make modules_install 安装位置:/lib/modules/VERSION/,分析模块间依赖关系并生成dep文件。

linux# make install 安装内核,/boot/vmlinuz-VERSION,编辑grub.conf添加新的title

如果编译错误了,再后续编译,开始前清理操作

#make clean 清理编译文件,但保留配置文件

#make mrproper 移除所有编译生成的文件、配置文件和备份文件

#make distclean 完全清理,还原到刚解压时刻

1、将编译生成的文件保存至别处:

#mkdir /path/to/somewhere

#cd /path/to/somewhere

#./configure --ksource=/usr/src/linux

2、如何只编译内核的部分代码

(1)只编译某子目录中的相关代码

# cd /usr/src/linux

#make path/to/dir/

(2)只编译部分模块

#make M=path/to/dir 如:make M=drivers/net/

(3)只编译一个模块

#make path/to/dir/module_name.ko 如:make drivers/net/e1000/e1000.ko

(4)将编译生成的文件保存至别处

#make 0=/path/to/somewhere

3、交叉编译

#make ARCH=arch 获取某ARCH的可用的默认配置

编译完成的目录:/usr/src/linux/arch/x86/boot/bzp_w_picpath

查看/boot/grub/grub.conf,生成一个内核3.10.10,启动测试!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值