注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

gmd20的个人空间

// 编程和生活

 
 
 

日志

 
 

Linux的光盘安装是如何开始进行的  

2011-09-20 23:02:24|  分类: linux相关 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

1.   首先 光盘镜像  也就是iso文件采用的是“ISO 9660 ”文件系统 ( ISO 9660CD-ROM specification http://en.wikipedia.org/wiki/ISO_9660#ISO_9660_Specifications)。

       cd上的文件都存在这个简单的iso文件系统里,linux可以用mount  -o loop 直接把*.iso文件mount到一个目录查看。

2.  CD ROM 另支持一个叫做“El Torito Bootable CD Specification”     的标准(http://en.wikipedia.org/wiki/El_Torito_(CD-ROM_standard)  允许用户在cd上指定启动的引导程序。

    电脑开机启动时候,BIOS就会去检查cd/dvd上是否有这个启动标志,然后加载引导程序。

  在Linux系统,使用mkisofs命令一个iso文件时,可以指定引导程序,例如


        mkisofs -o <isoimage> \
               -b isolinux/isolinux.bin -c isolinux/boot.cat \
                -no-emul-boot -boot-load-size 4 -boot-info-table \
               <root-of-iso-tree>
 
       更多的iso文件相关选项可以参考mkisofs的help
 

3. Linux的光盘安装的话,使用的一般是ISOLINUX 引导程序,也就是用这个ISOLINUX是被写到上面那个EI Torito扩展里面去的。 系统启动时就自动加载ISOLINUX引导程序了。

    ISOLINUX是  SYSLINUX项目的一系列引导程序中的一个,简单的说就是类似GRUB的一个东西,就是启动然后引导内核。ISOLINUX的特点如其名,区别于GRUB LILO等的地方,就是他可以认出iso9660文件系统,所以可以读出cd上的内核镜像和inird 镜像,然后引导。

    ISOLINUX启动后,默认会去读出cd光盘根目录的一个isolinux.cfg 文件,isolinux.cfg 类似grub的menu.lst,指定的内核镜像位置等。这个isolinux.cfg的语法可以参考syslinux的文档。 这里有一个

http://git.zytor.com/?p=syslinux/syslinux.git;a=blob;f=doc/syslinux.txt;h=07d5df9ab9206d6afe72327ace64e1b81cc07e22;hb=refs/heads/master

比如  指定显示终端可以使用这个选项

---------------------------------------------

332 SERIAL port [[baudrate] flowcontrol]


333         Enables a serial port to act as the console.  "port" is a
334         number (0 = /dev/ttyS0 = COM1, etc.) or an I/O port address
335         (e.g. 0x3F8); if "baudrate" is omitted, the baud rate defaults
336         to 9600 bps.  The serial parameters are hardcoded to be 8
337         bits, no parity, 1 stop bit.
338
339         "flowcontrol" is a combination of the following bits:
340         0x001 - Assert DTR
341         0x002 - Assert RTS
342         0x008 - Enable interrupts
343         0x010 - Wait for CTS assertion
344         0x020 - Wait for DSR assertion
345         0x040 - Wait for RI assertion
346         0x080 - Wait for DCD assertion
347         0x100 - Ignore input unless CTS asserted
348         0x200 - Ignore input unless DSR asserted
349         0x400 - Ignore input unless RI asserted
350         0x800 - Ignore input unless DCD asserted
351
352         All other bits are reserved.
353
354         Typical values are:
355
356             0 - No flow control (default)
357         0x303 - Null modem cable detect
358         0x013 - RTS/CTS flow control
359         0x813 - RTS/CTS flow control, modem input
360         0x023 - DTR/DSR flow control
361         0x083 - DTR/DCD flow control
362
363         For the SERIAL directive to be guaranteed to work properly, it
364         should be the first directive in the configuration file.
365
366         NOTE: "port" values from 0 to 3 means the first four serial
367         ports detected by the BIOS.  They may or may not correspond to
368         the legacy port values 0x3F8, 0x2F8, 0x3E8, 0x2E8.
369
370         Enabling interrupts (setting the 0x008 bit) may give better
371         responsiveness without setting the NOHALT option, but could
372         potentially cause problems with buggy BIOSes.
373
374 NOHALT flag_val
375         If flag_val is 1, don't halt the processor while idle.
376         Halting the processor while idle significantly reduces the
377         power consumption, but can cause poor responsiveness to the
378         serial console, especially when using scripts to drive the
379         serial console, as opposed to human interaction.
380
381 CONSOLE flag_val
382         If flag_val is 0, disable output to the normal video console.
383         If flag_val is 1, enable output to the video console (this is
384         the default.)
385
386         Some BIOSes try to forward this to the serial console and
387         sometimes make a total mess thereof, so this option lets you
388         disable the video console on these systems.

-----------------------------------------------------------------

 

SYSLINUX不知道是被封了还是怎么样,主页打不开,这里有个源码目录

http://git.zytor.com/?p=syslinux/syslinux.git;a=tree;hb=refs/heads/master

刚刚发现这里也有  2011-09=23   http://lxr.linux.no/syslinux

可以在里面找到些简单的文档和看看代码什么的,SYSLINUX包括了用于网络引导PXELINUX等程序,可以自己去看一下。

 

4.  isolinux引导加载Linux内核遵循一个叫做 “Multiboot Specification ” 的标准 http://www.gnu.org/software/grub/manual/multiboot/

这个Multiboot 定义了isoLinux如何去按照指定格式被内核文件加载到内存里面来,还有可以指定模块怎么加载等。

     isolinux先去加载自己的mboot.c32模块(http://hi.baidu.com/widebright/creat/blog/) 以支持multiboot模式,然后mboot32.c32在去根据配置加载内核和模块。

比如一个 isolinux.cfg 是这样的

 


20 LABEL Xen
21   KERNEL mboot.c32
22   APPEND xen.gz dom0_mem=15000 nosmp noacpi --- linux.gz console=tty0 root=/dev/hda1 --- initrd.img

 

 mboot的代码

http://git.zytor.com/?p=syslinux/syslinux.git;a=blob;f=com32/mboot/mboot.c;h=35450e03a9778b2a089ed7bd596553e33a94714f;hb=refs/heads/master

在get_modules 函数中就会解析各个模块和参数,然后加载。APPEND 后面的字符串传给mboot.c32  后, mboot.c32 以 “---” 作为分界线, xen.gz dom0_mem=15000 nosmp noacpi   就是把 “dom0_mem=15000 nosmp noacpi   ” 传给 xen.gz模块作为参数。 “console=tty0 root=/dev/hda1 ”传给 linux.gz 模块作为参数。 linux.gz这些就是位于 cd 镜像里面的位置了,一般跟目录下吧。

 

linux.gz这些加载运行后,自然可以根据multiboo格式,读到 console=tty0 这些参数了。

 

至此系统引导成功,切换到linux环境,比如指定inird.img 文件系统的某个python程序,然后开始显示界面,提示用户安装


  评论这张
 
阅读(882)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017