linux内核文档说明,Linux 2.4 内核说明文档(引导篇)

xuediao 回复于:2005-06-07 16:35:09

关于linux 2.6.11内核文件IO的系统调用实现的帖子:

1. [url=http://bbs.chinaunix.net/forum/viewtopic.php?t=544401]open & creat [/url] 描述了open函数和creat函数的实现

2. [url=http://bbs.chinaunix.net/forum/viewtopic.php?t=546490]read & write [/url] 描述了read 函数和write函数的实现

3. [url=http://bbs.chinaunix.net/forum/viewtopic.php?t=549408]flseek & close [/url] 描述了fleek函数和close函数的实现

xuediao 回复于:2005-06-08 14:12:32

这是zImage内核装载器通用的内存示意图:

+----------------0A0000----------------+

|

|  BIOS预留空间,不能使用,

|  为BIOS EBDA保留空间.

|

+----------------09A000----------------+

|

|  栈/堆/命令行,内核实模式代码使用.

|

+----------------098000----------------+

|

|  内核 setup,内核实模式代码使用.

|

+----------------090200----------------+

|

|  内核bootsector,

|  内核boot sector代码使用.

|

+----------------090000----------------+

|

|  保护模式内核,

|  大小为内核文件体积.

|

+----------------010000----------------+

|

|  引导装载器,

|  Bootsector 入口点0000:7C00

|

+----------------001000----------------+

|

|  MBR/BIOS预留空间

|

+----------------000800----------------+

|

|  MBR常用空间

|

+----------------000600----------------+

|

|  BIOS使用空间

|

+----------------000000----------------+

xuediao 回复于:2005-06-13 09:31:51

前面的正文说明了引导过程,这里附录一下引导过程所需的协议。

当前存在4个 Linux/i386的引导协议:

旧版本内核: 仅支持zImage/Image. 一些非常老的内核甚至不会支持引导命令。

2.00协议: (内核 1.3.73)增加了对bzImage和initrd的支持, 并在引导装载器和内核之间提供了标准通信方式。虽然传统的setup内存区域依然假定是可写的,但 setup.S 在装载时确是可重定位的。

2.01协议: (内核1.3.76) 增加了堆溢出警告。

2.02协议: (内核2.4.0-test3-pre3) 新增命令行协议。降低了常规内存的上限,并规定setup内存区域不能被覆盖,这使得使用EBDA从SMM或者32位BIOS入口引导系统更加

slackwaresz 回复于:2005-06-13 11:37:44

3q~

xuediao 回复于:2005-06-14 09:42:19

关于内核头的内容还有较多的详细解说,由于时间太紧,只能一天来点,各位见谅  :lol:

xuediao 回复于:2005-06-14 09:42:19

实模式的内核头

装载内核首先需要装载实模式代码(即是bootsector和setup代码),然后在0x01f1处检查内核头。尽管装载器可能仅选择装载前两个代码节(大约1k),然而实模式代码可以达到32k的长度。

这个内核头如下:

偏移量/长度 支持协议 名字 含义

01F1/1 ALL setup_sects setup内部节长度,为了向后兼容,如果值为0,则代表真是值为4。

01F2/2 ALL root_flags 如果设置此标识,则以只读方式挂载root。

01F4/2 ALL syssize 不能设置,仅供bootsect.S使用。

01F6/2 ALL swap_dev 不能设置,已经废弃的项。

01F8/2 ALL ram_size 不能设置,仅供bootsect.S使用。

01FA/2 ALL vid_mode 视频模式选现。

01FC/2 ALL root_dev 默认根设备号。

01FE/2 ALL boot_flag 0xAA55唯一号。

0200/2 2.00+ jump Jump指令。

0202/4 2.00+ header 唯一签名"HdrS"。

0206/2 2.00+ version 支持的引导协议版本号。

0208/4 2.00+ realmode_swtch 引导装载器钩子程序标识。

020C/2 2.00+ start_sys 装载的首段地址(0x1000) (已经废弃)。

020E/2 2.00+ kernel_version 内核版本字符串指针。

0210/1 2.00+ type_of_loader 引导装载器标识。

0211/1 2.00+ loadflags 引导协议选项。

0212/2 2.00+ setup_move_size 移动到高位内存的偏移量。

0214/4 2.00+ code32_start 引导装载器钩子。

0218/4 2.00+ ramdisk_image initrd装载地址

021C/4 2.00+ ramdisk_size initrd长度

0220/4 2.00+ bootsect_kludge 不能设置,仅供bootsect.S使用。

0224/2 2.01+ heap_end_ptr setup后的空余内存首指针。

0226/2 N/A pad1 没有使用。

0228/4 2.02+ cmd_line_ptr 内核命令行32位指针。

022C/4 2.03+ initrd_addr_max initrd地址上限

amthe 回复于:2005-06-14 14:57:35

先顶在看。

xuediao 回复于:2005-06-15 14:20:22

type_of_loader特别说明:

type_of_loader:

如果引导装载器被指定了一个id,则进入到0xTV地址,这里T代表引导装载器的标号,V代表版本号。否则,跳转到0xFF。

id号对应得引导装载器类型列表:

0  LILO

1  Loadlin

2  bootsect-loader

3  SYS

xuediao 回复于:2005-06-15 14:22:41

回帖的兄弟太少,不知道大伙有啥意见,唉 BBS 啊

st690714 回复于:2005-06-15 16:55:49

这么看太累,最好有个连接能下载到文档

xuediao 回复于:2005-06-15 17:26:58

由于暂时找不到地方放这个文档,所以暂时不能提供地方下载。

xuediao 回复于:2005-06-16 10:30:27

loadflags, heap_end_ptr:

如果协议版本是2.01或者更高,则条装到heap_end_ptr 地址,设置0x80位装载标识CAN_USE_HEAP。

setup_move_size:

如果采用2.00或者2.01协议,如果内核没有装载到0x90000,则稍后将内核移动到该地址。如果你需要在内核中增加更多的东西,则设置这个字段。

xuediao 回复于:2005-06-20 10:53:52

cmd_line_ptr 特别说明

cmd_line_ptr:

如果协议版本是2.02或者更高,这就是一个32位的指向内核命令行的指针地址.内核命令行可能存放到setup后到0xA0000地址之间的任何位置。当引导装载器不支持命令行时,这个字段可指向一个空串。如果这个字段为零,则内核会人定引导装载器不支持2.02以上协议。

popmouse 回复于:2005-06-21 10:41:07

有没有更多的?继续啊!!!

xuediao 回复于:2005-06-22 11:10:47

ramdisk_max 说明:

ramdisk_max:

initrd内容可能占用得最大地址。对于引导协议2.02或者更早版本,这个字段并没有提供,最大得地址为0x37FFFFFF。这个地址是安全可用的最高可用地址,所以当ramdisk数值表示了131072字节长,那么这个字段就是0x37FFFFFF,这样就可以在地址0x37FFFFFF开始ramdisk 。

lifengliu 回复于:2005-06-24 14:08:34

非常好,一直都想看到这样的内核相关的文档。 那位朋友提供一个地方下载吧,这样更能推广

xuediao 回复于:2005-06-29 09:47:58

关于第一章 引导 部分的内容就基本发完了,下面是第二章 进程和中断管理,请大家继续支持!

SybaseLU 回复于:2005-06-29 18:05:12

很奇怪为什么这么多的人讨论这些没有实际有意义的东西,而且一模一样。如果这里放到

[quote:54d15f9995="SybaseLU"]很奇怪为什么这么多的人讨论这些没有实际有意义的东西,而且一模一样。如果这里放到嵌入式来讲,有点意义。真正的对于不同体系结构的CPU的bootloader并不需要中国人来写,网上有许多针对不同的MCU的现成的bootloader..........[/quote:54d15f9995]

ni de kou qi hao da a  :em03:

xuediao 回复于:2005-07-01 10:55:53

[quote:26ba1903b2="SybaseLU"]很奇怪为什么这么多的人讨论这些没有实际有意义的东西,而且一模一样。如果这里放到嵌入式来讲,有点意义。真正的对于不同体系结构的CPU的bootloader并不需要中国人来写,网上有许多针对不同的MCU的现成的bootloader..........[/quote:26ba1903b2]

也许你是一个牛人,不过坦白的讲,我还不是,我相信现在中国有很多

megavolt 回复于:2005-07-02 08:16:49

[quote:18a991104b="SybaseLU"]很奇怪为什么这么多的人讨论这些没有实际有意义的东西,而且一模一样。如果这里放到嵌入式来讲,有点意义。真正的对于不同体系结构的CPU的bootloader并不需要中国人来写,网上有许多针对不同的MCU的现成的bootloader..........[/quote:18a991104b]

窃以为了解学习一下还是很有好处的,就像计算机的一些理论课程,看似无用其实很有用,个中滋味各位看官应该是深有体会的罢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值