解压vmlinuz和解压initrd(initramfs)
有时就算只得到一个Linux kernel的rpm包或者直接是编译后的vmlinuz和initrd的binary文件,也需要了解其中的一些细节,可能需要去查找这些binary有没有将我想要的patch编译进去。所以,就有了解压vmlinuz和initrd的需求,记录一下其方法吧。
1. 解压vmlinuz:
vmlinuz是采用 gzip 压缩的,但它不仅是一个压缩文件,而且在这两个文件的开头部分内嵌有 gzip 解压缩代码,所以你不能用 gunzip 或 gzip -dc 命令来解压 vmlinuz。可以用如下的操作来解压vmlinuz:
[root@jay-rhel boot]# file vmlinuz-2.6.32-372.el6_jay.x86_64 vmlinuz-2.6.32-372.el6_jay.x86_64: Linux kernel x86 boot executable bzImage, version 2.6.32-372.el6.bz635846_jay.x86, RO-rootFS, root_dev 0x802, swap_dev 0x3, Normal VGA# 查找gzip压缩内容的开始头部,通过“1f 8b 08”这个签名来查找 [root@jay-rhel boot]# od -t x1 -A d vmlinuz-2.6.32-372.el6_jay.x86_64 | grep "1f 8b 08" 0014432 48 8d 83 70 81 3d 00 ff e0 1f 8b 08 00 c4 01 9c # 计算bizip压缩内容开始处的offset,为:14432 + 9 = 14441 (9是从0014431起到"if 8b 08"之间的字节数) # 解压出被压缩的kernel中的内容 [root@jay-rhel boot]# dd if=vmlinuz-2.6.32-372.el6_jay.x86_64 bs=1 skip=14441 | zcat > vmlinux-jaygzip: stdin: decompression OK, trailing garbage ignored [root@jay-rhel boot]# file vmlinux-jay vmlinux-jay: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, stripped[root@jay-rhel boot]# strings vmlinux-jay | grep 'Linux version' Linux version 2.6.32-372.el6.bz635846_jay.x86_64 (n0ano@sobek.n0ano.com) (gcc version 4.4.4 20100726 (Red Hat 4.4.4-13) (GCC) ) #1 SMP Tue May 21 17:21:56 MDT 2013 [root@jay-rhel boot]# strings vmlinux-jay | grep '/sbin/' /sbin/init /sbin/request-key /sbin/poweroff /sbin/modprobe
2. 解压initrd(initramfs):initrd一般是一个用gzip压缩的cpio格式的image,所以可以先gunzip解压,然后用cpio命令提取里面的信息。
[root@jay-linux temp]# cp /boot/initramfs-3.9.0-rc3+.img initramfs-3.9.0-rc3+.img.gz [root@jay-linux temp]# gunzip -d initramfs-3.9.0-rc3+.img.gz [root@jay-linux temp]# ls initramfs-3.9.0-rc3+.img# 现在较新的initrd一般是cpio文档格式,而很老的initrd(如Linux 2.4 kernel的年代)则直接就是普通image # #### mount -o loop initrd-kernel-2.4.img /mnt/ ##基本很少见了 [root@jay-linux temp]# cpio -idmv < initramfs-3.9.0-rc3+.img . sbin sbin/rmmod sbin/blkid sbin/cryptsetup sbin/insmodpost.sh ...... mount/99mount-root.sh proc 49757 blocks [root@jay-linux temp]# ls bin dracut-004-283.el6 init initqueue-settled lib pre-pivot proc sysroot var cmdline emergency initqueue initqueue-timeout lib64 pre-trigger sbin tmp dev etc initqueue-finished initramfs-3.9.0-rc3+.img mount pre-udev sys usr
简单记录一下以前写过的一段笔记(主要来自网上资料,加上了自己一点理解和注释):
通常在Linux系统的/boot/目录下有vmlinuz、initrd、System.map等几个文件,这里对其进行一点简单的介绍。
vmlinuz 是可引导的、压缩的内核。“vm”代表“Virtual Memory”。内核编译时通过命令 make bzImage 创建,然后通过如下命令产生。bzImage 是压缩的内核映像,需要注意,bzImage 不是用 bzip2 压缩的,bzImage 中的 bz 容易引起 误解,bz 表示“big zImage”。 bzImage 中的 b 是“big”意思。 zImage(vmlinuz) 和 bzImage(vmlinuz) 都是用 gzip 压缩的。它们不仅是一个压缩文件,而且在这两个文件的开头部分内嵌有 gzip 解压缩代码。所以你不能用 gunzip 或 gzip -dc 解包 vmlinuz。
老的 zImage 解压缩内核到低端内存(第一个640K),bzImage 解压缩内核到高端内存(1M以上)。如果内核比较小,那么可以采用 zImage 或 bzImage 之一,两种方式引导的系统运行时是相同的。大的内核采用 bzImage,不能采用 zImage。 vmlinux 是未压缩的内核,vmlinuz 是 vmlinux 的压缩文件。
initrd 是“initial ramdisk”的简写。initrd 一般被用来临时的引导硬件到实际内核 vmlinuz 能够接管并继续引导的状态。一般 initrd 主要是用于加载 ext3 等文件系统及 SCSI 设备的驱动。initrd 映象文件是使用 mkinitrd 创建的。(比较新的initrd的名称一般为这样的:initramfs-3.10.0-rc1+.img,较老一点,命名形如:initramfs- 2.6.32-358.el6.x86_64.img。)关于initrd,以前转过一篇文章,“initrd详解(转)”。
System.map 是一个特定内核的内核符号表。它是你当前运行的内核的 System.map 的链接。Linux 符号表使用到2个文件: /proc/kallsyms 和 System.map。虽然内核本身并不真正使用 System.map,但其它程序比如 klogd,lsof 和 ps 等软件需要一个正确的 System.map。
转载于:https://www.cnblogs.com/oracleloyal/p/5583396.html
解压vmlinuz和解压initrd(initramfs)相关推荐
- python解压文件_使用Python实现文件压缩和解压
大家可能都熟悉.zip格式的文件.它可以把多个文件,压缩成一个文件.这在网络上传输时很有用,而且节省硬盘空间. 接下来,我们使用Python实现压缩和解压. 读取ZIP文件信息 要读取ZIP文件的内容 ...
- ubuntu16.04 server unrar解压rar文件提示command not found和解压tar.bz2文件
ubuntu16.04 server unrar解压rar文件提示command not found和解压tar.bz2文件 Unrar解压rar文件失败 unrar e a.rar -sh: unr ...
- linux为什么用tar压缩,linux下tar压缩和解压命令用法详解
linux下tar压缩和解压命令用法详解 2017-03-25 14:06 分享人:老牛 将/usr/local/test目录下所有文件仅打包,不压缩到 /usr/local/auto_bak/目下 ...
- python解压到指定文件夹_在Python中压缩和解压文件
Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 如果你已经使用计算机一段时间,你可能遇到了.zip扩展名的文件.它们是可以保存许多其他文件,文件夹和子文件 ...
- java 解压到内存,Java GZip 基于内存实现压缩和解压的方法
欢迎大家关注本博,同时欢迎大家评论交流,可以给个赞哦!!! GZip是常用的无损压缩算法实现,在Linux中较为常见,像我们在Linux安装软件时,基本都是.tar.gz格式..tar.gz格式文件需 ...
- mac 命令行 解压7z文件_如何在Mac上快速压缩和解压文件?Mac上解压和压缩文件的方法...
苹果mac电脑怎么压缩和解压文件?Mac电脑仅默认支持把文件压缩成zip格式,解压成zip.tar.gz,bz2等格式,有些操作需要安装第三方软件来完成,这篇文章为大家带来几种关于在Mac上解压和压缩 ...
- linux fastq.gz文件如何解压,科学网—批量gzip,ungzip快速压缩和解压fastq文件 - 陈明杰的博文...
二代测序fastq文件太大,解压,压缩很浪费时间. 常规:使用gzip gunzip单线程压缩 进阶1:python调用threading,多线程压缩,相当于开了N个窗口进行解压和压缩,略. 进阶2: ...
- python zipfile压缩的文件用shell命令解压_Python学习第177课——bzip2、zip方式压缩文件和解压文件...
之前我们学习了tar打包.解包.gzip压缩,现在我们学习gzip解压. ●gzip解压 现在我们把上节生成的压缩文件linux_compressed.gz进行解压,使用命令: tar -xzf li ...
- linux带密码解压密码,linux 下文件加密压缩和解压的方法
方法一:用tar命令 对文件加密压缩和解压 压缩: [html] view plain copy tar -zcf - filename |openssl des3 -salt -k password ...
- Linux中压缩和解压(gzip压缩/gunzip解压)(zip压缩/unzip解压)(tar打包解压)
文章目录 Linux中压缩和解压(gzip压缩/gunzip解压)(zip压缩/unzip解压)(tar打包解压) 一.gzip压缩 / gunzip解压 1.命令 2.注意 3.案例 4.常用 二. ...
最新文章
- alpha阶段个人总结(201521123031林庭亦)
- 最小割 ---- 最大密度子图(最大权值闭合子图)
- Winform中使用mysqldump实现选择部分表定期备份mysql数据库
- linux代码、数据库备份
- 20200117:(leetcode)最长回文子串(暴力法)
- Hinton领衔谷歌大脑新研究,拯救被认成步枪的乌龟
- java日期减去天数得日期_Java日期添加天数,减去天数,日历
- Ubuntu18.04之man中文版
- 论文页眉奇偶页不同怎么设置_什么!论文排版这么简单的吗?!
- Atitit 函数式编程与命令行语言的区别与优缺点 目录 1. 常见的函数式语言	2 1.1. 命令行 bat	2 1.2. Sql h5 css 正则表达式	2 1.3. 工作流语言 anno注
- mysql 外键 150_mysql之创建外键报150错误的处理方法
- [转载] 实现宿主机和VirtualBox下虚拟机ping相通教程
- java httpclient 下载_java HttpClient 下载一张图片
- java映射的概念_Java之路:映射(Map)
- Request 请求转发
- 2020校招Java笔试题
- jqwidgets API
- 学计算机段子,段子手要失业了,计算机也懂幽默
- XYNUOJ-2139 德莱联盟
- outlook邮箱邮件与企业邮箱同步(outlook本地文件夹邮件,web邮箱里没有)