linux 启动服务 sys,从磁盘启动的过程与SYSLINUX
8種機械鍵盤軸體對比
本人程序員,要買一個寫代碼的鍵盤,請問紅軸和茶軸怎么選?
磁盤啟動原理
PC在啟動的時候是從執行ROM當中的代碼開始的。這些代碼常根據機器的不同而分布在不同的位置。PC上這種初始化代碼稱為BIOS(基本輸入輸出系統)。在PC里有幾種不同的BIOS固件。如主板BIOS,顯示卡BIOS,以及網卡BIOS.
BIOS通常讓用戶選擇從哪一個設備引導。一旦確定引導設備,BIOS就加載在該設備開頭的512字節的信息。這個512字節的段稱為MBR.MBR中包含一個程序,它可以執行中決定從哪個位置(哪個分區)加載boot loader(也就是引導程序)。
實際上在一個磁盤設備上從0x0000到0x01bd這446字節為MBR代碼,從0x01be到0x1fd這64字節包含有4組分區表信息DPT.在0x01be處的值為引導標志,值為80代表活動分區。而MBR中的0x01fe到0x01ff為結束標志,內容總是0x55aa.
每一個引導程序要求使用的MBR是不相同的,但其中分區位置對于每一個MBR都是相同的,一般來說,在為一個設備安裝上引導程序的時候,僅覆蓋前446字節中的一部分。
MBR成功執行后一般會進入到第2到第63扇區執行額外的啟動代碼,進一步創建引導程序環境。對于GRUB來說,boot.img里的內容被復制到MBR中,負責把第二扇區加載到內存中的0x8000位置并執行(稱為diskboot.img)。而第二diskboot.img的功能則是加載GRUB的啟動映象kernel.img.(kernel.img從第二扇區開始,到第63扇區結束)。
最終當然還是要進入具體的某個分區。因此在啟動器中分區實際上是從某個扇區之后開始的。根據MBR中的信息可以確定每個分區的開始位置,因此理論上當然能夠通過前63扇區把分區開始處的代碼加載到內存并執行。
在某分區上的引導程序具有讀取分區文件系統的能力,因而可以像一個操作系統那樣使用特定的配置文件或者加載特定的配置。一般來說,引導程序的相關模塊都位于該分區的boot目錄下。實際上我們是通過引導程序定位我們需要啟動的內核,以及啟動時向內核傳遞的參數。
SYSLINUX創建可引導設備
首先應下載并解壓SYSLINUX軟件。之后的步驟先以linux為例。
進入到SYSLINUX的軟件目錄,然后執行$SYSLINUX$/linux/syslinux -i /dev/sdXn
這表示把syslinux安裝到一個設備的特定分區當中。當然我們可以查SYSLINUX手冊以向syslinux程序傳遞在該分區的安裝目錄。
之后我們需要將SYSLINUX的MBR映象寫到設備的MBR當中,并將SYLINUX所安裝的分區設置為活動分區:dd conv=notrunc bs=440 count=1 if=mbr.bin of=/dev/sdX
parted /dev/sdX set 1 boot on
最后就是把內核映象復制到sdXn分區的適當位置,通過syslinux.cfg文件將內核映象的啟動信息告知SYSLINUX引導程序。就等著在啟動時SYSLINUX搜索syslinux.cfg文件了。
在WINDOWS下所做的工作與linux下實際沒有什么不同。只不過在WINDOWS下面分區是通過盤符指定的。$SYSLINUX$/win32/syslinux.exe --mbr -a X:
然后直接復制內核映象,創建內核啟動配置參數。
如果使用EXTLINUX,則命令更為簡單一些。先把它安裝到特定目錄下,EXTLINUX會在分區的引導扇區寫上引導信息,然后在該設備的MBR上寫入SYSLINUX的MBR引導程序。
SYSLINUX系列引導程序
SYSLINUX系列的引導程序有SYSLINUX, ISOLINUX, PXELINUX與EXTLINUX. 其中的SYSLINUX只能安裝在FAT或者FAT32分區下,ISOLINUX只能安裝在ISO 9660/EI分區下,EXTLINUX只能安裝在ext2/ext3/ext4/btrfs分區下,PXELINUX則是用于從網絡位置啟動內核。
相比于從本地磁盤啟動,PXELINUX要麻煩一些,不僅需要TFTP,還需要DHCP等服務。更何況還需要特定的硬件支持。
剛才介紹了使用syslinux創建可啟動分區的方法,extlinux與此類似。一般來說我們如果設置一個空白磁盤為可啟動設備,首先要使用分區工具,然后使用格式化工具產生一個適合引導程序擴展功能的分區文件系統。為了更好地了解引導程序。我們借助于linux強大的設備虛擬能力介紹引導程序的安裝與使用。
創建磁盤映象
首先創建一定大小的空白文件:dd if=/dev/zero of=hdd.img bs=1M count=100
然后將這個空白文件虛擬成一個設備insmod loop.o
losetup /dev/loop0 hdd.img
在使用losetup命令的時候,好像連root權限都不需要。
掛載這個設備后使用fdisk工具分區。進入fdisk的專家模式,使用p查看分區開始的位置(在start列下面)。計算出偏移值為Start*512bytes.實際上應當乘以sector size這一個參數,在主界面下使用p命令可以看出其大小。通常為512字節。
然后缷載該設備,重新從偏移位置掛載設備,這次掛載的就是剛才對應的分區了。
如何創建一個可引導光盤映象
使用ISOLINUX工具。除此之外還需要mkisofs工具。
首先創建一個 CD_root 目錄,把所需文件都拷貝進去。然后創建isolinux子目錄。將SYSLINUX軟件包里的isolinux.bin以及相應的模塊,配置文件都拷貝進去。
之后在 CD_root 下面創建所需的內核與軟盤映象,之后使用以下命令創建光盤:mkisofs -o bootable.iso -b isolinux/isolinux.bin -c isolinux/boot.cat
-no-emul-boot -boot-load-size 4 -boot-info-table CD_root
其中的boot.cat是用于光盤文件系統的目錄文件。
SYSLINUX配置文件的查找
啟動時ISOLINUX會嘗試從三個目錄中查找isolinux.cfg:/boot/isolinux,/isolinux/以及./。在syslinux中有根目錄和家目錄的概念。根目錄是所在的分區,而家目錄是啟動文件所在的目錄。
從4.02開始,ISOLINUX的也可以以syslinux.cfg作為配置文件名。如果在當前查找目錄中沒有isolinux.cfg,先在當前目錄查找syslinux.cfg,失敗再查找下一搜索目錄。
SYSLINUX與EXTLINUX的查找配置文件也是按照以上的順序。EXTLINUX與ISOLINUX類似,在查找extlinux.conf失敗后查找syslinux.cfg,然后在下一目錄中查找。
SYSLINUX配置文件的格式與含義
全局選項當中:
DEFAULT [module]: 所使用的菜單系統
PROMPT [01]: 關閉選項時,僅在shift,alt,caps,scroll按下時進入SYSLINUX命令行
UI [module] [options]: 用于設置菜單模塊和菜單模塊參數,會覆蓋PROMPT
NOESCAPE [01]: 生效時,忽略shift,alt,caps的動作
NOCOMPLETE [01]:生效時,忽略TAB動作
IMPLICIT [01]: 失效時,僅加載在label中出現的內核映象
ALLOPTIONS [01]:生效時,允許用戶修改內核參數
TIMEOUT [int]: 用戶沒有動作的時候,菜單顯示的時間(單位是1/10秒)
TOTALTIMEOUT [int]: 所有選擇所花費時間加起來不超過的某個數值。
CONSOLE [01]: 是否向終端輸出信息
FONT [name]: 加載一個.psf字體文件,如果其中有unicode字符字體將被忽略。影響除版權所有這一行文字外的所有文字(因為后者是ldlinux.sys產生的)。
KBDMAP [keymap]:加載一個簡單的鍵盤布局
SAY [message]: 在加載指定內核時在屏幕上顯示的提示信息
DISPLAY [filename]: 在啟動的時候顯示指定文件里的內容
F[1-12] [filename]: 指定按次序要顯示的文件,當功能鍵被按下時才顯示
創建一個標簽:label
menu label
[
kernel ...
append ...
...
標簽選項當中:
ONERROR [cmd]: 當內核啟動失敗時執行的命令,實際上還是傳給APPEND.
KERNEL [executabe]: 使用該菜單項后所執行的SYSLINUX模塊,內核映象,以及其它的自舉程序。
LINUX [image]: 效果等同于KERNEL選擇,不過專門用于啟動linux映象。
APPEND [options]: 該選項指定了向KERNEL中所示程序傳遞的參數。
INITRD [files]: 該選項指定linux內核啟動時所需的initrd文件,等同于在APPEND中添加initrd=[files]選項。
總結
以上是生活随笔為你收集整理的linux 启动服务 sys,从磁盘启动的过程与SYSLINUX的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Internet安全协议 学习笔记
- 下一篇: 九 Java_集合框架