原创 用qemu模擬Intel x86平臺實驗環境 —— 加載並運行app

文章系列: 用qemu模擬Intel x86平臺實驗環境 —— 概述 用qemu模擬Intel x86平臺實驗環境 —— 啓動系統 用qemu模擬Intel x86平臺實驗環境 —— 加載並運行app 文章目錄本章目標實現原理固件

原创 用qemu模擬Intel x86平臺實驗環境 —— 概述

文章系列: 用qemu模擬Intel x86平臺實驗環境 —— 概述 用qemu模擬Intel x86平臺實驗環境 —— 啓動系統 用qemu模擬Intel x86平臺實驗環境 —— 加載並運行app 文章目錄需求平臺結構實驗平臺

原创 CentOS工具備忘

文章目錄新機配置應用程序源碼環境搭建內核調試源碼環境搭建虛擬機環境主機環境工具yum 新機配置 永久關閉selinux防火牆,解決虛擬機啓動,報錯無權限 cat /etc/sysconfig/selinux SELINUX=d

原创 用qemu模擬Intel x86平臺實驗環境 —— 啓動系統

文章系列: 用qemu模擬Intel x86平臺實驗環境 —— 概述 用qemu模擬Intel x86平臺實驗環境 —— 啓動系統 用qemu模擬Intel x86平臺實驗環境 —— 加載並運行app 文章目錄本章目標實現原理文件

原创 VirtIO-GPU環境搭建與應用

文章目錄概述基本環境搭建組件編譯libvirtqemu-kvmvirglrenderer應用 概述 virtio-gpu是GPU分時複用方案,相對與透傳方案,virito-gpu可以模擬的gpu更多。能夠更充分利用GPU資源。

原创 Hello OpenGL

文章目錄前言安裝OpenGL安裝GLAD安裝GLFWHello OpenGL 前言 OpenGL是一個圖形庫規範,它定義了一組用於創建和渲染圖片的接口,嚴格規定了每個函數該如何執行,以及它們的輸出值。但內部具體每個函數是如何實現

原创 VirtIO-GPU後端原理淺析

文章目錄前言數據結構命令傳遞virtio_gpu_ctrl_commandvirtio_gpu_ctrl_hdr圖像處理virtio_gpu_simple_resourcevirtio_gpu_scanoutVirtIOGPU流程

原创 VFIO硬件基礎——IOMMU

文章目錄IOMMU動機DMA RemappingRoot Table/Context TableSecond-Level Page StructureIOMMU Group VFIO是Linux下設備透傳的主流解決方案,它的硬件

原创 workqueue淺析

文章目錄前言接口創建隊列添加任務設計框架workqueue_structcpu_workqueue_structwork_struct總體框圖原理實現創建隊列添加任務執行任務缺點 前言 workqueue的早期內核實現比較簡單,

原创 Linux O(N)調度器實現淺析

文章目錄調度器流程調度器實現時間片數據結構初始化選取TASK普通進程實時進程進程選擇 調度器流程 linux的調度器,本人最開始理解成一個linux上的一個後臺進程,認爲它負責不斷地切換cpu上的task,這樣理解可能沒有錯誤,

原创 內存虛擬化軟件基礎——SPT

文章目錄前言數據結構SPTMMU創建SPT設置SPT 前言 kvm實現內存虛擬化,需要充分利用intel的硬件機制EPT。所謂EPT的硬件機制,就是開啓EPT之後,當處在客戶態的CPU訪問物理地址(所謂的GPA,比如CR3,頁表

原创 QEMU內存註冊

文章目錄內存註冊接口內存插槽內核數據結構內存註冊流程 內存註冊接口 qemu爲虛機分配內存後,通過MR可以查到GPA與HVA的映射關係,這段映射關係需要通知kvm知道,方便kvm在處理虛機缺頁時可以通過GPA->HVA->HPA

原创 qemu內存管理——扁平視圖

文章目錄扁平化視圖FlatView數據結構FlatView初始化FlatRange數據結構組織結構初始狀態新增IO區間內存拓撲變更分析新建內存和IO地址空間細分內存地址空間 qemu爲了模擬虛機內存,必須對虛擬機的內存地址空間進行

原创 qemu中的eventfd——ioeventfd

文章目錄KVM ioeventfd數據結構註冊流程觸發流程QEMU ioeventfd數據結構註冊流程 eventfd是內核實現的高效線程通信機制,還適合於內核與用戶態的通信,KVM模塊利用eventfd實現了KVM和qemu的高

原创 VirtIO實現原理——前端通知機制

文章目錄流程介紹硬件基礎VM-exitKVM缺頁處理 流程介紹 虛機向virtio磁盤寫入數據後,走到塊設備層提交bio,最終會往virtio-blk隊列的環上添加寫入數據的物理地址,整個流程如下: submit_bio gen