【zz】linux启动过程(2)-setup.S分析

本文深入分析了Linux内核启动过程中实模式下的初始化步骤,重点介绍了/Arch/i386/boot/setup.S文件的内容,并详细解释了INITSEG(9000:0000)段参数表的构成及作用。

II、实模式下的初始化


实模式下的初始化,主要是指从内核引导成功后,到进入保护模式之前系统所做的一些处理。在内 核源码中对应的程序是 /Arch/i386/boot/setup.S;以下部分主要是针对此文件进行的分析。这部分的分析主要是要弄懂它的处理流程和 INITSEG(9000:0000)段参数表的建立,此参数表包含了很多硬件参数,这些都是以后进行保护模式下初始化,以及核心建立的基础。

1. 几个其它相关文件:

<1> /Arch/i386/boot/bootsect.S

<2> /include/linux/config.h

<3> /include/asm/boot.h

<4> /include/ asm/segment.h

<5> /include/linux/version.h

<6> /include/linux/compile.h

2. 实模式下的初始化过程分析:





INITSEG(9000:0000)段参数表:(参见Include/linux/tty.h)

参数名

偏移量(段址均为0x9000) 长度Byte

参考文件

PARAM_CURSOR_POS0x00002Arch/i386/boot/video.S
extended mem Size0x00022Arch/i386/boot/setup.S

PARAM_VIDEO_PAGE

0x00042Arch/i386/boot/video.S
PARAM_VIDEO_MODE0x00061Arch/i386/boot/video.S
PARAM_VIDEO_COLS0x00071Arch/i386/boot/video.S
没用0x00082Include/linux/tty.h
PARAM_VIDEO_EGA_BX0x000a2Arch/i386/boot/video.S
没用0x000c2Include/linux/tty.h
PARAM_VIDEO_LINES0x000e1Arch/i386/boot/video.S
PARAM_HAVE_VGA0x000f1Arch/i386/boot/video.S
PARAM_FONT_POINTS0x00102Arch/i386/boot/video.S
PARAM_LFB_WIDTH0x00122Arch/i386/boot/video.S
PARAM_LFB_HEIGHT0x00142Arch/i386/boot/video.S
PARAM_LFB_DEPTH0x00162Arch/i386/boot/video.S
PARAM_LFB_BASE0x00184Arch/i386/boot/video.S
PARAM_LFB_SIZE0x001c4Arch/i386/boot/video.S
暂未用①0x00204Include/linux/tty.h
PARAM_LFB_LINELENGTH0x00242Arch/i386/boot/video.S
PARAM_LFB_COLORS0x00266Arch/i386/boot/video.S
暂未用②0x002c2Arch/i386/boot/video.S
PARAM_VESAPM_SEG0x002e2Arch/i386/boot/video.S
PARAM_VESAPM_OFF0x00302Arch/i386/boot/video.S
PARAM_LFB_PAGES0x00322Arch/i386/boot/video.S
保留0x0034--0x003f Include/linux/tty.h
APM BIOS Version③0x00402Arch/i386/boot/setup.S
BIOS code segment0x00422Arch/i386/boot/setup.S
BIOS entry offset0x00444Arch/i386/boot/setup.S
BIOS 16 bit code seg0x00482Arch/i386/boot/setup.S
BIOS data segment0x004a2Arch/i386/boot/setup.S
支持32位标志④0x004c2Arch/i386/boot/setup.S
BIOS code seg length0x004e4Arch/i386/boot/setup.S
BIOS data seg length0x00522Arch/i386/boot/setup.S
hd0 参数0x008016Arch/i386/boot/setup.S
hd0 参数0x009016Arch/i386/boot/setup.S
PS/2 device 标志⑤0x01ff1Arch/i386/boot/setup.S


* 注 : ① Include/linux/tty.h : CL_MAGIC and CL_OFFSET here
  1.  

    1. Include/linux/tty.h :
unsigned char rsvd_size; /* 0x2c */
unsigned char rsvd_pos; /* 0x2d */

③ 0表示没有APM BIOS

④ 0x0002置位表示支持32位模式

⑤ 0表示没有,0x0aa表示有鼠标器
http://hi.baidu.com/sunblackshine/blog/item/8f928ac5983978a18326ac75.html
amd64-microcode ethtool intel-microcode iucode-tool linux-headers-5.15.0-139-generic linux-headers-generic-hwe-20.04 linux-hwe-5.15-headers-5.15.0-139 oem-fix-misc-cnl-tlp-estar-conf oem-somerville-meta thermald tlp tlp-rdw ubuntu-oem-keyring Use 'apt autoremove' to remove them. The following packages will be REMOVED: linux-image-5.15.24+* 0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded. After this operation, 313 MB disk space will be freed. Do you want to continue? [Y/n] y (Reading database ... 280133 files and directories currently installed.) Removing linux-image-5.15.24+ (5.15.24+-10.00.Custom) ... Examining /etc/kernel/prerm.d. Examining /etc/kernel/postrm.d . run-parts: executing /etc/kernel/postrm.d/initramfs-tools 5.15.24+ /boot/vmlinuz-5.15.24+ update-initramfs: Deleting /boot/initrd.img-5.15.24+ run-parts: executing /etc/kernel/postrm.d/zz-update-grub 5.15.24+ /boot/vmlinuz-5.15.24+ Sourcing file `/etc/default/grub' Sourcing file `/etc/default/grub.d/init-select.cfg' Generating grub configuration file ... Found linux image: /boot/vmlinuz-6.17.0-rc7 Found initrd image: /boot/initrd.img-6.17.0-rc7 Found linux image: /boot/vmlinuz-5.10.0-051000-generic Found initrd image: /boot/initrd.img-5.10.0-051000-generic Found linux image: /boot/vmlinuz-5.4.0+ Found initrd image: /boot/initrd.img-5.4.0+ done (Reading database ... 274877 files and directories currently installed.) Purging configuration files for linux-image-5.15.24+ (5.15.24+-10.00.Custom) ... Examining /etc/kernel/postrm.d . run-parts: executing /etc/kernel/postrm.d/initramfs-tools 5.15.24+ /boot/vmlinuz-5.15.24+ run-parts: executing /etc/kernel/postrm.d/zz-update-grub 5.15.24+ /boot/vmlinuz-5.15.24+ rmdir: failed to remove '/lib/modules/5.15.24+': Directory not empty dpkg: warning: while removing linux-image-5.15.24+, directory '/lib/modules/5.15.24+' not empty so not removed
10-03
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值