Android培训班(99)内核解压过程12

在函数decompress_kernel里看到调用gunzip函数来解压内核代码,你也许比较好奇,这个gunzip函数里究竟是怎么样把内核代码解压出来的呢?为了深入地理解解压的代码,就得学习gzip文件格式,压缩的原理,才会理解其中的奥秘。现在就先看看gzip的文件格式,如下:

2bytes GZIP标志字节:0x1f,0x8b (\037 \213)

1byte 压缩方法:(0..7 reserved, 8 =deflate)

1byte 标志位:

bit 0 set: 文件可能是ASCII文本文件

bit 1 set: 附加多个gzip文件部分

bit 2 set: 存在有可选的附加内容

bit 3 set: 提供了原始的文件名称

bit 4 set: 则提供有一个O-终结的文件内容

bit 5 set: 文件被加密

bit 6,7: 保留

4bytes 文件更改时间(Unix时间)

1byte 额外的标志,决定了压缩方法。2:使用最大的压缩,最慢的算法

4:采用最快的算法

1byte 这个标志指明了进行压缩时系统的类型。

0 - FAT filesystem(MS-DOS, OS/2, NT/Win32)

1 - Amiga

2 - VMS (or OpenVMS)

3 - Unix

4 - VM/CMS

5 - Atari TOS

6 - HPFS filesystem(OS/2, NT)

7 - Macintosh

8 - Z-System

9 - CP/M

10 - TOPS-20

11 - NTFS filesystem(NT)

12 - QDOS

13 - Acorn RISCOS

255 - unknown

2bytes optional part number (second part=1) 可选的序号

2bytes optional extra field length 可选的附加内容的长度

?bytes optional extra field 可选的附加内容

?bytes optional original file name, zero terminated

可选的原始文件名称,以'\0'结束

?bytes optional file comment, zero terminated

可选文件内容(这部分不被解释,而是可读的供人使用的,以'\0'结束

12bytes optional encryption header

?bytes compressed data

4bytes crc32 这个是未压缩数据的循环冗余校验值。

4bytes uncompressed input size modulo 2^32 这是原始数据的长度以232次方为模的值。


有了文件的格式,就可以按图索骥,也就是根据文件的格式来分析压缩数据了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

caimouse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值