linux lspci信息 详解_Linux引导之EFI SHELL详解
上一篇說,我覺得許多EFI SHELL的文章,總是沒講透。所以我想將EFI SHELL掀個(gè)底兒朝天。
磁盤上的EFI系統(tǒng)分區(qū),即 EFI system partition,簡(jiǎn)寫為 ESP。
UEFI類型的BIOS一般自帶EFI SHELL,我們進(jìn)入EFI SHELL中,就像進(jìn)入了一個(gè)就簡(jiǎn)單的cli交互系統(tǒng)。通過命令可以看到bios與os之間的某些聯(lián)系,也能看到一些操作系統(tǒng)引導(dǎo)的某些信息。
1、EFI SHELL簡(jiǎn)單操作
在UEFI BIOS的引導(dǎo)菜單中,通常都有EFI SHELL菜單。
選中回車即進(jìn)入了EFI SHELL。
有些服務(wù)器的EFI SHELL命令和功能較全;而有些服務(wù)器需要通過廠商的診斷維護(hù)U盤執(zhí)行其他EFI命令,來補(bǔ)充相關(guān)的EFISHELL功能。
1.1 map命令
使用map –b 可以看到當(dāng)前可以引導(dǎo)操作系統(tǒng)的硬盤。
-b 分頁顯示 相當(dāng)于 linux命令 more
map -b的說明:
fs是mount點(diǎn),blkX是磁盤塊設(shè)備分區(qū);
UEFI承認(rèn)的塊設(shè)備分區(qū)blkX、也就是磁盤上的EFI分區(qū),可以自動(dòng)或者手動(dòng)mount到某個(gè)fsX上;
比如shell>mount blk9 fs9——如果blk9是EFI分區(qū),則可以正常掛載;
詳細(xì)參考 help mount -b
mount成功后 再通過map -b看設(shè)備:
fs0:盤中的EFI esp分區(qū)(blk0)的mount點(diǎn)。Alias關(guān)鍵字后面的alias blk0 表示 blk0 mount 在fs0;
fs1:硬盤上的EFI esp分區(qū)(blk1)即hd(1,gpt)的mount點(diǎn);
blk0:centos光盤介質(zhì)的EFI blk設(shè)備;
blk1,5,6,7: 硬盤上的EFI esp分區(qū)(blk1)即hd(1,gpt);blk5-7,硬盤上的另外3個(gè)分區(qū),分別對(duì)應(yīng)hd(2,gpt),hd(3,gpt),hd(4,gpt);
————————map -b的說明完畢——————————————————
1.2 fsX的簡(jiǎn)單操作
對(duì)blk設(shè)備進(jìn)行mount后,在EFISHELL里 可以對(duì)EFI分區(qū)進(jìn)行l(wèi)s等操作,在本實(shí)驗(yàn)中,只能對(duì)fs0,fs1進(jìn)行l(wèi)s和cd:
“fsX:”用于文件系統(tǒng)之間切換;
——————————————————————————————————
centos 所在硬盤里的EFI分區(qū)的內(nèi)容:
在EFI SHELL里,.EFI就是bootloader,可以在EFISHELL中直接執(zhí)行。
硬盤EFI esp里的內(nèi)容 就是fs1(hd(1,gpt))里面的內(nèi)容:
[root@localhost /]# cd /boot/EFI
[root@localhost EFI]# ls
EFI
[root@localhost EFI]# cd EFI
[root@localhost EFI]# ls
BOOT centos
[root@localhost EFI]# cd BOOT
[root@localhost BOOT]# ls -l
total 1340
-rwx------. 1 root root 1296176 Dec 7 2015 BOOTX64.EFI
-rwx------. 1 root root 73240 Dec 7 2015 fallback.EFI
[root@localhost BOOT]# cd ../centos
[root@localhost centos]# ls -l
total 5816
-rwx------. 1 root root 128 Dec 7 2015 BOOT.CSV
drwx------. 2 root root 4096 Jul 31 13:03 fonts
-rwx------. 1 root root 1025920 Nov 22 2016 gcdx64.EFI
-rwx------. 1 root root 4159 Jul 31 13:17 grub.cfg
-rwx------. 1 root root 1024 Jul 31 13:17 grubenv
-rwx------. 1 root root 1025920 Nov 22 2016 grubx64.EFI
-rwx------. 1 root root 1283952 Dec 7 2015 MokManager.EFI
-rwx------. 1 root root 1291512 Dec 7 2015shim-centos.EFI
-rwx------. 1 root root 1296176 Dec 7 2015 shim.EFI
[root@localhost centos]#
-rwx------. 1 root root 1025920 Nov 22 2016 grubx64.EFI——是可以執(zhí)行啟動(dòng)linux的。
2、map命令中的磁盤設(shè)備路徑
本部分的圖與第一部分的圖無關(guān)。
2.1 補(bǔ)充的Intel x86 CPU架構(gòu)知識(shí)
假設(shè)該服務(wù)器是Intel skylake 兩路服務(wù)器。
那么CPU0 的四個(gè)PCIBUSNO,會(huì)被BIOS初始化成:0x00,0x17,0x3a,0x5d;
那么CPU1 的四個(gè)PCIBUSNO,會(huì)被BIOS初始化成:0x80,0x85,0xae,0xd7;
除了第一個(gè)PCIBUSNO,其他三個(gè)CPU PCIBUSNO 對(duì)應(yīng)的rootport,可以被劈成(bifurcate)以下幾種方式:
1、一整個(gè)PCIBUS x16 pcie lane,形成 一個(gè)rootport;
或
2、一個(gè)PCIBUS x16 pcie 分成8x8 pcie lane,形成兩個(gè)rootport;
或
3、一個(gè)PCIBUS x16 pcie 分成8x4x4 pcie lane,形成三個(gè)rootport;
或
4、一個(gè)PCIBUS x16 pcie 分成4x4x4x4 pcie lane,形成四個(gè)rootport;
如下圖:
?
——服務(wù)器型號(hào)不同,則上圖bifurcate的方式就不同,具體要看服務(wù)器廠商的電路設(shè)計(jì)以及服務(wù)器的系統(tǒng)邏輯圖。
2.2 map設(shè)備路徑
再看一臺(tái)skylake服務(wù)器,浪潮I48某節(jié)點(diǎn)的EFI SHELL 的map命令輸出:
就以FS0為例:
下面這個(gè)路徑,從左到右,挨個(gè)的擼。
2.2.1?? PCIroot(0x00)
代表了該磁盤所在的rootport編號(hào)(第0個(gè)rootport,第1個(gè)rootport,第2個(gè)rootport,,,,)
從操作系統(tǒng)的lspci -vt縮略樹來看,rootport的編號(hào)和PCIE BDF位置如下:》》》粗體所示(注意iou bus 5d,明顯的,該IOU 的 PCIE lanes被研發(fā)劈成了8x4x4,所以 bus 5d下有三個(gè)rootport):
-+-[0000:d7]-+-00.0-[d8-d9]--+-00.0 Intel Corporation 82599ES 10-GigabitSFI/SFP+ Network Connection 》》》這個(gè)00.0 是系統(tǒng)第9個(gè)rootport;
| | \-00.1 Intel Corporation 82599ES 10-GigabitSFI/SFP+ Network Connection
| +-05.0 Intel Corporation Device 2034
+-[0000:ae]-+-00.0-[af-b2]----00.0 Intel Corporation PCIe Data Center SSD 》》》這個(gè)00.0 是系統(tǒng)第8個(gè)rootport;
| +-05.0 Intel Corporation Device 2034
+-[0000:85]-+-05.0 Intel Corporation Device 2034 》》》05.0 前面的 00.0沒有插卡,所以,lspci沒顯示00.0。這個(gè)沒顯示的00.0 是系統(tǒng)第7個(gè)rootport;
+-[0000:80]-+-04.0 Intel Corporation Sky Lake-E CBDMA Registers 》》》04.0 前面的 00.0沒有插卡,所以,lspci沒顯示00.0。這個(gè)沒顯示的00.0 是系統(tǒng)第第6個(gè)rootport;
+-[0000:5d]-+-00.0-[5e-61]----00.0-[5f-61]----03.0-[60-61]--+-00.0Intel Corporation Ethernet Connection X722 for 1GbE 》》》系統(tǒng)第3個(gè)rootport
| | +-00.1 Intel Corporation Ethernet Connection X722for 1GbE
| | +-00.2 Intel Corporation Ethernet Connection X722for 1GbE
| | \-00.3 Intel Corporation Ethernet Connection X722for 1GbE
| +-02.0-[62]-- 》》》系統(tǒng)第4個(gè)rootport
| +-03.0-[63]-- 》》》系統(tǒng)第5個(gè)rootport
| +-05.0 Intel Corporation Device 2034
+-[0000:3a]-+-00.0-[3b]----00.0 LSI Logic / Symbios Logic MegaRAID SAS-33108 [Invader] 》》》系統(tǒng)第2個(gè)rootbus
| +-05.0 Intel Corporation Device 2034
+-[0000:17]-+-05.0 Intel Corporation Device 2034 》》》05.0 前面的 00.0沒有插卡,所以,lspci沒顯示00.0。這個(gè)沒顯示的00.0 是第系統(tǒng)1個(gè)rootbus
\-[0000:00]-+-00.0 Intel Corporation Sky Lake-E DMI3 Registers》》》系統(tǒng)第0個(gè)rootbus
+-04.0 Intel Corporation Sky Lake-E CBDMA Registers
+-11.5 Intel Corporation C610/X99 series chipset sSATAController [RAID mode]
——所以如上所述, fs0 所在最top的rootport是:-[0000:00]-+-00.0 Intel Corporation Sky Lake-E DMI3 Registers 》》》第0個(gè)rootport(其實(shí)就是DMI連接的PCH南橋)。所以 fs0的路徑PciRoot為0x0。
2.2.2 pci(0x11,0x5)
pci(0x11,0x5) 與fs0 的 的sata控制器的dev,function 一致:
lsblk:
?..md126 9:126 0 849.5G 0 raid0
?..md126p1 259:0 0 200M 0 md /boot/efi/
/sys/devices/pci0000:00/0000:00:11.5/ata1/host3/target3:0:0/3:0:0:0/block/sdc/holders/md126
2.2.3 sata(05,0x8000,0x1)
這個(gè)確實(shí)不知道。
2.2.4 HD(1,gpt,748ae5f2-2aa3-4cec-a074-976d6fef0895,0x800,0x64000)
1:表示這是磁盤的第一個(gè)partition(盤的分區(qū)就是從1開始);
gpt:表示該磁盤為gpt分區(qū)類型;
748ae5f2-2aa3-4cec-a074-976d6fef0895:
對(duì)應(yīng) blkid的PartUUID:
[root@localhost ~]# blkid
/dev/sdc: TYPE="isw_raid_member"
/dev/sdd: TYPE="isw_raid_member"
/dev/md126p1: SEC_TYPE="msdos"UUID="3D70-7403" TYPE="vfat" PARTLABEL="EFI SystemPartition" PARTUUID="748ae5f2-2aa3-4cec-a074-976d6fef0895"
(補(bǔ)充 UUID="3D70-7403" 在分區(qū)的分區(qū)頭,該uuid是分區(qū)內(nèi)的文件系統(tǒng)的uuid。這里的分區(qū) 是磁盤的第一個(gè)分區(qū)。分區(qū)的物理起始地址是0x100000,所以UUID:3D70-7403在下圖地址:
)
PARTUUID,也就是對(duì)應(yīng)gpt硬盤的盤頭 LBA2 中 第一個(gè)分區(qū)的meta(from 絕對(duì)字節(jié)地址0x400)信息中的一部分?jǐn)?shù)據(jù),絕對(duì)字節(jié)地址(0x410~0x41f),表示分區(qū)的uuid:
748ae5f2-2aa3-4cec-a074-976d6fef0895
0x800:分區(qū)開始的扇區(qū)號(hào):
Disk /dev/md126: 912.1 GB, 912141582336 bytes,1781526528 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 131072 bytes / 262144bytes
Disk label type: gpt
Disk identifier: BE6F6087-1C3E-4BF9-BDB2-6BE87F471B34
(
disk identifier 對(duì)應(yīng) 盤頭 LBA1 地址0x238~0x247處:
)
# Start End Size Type Name
1 2048 411647 200M EFI System EFI System Partition
2 411648 2508799 1G Microsoft basic
3 2508800 1781524479 848.3G Linux LVM
——start 2048=0x800 扇區(qū),就是這個(gè)0x800;(當(dāng)然,每個(gè)扇區(qū)是512字節(jié),所以start 2048也就是 start 字節(jié)地址0x100000);
——end 411647,所以 part的大小就是 411647-2048+1=409600=0x64000個(gè)扇區(qū);
至此,map設(shè)備路徑解析完畢。
3、啟動(dòng)項(xiàng)
3.1 添加USB安裝盤,map的前后變化
原始的map信息:
通過bcfg boot dump –v來查看當(dāng)前的OS啟動(dòng)項(xiàng):
bmc 的kvm遠(yuǎn)程加載一個(gè) redhat安裝iso——模擬一個(gè)光驅(qū)設(shè)備:
此時(shí)efishell里的map里還沒有這個(gè)虛擬cdrom;
從efi shell>exit返回到 bios仿真圖形,然后再進(jìn)入boot manager,boot manager應(yīng)該是自動(dòng)掃描了啟動(dòng)設(shè)備,此時(shí)啟動(dòng)項(xiàng)里便有了usb/cdrom;
然后再進(jìn)入efishell>map -b,就有了虛擬cdrom了:
3.2 通過bcfg命令添加啟動(dòng)項(xiàng)
節(jié)點(diǎn) 的bios 中似乎沒有“手工添加啟動(dòng)項(xiàng)” 的功能菜單。
刀片所用的bios廠商信息記錄如下:
——也許其他機(jī)型、其他logo 的bios有 “手工添加啟動(dòng)項(xiàng)” ,但是本機(jī)BIOS中沒有這個(gè)功能。
在這種情況下,可以嘗試用EFI SHELL里的bcfg命令來添加啟動(dòng)項(xiàng)zxpuboot。
先查看當(dāng)前的啟動(dòng)項(xiàng):
help bcfg -b:
先嘗試添加引導(dǎo)項(xiàng):第一次添加失敗(用blk設(shè)備名路徑,添加失敗),第二次添加成功(用fs設(shè)備名路徑,添加成功)
返回看看 bootmanager 仿真界面,確實(shí)有了“zxpuboot”選項(xiàng):
?
并且zxpuboot也可以正常引導(dǎo):
在某些特殊情況下,例如:升級(jí)bios以后啟動(dòng)項(xiàng)丟失,我們就可以使用以上方法添加啟動(dòng)項(xiàng)。
3.3 dmpstore查看更底層的啟動(dòng)項(xiàng)
shell>dmpstore boot* -b (注:下圖輸出中,每一行中間的 “-” (例如20-01,中間的“-”)沒有意義,忽略)
?
上圖說明:
1、bootcurrent:當(dāng)前啟動(dòng)在什么地方,上圖值為0008;而下面的圖中,boot0008項(xiàng)表示為EFI SHELL;
2、bootorder:順序分別為 0009,0000,2002,2003,2001,0008.
根據(jù)下面系列圖片,也以知道:
boot0009 為 redhat enterpriselinux\EFI\redhat\shimx64.efi
boot0000 為 linpus lite\EFI\boot\grubx64.efi
boot2002 為 EFI cdrom
boot2003 為 EFI network
boot2001 為 EFI usb
boot0008 為 EFI Shell
其實(shí)也可以通過shell>setvar BootOrder來查看變量BootOrder的值:
——所以 dmpstore boot* -b命令 的boot order結(jié)果,對(duì)應(yīng):bios界面 boot菜單下的"Boot Type Order":
也對(duì)應(yīng) shell>btcfg boot dump -v的結(jié)果。
3、通過上圖,可以看到
板載網(wǎng)卡(BMC 的dedicate+share的MAC 在A8處:2500 后面的 6c 92 bf 9a 66 3d/3c;(boot000B,boot0001)
網(wǎng)卡x722的的MAC 在 B2處:2500后面的 6c92 bf 9a 66 3e;(boot0002~0005)
x520 網(wǎng)卡的MAC地址在 A0 處:2500后面的f8 f2 1e 2c b2 80(boot0006~0007)
——參照 下面的 “bios中網(wǎng)卡mac”
另外也可以推導(dǎo)出:
dmpstore boot* -b命令 的boot order結(jié)果;
boot order:順序分別為 0009,0000,2002,2003,2001,0008.
根據(jù)下面系列圖片,也以知道:
boot0009 為 redhat enterpriselinux\EFI\redhat\shimx64.efi
boot0000 為 linpus lite\EFI\boot\grubx64.efi
boot2002 為 EFI cdrom
boot2003 為 EFI network
boot2001 為 EFI usb
boot0008 為 EFI Shell
——若network列出詳細(xì)的NETWORKPXE設(shè)備,就相當(dāng)于:
服務(wù)器啟動(dòng)時(shí),若輸入F11中斷,進(jìn)入boot Manager,手工選擇啟動(dòng)項(xiàng),這些列出來的啟動(dòng)項(xiàng):
3.4 PXE網(wǎng)卡啟動(dòng)測(cè)試
當(dāng)我們遇到PXE安裝失敗時(shí),我們可以通過EFI SHELL中的相關(guān)命令 手工測(cè)試本地PXE網(wǎng)卡 tftp PXE server。
fat32 的U盤上有下載的tftp.efi:
3.4.1 靜態(tài)IP測(cè)試
首先看看 網(wǎng)卡在uefi階段設(shè)置的 eth0 的靜態(tài)ip(配置方法參考云筆記:”i48測(cè)試” ):
從efi的tftp client端 ping tftp server 不通——這是浪潮內(nèi)網(wǎng)的問題。
tftp.efi的語法錯(cuò)誤:
——也就是說,以后不要再寫 “/”了。
從efi客戶端 嘗試tftp 一個(gè)不存在的ip 10.48.4.31(模擬IP不通):
不啟動(dòng)遠(yuǎn)端tftpserver 的情況下(IP通,但沒有tftpserver服務(wù)),強(qiáng)制啟動(dòng) tftp client:結(jié)果和ip不通是一樣一樣的,提示unable to get the size of.....timeout:
啟動(dòng)tftp server,但是指定錯(cuò)誤的文件目錄:
嘗試 tftp client連接,提示:提示unable to get the size of.....TFTPError。
正確的設(shè)置 tftp server的根路徑:
嘗試tftp client連接:成功
再次故意錯(cuò)誤設(shè)置tftp server 上的文件路徑:?
tftp client 又提示:unable to get the size of.....TFTPError。
最后恢復(fù)正確的tftpserver 的文件路徑:
tftpclient 運(yùn)行成功:
tftp client指定 nic 方式連接也運(yùn)行 成功:
efi本地fs1確實(shí)也下載了mbrsda4k文件:
3.4.2 動(dòng)態(tài)IP獲取測(cè)試
測(cè)試ifconfig -s eth0 dhcp來獲取dhcpIP地址。
步驟略。
——本篇為x86架構(gòu)與 linux操作系統(tǒng)的最后過渡。本篇結(jié)束后,x86架構(gòu)系列暫告一段落。
總結(jié)
以上是生活随笔為你收集整理的linux lspci信息 详解_Linux引导之EFI SHELL详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 12 天直降 891 元:苹果 Mac
- 下一篇: linux显卡驱动版本最好,Linux