Loading [MathJax]/jax/output/HTML-CSS/jax.js

菜鸟学Linux 第034篇笔记 vmlinuz, initrd, modules, script

简介:

菜鸟学Linux 第034篇笔记  vmlinuz, initrd, modules, script





内核两部分

核心 /boot/vmlinuz-version

内核模块 /lib/modules/version


内核设计风格

单内核

模块化设计

微内核

装载模块命令

insmod

modprobe


查看Linux内核最新版本

www.kernel.org

查询所安装的发行版linux的内核版本 uname -r


用户空间访问、监控内核的方式

/proc, /sys 伪文件系统

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

/sys/ 某些文件可写



设定内核参数值的方法

会立即生效,但无法永久有效

echo value > /proc/sys/TO/somefile

e.g. echo 1 > /proc/sys/vm/drop-caches

sysctl -w kernel.hostname=msky

configure kernel parameters at runtime

-p     Load   in   sysctl   settings   from  the  file  specified  or

                  /etc/sysctl.conf if none  given.   Specifying  -  as  filename

                   means reading data from standard input.


-a     Display all values currently available.

永久有效,但无法立即生效

修改/etc/sysctl.conf   使用sysctl -p 来让内核重读该配置文件

修改是否通话双网卡流量传送 net.ipv4.ip_forward = 0

0 is disabled, 1 is enabled.



内核模块管理

lsmod program to show the status of modules in the Linux Kernel

modinfo program to show information about a Linux Kernel module

modprobe program to add and remove modules from the Linux Kernel

modprobe MOD_NAME 装载模块(不需要指路径)

modprobe -r MOD_NAME 卸载模块


insmod /PATH/TO/MOD_NAME 需要指路径

rmmod MOD_NAME

depmod program to generate modules.dep and map files.

depmod /PATH/TO/MODULES_DIR


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

1、不使用此功能

2、编译成内核模块

3、编译进内核



如何手动编译内核

make gconfig 需要GNOME Desktop Environment

图形开发库 GNOME Software Development

make kconfig 需要KDE (K Desktop Environment) 

图形开发库 KDE Software Development

make menuconfig

下载Linux内核后解压

1. tar xf linux-4.8.11.tar -C /usr/src/

2. ln -sv linux-4.8.11 linux

3. make menuconfig 选择特性注意远程连接的需要显示的窗口够大才可以显示

如不知道要删除或配置某个模块可以导入先前的配置文件

即/boot/config-2.6.18-308.el5  将该文件mv到编译的文件夹下改为.config

4.  make  注意可能会需要非常长的时间0.5-2小时不等,不建议远程操作

因为时间长可能连接中断,会导致编译中断

如果非要远程,建议安装软件screen yum install screen

编译执行前使用screen 

然后执行make

screen命令

不加任何参数建立screen

-ls 显示已经建立的屏幕

Ctrl+a 放开 按d 拆除屏幕

-r ID 还原回某屏幕

6. make modules_install

7.  make install



二次编译时清理 清理之前如果有需要请备份.config文件

make clean

make mrproper




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


克隆迷你小linux  (目录未测试成功,老报错,目前正在研究中。。。)

建立硬盘分区sdc1 sdc2

创建两个目录/mnt/boot /mnt/sysroot

将sdb1做成grub分区, 前章节有介绍,这里不作详细介绍

拷贝内核到/mnt/boot目录下

cp /boot/vmlinuz-2.6.18-308.el5 /mnt/boot/vmlinuz-2.6.18

做initrd

cp /boot/initrd-2.6.18-308.el5.img /root/

file initrd-2.6.18-308.el5.img

mv initrd-2.6.18-308.el5.img initrd-2.6.18-308.el5.img.gz

mkdir initrd

cd initrd

cpio -id < ../initrd-2.6.18-308.el5.img

 

此上命令可以用zcat /boot/initrd-2.6.18-308.el5.img | cpio -id

vim init

切换到最后一行找到

mkrootdev -t ext3 -o defaults,ro /dev/sda1 将sda1 更改为sdc2

打包成init放到/mnt/boot目录里 只可以解压的那个目录里执行该命令并

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

最后创建grub.conf上一章也讲过了,这里不再重复

挂载sdc2到 /mnt/sysroot目录下创建基本的linux 根目录

/bin /boot /dev /etc /home /lib /proc /sys /root /sbin /tmp

/usr /var/log

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

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

将以上两个文件所依赖的库文件拷贝到lib目录下

ldd /sbin/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/

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

ld /bin/bash

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

在/mnt/sysroot/etc/创建inittab文件添加如下两行

id:3:initdefault:

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

在/mnt/sysroot/etc/rc.d/创建rc.sysinit文件添加如下两行

#!/bin/bash

#

echo -e "\tWelcome to \033[31mMySky lab\033[0m Linux."

/bin/bash


 

编写脚本自动拷贝某命令的库到某个目录下

学习两个bash 参数扩展

FILE=/usr/local/src

${parameter#word} echo ${FILE#*/} usr/local/src

${parameter##word} echo ${FILE##*/} src


${parameter%word} echo ${FILE%/*} /usr/local

${parameter%%word} echo ${FILE%%/*}


#!/bin/bash

#This scrip is used to copy lib to other directory.


DESTDIR=/mnt/sysroot

cplib() {

  LIBPATH=${1%/*}

  [ ! -d DESTDIRLIBPATH ] && mkdir -p DESTDIRLIBPATH

  [ ! -e DESTDIR{1} ] && cp 1DESTDIRLIBPATH && echo "copyDESTDIR${1} done"

}


cpbin() {

  CMDPATH=${1%/*}

  [ ! -d DESTDIRCMDPATH ] && mkdir -p DESTDIRCMDPATH

  [ ! -e DESTDIR{1} ] && cp 1DESTDIRCMDPATH && echo "copyDESTDIR${1} done"

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

cplib $LIB

  done

}


read -p "Input Command:" CMD

until [ $CMD == "q" ]; do

  ! which $CMD &> /dev/null && echo "Wrong command" && read -p "input again:" CMD && continue

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

  cpbin $COMMAND

  echo "copy $COMMAND finished."

  read -p "Continue command:" CMD

done

本文转自Winthcloud博客51CTO博客,原文链接http://blog.51cto.com/winthcloud/1878450如需转载请自行联系原作者


Winthcloud

相关文章
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
在Linux系统中,使用Tkinter库时可能会遇到中文显示乱码的问题,这通常是由于字体支持问题导致的,可以通过更换支持中文的字体来解决。
228 0
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
|
3月前
|
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
133 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
linux笔记 diff及patch的制作与使用
这篇文章是关于Linux系统中使用`diff`命令生成补丁文件以及使用`patch`命令应用这些补丁的详细教程和实战案例。
152 2
linux笔记 diff及patch的制作与使用
Linux源码阅读笔记20-PCI设备驱动详解
Linux源码阅读笔记20-PCI设备驱动详解
【linux】PetaLinux 2024.1安装笔记
【linux】PetaLinux 2024.1安装笔记
378 0
《循序渐进LINUX》笔记
基础知识、服务器搭建、系统管理、性能调优、集群应用 1、swap物理内存两倍 2、根分区5G 3、/boot 100M 4、查看系统硬件信息: cat /proc/meminfo cat /proc/cpuinfo 查看磁盘信息: fd...
1293 0
Linux 超级强大的十六进制 dump 工具:XXD 命令,我教你应该如何使用!
在 Linux 系统中,xxd 命令是一个强大的十六进制 dump 工具,可以将文件或数据以十六进制和 ASCII 字符形式显示,帮助用户深入了解和分析数据。本文详细介绍了 xxd 命令的基本用法、高级功能及实际应用案例,包括查看文件内容、指定输出格式、写入文件、数据比较、数据提取、数据转换和数据加密解密等。通过掌握这些技巧,用户可以更高效地处理各种数据问题。
266 8
|
2月前
|
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
1009 6
|
2月前
|
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
154 3
|
1月前
|
Linux 10 个“who”命令示例
Linux 10 个“who”命令示例
88 14
Linux 10 个“who”命令示例