
小U使用PVE8.0下驱动USB RTL8156B 2.5G网卡 – 随手笔记 (yanghuanglin.com) 提供的一鍵安裝腳本在Proxmox 8下成功使用RTL8156B 2.5G網卡,本文請ChatGPT簡單分析一下這個一鍵安裝腳本的運作原理。腳本分成三個部分:
- rtl8152_install.sh
- autorun.sh
- r8152-2.17.1.tar.bz2
install.sh裏面會解壓r8152-2.17.1.tar.bz2壓縮包,再調用autorun編譯。
摘要節點
rtl8152_install.sh 的解釋
這段腳本是一個 Bash 腳本,目的是用來在 Proxmox VE (PVE) 系統上自動編譯和安裝 RTL8152 2.5G 乙太網卡驅動程式。下面我將逐步解釋這段腳本:
- 開頭的註解:標明了該腳本的用途和它支援的 Linux 核心版本。
- 檢查驅動是否已加載:使用
lsmod
命令來檢查r8152
驅動是否已經加載,如果已加載,則輸出相應的消息並退出腳本。 - 獲取 Proxmox VE 核心版本:使用
uname -r
命令來獲取目前的核心版本,並檢查核心版本中是否包含 “pve” 字串來判定系統是否是 PVE。 - 詢問用戶是否繼續:如果系統不是 PVE,則提示用戶是否繼續執行。如果用戶選擇不繼續,則腳本退出。
- 添加非訂閱用戶源:根據 PVE 的主版本號,向 apt sources.list 添加相應的 PVE 非訂閱用戶倉庫源。
- 安裝依賴包和核心頭文件/核心影像:首先嘗試安裝核心頭文件和核心影像,然後安裝編譯驅動所需的依賴包。
- 解壓和編譯驅動:
- 通過
tar -xf r8152-2.17.1.tar.bz2
解壓驅動源碼。 - 使用
mv
命令將解壓後的文件移動到當前目錄。 - 刪除原來的解壓目錄。
- 給
autorun.sh
腳本賦予執行許可權,然後執行它來編譯和安裝驅動。
- 通過
- 檢查編譯結果:檢查編譯是否成功,如果成功則提示用戶檢查驅動是否已加載,如果失敗則提供一些可能的解決步驟。
這段腳本的核心是自動化編譯和安裝 RTL8152 驅動的過程,它透過檢測 PVE 版本和核心版本來自動化這一過程,減輕用戶的負擔。在執行此腳本之前,需要確保用戶已將 RTL8152 的源碼 tar 包放在了腳本的同一目錄下。
核心頭文件 kernel header 是什麼?有什麼用?
核心頭文件(Kernel Headers)是一組包含Linux核心的資料結構、宏、函數聲明等的標頭文件。它們基本上提供了一個應用程序編程界面(API),讓外部模組(如裝置驅動)可以與核心進行交互。以下是一些核心頭文件的主要用途和重要性:
- 編寫和編譯裝置驅動:
當你開發或編譯裝置驅動時,你需要核心頭文件來提供必要的核心API和資料結構。它們讓驅動可以正確地與核心互動。 - 系統調用界面:
核心頭文件定義了系統調用的界面,這是用戶空間應用程序和核心空間之間的溝通橋樑。 - 編譯第三方軟體和模組:
當你需要從源碼編譯第三方軟體或核心模組時,你可能需要相應版本的核心頭文件來確保兼容性。 - API穩定性和兼容性:
通過使用正確的核心頭文件,開發人員可以確保他們的軟體或驅動與特定版本的Linux核心兼容。 - 使能特定功能:
核心頭文件還包含可以用來啟用或禁用特定核心功能的配置選項,這對於優化核心配置和啟用硬體支持非常重要。
綜上所述,核心頭文件是Linux系統開發和維護的重要組件,它們提供了一個必要的API來促進核心與外部模組和應用程序的互動。
autorun.sh的解釋
這段代碼是一個 shell 腳本,用來自動卸載老的 RTL8152 網路驅動,然後編譯並安裝新的驅動。以下是這段腳本的逐步解釋:
- 指定腳本使用的 shell
- 尋找目標路徑:
利用find
命令找到用於存放新驅動的目標路徑,它嘗試在幾個不同的路徑下查找 realtek 目錄。 - 卸載老的驅動:
- 使用
lsmod
命令檢查r8152
驅動是否已加載。 - 如果已加載,它會使用
rmmod
命令卸載它。
- 使用
- 編譯並安裝新的驅動:
- 將日期寫入 log 文件。用
make
命令編譯驅動。 - 找出編譯生成的
.ko
格式的核心模塊文件。 - 檢查核心模塊文件是否存在,如果不存在,則退出腳本。
- 將日期寫入 log 文件。用
- 安裝新的核心模塊:
- 使用
depmod
命令來處理模塊依賴關係。 - 使用
modprobe
命令來加載新的核心模塊。
- 使用
- 更新 initramfs:
- 檢查系統是否需要更新 initramfs。
- 如果系統是 Ubuntu 或 Debian,則會進行更新。
- 使用
update-initramfs
命令更新 initramfs。
- 完成:腳本最後會輸出 “Completed” 並退出,返回值為 0,表示腳本成功執行。
腳本中涉及到的命令:
find
:用來搜索特定文件的命令。uname -r
:用來獲取當前核心版本的命令。lsmod
:用來顯示已加載核心模塊的命令。rmmod
:用來卸載核心模塊的命令。make
:用來編譯源碼的命令。depmod
:用來處理 Linux 核心模塊的依賴關係的命令。modprobe
:用來加載核心模塊的命令。update-initramfs
:用來更新 initramfs 的命令。
這個腳本是一個完整的自動化腳本,可以自動化編譯、安裝、並加載新的 RTL8152 驅動程序。
initramfs 是什麼?有什麼用?
initramfs
(初始化 RAM 文件系統)是一個臨時的根文件系統,它被 Linux 核心在啟動初期使用,直到真正的根文件系統可以被掛載。它被用來執行各種初始化任務來準備和設置真正的根文件系統和其它必要的系統資源和服務。
以下是 initramfs
的一些用途:
- 載入必要的驅動:
在根文件系統可以被掛載之前,initramfs
可以載入系統所需的核心驅動,包括文件系統驅動和設備驅動。 - 設置根文件系統:
透過initramfs
可以確保根文件系統被正確設置和掛載。這包括檢查和修復文件系統,並在必要時將其掛載為讀寫。 - 處理初始硬體設置:
initramfs
可以用來進行早期系統硬體設置,如設置網路或其他硬體設備。 - 提供救援模式:
如果根文件系統出現問題或無法掛載,initramfs
可以提供一個最小的 shell 環境,用戶可以使用它來診斷和修復系統。 - 啟動 Diskless Systems:
對於沒有磁碟的系統或網路啟動系統,initramfs
可以設置必要的網路資源,以從網路掛載根文件系統。
綜上所述,initramfs
是 Linux 系統啟動過程中一個非常重要的階段,它確保系統可以正確、順利地進行初始化和啟動。