日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux lspci信息 详解_Linux引导之EFI SHELL详解

發布時間:2023/12/15 linux 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux lspci信息 详解_Linux引导之EFI SHELL详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上一篇說,我覺得許多EFI SHELL的文章,總是沒講透。所以我想將EFI SHELL掀個底兒朝天。

磁盤上的EFI系統分區,即 EFI system partition,簡寫為 ESP。

UEFI類型的BIOS一般自帶EFI SHELL,我們進入EFI SHELL中,就像進入了一個就簡單的cli交互系統。通過命令可以看到bios與os之間的某些聯系,也能看到一些操作系統引導的某些信息。

1EFI SHELL簡單操作

在UEFI BIOS的引導菜單中,通常都有EFI SHELL菜單。

選中回車即進入了EFI SHELL。

有些服務器的EFI SHELL命令和功能較全;而有些服務器需要通過廠商的診斷維護U盤執行其他EFI命令,來補充相關的EFISHELL功能。

1.1 map命令

使用map –b 可以看到當前可以引導操作系統的硬盤。

-b 分頁顯示 相當于 linux命令 more

map -b的說明:

fs是mount點,blkX是磁盤塊設備分區;

UEFI承認的塊設備分區blkX、也就是磁盤上的EFI分區,可以自動或者手動mount到某個fsX上;

比如shell>mount blk9 fs9——如果blk9是EFI分區,則可以正常掛載;

詳細參考 help mount -b

mount成功后 再通過map -b看設備:

fs0:盤中的EFI esp分區(blk0)的mount點。Alias關鍵字后面的alias blk0 表示 blk0 mount 在fs0;

fs1:硬盤上的EFI esp分區(blk1)即hd(1,gpt)的mount點;

blk0:centos光盤介質的EFI blk設備;

blk1,5,6,7: 硬盤上的EFI esp分區(blk1)即hd(1,gpt);blk5-7,硬盤上的另外3個分區,分別對應hd(2,gpt),hd(3,gpt),hd(4,gpt);

————————map -b的說明完畢——————————————————

1.2 fsX的簡單操作

對blk設備進行mount后,在EFISHELL里 可以對EFI分區進行ls等操作,在本實驗中,只能對fs0,fs1進行ls和cd:

“fsX:”用于文件系統之間切換;

——————————————————————————————————

centos 所在硬盤里的EFI分區的內容:

在EFI SHELL里,.EFI就是bootloader,可以在EFISHELL中直接執行。

硬盤EFI esp里的內容 就是fs1(hd(1,gpt))里面的內容:

[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——是可以執行啟動linux的。

2map命令中的磁盤設備路徑

本部分的圖與第一部分的圖無關。

2.1 補充的Intel x86 CPU架構知識

假設該服務器是Intel skylake 兩路服務器。

那么CPU0 的四個PCIBUSNO,會被BIOS初始化成:0x00,0x17,0x3a,0x5d;

那么CPU1 的四個PCIBUSNO,會被BIOS初始化成:0x80,0x85,0xae,0xd7;

除了第一個PCIBUSNO,其他三個CPU PCIBUSNO 對應的rootport,可以被劈成(bifurcate)以下幾種方式:

1、一整個PCIBUS x16 pcie lane,形成 一個rootport;

2、一個PCIBUS x16 pcie 分成8x8 pcie lane,形成兩個rootport;

3、一個PCIBUS x16 pcie 分成8x4x4 pcie lane,形成三個rootport;

4、一個PCIBUS x16 pcie 分成4x4x4x4 pcie lane,形成四個rootport;

如下圖:

?

——服務器型號不同,則上圖bifurcate的方式就不同,具體要看服務器廠商的電路設計以及服務器的系統邏輯圖。

2.2 map設備路徑

再看一臺skylake服務器,浪潮I48某節點的EFI SHELL 的map命令輸出:

就以FS0為例:

下面這個路徑,從左到右,挨個的擼。

2.2.1?? PCIroot(0x00)

代表了該磁盤所在的rootport編號(第0個rootport,第1個rootport,第2個rootport,,,,)

從操作系統的lspci -vt縮略樹來看,rootport的編號和PCIE BDF位置如下:》》》粗體所示(注意iou bus 5d,明顯的,該IOU 的 PCIE lanes被研發劈成了8x4x4,所以 bus 5d下有三個rootport)

-+-[0000:d7]-+-00.0-[d8-d9]--+-00.0 Intel Corporation 82599ES 10-GigabitSFI/SFP+ Network Connection 》》》這個00.0 是系統第9個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 》》》這個00.0 是系統第8個rootport;

| +-05.0 Intel Corporation Device 2034

+-[0000:85]-+-05.0 Intel Corporation Device 2034 》》》05.0 前面的 00.0沒有插卡,所以,lspci沒顯示00.0。這個沒顯示的00.0 是系統第7個rootport;

+-[0000:80]-+-04.0 Intel Corporation Sky Lake-E CBDMA Registers 》》》04.0 前面的 00.0沒有插卡,所以,lspci沒顯示00.0。這個沒顯示的00.0 是系統第第6個rootport;

+-[0000:5d]-+-00.0-[5e-61]----00.0-[5f-61]----03.0-[60-61]--+-00.0Intel Corporation Ethernet Connection X722 for 1GbE 》》》系統第3個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]-- 》》》系統第4個rootport

| +-03.0-[63]-- 》》》系統第5個rootport

| +-05.0 Intel Corporation Device 2034

+-[0000:3a]-+-00.0-[3b]----00.0 LSI Logic / Symbios Logic MegaRAID SAS-33108 [Invader] 》》》系統第2個rootbus

| +-05.0 Intel Corporation Device 2034

+-[0000:17]-+-05.0 Intel Corporation Device 2034 》》》05.0 前面的 00.0沒有插卡,所以,lspci沒顯示00.0。這個沒顯示的00.0 是第系統1個rootbus

\-[0000:00]-+-00.0 Intel Corporation Sky Lake-E DMI3 Registers》》》系統第0個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個rootport(其實就是DMI連接的PCH南橋)。所以 fs0的路徑PciRoot為0x0。

2.2.2 pci(0x110x5)

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)

這個確實不知道。

2.2.4 HD(1,gpt,748ae5f2-2aa3-4cec-a074-976d6fef0895,0x800,0x64000)

1:表示這是磁盤的第一個partition(盤的分區就是從1開始);

gpt:表示該磁盤為gpt分區類型;

748ae5f2-2aa3-4cec-a074-976d6fef0895

對應 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"

(補充 UUID="3D70-7403" 在分區的分區頭,該uuid是分區內的文件系統的uuid。這里的分區 是磁盤的第一個分區。分區的物理起始地址是0x100000,所以UUID:3D70-7403在下圖地址:

)

PARTUUID也就是對應gpt硬盤的盤頭 LBA2 中 第一個分區的meta(from 絕對字節地址0x400)信息中的一部分數據,絕對字節地址(0x410~0x41f),表示分區的uuid:

748ae5f2-2aa3-4cec-a074-976d6fef0895

0x800:分區開始的扇區號:

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 對應 盤頭 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 扇區,就是這個0x800;(當然,每個扇區是512字節,所以start 2048也就是 start 字節地址0x100000);

——end 411647,所以 part的大小就是 411647-2048+1=409600=0x64000個扇區

至此,map設備路徑解析完畢。

3、啟動項

3.1 添加USB安裝盤,map的前后變化

原始的map信息:

通過bcfg boot dump –v來查看當前的OS啟動項:

bmc 的kvm遠程加載一個 redhat安裝iso——模擬一個光驅設備:

此時efishell里的map里還沒有這個虛擬cdrom;

從efi shell>exit返回到 bios仿真圖形,然后再進入boot manager,boot manager應該是自動掃描了啟動設備,此時啟動項里便有了usb/cdrom;

然后再進入efishell>map -b,就有了虛擬cdrom了:

3.2 通過bcfg命令添加啟動項

節點 的bios 中似乎沒有“手工添加啟動項” 的功能菜單。

刀片所用的bios廠商信息記錄如下:

——也許其他機型、其他logo 的bios有 “手工添加啟動項” ,但是本機BIOS中沒有這個功能。

在這種情況下,可以嘗試用EFI SHELL里的bcfg命令來添加啟動項zxpuboot。

先查看當前的啟動項:

help bcfg -b:

先嘗試添加引導項:第一次添加失敗(用blk設備名路徑,添加失敗),第二次添加成功(用fs設備名路徑,添加成功)

返回看看 bootmanager 仿真界面,確實有了“zxpuboot”選項:

?

并且zxpuboot也可以正常引導:

在某些特殊情況下,例如:升級bios以后啟動項丟失,我們就可以使用以上方法添加啟動項。

3.3 dmpstore查看更底層的啟動項

shell>dmpstore boot* -b (注:下圖輸出中,每一行中間的 “-” (例如20-01,中間的“-”)沒有意義,忽略)

?

上圖說明:

1、bootcurrent:當前啟動在什么地方,上圖值為0008;而下面的圖中,boot0008項表示為EFI SHELL;

2、bootorder:順序分別為 0009,0000,2002,2003,2001,0008.

根據下面系列圖片,也以知道:

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

其實也可以通過shell>setvar BootOrder來查看變量BootOrder的值:

——所以 dmpstore boot* -b命令 的boot order結果,對應:bios界面 boot菜單下的"Boot Type Order":

也對應 shell>btcfg boot dump -v的結果。

3、通過上圖,可以看到

板載網卡(BMC 的dedicate+share的MAC 在A8處:2500 后面的 6c 92 bf 9a 66 3d/3c;(boot000B,boot0001)

網卡x722的的MAC 在 B2處:2500后面的 6c92 bf 9a 66 3e;(boot0002~0005)

x520 網卡的MAC地址在 A0 處:2500后面的f8 f2 1e 2c b2 80(boot0006~0007)

——參照 下面的 “bios中網卡mac”

另外也可以推導出:

dmpstore boot* -b命令 的boot order結果;

boot order:順序分別為 0009,0000,2002,2003,2001,0008.

根據下面系列圖片,也以知道:

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列出詳細的NETWORKPXE設備,就相當于:

服務器啟動時,若輸入F11中斷,進入boot Manager,手工選擇啟動項,這些列出來的啟動項:

3.4 PXE網卡啟動測試

當我們遇到PXE安裝失敗時,我們可以通過EFI SHELL中的相關命令 手工測試本地PXE網卡 tftp PXE server。

fat32 的U盤上有下載的tftp.efi:

3.4.1 靜態IP測試

首先看看 網卡在uefi階段設置的 eth0 的靜態ip(配置方法參考云筆記:”i48測試” ):

從efi的tftp client端 ping tftp server 不通——這是浪潮內網的問題。

tftp.efi的語法錯誤:

——也就是說,以后不要再寫 “/”了。

從efi客戶端 嘗試tftp 一個不存在的ip 10.48.4.31(模擬IP不通):

不啟動遠端tftpserver 的情況下(IP通,但沒有tftpserver服務),強制啟動 tftp client:結果和ip不通是一樣一樣的,提示unable to get the size of.....timeout

啟動tftp server,但是指定錯誤的文件目錄:

嘗試 tftp client連接,提示:提示unable to get the size of.....TFTPError

正確的設置 tftp server的根路徑:

嘗試tftp client連接:成功

再次故意錯誤設置tftp server 上的文件路徑:?

tftp client 又提示:unable to get the size of.....TFTPError

最后恢復正確的tftpserver 的文件路徑:

tftpclient 運行成功:

tftp client指定 nic 方式連接也運行 成功:

efi本地fs1確實也下載了mbrsda4k文件:

3.4.2 動態IP獲取測試

測試ifconfig -s eth0 dhcp來獲取dhcpIP地址。

步驟略。

——本篇為x86架構與 linux操作系統的最后過渡。本篇結束后,x86架構系列暫告一段落。

總結

以上是生活随笔為你收集整理的linux lspci信息 详解_Linux引导之EFI SHELL详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。