打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Linux内核x86架构引导协议5(翻译)

Image校验和

From boot protocol version 2.08 onwards the CRC-32 is calculated over

the entire file using the characteristic polynomial 0x04C11DB7 and an

initial remainder of 0xffffffff.  The checksum is appended to the

file; therefore the CRC of the file up to the limit specified in the

syssize field of the header is always 0.


内核命令行

内核命令行是内核加载程序向内核通信的重要途径。有些参数对于内核加载程序自己要很重要。参照“需要特别留意的几个命令行选项”。

       内核命令行是一个以0结尾的字符串。最大长度是cmdline_size。在2.06之前版本的引导协议中,最大长度是255个字符。如果字符串过大,会被内核自动截断。

       如果是2.02及之后的版本,命令行参数的地址由数据头中cmd_line_ptr指出。这个地址可以是从setup的堆末尾到0xA0000之间的任意位置。如果是2.02及其以前版本必须遵循以下协议:

              在偏移0x0020处为cmd_line_magic,内容必须是0xA33F。大小是2个字节

              在偏移0x0022处为cmd_line_offset,内容是命令行参数相对于内核实模式部分代码的偏移位置。大小是2个字节。

 

另外,内核命令行参数必须在setup_move_size所指定的内存区域内。因此,你可能需要修改setup_move_size的值以满足该要求。


实模式部分的内存布局

内核的实模式部分要求设置堆栈地址,并在最好也设置内核命令行参数。它们都需要在低于1MB的实模式下可以访问的地方。

       需要留意的是现在的机器中存在一个相当大的名为Extended BIOS Data Area (EBDA)区域。所以,如果可能使用的内存地址越小越好(因为EBDA会放置在常规内存的顶部)。

       不幸的是,在以下情况下,必须将内核加载到0x90000处:

              当加载zImage类型的内核并且满足条件 ((loadflags & 0x01) == 0)时。

              当加载2.01及更早版本的内核时。

2.002.01版的引导协议中,实模式部分可以被加载到其他地方,但是,内核会将自己在重新移动到0x90000。在“老版”的引导协议中,实模式部分必须加载到0x90000处。

       当内核被加载到0x90000时,尽量不要使用0x9a000以上的内存。

       2.02及更高版本的协议中,命令行参数不需要和实模式下的setup在同一个64K段。这样就让堆栈可以有整个64K段大。然后,内核命令行参数在这之上。

       内核命令行参数不应该位于内核实模式部分的底下,也不应该再高位内存中。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
linux 启动协议分析--由boot.txt翻译而来
如何在Win7 32位操作系统下启用4G内存
imdisk功能简单介绍
Linux 有问必答:如何在Ubuntu或者Debian中启动后进入命令行
“该内存不能为read错误”怎么解决
【Redis26】Redis进阶:RESP协议-使用PHP手撸一个客户端
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服