《一個操作系統的實現》windows用vm安裝CentOS——從bochs環境搭建到第一個demo跑通

  1. vm安裝CentOS虛擬機帶有桌面的版本。
  2. su輸入密碼123456。更新yum -y update 。一般已經安裝好后面這2個工具:yum install -y net-tools wget
  3. 看下ip地址ifconfig,然后本地終端連接ssh root@192.168.249.132輸入密碼即可,主要是為了復制網址方便些。大概率wget https://nchc.dl.sourceforge.net/project/bochs/bochs/2.7/bochs-2.7.tar.gz無法下載bochs,所以直接下載到本地然后復制過去 scp .\bochs-2.7.tar.gz root@192.168.249.132:~
  4. 安裝bochs。tar -zvxf bochs-2.7.tar.gzcd bochs-2.7,安裝過程主要參考這兩篇文章:最新Linux(centos)安裝bochs和【實現操作系統 01】CentOS 9 安裝配置 Bochs 2.7 虛擬機,及編寫簡單的 bootloader 并寫入軟盤啟動
// 1、先安裝依賴
yum install gcc-c++ glibc-headers
yum install libX11-devel.x86_64
yum install  libXrandr-devel.x86_64
yum install -y epel-release// 2.configure
./configure --with-x11 --with-wx --enable-debugger --enable-disasm --enable-all-optimizations --enable-readline --enable-long-phy-address --enable-ltdl-install --enable-idle-hack --enable-a20-pin --enable-x86-64 --enable-smp --enable-cpu-level=6 --enable-large-ramfile --enable-repeat-speedups --enable-fast-function-calls --enable-handlers-chaining --enable-trace-linking --enable-configurable-msrs --enable-show-ips --enable-cpp --enable-debugger-gui --enable-iodebug --enable-logging --enable-assert-checks --enable-fpu --enable-vmx=2 --enable-svm --enable-3dnow --enable-alignment-check --enable-monitor-mwait --enable-avx --enable-evex --enable-x86-debugger --enable-pci --enable-usb --enable-voodoo// 3.修改文件cpp為cc且修改配置文件路徑
cp misc/bximage.cpp misc/bximage.cc
cp iodev/hdimage/hdimage.cpp iodev/hdimage/hdimage.cc
cp iodev/hdimage/vmware3.cpp iodev/hdimage/vmware3.cc
cp iodev/hdimage/vmware4.cpp iodev/hdimage/vmware4.cc
cp iodev/hdimage/vpc.cpp iodev/hdimage/vpc.cc
cp iodev/hdimage/vbox.cpp iodev/hdimage/vbox.cc
cp bx_debug/parser.cpp bx_debug/parser.ccvi bx_debug/debug.h
修改:
#include "config.h"為#include "../config.h"
#include “osdep.h"為#include "../osdep.h"
#include "cpu/decoder/decoder.h"為#include "../cpu/decoder/decoder.h"make
make install
  1. 生成個軟盤鏡像。在家目錄bximage,選擇創建軟盤fd其他默認,成功后目錄中出現a.img文件。
  2. 按照書上的,編寫asm代碼,vi boot.asm
        org     07c00h								;org指令規定程序的起始地址,不規則則默認是0000hmov     ax,csmov     ds,axmov     es,axcall    DispStrjmp     $									;$表示當前行地址,所以這是無限循環
DispStr:mov     ax,BootMessagemov     bp,axmov     cx,16mov     ax,01301hmov     bx,000chmov     dl,0int     10hret
BootMessage:            db      "Hello,OS World!"
times   510-($-$$)      db      0					;一共512字節,最后2字節寫0xaa55,所以中間插入很多0字節,數量就是512-2-上面那段代碼占用的字節(當前行地址-這一節開頭地址即程序初地址)
dw      0xaa55										;最后補這個是由于加電自檢后尋找啟動盤會優先查找軟盤00磁道1扇區(1扇區512字節),并發現如果扇區最后字節以0xaa55結尾則認為這是引導扇區,并把這512字節數據復制到0000:7c00處并把控制交由這段引導程序,即我們這段程序,那我們這段程序怎么跑到7c00處的?請看第一行代碼!
  1. 安裝nasm。
sudo yum install automake gcc kernel-devel
wget https://www.nasm.us/pub/nasm/releasebuilds/2.15/nasm-2.15.tar.gz
tar -zvxf nasm-2.15.tar.gz
./autogen.sh
./configure
make && make install
  1. 編譯代碼: nasm boot.asm -o boot.bin
  2. 寫進軟盤鏡像: dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc
  3. 配置文件,在家目錄中vi bochsrc
################################################
#configure file for Bochs
################################################# how much memory the emulated machine will have
megs: 32# filename of Rom images, 注意下邊要根據你安裝目錄來調整
romimage: file=/usr/local/share/bochs/BIOS-bochs-latest
vgaromimage: file=/usr/local/share/bochs/VGABIOS-lgpl-latest#what disk images will be used
floppya: 1_44=/root/a.img, status=inserted#choose the boot disk.
boot: floppy#where do we send log messages?
log: bochsout.txt#disable the mouse
mouse: enabled=0# enable key mapping, using US layout as default.
keyboard: keymap=/usr/local/share/bochs/keymaps/x11-pc-us.map
  1. 在家目錄啟動bochs -f bochsrc,后面是指定配置文件,其實可以省略,因為bochs會默認從幾個目錄中找配置文件。詢問操作時默認或按6,之后按c表示continue?就啟動了,雖然這個啟動界面有些奇怪,但至少顯示了自定義的信息。
    在這里插入圖片描述

  2. 上面制作并把數據寫到a.img鏡像后,可以vi查看這個文件,輸入命令%!xxd可以以16進制查看,這時候32行末尾即512字節處最后2個字節就是55aa,即我們程序最后一行的dw 0xaa55

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

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

相關文章

Netty+springboot開發即時通訊系統筆記(四)終

實時性 1.線程池多線程,把消息同步給其他端和對方用戶,其中數據持久化往往是最浪費時間的操作,可以使用mq異步存儲,因為其他業務不需要拿著整條數據,只需要這條數據的id進行操作。 2。消息校驗前置,放在t…

Vim的插件管理器之Vundle

1、安裝Vundle插件管理器 Vim可以安裝插件,但是需要手動安裝比較麻煩,Vim本身沒有提供插件管理器,所以會有很多的第三方的插件管理器,有一個vim的插件叫做 “vim-easymotion”,在它的github的安裝說明里有列出對于不同…

GRPC 學習記錄

GRPC 安裝 安裝 grpcio、grpcio-tools、protobuf、 pip install grpcio -i https://pypi.tuna.tsinghua.edu.cn/simple pip install grpcio-tools -i https://pypi.tuna.tsinghua.edu.cn/simple pip install protobuf -i https://pypi.tuna.tsinghua.edu.cn/simple常用類型 p…

Minio知識點+linux下安裝+面試總結

一 Minio簡介 MinIO 是一個基于Apache License v2.0開源協議的對象存儲服務。它兼容亞馬遜S3云存儲服務接口,非常適合于存儲大容量非結構化的數據,例如圖片、視頻、日志文件、備份數據和容器/虛擬機鏡像等,而一個對象文件可以是任意大小&…

Apache Doris 入門教程31:計算節點

需求場景? 目前Doris是一個典型Share-Nothing的架構, 通過綁定數據和計算資源在同一個節點獲得非常好的性能表現. 但隨著Doris計算引擎性能持續提高, 越來越多的用戶也開始選擇使用Doris直接查詢數據湖數據. 這類場景是一種Share-Disk場景, 數據往往存儲在遠端的HDFS/S3上, 計…

msvcp110.dll是什么意思,msvcp110.dll丟失的解決方法

裝好軟件或游戲之后,一打開就跳出各種報錯信息的情況小伙伴一定見過,其中缺少各種msvcp110.dll文件最常見。小伙伴們一定奇怪,用得好好的電腦,怎么會缺文件呢?為啥其他游戲/應用就沒事呢?其實這些“丟失”的…

visual studio 2022配置

前提:我linux c 開發 一直在使用vscode 更新了個版本突然代碼中的查找所用引用和變量修改名稱不能用了,嘗試了重新配置clang vc都不行,估計是插件問題,一怒之下改用visual studio 2022 為了同步2個IDE之間的差別,目前…

QT的核心——信號與槽

目錄 回顧C 語言信號 1、信號與槽 2、關聯信號與槽 2.1自動關聯信號與槽 2.2手動關聯信號與槽 2.3斷開信號與槽 3、自定義信號 3.1自定義信號使用條件 3.2自定義槽函數使用條件 4、信號與槽參數傳遞 4.1自定義一個帶參的信號 4.2關聯帶參的信號與槽 4.3發送一個帶…

YOLOv5、YOLOv8改進:S2注意力機制

目錄 1.簡介 2.YOLOv5改進 2.1增加以下S2-MLPv2.yaml文件 2.2common.py配置 2.3yolo.py配置 1.簡介 S2-MLPv2注意力機制 最近,出現了基于 MLP 的視覺主干。與 CNN 和視覺Transformer相比,基于 MLP 的視覺架構具有較少的歸納偏差,在圖像識…

LVS-DR+keepalived實現高可用負載群集

VRRP 通信原理: VRRP就是虛擬路由冗余協議,它的出現就是為了解決靜態路由的單點故障。 VRRP是通過一種競選的一種協議機制,來將路由交給某臺VRRP路由。 VRRP用IP多播的方式(多播地址224.0.0.18)來實現高可用的通信&…

基于STM32+OneNet設計的物聯網智慧路燈

一、前言 近年來,構筑智慧城市、推動城鎮發展被國家列入重要工作范疇。發布的《超級智慧城市報告》顯示,全球已啟動或在建的智慧城市有1000多個,中國在建500個,遠超排名第二的歐洲(90個)。從在建智慧城市的…

(五)Unity開發Vision Pro——FAQ

常見問題 (FAQ) 1.問:我看到在visionOS 模擬器中運行的結果與在硬件上運行的結果不同 請注意,在模擬器中運行時,某些特定于硬件的功能不可用 - 最明顯的是 AR 數據。這可能意味著 VisionOS 模擬器中的模擬結果可能與 Vision Pro 耳機上的模…

Android oaid

官方GitHub地址 https://github.com/gzu-liyujiang/Android_CN_OAID 生成和用途介紹 https://www.jianshu.com/p/1c7ef27d6db4 圖片來源于上述網站 其他關于id的介紹 https://www.cnblogs.com/chenKnowledgeConllection/p/17380960.html https://zhuanlan.zhihu.com/p/55…

微信小程序拉起支付報: 調用支付JSAPI缺少參數: total_fee

1. 調用支付JSAPI缺少參數: total_fee 2. 檢查返回給前端調起支付的參數是否正確 一開始是params.put("package", prepay_id); 回來改回params.put("package", "prepay_id"prepay_id);

leetcode 415.字符串相加

?? 題目描述 🌟 leetcode鏈接:https://leetcode.cn/problems/add-strings/description/ ps: 從兩個字符串的末尾開始遍歷,依次相加,若大于等于 10 則使用一個變量記錄進位,遍歷的時候若兩個字符串其中一…

算法通關村——不簡單的字符串轉換問題

1. 轉換成小寫字母 給你一個字符串 s ,將該字符串中的大寫字母轉換成相同的小寫字母,返回新的字符串。 轉換成小寫字母 1.1 利用ASCII 首先需要直到常見的ASCII值 a-z: 97-122 A-Z: 65-90 0-9: 48-57 只需要將這個字符串先轉換成字符,然后…

ASR(自動語音識別)任務中的LLM(大語言模型)

一、LLM大語言模型的特點 二、大語言模型在ASR任務中的應用 淺度融合 淺層融合指的是LLM本身并沒有和音頻信息進行直接計算。其僅對ASR模型輸出的文本結果進行重打分或者質量評估。 深度融合 LLM與ASR模型進行深度結合,統一語音和文本的編碼空間或者直接利用ASR…

OKCC在系統安全方面做了哪些措施?

語音通信行業,運營者普遍比較關心的問題是,運營風險如何控制?運營安全如何保證?OKCC呼叫中心又有那些風控措施來保證運營安全。 當前階段,語音通信運營,最主要的風險主要包括以下幾個方面: 一、…

無涯教程-Perl - wait函數

描述 該函數等待子進程終止,返回已故進程的進程ID。進程的退出狀態包含在$?中。 語法 以下是此函數的簡單語法- wait返回值 如果沒有子進程,則此函數返回-1,否則將顯示已故進程的進程ID Perl 中的 wait函數 - 無涯教程網無涯教程網提供描述該函數等待子進程終止,返回已故…

Three.js 實現模型材質局部輝光效果和解決輝光影響場景背景圖顯示的問題

1.Three.js 實現模型材質局部輝光效果 2.解決輝光效果影響場景背景圖顯示的問題 相關API的使用: 1. EffectComposer(渲染后處理的通用框架,用于將多個渲染通道(pass)組合在一起創建特定的視覺效果) 2. …