[Linux] Linux 系統從啟動到驅動加載

Linux 系統從啟動到驅動加載

文章目錄

  • Linux 系統從啟動到驅動加載
    • 一、硬件上電與 BIOS/UEFI 階段
      • 1. 1 硬件上電初始化
      • 1.2 BIOS/UEFI執行過程
      • 1.3 Bootloader加載細節
    • 二、Bootloader 階段
    • 三、Linux 內核初始化
      • 3.1 架構相關初始化(setup_arch)
      • 3.2 核心子系統初始化
      • 3.3 虛擬文件系統(VFS)初始化
      • 3.4 內核線程創建
    • 四、驅動子系統初始化
      • 4.1 設備模型初始化(driver_init)
      • 4.2 總線子系統注冊
      • 4.3 早期驅動初始化(early platform drivers)
      • 4.4 設備描述信息解析
    • 五、驅動加載與設備枚舉
      • 5.1 總線驅動掃描硬件設備
      • 5.2 設備與驅動匹配
      • 5.3 驅動probe初始化
      • 5.4 創建設備節點
    • 六、用戶空間初始化
      • 6.1 init 進程啟動
      • 6.2 udev 設備管理
      • 6.3 驅動模塊加載
      • 6.4 系統啟動完成
    • 七、關鍵數據結構與函數
    • 八、典型驅動加載流程示例
    • 九、調試與故障排查
      • 9.1 查看內核啟動日志(dmesg)
      • 9.2 檢查 sysfs 設備信息(/sys/devices)
      • 9.3 使用 udevadm 監控設備事件
      • 9.4 動態加載/卸載驅動模塊(insmod/rmmod)


一、硬件上電與 BIOS/UEFI 階段

1. 1 硬件上電初始化

當計算機電源接通后:

  • 電源供應器完成自檢,向主板發送Power Good信號
  • CPU從復位狀態解除,寄存器被初始化為默認值(如x86架構的CS=0xF000,EIP=0xFFF0)
  • 主板時鐘發生器開始工作,提供穩定的時鐘信號

1.2 BIOS/UEFI執行過程

BIOS/UEFI固件執行的主要任務:

  • POST(Power-On Self Test)

    • 檢測關鍵硬件:CPU、內存、顯卡等
    • 聲卡發出"滴"聲表示檢測通過(不同BIOS廠商的提示音編碼不同)
    • 對檢測到的硬件生成設備列表(如通過ACPI表)
  • 硬件初始化

    • 配置內存控制器和初始化RAM
    • 初始化基本輸入輸出設備(鍵盤、顯示器)
    • 設置中斷向量表(IVT)或高級中斷控制器(APIC)
  • 引導設備選擇

    • 按照CMOS中存儲的啟動順序(如:硬盤→USB→網絡)
    • 讀取每個設備的引導扇區(MBR或GPT分區表的引導記錄)
    • 對于UEFI系統,會查找ESP分區中的/EFI/BOOT/BOOTx64.EFI文件

1.3 Bootloader加載細節

當BIOS/UEFI找到有效啟動設備后:

  • 傳統BIOS會將MBR中的第一階段引導程序(512字節)加載到內存0x7C00處
  • UEFI則直接加載EFI應用程序到內存
  • 對于GRUB2:
    • 第一階段(boot.img)僅負責加載core.img
    • 第二階段(core.img)包含基本文件系統驅動,用于定位/boot/grub
    • 最終加載grub.cfg配置文件并顯示啟動菜單

示例啟動順序:

  1. 檢測到SATA硬盤
  2. 讀取MBR中的引導代碼
  3. 加載GRUB的stage1 → stage1.5 → stage2
  4. 顯示GRUB菜單等待用戶選擇

二、Bootloader 階段

  1. 引導加載器啟動

    • 系統 BIOS/UEFI 完成硬件初始化后,將控制權交給存儲在 MBR 或 EFI 分區中的引導加載器(如 GRUB2)
    • 常見的引導加載器包括:
      • GRUB (Grand Unified Bootloader)
      • Syslinux
      • LILO (Linux Loader)
      • systemd-boot (適用于 UEFI 系統)
  2. 內核加載過程

    • 引導加載器讀取其配置文件(如 GRUB 的 grub.cfg)
    • 加載壓縮的內核鏡像(通常在 /boot 目錄下,命名為 vmlinuz-<版本號>)到內存
    • 同時加載 initramfs(Initial RAM Filesystem)鏡像
    • 典型文件示例:
      /boot/vmlinuz-5.4.0-91-generic
      /boot/initrd.img-5.4.0-91-generic
      
  3. 參數傳遞與內核啟動

    • 引導加載器向內核傳遞啟動參數,常見參數包括:
      • root=:指定根文件系統設備(如 root=/dev/sda1)
      • init=:指定初始化程序路徑(替代默認的 /sbin/init)
      • quiet:減少啟動時內核信息輸出
      • splash:顯示啟動畫面
    • 內核解壓過程:
      • 首先解壓縮 zImage 或 bzImage 格式的內核
      • 然后加載必要的驅動和初始化臨時根文件系統
    • 最終控制權轉移到內核的入口點 start_kernel() 函數(位于 init/main.c)
  4. initramfs 的作用

    • 提供早期用戶空間環境
    • 包含必要的驅動程序(如磁盤控制器、文件系統驅動)
    • 掛載真正的根文件系統
    • 在嵌入式系統中可能直接作為最終根文件系統使用
  5. 特殊場景處理

    • 加密根分區:需要 initramfs 包含解密工具
    • RAID/LVM:需要加載相應的模塊
    • 網絡啟動:需要包含網絡驅動程序

三、Linux 內核初始化

3.1 架構相關初始化(setup_arch)

setup_arch() 是架構特定的初始化函數,主要負責:

  • 解析硬件信息(如通過設備樹獲取CPU類型、內存布局等)
  • 初始化物理內存管理(如建立memblock內存分配器)
  • 設置處理器特殊功能(如開啟MMU、緩存等)
  • 架構相關的早期設備初始化(如SMP處理器初始化)

示例:在ARM架構中會初始化處理器異常向量表,x86架構則會檢測和初始化ACPI。

3.2 核心子系統初始化

包括以下關鍵系統的初始化:

  • 頁表初始化:建立內核地址空間映射,包括:
    • 內核代碼段映射
    • 設備I/O空間映射
    • 早期內存分配區域映射
  • 中斷控制器初始化
    • 探測并初始化本地APIC/IOAPIC(x86)
    • GIC初始化(ARM)
    • 設置中斷描述符表(IDT)
  • 定時器子系統
    • 初始化高精度定時器(hrtimer)
    • 設置系統時鐘源(如HPET、TSC)
    • 校準CPU頻率(loops_per_jiffy)

3.3 虛擬文件系統(VFS)初始化

VFS初始化流程:

  1. 注冊基礎文件系統類型(如proc、sysfs、tmpfs)
  2. 初始化dentry緩存和inode緩存
  3. 掛載rootfs作為初始文件系統
  4. 創建標準文件描述符(stdin/stdout/stderr)
  5. 掛載實際根文件系統(通過root=內核參數指定)

3.4 內核線程創建

初始化的關鍵內核線程包括:

  • kthreadd(內核線程守護進程,pid=2)
    • 負責創建和管理其他內核線程
    • 通過kthread_create()請求創建新線程
  • 其他早期線程:
    • ksoftirqd(軟中斷處理線程)
    • kworker(工作隊列線程)
    • migration(CPU遷移線程)
    • watchdog(看門狗監控線程)

這些初始化步驟完成后,內核將進入用戶空間初始化階段,啟動第一個用戶進程(通常是init或systemd)。


四、驅動子系統初始化

4.1 設備模型初始化(driver_init)

該階段主要完成內核設備模型的核心數據結構初始化,包括:

  • kobject 子系統初始化,建立設備層次結構基礎
  • 設備類和屬性文件系統的創建(/sys/class/)
  • 內核對象引用計數機制的建立
  • 設備號分配器的初始化(devtmpfs)

4.2 總線子系統注冊

分平臺總線類型進行初始化:

  • platform_bus_init

    • 注冊平臺總線類型(platform_bus_type)
    • 初始化 platform_device 和 platform_driver 的匹配機制
    • 創建/sys/bus/platform/目錄結構
    • 典型應用場景:SoC內置設備(如GPIO控制器、時鐘模塊)
  • pci_init

    • PCI總線探測和枚舉
    • PCI設備資源分配(IO空間、內存空間)
    • 建立PCI設備樹結構
    • PCI設備驅動匹配機制初始化

4.3 早期驅動初始化(early platform drivers)

在基本設備模型建立后立即加載的關鍵驅動:

  • 內存控制器驅動
  • 串口調試驅動(earlycon)
  • 時鐘源驅動
  • 中斷控制器驅動
    這些驅動通過early_platform_init機制注冊,具有以下特性:
  • 在常規驅動加載前完成初始化
  • 使用簡化版的資源獲取接口
  • 通常通過命令行參數指定(如earlycon=uart8250,mmio,0xfe001000

4.4 設備描述信息解析

根據系統類型采用不同配置機制:

設備樹(DT)系統

  • 解析/boot/dtb文件或U-Boot傳遞的設備樹
  • 展開設備樹節點為device_node結構
  • 將設備樹節點轉換為platform_device
  • 處理設備樹中的中斷映射、DMA范圍等特殊屬性

ACPI系統

  • 解析ACPI表(DSDT、SSDT等)
  • 轉換ACPI設備為平臺設備
  • 處理_PRT(中斷路由)、_CRS(資源分配)等方法
  • 支持ACPI電源管理擴展功能

兩種系統最終都會生成統一的設備資源描述,包括:

  • 內存映射區域
  • 中斷號
  • DMA通道
  • 時鐘源
  • 電源管理參數

五、驅動加載與設備枚舉

5.1 總線驅動掃描硬件設備

總線驅動負責識別和掃描連接的硬件設備。常見方式包括:

  • PCI設備枚舉:通過讀取PCI配置空間(Configuration Space)獲取設備Vendor ID、Device ID等信息
  • 設備樹解析(DT node parsing):在ARM架構中解析設備樹(Device Tree)的節點信息
  • ACPI枚舉:x86架構通過ACPI表獲取設備信息
  • USB總線枚舉:通過USB協議發現連接的設備

示例:PCI枚舉過程中會遍歷所有總線號碼(bus number),對每個設備/功能組合讀取其配置寄存器。

5.2 設備與驅動匹配

內核通過driver_match_device()函數進行匹配,主要依據:

  • 設備樹中的compatible屬性
  • ACPI設備ID(HID/UID/CID)
  • PCI設備的Vendor/Device ID
  • 平臺設備的名稱匹配

匹配優先級通常為:設備樹匹配 > ACPI匹配 > ID表格匹配 > 名稱匹配。

5.3 驅動probe初始化

匹配成功后調用驅動的probe()函數進行:

  1. 資源分配(內存、IRQ、DMA等)
  2. 硬件初始化(寄存器配置、固件加載)
  3. 設備特定設置(時鐘、電源管理)
  4. 子系統注冊(如輸入設備、網絡設備等)

典型錯誤處理包括:檢查資源可用性、逐步回滾失敗操作。

5.4 創建設備節點

通過devtmpfs自動創建設備文件:

  • 內核調用device_add()將設備注冊到系統
  • 根據設備類型(字符/塊設備)創建/dev節點
  • 設置正確的設備號(major/minor)
  • 應用層可通過udev/mdev規則進一步配置節點屬性

特殊設備可能還需要:

  • sysfs屬性文件(/sys/class/...
  • debugfs接口
  • 用戶空間通知機制(uevent)

六、用戶空間初始化

6.1 init 進程啟動

內核最后階段會啟動第一個用戶空間進程 init(PID=1),根據系統配置選用不同的 init 系統:

  • systemd(現代主流發行版):采用并行化的服務啟動方式,提供單元(unit)管理
    • 讀取 /etc/systemd/system//usr/lib/systemd/system/ 下的單元文件
    • 啟動基礎目標(target)如 multi-user.targetgraphical.target
  • sysvinit(傳統系統):串行執行 /etc/init.d/ 中的啟動腳本
    • 通過運行級別(runlevel)控制啟動階段
    • 典型流程:先掛載文件系統,再啟動基礎服務

6.2 udev 設備管理

udev 守護進程負責動態設備管理:

  • 監聽內核通過 netlink 發送的 uevent
  • 處理設備熱插拔事件(如 USB 插入)
  • 根據 /etc/udev/rules.d/ 規則文件:
    • 創建設備節點(如 /dev/sda1
    • 設置設備權限和所有者
    • 觸發關聯的硬件初始化腳本

6.3 驅動模塊加載

通過 modprobe 機制加載用戶態驅動模塊:

  • 讀取 /etc/modprobe.d/ 配置文件
  • 自動解決模塊依賴關系
  • 典型應用場景:
    • 加載文件系統驅動(如 ext4、ntfs)
    • 加載特殊硬件驅動(如 NVIDIA 顯卡)
    • 加載網絡協議棧模塊

6.4 系統啟動完成

完成所有初始化步驟后:

  • 啟動登錄管理器(如 gdm、lightdm)進入圖形界面
  • 或顯示文本登錄提示符(tty1-6)
  • 記錄啟動日志到 /var/log/boot.log
  • 系統進入多用戶模式,所有服務正常運行

七、關鍵數據結構與函數

Linux設備驅動模型中的兩個核心數據結構及其關系:

/*** struct device_driver - 驅動對象的基本表示* @name: 驅動名稱,用于sysfs顯示和模塊匹配* @bus: 指向驅動所屬的總線類型,如platform_bus_type* @probe: 驅動探測回調函數,當設備與驅動匹配時調用* * 示例:當注冊i2c_driver時,需要設置這些字段*/
struct device_driver {const char *name;struct bus_type *bus;int (*probe)(struct device *dev);
};/*** struct bus_type - 總線類型的抽象表示* @name: 總線名稱,如"platform"、"pci"等* @match: 總線匹配函數,用于判斷設備和驅動是否兼容* * 總線負責管理其下的設備和驅動,典型的匹配過程:* 1. 設備注冊時,總線遍歷所有驅動,調用match函數* 2. 驅動注冊時,總線遍歷所有設備,調用match函數* 3. 匹配成功則調用驅動的probe函數*/
struct bus_type {char *name;int (*match)(struct device *dev, struct device_driver *drv);
};

工作流程說明:

  1. 系統初始化時會注冊各種總線類型(platform/pci/i2c等)
  2. 驅動開發者編寫驅動時:
    • 定義device_driver結構體實例
    • 實現probe函數進行設備初始化
    • 向總線注冊該驅動
  3. 當匹配發生時,總線層會:
    • 通過match函數驗證設備和驅動的兼容性
    • 調用驅動的probe函數初始化設備
    • 建立sysfs中的設備-驅動關聯

八、典型驅動加載流程示例

以下是一個完整的 PCI 設備驅動加載流程示例,展示了從驅動注冊到設備初始化的關鍵步驟:

// 1. 定義設備ID表,用于匹配支持的PCI設備
static const struct pci_device_id my_pci_ids[] = {{ PCI_DEVICE(0x10AB, 0x1100), .driver_data = 0 },  // 廠商ID 0x10AB,設備ID 0x1100{ PCI_DEVICE(0x10AB, 0x1200), .driver_data = 0 },  // 另一個兼容設備{ 0, }  // 結束標記
};// 2. 定義驅動操作函數
static int my_probe(struct pci_dev *pdev, const struct pci_device_id *id)
{int retval;// 使能PCI設備retval = pci_enable_device(pdev);if (retval) {dev_err(&pdev->dev, "Failed to enable PCI device\n");return retval;}// 獲取設備資源(如內存區域、中斷號等)// ...具體設備初始化代碼...dev_info(&pdev->dev, "Device successfully initialized\n");return 0;
}static void my_remove(struct pci_dev *pdev)
{// 釋放資源,關閉設備// ...清理代碼...pci_disable_device(pdev);dev_info(&pdev->dev, "Device removed\n");
}// 3. 定義PCI驅動結構體
static struct pci_driver my_driver = {.name     = "my_device",      // 驅動名稱.id_table = my_pci_ids,       // 設備匹配表.probe    = my_probe,         // 設備發現時的回調.remove   = my_remove,        // 設備移除時的回調// 可選:.suspend/.resume 等電源管理回調
};// 4. 注冊PCI驅動
module_pci_driver(my_driver);// 5. 模塊信息
MODULE_DEVICE_TABLE(pci, my_pci_ids);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Your Name");
MODULE_DESCRIPTION("Sample PCI Device Driver");

典型工作流程:

  1. 內核加載驅動模塊時調用module_pci_driver宏注冊驅動
  2. 內核遍歷PCI總線,將每個設備與id_table進行匹配
  3. 找到匹配設備后,調用probe函數初始化設備
  4. 設備使用期間可能觸發中斷/處理請求
  5. 設備移除或模塊卸載時調用remove函數清理資源

注意事項:

  • 必須實現基本的probe/remove函數對
  • 需要正確處理設備使能/禁用流程
  • 建議添加適當的錯誤處理和資源管理
  • 現代驅動通常還需要實現電源管理回調

九、調試與故障排查

9.1 查看內核啟動日志(dmesg)

dmesg命令是排查驅動程序問題的首選工具,它顯示內核環形緩沖區中的消息。典型使用場景包括:

  • 查看驅動加載時的初始化信息:dmesg | grep <驅動模塊名>
  • 跟蹤設備插拔事件:dmesg -w(實時監控)
  • 檢查錯誤信息:dmesg --level=err,warn
  • 清空緩沖區:dmesg -c(需要root權限)

9.2 檢查 sysfs 設備信息(/sys/devices)

sysfs文件系統提供了設備樹的詳細信息:

/sys/devices/
├── platform
│   └── <設備名>/
│       ├── driver -> ../../../bus/platform/drivers/<驅動名>
│       ├── modalias
│       └── power/

重要檢查項:

  • 設備是否被正確識別:ls /sys/bus/<總線類型>/devices
  • 驅動綁定狀態:查看設備目錄下的driver符號鏈接
  • 設備參數:如/sys/class/gpio/gpio<N>/下的各種屬性文件

9.3 使用 udevadm 監控設備事件

udev工具鏈的典型應用:

# 監控所有設備事件
udevadm monitor# 查看特定設備屬性
udevadm info -a -p /sys/class/net/eth0# 觸發設備重掃描
udevadm trigger

關鍵調試場景:

  • 檢查規則匹配:udevadm test /sys/class/<設備類>/<設備名>
  • 驗證熱插拔事件處理
  • 調試udev規則執行過程

9.4 動態加載/卸載驅動模塊(insmod/rmmod)

驅動模塊管理操作流程:

# 加載模塊(需.ko文件路徑)
sudo insmod module.ko [參數名=參數值]# 查看已加載模塊
lsmod | grep <模塊名># 卸載模塊(需確保無設備在使用)
sudo rmmod module# 更常用的modprobe工具
sudo modprobe module_name
sudo modprobe -r module_name

注意事項:

  • 模塊參數可以通過/sys/module/<模塊名>/parameters/查看或修改
  • 依賴關系處理:modprobe會自動解決依賴
  • 查看模塊信息:modinfo <模塊名>
  • 常見錯誤:模塊版本不匹配、符號未導出、資源沖突等

研究學習不易,點贊易。
工作生活不易,收藏易,點收藏不迷茫 :)


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

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

相關文章

Spring Boot DevTools 熱部署

在Spring Boot項目中加入 spring-boot-devtools 熱部署依賴啟動器后&#xff0c;通常不需要手動重啟項目即可讓更改生效。spring-boot-devtools 的核心特性之一就是自動重啟或熱加載。 Spring Boot DevTools 熱部署關鍵知識點 &#x1f525; 目的&#xff1a;spring-boot-devt…

uni-app學習筆記十五-vue3頁面生命周期(二)

onShow&#xff1a;用于監聽頁面顯示&#xff0c;頁面每次出現在屏幕上都觸發&#xff0c;包括從下級頁面點返回露出當前頁面&#xff1b; onHide:監聽頁面隱藏&#xff0c;當離開當前頁面時觸發。 示例代碼&#xff1a; <template><view>姓名&#xff1a;{{nam…

LIKE ‘%xxx%‘ 和 LIKE ‘xxx%‘ 的索引影響分析

LIKE ‘%xxx%’ 和 LIKE ‘xxx%’ 的索引影響分析 一、基礎概念解析 1.1 LIKE操作符的工作原理 LIKE是SQL中用于模式匹配的操作符,支持兩種通配符: %:匹配任意數量字符(包括零個字符)_:匹配單個字符go專欄:https://duoke360.com/tutorial/path/golang 1.2 數據庫索引…

【軟件測試】測試框架(unittest/pytest)

本文介紹了Python 中最常用的兩個測試框架&#xff1a;unittest 和 pytest&#xff0c;幫助你編寫更規范、可維護的自動化測試用例。 一、unittest 框架 unittest 是 Python 內置的標準庫&#xff0c;無需額外安裝&#xff0c;適合初學者入門。它借鑒了 JUnit 的設計理念&…

麒麟信安安裝谷歌瀏覽器

參考文檔 麒麟信安系統Chrome離線安裝包&#xff1a;高效便捷的瀏覽器解決方案-CSDN博客 項目文件預覽 - 麒麟信安系統Chrome離線安裝包:本倉庫提供了一個適用于麒麟信安系統的Chrome瀏覽器離線安裝包。該安裝包包含了所有必要的依賴文件&#xff0c;并且已經對系統中已有的依…

Wireshark 使用教程:讓抓包不再神秘

一、什么是 tshark&#xff1f; tshark 是 Wireshark 的命令行版本&#xff0c;支持幾乎所有 Wireshark 的核心功能。它可以用來&#xff1a; 抓包并保存為 pcap 文件 實時顯示數據包信息 提取指定字段進行分析 配合 shell 腳本完成自動化任務 二、安裝與驗證 Kali Linux…

從0到1:多醫院陪診小程序開發筆記(上)

概要設計 醫院陪診預約小程序&#xff1a;隨著移動互聯網的普及&#xff0c;越來越多的醫院陪診服務開始向線上轉型, 傳統的預約方式往往效率低下&#xff0c;用戶需耗費大量時間進行電話預約或現場排隊&#xff0c;陪診服務預約小程序集多種服務于一體&#xff0c;可以提高服…

定時任務:springboot集成xxl-job-core(二)

定時任務實現方式&#xff1a; 存在的問題&#xff1a; xxl-job的原理&#xff1a; 可以根據服務器的個數進行動態分片&#xff0c;每臺服務器分到的處理數據是不一樣的。 1. 多臺機器動態注冊 多臺機器同時配置了調度器xxl-job-admin之后&#xff0c;執行器那里會有多個注…

Unity使用Lua框架和C#框架開發游戲的區別

在Unity中使用Lua框架和C#框架開發游戲有顯著的區別&#xff0c;主要體現在性能、開發效率、熱更新能力、維護成本等方面。 1. 語言類型與設計目標 維度LuaC#類型動態類型、解釋型腳本語言靜態類型、編譯型面向對象語言設計初衷輕量級嵌入、配置和擴展宿主程序通用開發&#…

高精度文檔解析利器:Mistral OCR 全面解析與技術應用

目錄 &#x1f680; 高精度文檔解析利器&#xff1a;Mistral OCR 全面解析與技術應用 一、什么是 Mistral OCR&#xff1f; 二、Mistral OCR 的核心特點 ? 1. 支持復雜文檔結構解析 ? 2. 高識別精度 ? 3. 與 AI 系統深度集成 ? 4. 可擴展性與容錯能力 三、技術原理…

騰訊云開發者社區文章內容提取免費API接口教程

接口簡介&#xff1a; 提取指定騰訊云開發者社區文章內容。本接口僅做內容提取&#xff0c;未經作者授權請勿轉載。 請求地址&#xff1a; https://cn.apihz.cn/api/caiji/tencent.php 請求方式&#xff1a; POST或GET。 請求參數&#xff1a; 【名稱】【參數】【必填】【說…

【項目】在線OJ(負載均衡式)

目錄 一、項目目標 二、開發環境 1.技術棧 2.開發環境 三、項目樹 目錄結構 功能邏輯 編寫思路 四、編碼 1.complie_server 服務功能 代碼藍圖 開發編譯功能 日志功能 ?編輯 測試編譯模塊 開發運行功能 設置運行限制 jsoncpp 編寫CR 如何生成唯一文件名 …

【后端高階面經:架構篇】50、數據存儲架構:如何改善系統的數據存儲能力?

一、數據存儲架構設計核心原則 (一)分層存儲架構:讓數據各得其所 根據數據訪問頻率和價值,將數據劃分為熱、溫、冷三層,匹配不同存儲介質,實現性能與成本的平衡。 熱數據層:訪問頻率>100次/秒。采用Redis集群存儲高頻訪問數據(如用戶登錄態、實時交易數據),配合…

B1、進度匯報(— 25/05/31)

本文檔匯總了各成員在 2025 年 5 月 11 日 ~ 5 月 31 日完成的工作。我們遇到了進度問題&#xff08;收工后需反思&#xff09;&#xff1a; 本學期第十四周&#xff08;05/19 ~ 05/25&#xff09;有相當多課程需要提交實驗結果或上臺展示。本學期第十六周&#xff08;06/02 ~…

每天總結一個html標簽——a標簽

文章目錄 一、定義與使用說明二、支持的屬性三、支持的事件四、默認樣式五、常見用法1. 文本鏈接2. 圖片鏈接3. 導航欄 在前端開發中&#xff0c;a標簽&#xff08;錨點標簽&#xff09;是最常用的HTML標簽之一&#xff0c;主要用于創建超鏈接&#xff0c;實現頁面間的跳轉或下…

云服務器突發宕機或無響應怎么辦

當云服務器突發宕機或無響應時&#xff0c;需快速定位問題并恢復服務。以下是分步驟的解決方案&#xff1a; 1. 初步確認問題 檢查網絡連接 本地網絡是否正常&#xff1f;嘗試 ping 其他網站 排除本地問題。 使用 ping <服務器IP> 或 traceroute <IP> 測試網絡連通…

動態IP與區塊鏈:重構網絡信任的底層革命

在數字經濟蓬勃發展的今天&#xff0c;網絡安全與數據隱私正面臨前所未有的挑戰。動態IP技術與區塊鏈的深度融合&#xff0c;正在構建一個去中心化、高可信的網絡基礎設施&#xff0c;為Web3.0時代的到來奠定基礎。 一、技術碰撞&#xff1a;動態IP與區塊鏈的天然契合 動態I…

從0開始學vue:vue3和vue2的關系

一、版本演進關系1. 繼承關系2. 版本生命周期 二、核心差異對比三、關鍵演進方向1. Composition API2. 性能優化 四、遷移策略1. 兼容構建模式2. 關鍵破壞性變更 五、生態演進1. 官方庫升級2. 構建工具鏈 六、選型建議1. 新項目2. 現有項目 七、未來展望 一、版本演進關系 1. …

Vue 核心技術與實戰智慧商城項目Day08-10

溫馨提示&#xff1a;這個黑馬的視頻在b占可以找到&#xff0c;里面有完整的教學過程 然后這個項目有完整的代碼&#xff0c;我已經上傳了&#xff0c;如果審核成功大家就可以看了&#xff0c;但是需要審核多久我也不是很確定 1.項目演示 2. 項目收獲 3. 創建項目 4. 調整初始化…

AR/MR實時光照陰影開發教程

一、效果演示 1、PICO4 Ultra MR 發光的球 2、AR實時光照 二、實現原理 PICO4 Ultra MR開發時&#xff0c;通過空間網格能力掃描周圍環境&#xff0c;然后將掃描到的環境網格材質替換為一個透明材質并停止掃描&#xff1b;基于Google ARCore XR Plugin和ARFoundation進行安卓手…