新聞中心
深入分析Linux MIPS的啟動過程

Linux是一種流行的開源操作系統(tǒng),被廣泛用于各種設(shè)備上。其中,MIPS是一種常見的處理器架構(gòu),因此,有很多設(shè)備使用Linux MIPS作為操作系統(tǒng)。本文將深入分析Linux MIPS的啟動過程,以幫助讀者了解Linux MIPS在啟動時做了什么。
Boot Loader
在開機(jī)時,處理器會從ROM中讀取之一個指令,這通常是一個Boot Loader。Boot Loader是一種小型程序,通常用于引導(dǎo)操作系統(tǒng)。在Linux MIPS中,Boot Loader通常是u-boot,它是由Denx開發(fā)的一款通用Boot Loader。
在運(yùn)行Boot Loader時,它會首先進(jìn)行硬件初始化,例如初始化DRAM和一些I/O設(shè)備。然后,它會檢查存儲設(shè)備,包括閃存,硬盤和SD卡等,找到Linux內(nèi)核的二進(jìn)制文件。Boot Loader將這個文件加載到內(nèi)存中的一個地址,然后跳轉(zhuǎn)到該地址,以使內(nèi)核開始運(yùn)行。
Linux內(nèi)核
一旦Boot Loader完成了它的任務(wù),它就會跳轉(zhuǎn)到內(nèi)核的入口點(diǎn)。在Linux MIPS中,內(nèi)核的入口點(diǎn)通常為0x80010000。在跳轉(zhuǎn)到內(nèi)核時,Boot Loader會傳遞一些參數(shù),例如內(nèi)核和文件系統(tǒng)的地址。特別是,它會傳遞一個參數(shù)initrd,指向一個稱為initramfs的文件系統(tǒng)。這個文件系統(tǒng)是一個臨時文件系統(tǒng),用于在加載根文件系統(tǒng)之前提供必要的驅(qū)動程序和文件。
一旦內(nèi)核開始運(yùn)行,它將初始化各種硬件設(shè)備并加載驅(qū)動程序。它還會解壓縮initrd,并將其掛載到內(nèi)核中。這個臨時文件系統(tǒng)包含了許多驅(qū)動程序和其他配置文件,以便內(nèi)核可以在加載根文件系統(tǒng)之前對硬件進(jìn)行正確地初始化。內(nèi)核還會檢查并啟動各種基礎(chǔ)服務(wù),例如系統(tǒng)日志和網(wǎng)絡(luò)服務(wù)。
根文件系統(tǒng)
經(jīng)過上述步驟后,內(nèi)核將加載根文件系統(tǒng)。根文件系統(tǒng)是一個至關(guān)重要的部分,它包含了操作系統(tǒng)的所有用戶空間程序和配置文件。在Linux MIPS中,根文件系統(tǒng)通常是一個ramdisk,即一個保存在內(nèi)存中的文件系統(tǒng)。當(dāng)然,也可以使用硬盤或網(wǎng)絡(luò)文件系統(tǒng)等其他類型的根文件系統(tǒng)。
一旦根文件系統(tǒng)加載完畢,內(nèi)核將啟動init進(jìn)程。init是Linux中的之一個用戶進(jìn)程,它是所有其他用戶進(jìn)程的祖先。init為啟動和管理其他進(jìn)程提供了必要的服務(wù)。例如,它會啟動shell程序,并在必要時加載其他服務(wù)和守護(hù)進(jìn)程。
在Linux MIPS的啟動過程中,Boot Loader從存儲設(shè)備中找到內(nèi)核并將其加載到內(nèi)存中。內(nèi)核初始化硬件設(shè)備并加載驅(qū)動程序,然后解壓縮initrd并掛載它。之后,內(nèi)核加載根文件系統(tǒng),并啟動init進(jìn)程。init進(jìn)程為其他用戶進(jìn)程提供了服務(wù),實(shí)現(xiàn)了系統(tǒng)的正常運(yùn)行。
深入分析Linux MIPS的啟動過程可以幫助我們更好地了解操作系統(tǒng)在啟動時做了什么。只有深入了解操作系統(tǒng)的啟動過程,我們才能更好地調(diào)試和優(yōu)化它們。
相關(guān)問題拓展閱讀:
- 怎樣在 1 秒內(nèi)啟動 Linux
怎樣在 1 秒內(nèi)啟動 Linux
Linux內(nèi)核的最初部分代碼是用匯編語言寫的(文件是boot/bootsect.s)。(我的匯編水平有限,暫且不看),它首先把自身這部分代碼移到絕對地址0x90000,把下面的2K代碼從引導(dǎo)設(shè)備加載到地址0x90200上,內(nèi)核的其余部分加載到地址0x10000處。在加載系統(tǒng)時顯示“l(fā)oading”.然后,程序控制權(quán)交給另一個實(shí)模式匯編程序(boot/Setup.S)。接下來,此程序把整個系統(tǒng)從地址0x10000移到地址0x1000,進(jìn)入保護(hù)模式。程序控制轉(zhuǎn)給系統(tǒng)的其余部分即地址0x1000。下一個步驟是系統(tǒng)內(nèi)核的解壓過程,這部分代碼在地址0x1000(文件/Boot/head.S),該段程序初始化寄存器,然后執(zhí)行decompress_kernel(),這個函數(shù)源于zBoot/inflate.c、zBoot/unzip.c和zBoot/misc.c三個文件Loading .uncompress ..main.c —> start_kernel() 開始.開始 printk(banner);Linux version 2.2.6 (root@lance) (gcc version 2.7.2.3) (檢查一下GCC 的版本號, 在/init/main.c 中如果gcc 的版本號不夠,時不允許編譯內(nèi)核的)#40 Sun Apr 18 17:44:20 CST 1999調(diào)用init_time()打印出以下內(nèi)容:DetectedHz processor.然后運(yùn)行 console_init() –> drivers/char/tty_io.c */Console: colour VGA+ 80×25運(yùn)行一個循環(huán),測量一下 MIPS – 據(jù)說是要用一個確定的機(jī)器指令周期來實(shí)現(xiàn)實(shí)時的延遲.Calibrating delay loop 199.48 BogoMIPS初始化內(nèi)存/* init_mem */Memory: 63396k/65536k available (848k kernel code, 408k reserved, 856k data, 28k/** dquote_init() **/VFS: Diskquotas version dquot_6.4.0 initialized察看cpu 的類型(在2.2.14 以后聽說增加了對多種cpu 的支持, 以后我可得用心看看,if I can find a bug of intel then ……)CPU: Intel Pentium Pro stepping 09初始或處理器與協(xié)處理器,對于比較老的處理器, linux 會用軟件模擬協(xié)處理器?Checking 386/387 coupling OK, FPU using exception 16 error reporting.檢查治理的合法性Checking ‘hlt’ instruction OK.POSIX conformance testing by UNIFIX此后調(diào)用 linux_thread(init ,..,..,)(arch/i386/kernel/process.c)創(chuàng)建一個運(yùn)行 init 的進(jìn)程.進(jìn)入了第二階段用戶模式 ( user_mode )End of start_kerne最后進(jìn)入cpu_idle ( arch/i386/kernel/process.c )第二部分 設(shè)備的初始化對設(shè)備的初始化調(diào)用. init()—>do_basic_init()–+pci_init() 對pci 設(shè)備的初始化( 在main.c文件中有這樣一段 ifdef PCI …..需要看一下)下面打印出結(jié)果:PCI: PCI BIOS revision 2.10 entry at 0xfd8d1PCI: Using configuration type 1PCI: Probing PCI hardware對Socket的初始化,socket_init() (這里也許就是linux 的網(wǎng)絡(luò)秘密所在吧,以后我的注意) -Linux NET4.0 for Linux 2.2Based upon Swansea University Computer Society NET3.039NET4: Unix domain sockets 1.0 for Linux NET4.0.NET4: Linux TCP/IP 1.0 for NET4.0IP Protocols: ICMP, UDP, TCPStarting kswapd v 1.5 kswapd_setup()調(diào)用 device_setup()Detected PS/2 Mouse Port.初始化 聲卡Sound initialization startedSound initialization complete初始化 軟驅(qū)Floppy drive(s): fd0 is 1.44MFDC 0 is a National Semiconductor PC87306SCSI 設(shè)備的初始化(scsi0) found at PCI 13/0(scsi0) Wide Channel, SCSI ID=7, 16/255 SCBs(scsi0) Downloading sequencer code 419 instructions downloadedscsi0 : Adaptec AHA274x/284x/294x (EISA/VLB/PCI-Fast SCSI) 5.1.10/3.2.4scsi : 1 host.Vendor: SEAGATE Model: ST32155W Rev: 0596ype: Direct-Access ANSI SCSI revision: 02Detected scsi disk sda at scsi0, channel 0, id 0, lun 0Vendor: SEAGATE Model: ST32155W Rev: 0596Type: Direct-Access ANSI SCSI revision: 02Detected scsi disk sdb at scsi0, channel 0, id 1, lun 0scsi : detected 2 SCSI disks total.(scsi0:0:0:0) Synchronous at 40.0 Mbyte/sec, offset 8.SCSI device sda: hdwr sector= 512 bytes. Sectors= (scsi0:0:1:0) Synchronous at 40.0 Mbyte/sec, offset 8.SCSI device sdb: hdwr sector= 512 bytes. Sectors= Partition check: sda: sda1 |sdb: sdb1 sdb2 |安裝 文件系統(tǒng) filesystem_setup()安裝設(shè)備驅(qū)動程序 mount_root()VFS: Mounted root (ext2 filesystem) readonly.Freeing unused kernel memory: 28k freedAdding Swap: 66540k swap-space (priority -1)Soundblaster audio driver Copyright (C) by Hannu SavolainenSB 3.01 detected OK (220)at 0x220 irq 5 dma 1YM3812 and OPL-3 driver Copyright (C) by Hannu Savolainen, Rob Hooftat 0x388NET4: AppleTalk 0.18 for Linux NET4.0eth0: Intel EtherExpress Pro 10/100 at 0xf800, 00:A0:C9:49:2F:FF, IRQ 9.Board assembly, Physical connectors present: RJ45Primary interface chip DP83840 PHY #1.DP83840 specific setup, setting register 23 to 8462.General self-test: passed.Serial sub-system self-test: passed.Internal registers self-test: passed.ROM checksum self-test: passed (0x49caa8d6).Receiver lock-up workaround activated.NET4: AppleTalk 0.18 for Linux NET4.0結(jié)束 do_basic_setup()open(“/dev/console”, O_RDWR, 0)開始執(zhí)行 /in/init ( execv() )內(nèi)核就此啟動完畢
數(shù)據(jù)中心級別的硬件可以,主要是需要一個超強(qiáng)的pcie接口的固態(tài)硬盤,和一個足夠強(qiáng)大的cpu,還要一個夠大的內(nèi)存。這樣就可以瞬間啟動linux,不過受限于linux啟動流程,再快也不可能一秒完成,除非自定制Linux系統(tǒng)。
另外一個比較取巧的方法是不徹底關(guān)機(jī),只讓linux休眠,使用的時候按一下電源鍵,甚至動一下鼠標(biāo)鍵盤,linux就可以被瞬間喚醒,并顯示登陸界面或桌面
linux-mips啟動分析的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關(guān)于linux-mips啟動分析,深入分析LinuxMIPS的啟動過程,怎樣在 1 秒內(nèi)啟動 Linux的信息別忘了在本站進(jìn)行查找喔。
創(chuàng)新互聯(lián)成都網(wǎng)站建設(shè)公司提供專業(yè)的建站服務(wù),為您量身定制,歡迎來電(028-86922220)為您打造專屬于企業(yè)本身的網(wǎng)絡(luò)品牌形象。
成都創(chuàng)新互聯(lián)品牌官網(wǎng)提供專業(yè)的網(wǎng)站建設(shè)、設(shè)計(jì)、制作等服務(wù),是一家以網(wǎng)站建設(shè)為主要業(yè)務(wù)的公司,在網(wǎng)站建設(shè)、設(shè)計(jì)和制作領(lǐng)域具有豐富的經(jīng)驗(yàn)。
當(dāng)前文章:深入分析LinuxMIPS的啟動過程(linux-mips啟動分析)
文章來源:http://m.fisionsoft.com.cn/article/cdepoig.html


咨詢
建站咨詢
