第二天:系統從BIOS/UEFI到GRUB/bootloader的啟動過程

目錄

  • **一、BIOS/UEFI初始化階段**
  • **二、引導加載程序(GRUB)的啟動過程**
    • **1. BIOS模式下的GRUB分階段加載**
    • **2. UEFI模式下的GRUB加載**
  • **三、操作系統內核加載與初始化**
  • **四、關鍵組件與配置文件**
  • **五、故障排查與恢復**
  • **總結**
  • 常見問題
    • 如何在UEFI模式下修復GRUB引導加載程序?
    • BIOS與UEFI在硬件初始化階段有哪些具體的不同?
    • GRUB配置文件`/boot/grub/grub.cfg`的詳細編輯指南是什么?
    • initramfs的作用及其在系統啟動過程中的具體步驟是什么?
      • initramfs的作用
      • initramfs在系統啟動過程中的具體步驟
      • initramfs與initrd的區別
      • 實際應用
    • 在多操作系統環境中,如何配置GRUB以支持多系統啟動?

一、BIOS/UEFI初始化階段

  1. 硬件自檢(POST)

    • BIOS/UEFI通電后首先執行硬件自檢(Power-On Self Test),檢查CPU、內存、硬盤等設備的運行狀態,確保硬件正常。
    • UEFI相比傳統BIOS更先進,支持**GPT分區表、安全性增強(如Secure Boot)**和更快的啟動速度。
  2. 硬件初始化與配置加載

    • BIOS/UEFI初始化系統硬件,讀取CMOS(或NVRAM)中的配置參數,如啟動順序、時間設置等。
    • UEFI還會加載**內置驅動程序(如網絡驅動、USB驅動)**以支持更多外設。
  3. 啟動設備搜索

    • 根據配置的啟動順序(如硬盤、光驅、USB),BIOS/UEFI識別可引導設備并加載其引導記錄:
  • BIOS模式:加載硬盤的主引導記錄(MBR,512字節),其中包含引導代碼(446字節)和分區表(64字節)。
  • UEFI模式:直接加載EFI分區中的引導程序(如EFI/BOOT/bootx64.efi)。

二、引導加載程序(GRUB)的啟動過程

1. BIOS模式下的GRUB分階段加載

  • Stage 1

    • BIOS將MBR中的引導代碼(Stage 1)加載到內存地址0x7C00并執行。

    • Stage 1代碼會跳轉到MBR后的未分配空間(或分區表后的空間),加載Stage 1.5。

  • Stage 1.5

    • 處理文件系統(如ext4、NTFS),定位并加載Stage 2的GRUB核心模塊。
    • 此階段支持GRUB的高級功能,如菜單選擇、內核參數編輯。
  • Stage 2

    • 加載GRUB配置文件(如/boot/grub2/grub.cfg),顯示啟動菜單,允許用戶選擇操作系統或內核版本。
    • 根據配置加載內核(如vmlinuz)和初始化內存文件系統(initramfs)到內存。

在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

2. UEFI模式下的GRUB加載

  • UEFI直接加載EFI分區中的GRUB二進制文件(如/EFI/BOOT/bootx64.efi),跳過MBR階段。
  • GRUB在UEFI環境中同樣執行Stage 2的加載流程,但無需Stage 1的中繼。

三、操作系統內核加載與初始化

  1. 內核加載

    • GRUB將內核鏡像(如vmlinuz)和initramfs加載到內存。
    • 內核參數(如root=/dev/sda1 ro quiet splash)通過GRUB傳遞給內核。
  2. 內核初始化

    • 內核接管系統控制權,初始化硬件(如CPU模式切換、內存管理)、掛載根文件系統(通過initramfs)。
    • 啟動第一個用戶空間進程(PID 1),通常是systemd(現代Linux)或init(傳統系統)。

在這里插入圖片描述

四、關鍵組件與配置文件

  • GRUB配置文件/boot/grub2/grub.cfg定義了啟動菜單選項及內核參數。
  • initramfs:臨時文件系統,用于在真實根文件系統掛載前提供驅動和工具。
  • /boot目錄:存放內核鏡像、GRUB模塊和其他引導文件。

五、故障排查與恢復

  • 引導修復:若MBR損壞,可通過grub-install命令重新安裝GRUB。
  • 緊急模式:通過GRUB菜單編輯參數(如init=/bin/bash)進入緊急Shell。
  • 密碼恢復:在GRUB菜單編輯啟動參數(如rw init=/bin/bash)繞過登錄。

總結

系統啟動流程從BIOS/UEFI的硬件初始化開始,通過引導加載程序(如GRUB)加載內核和initramfs,最終由內核啟動用戶空間進程。BIOS與UEFI的核心區別在于引導方式(MBR vs. EFI分區)和功能擴展,而GRUB作為靈活的引導管理器,支持多系統選擇和內核參數定制。

常見問題

如何在UEFI模式下修復GRUB引導加載程序?

在UEFI模式下修復GRUB引導加載程序,可以按照以下步驟進行:

  1. 確認UEFI模式
    首先,確保你的系統是UEFI模式。可以通過檢查/sys/firmware/efi/efi system目錄是否存在來確認。

  2. 進入Live系統
    使用Live CD或Live USB啟動系統。這將允許你在不破壞現有系統的情況下進行修復操作。

  3. 掛載分區
    在Live系統中,掛載你的根分區。例如,如果根分區是/dev/sda1,可以使用以下命令:

   sudo mount /dev/sda1 /mnt
  1. 進入chroot環境
    進入掛載的根分區,使其成為當前的工作目錄:
   sudo chroot /mnt
  1. 更新GRUB配置
    在chroot環境中,運行以下命令來更新GRUB配置:
   update-grub

這將掃描系統并更新GRUB配置文件。

  1. 安裝GRUB到EFI分區
    使用以下命令將GRUB安裝到EFI分區:
   grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB

確保/boot/efi目錄已經存在并且包含EFI分區。

  1. 更新GRUB配置文件
    再次運行update-grub命令,確保所有啟動項都被正確識別和添加到GRUB菜單中。

  2. 重啟系統
    重啟系統,檢查GRUB是否正常啟動。如果一切正常,你應該能看到GRUB菜單,并能夠選擇啟動不同的操作系統。

  3. 檢查Secure Boot狀態
    如果你的系統啟用了Secure Boot,可能需要禁用它才能正常啟動GRUB。可以通過BIOS設置來禁用Secure Boot。

  4. 其他注意事項

  • 如果GRUB仍然無法啟動,可以嘗試使用efibootmgr工具來手動設置啟動項。例如,使用以下命令查看當前的EFI啟動項:
      efibootmgr -v

然后,使用以下命令設置新的啟動項:

      efibootmgr -c -d /dev/sda -p 1 -l /EFI/your-distribution/grubx64.efi 

其中,/dev/sda是包含EFI分區的設備,1是EFI分區的分區號,grubx64.efi 是GRUB的啟動文件。

通過以上步驟,你應該能夠在UEFI模式下成功修復GRUB引導加載程序。

BIOS與UEFI在硬件初始化階段有哪些具體的不同?

BIOS(基本輸入輸出系統)和UEFI(統一可擴展固件接口)在硬件初始化階段存在一些具體的不同。以下是詳細的對比:

  1. 初始化過程的復雜性和速度

    • BIOS:BIOS在啟動時會執行基本的硬件自檢(POST),包括內存、顯卡、鍵盤等組件的檢測。這個過程相對簡單,但速度較慢,通常需要幾秒鐘的時間來完成所有檢測和初始化工作。
    • UEFI:UEFI的初始化過程更為精細和高效。它不僅檢測和初始化所有連接的硬件設備,如CPU、內存、硬盤、顯卡等,還可以利用多核處理器并行處理這些任務,顯著縮短了初始化時間。
  2. 硬件支持

    • BIOS:BIOS主要支持32位硬件接口,因此在處理現代硬件時可能會遇到限制。例如,BIOS通常不支持超過4GB的內存。
    • UEFI:UEFI支持64位硬件接口,可以處理更大的內存容量,支持更大的硬盤容量,并提供更多的硬件支持。
  3. 啟動加載程序

    • BIOS:BIOS使用MBR(主引導記錄)格式的引導加載程序,這種格式主要用于硬盤分區和引導加載程序的加載。
    • UEFI:UEFI使用GPT(GUID分區表)格式的引導加載程序,這種格式不僅提供了更靈活的分區管理,還支持更大的硬盤容量和更快的啟動速度。
  4. 安全性

    • BIOS:BIOS的安全性較低,容易受到惡意軟件的攻擊。
    • UEFI:UEFI提供了更高的安全性,包括安全啟動、固件簽名驗證和安全啟動驗證等功能。
  5. 啟動流程

    • BIOS:BIOS啟動流程包括系統開機、POST、讀取主引導記錄(MBR)并執行其代碼、加載引導程序。
    • UEFI:UEFI啟動流程包括系統開機、POST、加載UEFI固件、讀取固件中的引導條目以確定要啟動的引導應用、加載引導應用(可能來自內核、Arch引導器或根文件系統)、執行引導應用。
  6. 平臺初始化(PI)階段

    • BIOS:BIOS沒有明確的平臺初始化階段,直接進入引導加載程序的加載。
    • UEFI:UEFI的平臺初始化(PI)階段包括PEI(Pre-EFI初始化)、DXE(Driver Execution Environment)、BDS(Boot Services Driver)、TSL(Temporary System Services)和RT(Run Time)等階段。這些階段確保了從操作系統接管到上電的整個過程,包括處理器、芯片組和平臺配置,以及內存初始化。

總結來說,BIOS和UEFI在硬件初始化階段的主要區別在于初始化過程的速度和復雜性、硬件支持能力、啟動加載程序的格式、安全性和啟動流程的細節。

GRUB配置文件/boot/grub/grub.cfg的詳細編輯指南是什么?

GRUB配置文件/boot/grub/grub.cfg 是GRUB啟動加載程序的核心配置文件,通常位于/boot/grub//boot/grub2/目錄下。該文件由grub-mkconfig工具自動生成,包含了GRUB啟動菜單的所有配置項。編輯此文件時需要特別小心,因為錯誤的配置可能導致系統啟動失敗。

  1. 編輯前的準備
    在編輯grub.cfg 文件之前,建議進行以下準備工作:
  • 備份原始文件:使用命令sudo cp /boot/grub/grub.cfg /boot/grub/grub.cfg original備份原始文件。
  • 確認編輯器:確保使用正確的編輯器,例如sudo nano /boot/grub/grub.cfg
  • 設置文件為可寫狀態:使用命令sudo chmod +w /boot/grub/grub.cfg
  1. 配置文件結構
    grub.cfg 文件通常包含以下部分:
  • 全局設置(Global Settings) :定義GRUB的全局設置,如默認啟動項、超時時間、終端輸出等。
  • 菜單項(Menu Entries) :定義每個操作系統或內核的啟動項,每個啟動項以menuentry關鍵字開頭。
  • 模塊和擴展(Modules and Extensions) :包含GRUB加載的特定模塊,如圖形界面、密碼保護等。
  1. 常見配置項
    以下是一些常見的配置項及其用途:
  • 設置默認啟動項:使用set default=0設置默認啟動項。
  • 添加支持:例如,使用insmod jpeg支持JPEG圖片格式,使用insmod tga支持TGA或PNG背景圖片。
  • 設置root分區:使用root=(hd0,7)指定root分區。
  • 設置超時時間:使用timeout=10設置啟動菜單的超時時間。
  • 設置背景圖片:使用background_image /boot/grub背景圖片.jpg設置背景圖片。
  • 設置終端配置:包括終端字體、分辨率、顏色等。
  • 添加Linux引導項:使用menuentry 'Ubuntu' --class ubuntu --id ubuntu --record --linux /boot/vmlinuz-4.15.0-166-generic --initrd /boot初始化/vmlinuz-4.15.0-166-generic --rootUUID=UUID=12345678-1234-1234-1234-1234567890abcdef --ro'添加自定義啟動項。
  • 添加Windows引導項:使用類似的方法添加Windows系統的啟動項。
  1. 其他注意事項
  • 避免直接編輯:由于grub.cfg 文件是自動生成的,直接編輯可能會在更新GRUB時被覆蓋。建議通過修改/etc/default/grub文件并執行sudo update-grub來生成新的grub.cfg 文件。
  • 使用注釋:在需要臨時禁用條目時,可以在條目前添加#字符。
  • 遵循GRUB語法:例如,指定內核路徑時使用linux而不是Linux
  1. 示例配置
    以下是一個簡單的示例配置,展示了如何設置默認啟動項、添加支持和設置背景圖片:
set default=0
insmod jpeg
insmod tga
root=(hd0,7)
search --no-floppy --label --set UUID=12345678-1234-1234-1234-1234567890abcdef
timeout=10
background_image /boot/grub背景圖片.jpg
  1. 更新配置
    完成編輯后,需要更新GRUB配置以應用更改:
sudo update-grub

initramfs的作用及其在系統啟動過程中的具體步驟是什么?

initramfs(Initial RAM Filesystem)在Linux系統啟動過程中扮演著至關重要的角色。它是一個臨時文件系統,包含了內核啟動所需的文件系統模塊和驅動程序,確保內核能夠順利加載真正的根文件系統。以下是initramfs的作用及其在系統啟動過程中的具體步驟:

initramfs的作用

  1. 提供必要的文件系統支持:initramfs中包含了內核啟動所需的文件系統模塊和驅動程序,使得內核能夠順利加載真正的根文件系統。
  2. 簡化內核啟動過程:通過提前加載必要的文件系統和驅動程序,initramfs減少了內核啟動時的復雜性,提高了系統啟動的穩定性和可靠性。
  3. 支持特定的啟動需求:initramfs可以根據系統的需求定制,包含特定的文件系統和驅動程序,以滿足特定的啟動需求。

initramfs在系統啟動過程中的具體步驟

  1. 硬件初始化:系統啟動后,首先進行硬件初始化,包括CPU、內存、I/O設備等的初始化。
  2. 加載內核和initramfs:bootloader將內核和initramfs加載到內存中。此時,initramfs作為一個臨時文件系統被掛載到/目錄下。
  3. 內核內核加載:內核開始執行,加載必要的驅動模塊和設備工具。
  4. 運行initramfs中的程序:initramfs中包含的程序開始運行,探測硬件設備并加載所需的驅動程序。這些程序通常包括init腳本,用于執行一系列初始化任務。
  5. 掛載真正的根文件系統:在initramfs中加載的驅動程序和設備工具準備好后,系統會卸載initramfs并掛載真正的根文件系統。此時,initramfs被解壓并釋放內存。
  6. 切換到用戶空間:系統切換到用戶空間,執行/sbin/init或其他指定的啟動腳本,進入正常運行狀態。

initramfs與initrd的區別

initramfs與傳統的initrd(Initial RAM Disk)相比,具有以下優勢:

  1. 動態擴展性:initramfs基于RAMFS技術,具有動態擴展和自動內存管理的特點,可以根據需要按需加載驅動,保持系統的靈活性和穩定性。
  2. 減少內核負擔:initramfs將許多驅動和工具從內核中分離出來,避免了將所有驅動編譯進內核的復雜性。

實際應用

在實際應用中,initramfs可以用于多種場景,例如:

  1. 系統修復:在系統啟動失敗時,可以通過修改initramfs來修復系統。
  2. 輕量級啟動:通過構建最小的initramfs文件系統,可以實現輕量級啟動,減少內核啟動時間。
  3. 密碼重置:在某些情況下,可以通過修改initramfs來重置root用戶密碼。

在多操作系統環境中,如何配置GRUB以支持多系統啟動?

在多操作系統環境中,配置GRUB以支持多系統啟動需要遵循以下步驟:

  1. 安裝GRUB
    • 首先,確保GRUB已經安裝在你的系統中。通常,GRUB會自動安裝在BIOS或UEFI啟動分區上。如果未安裝,可以使用以下命令進行安裝:
     sudo grub-install /dev/sda

其中/dev/sda是你的啟動盤設備名。

  1. 生成GRUB配置文件
    • 使用grub-mkconfig命令生成GRUB配置文件。這個文件包含了GRUB的啟動菜單和啟動項配置。通常,這個文件位于/boot/grub/grub.cfg 。可以使用以下命令生成配置文件:
     sudo grub-mkconfig -o /boot/grub/grub.cfg 

這個命令會根據當前的系統配置生成一個新的grub.cfg 文件。

  1. 編輯GRUB配置文件
    • GRUB配置文件通常位于/etc/default/grub。你可以通過編輯這個文件來修改GRUB的行為。例如,你可以設置默認啟動的系統、菜單項停留時間等。編輯該文件時,可以使用以下命令:
     sudo nano /etc/default/grub

在文件中,你可以找到類似以下的配置項:

     #GRUB_DEFAULT=0#GRUB_TIMEOUT=10

其中,GRUB_DEFAULT表示默認啟動的系統索引,GRUB_TIMEOUT表示菜單停留時間(秒)。你可以根據需要修改這些值。

  1. 更新GRUB配置
    • 修改完配置文件后,需要重新生成GRUB配置文件以應用更改:
     sudo grub-mkconfig -o /boot/grub/grub.cfg 

這樣,GRUB會根據新的配置文件重新生成啟動菜單。

  1. 處理特定操作系統的啟動項
    • 如果你有多個操作系統(如Windows、Linux等),需要確保每個操作系統的啟動項都能被GRUB正確識別。例如,對于Windows,可能需要手動添加啟動項。可以使用以下命令手動添加Windows啟動項:
     sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=grub

其中,/boot/efi是EFI分區的掛載點。

  1. 驗證GRUB配置

    • 最后,可以通過啟動計算機并檢查GRUB菜單來驗證配置是否正確。如果一切正常,你應該能看到所有可用的操作系統啟動選項。
  2. 注意事項

    • 在多系統環境中,確保每個操作系統的引導加載程序(如Windows的NTLOADER、Linux的GRUB)都正確安裝在各自的啟動分區上。
    • 如果遇到GRUB無法識別某些操作系統的啟動項,可以嘗試使用Windows的啟動修復工具來修復Windows的引導加載程序。
    • 在某些情況下,可能需要調整BIOS或UEFI設置中的啟動順序,以確保GRUB能夠正確加載所有操作系統的啟動項。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/894815.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/894815.shtml
英文地址,請注明出處:http://en.pswp.cn/news/894815.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

es官方go客戶端創建ik索引并進行查詢操作

es-go client引入gomod go get github.com/elastic/go-elasticsearch/v8latest連接es服務器(不經過安全校驗) cfg : elasticsearch.Config{Addresses: []string{"http://localhost:9200",}, } es, err : elasticsearch.NewClient(cfg) if err ! nil {pa…

【容器技術01】使用 busybox 構建 Mini Linux FS

使用 busybox 構建 Mini Linux FS 構建目標 在 Linux 文件系統下構建一個 Mini 的文件系統,構建目標如下: minilinux ├── bin │ ├── ls │ ├── top │ ├── ps │ ├── sh │ └── … ├── dev ├── etc │ ├── g…

【C語言系列】深入理解指針(5)

深入理解指針(5) 一、sizeof和strlen的對比1.1sizeof1.2strlen1.3sizeof和strlen的對比 二、數組和指針筆試題解析2.1 一維數組2.2 字符數組2.2.1代碼1:2.2.2代碼2:2.2.3代碼3:2.2.4代碼4:2.2.5代碼5&#…

標志的推理

下面的討論是我對《對編程實現擬人智能可行性的論證》這篇文章的“賦值與對象的標志”這一節的展開討論。 標志能夠使我們更好的思維(比如用輪廓標記物體對象,用興奮強度標記回憶情況等等)。有思維標志、信息標志,單純標志、組合…

【藍橋杯嵌入式】2_LED

1、電路圖 74HC573是八位鎖存器,當控制端LE腳為高電平時,芯片“導通”,LE為低電平時芯片“截止”即將輸出狀態“鎖存”,led此時不會改變狀態,所以可通過led對應的八個引腳的電平來控制led的狀態,原理圖分析…

Diskgenius系統遷移之后無法使用USB啟動

前言 本文用于記錄系統遷移中遇到的問題及解決方法,如有不對請指出,謝謝! 現象 使用DiskGenius進行系統遷移后,使用USB啟動失敗,反復在品牌logo和黑屏之間切換,期間還會在左上角顯示”reset system“報錯…

使用 Postman 進行 API 測試:從入門到精通

使用 Postman 進行 API 測試:從入門到精通 使用 Postman 進行 API 測試:從入門到精通一、什么是 API 測試?二、Postman 簡介三、環境搭建四、API 測試流程1. 收集 API 文檔2. 發送基本請求示例:發送 GET 請求示例代碼(…

Android Studio:Application 和 Activity的區別

Application 和 Activity 是 Android 中非常重要的兩個組件,它們分別負責不同的生命周期管理和應用的不同層次的操作。 Application 是應用級別的生命周期管理,它在整個應用運行時只有一個實例,負責應用的全局初始化和資源管理。Activity 是…

Mac本地體驗LM studio

博主很懶,不愛打字! 1、LM studio官網:LM Studio - Discover, download, and run local LLMs 2、下載DMG文件,安裝 3、使用vscode工具,commandshiftH【全局替換功能】,選擇目錄/Applications/LM\ Studio…

SQL Server 數據庫備份指南

SQL Server備份是數據庫維護的日常工作。備份的目的是在發生數據丟失、損壞甚至硬件故障時將數據庫和事務日志恢復到最近的時間點。您可以借助專業的SQL Server備份軟件,操作起來更方便。前提需要安裝SQL Server Management Studio (SSMS)工具。 對于 SQL 數據庫備份,有多種…

我最近在干什么【2】

前言 這系列的上一篇是2024.12.05寫的,現在是2025.02.06,這都兩個月🤔小久。 不是完整全面的技術分享,話題聚焦個人成長(學的技術、了解到的信息、看的書……) 方面。文章偏意識流點,單純分享我…

Temperature、Top-P、Top-K、Frequency Penalty詳解

在生成式AI(比如ChatGPT)中,Temperature、Top-P、Top-K、Frequency Penalty 這些參數用于控制文本生成的多樣性、隨機性和重復度,它們的作用如下: 1. Temperature(溫度) 作用:控制輸…

4. Go結構體使用

1、結構體的簡介 結構體(Struct)是編程語言中常見的一種復合數據類型,它將不同類型的數據元素(成員)組合成一個單一的實體。通過結構體,程序員可以將具有不同類型和性質的信息綁定到一個對象中&#xff0c…

sqlite 查看表結構

在SQLite中,查看表結構通常有以下幾種方法: 使用.schema命令 在SQLite的命令行界面中,你可以使用.schema命令加上表名來查看該表的結構。例如,如果你想查看名為your_table_name的表結構,你可以這樣做: .s…

SpringAI介紹及本地模型使用方法

博客原文地址 前言 Spring在Java語言中一直穩居高位,與AI的洪流碰撞后也產生了一些有趣的”化學反應“,當然你要非要說碰撞屬于物理反應也可以, 在經歷了一系列復雜的反應方程后,Spring家族的新成員——SpringAI,就…

ip地址是手機號地址還是手機地址

在數字化生活的浪潮中,IP地址、手機號和手機地址這三個概念如影隨形,它們各自承載著網絡世界的獨特功能,卻又因名稱和功能的相似性而時常被混淆。尤其是“IP地址”這一術語,經常被錯誤地與手機號地址或手機地址劃上等號。本文旨在…

車載以太網__傳輸層

車載以太網中,傳輸層和實際用的互聯網相差無幾。本篇文章對傳輸層中的IP進行介紹 目錄 什么是IP? IP和MAC的關系 IP地址分類 私有IP NAT DHCP 為什么要防火墻穿透? 廣播 本地廣播 直接廣播 本地廣播VS直接廣播 組播 …

Docker 數據卷(Volume)詳細介紹

Docker 數據卷(Volume)詳細介紹 1. 什么是 Docker 數據卷? Docker 數據卷(Volume)是一種用于 持久化數據 和 容器間數據共享 的機制。由于容器的存儲是臨時的,容器刪除后其中的數據會丟失,因此…

wxWidgets生成HTML文件,帶圖片轉base64數據

編譯環境大家可以看我之前的文章,CodeBlocks + msys2 + wx3.2,win10 這里功能就是生成HTML文件,沒用HTML庫,因為是自己固定的格式,圖片是一個vector,可以動態改變數量的。 效果如下: #include <wx/string.h> #include <wx/file.h> #include <wx/ima…

網絡原理一>數據鏈路層協議->以太網協議

目錄 以太網協議的結構&#xff1a;類型&#xff1a;ARP請求應答報文&#xff1a;CRC&#xff1a;MTU: 為什么需要mac地址&#xff1a;mac地址和IP地址的區別&#xff1a; 以太網協議的結構&#xff1a; 以太網是數據鏈路層和物理層的主要協議 源IP&#xff0c;目的IP就不多說…