Chapter 1:部署工作環境 === :::info 這是讀書筆記 ![book](https://hackmd.io/_uploads/H1rFFZZAkx.jpg =30%x) 作者:鄭鋼 出版社:佳魁資訊股份有限公司 出版日期:2017/05/31 ::: --- # 下載並安裝 Virtualbox https://www.virtualbox.org/ 看你的工作環境是哪個 OS 的,都有相對應的安裝檔。 ![截圖 2025-04-10 凌晨12.31.38](https://hackmd.io/_uploads/B1pEbQ4Rke.png) # 啟動 Linux Ubuntu on Virtualbox ## 下載 Linux Ubuntu https://ubuntu.com/download MacOS 的 Virtualbox 只有 suppport ARM CPU,所以我們只能下載 Ubuntu on ARM CPU,Desktop is for x86, and Server is for ARM. >參考出處:[Install Ubuntu Desktop 22.04 ARM64 on macOS Apple Silicon (M1/Pro/Max) in Parallels](https://askubuntu.com/questions/1405124/install-ubuntu-desktop-22-04-arm64-on-macos-apple-silicon-m1-pro-max-in-parall) 如果你的電腦是 Intel 系列的通常是 AMD64,如果是 Mac 系列的通常是 ARM64。 ![截圖 2025-04-10 凌晨12.43.14](https://hackmd.io/_uploads/Hk38VmE01x.png) 選錯就會看到 UEFI Shell >[!Caution] UEFI Shell >![截圖 2025-04-08 下午6.08.02](https://hackmd.io/_uploads/H1U2HOzA1x.png) 由於我的工作環境是 Mac OS 所以就直接選擇 Server 版。 ![截圖 2025-04-08 下午5.58.10](https://hackmd.io/_uploads/S1lOm_fA1x.png) ## 啟動 Linux Ubuntu >[!Warning]啟用 EFI 的選項千萬不能打勾。不然就會 Stuck in UEFI shell ![截圖 2025-04-08 下午6.01.45](https://hackmd.io/_uploads/S1sSr_GAkx.png) 最終的設定。 ![截圖 2025-04-08 下午6.00.47](https://hackmd.io/_uploads/rk6gE_MRJx.png) 基本上已經裝好了。 ![截圖 2025-04-08 下午6.11.25](https://hackmd.io/_uploads/BkOd8dfRJe.png) ## ssh 設定 由於我想把 Virtualbox 裡面的 Linux 當成一個 server,這樣就可以沿用原本 Mac OS 的環境。 >參考出處:[Easy way to SSH into VirtualBox machine | Any OS](https://dev.to/developertharun/easy-way-to-ssh-into-virtualbox-machine-any-os-just-x-steps-5d9i) :::success 記得 Linux Ubuntu 要先安裝 ssh server `sudo apt-get install openssh-server` >參考資料:[SSH into VirtualBox on Mac](https://unix.stackexchange.com/questions/231138/ssh-into-virtualbox-on-mac) ::: 成功使用 ssh 連入 Virtualbox 裡面的 Linux Ubuntu。 ``` ssh -p 9527 lukyandy3162@127.0.0.1 ``` ![截圖 2025-04-10 凌晨3.08.49](https://hackmd.io/_uploads/BykGUSN0Jl.png) :::success 個人習慣使用 tmux >參考資料:[Mac OS 安裝 tmux](https://hackmd.io/@srhuang/r1Xq97ERkx) ::: ## share folder 設定 ### 安裝必要套件 >參考出處:[VirtualBox: mount.vboxsf: mounting failed with the error: No such device](https://stackoverflow.com/questions/28328775/virtualbox-mount-vboxsf-mounting-failed-with-the-error-no-such-device) ``` sudo apt-get -y install dkms build-essential linux-headers-$(uname -r) virtualbox-guest-additions-iso ``` ### 安裝 Virtualbox Guest Additions. >參考出處:[mount: unknown filesystem type ‘vboxsf’](https://www.imooc.com/article/35527) ![截圖 2025-04-11 凌晨2.47.15](https://hackmd.io/_uploads/r1Qwz5r01e.png) ### 執行 vboxsf 指令 ``` sudo mount -t vboxsf bbb /home/lukyandy3162/aaa ``` ![截圖 2025-04-11 晚上8.03.08](https://hackmd.io/_uploads/SytQStLCke.png) ### 開機直接 mount >參考出處:[How to mount a VirtualBox shared folder at startup?](https://askubuntu.com/questions/252853/how-to-mount-a-virtualbox-shared-folder-at-startup) ``` sudo vim /etc/fstab bbb /home/lukyandy3162/aaa vboxsf defaults 0 0 ``` :::warning 後來實測證明不需要此步驟,看起來 Virtualbox 會幫你建立好。 ![截圖 2025-04-11 晚上8.08.18](https://hackmd.io/_uploads/H16v8tIC1l.png) ::: ## 啟動 X window ### Ubuntu Linux (Guest OS on Virtualbox) >參考出處:[在 Ubuntu Server 上安裝 ubuntu desktop](https://snippetinfo.net/mobile/media/800) >參考出處:[Ubuntu Server 安裝 Gnome X-Windows 的方法](https://pccicblog.wordpress.com/2022/04/12/ubuntu-server-%E5%AE%89%E8%A3%9D-gnome-x-windows-%E7%9A%84%E6%96%B9%E6%B3%95/) 安裝 ``` sudo apt-get install ubuntu-desktop sudo apt-get -y install xdm ``` 設定 ``` vim /etc/ssh/sshd_config ``` ``` X11Forwarding yes X11DisplayOffset 10 X11UseLocalhost yes ``` ![截圖 2025-04-13 凌晨3.52.06](https://hackmd.io/_uploads/rk-iVBOAke.png) :::warning 啟動(好像不需要此步驟) ``` sudo /etc/init.d/gdm3 start ``` ::: ### Mac OS (Host OS) 安裝 [XQuartz](https://www.xquartz.org/) ``` ssh -X -Y -p 9527 lukyandy3162@127.0.0.1 ``` 設定鍵盤 ![截圖 2025-07-20 晚上7.48.59](https://hackmd.io/_uploads/H1bWdI5Ugl.png) 測試 X11 https://superuser.com/questions/695950/x11-keyboard-utility-to-display-key-presses # 啟動 bochs on Linux Ubuntu [官方網站](https://bochs.sourceforge.io/) [官方下載網址](https://sourceforge.net/projects/bochs/files/bochs/3.0/) >[!Tip]bochs 是專門用來模擬 x86 CPU,如果想模擬 ARM CPU,就必須用 QEMU。 ## 解壓縮 ``` tar zxvf bochs-3.0.tar.gz tar zxvf bochs-2.8.tar.gz ``` ## Compiling Bochs >[參考Tutorial](https://bochs.sourceforge.io/cgi-bin/topper.pl?name=New+Bochs+Documentation&url=https://bochs.sourceforge.io/doc/docbook/user/index.html) ### Configuration ``` sudo apt-get install xorg-dev ./configure --enable-debugger --enable-disasm --enable-iodebug --enable-x86-debugger --with-x --with-x11 ``` >[!Warning]configure: WARNING: unrecognized options: --enable-disasm ``` sudo apt-get install libltdl-dev sh .conf.linux ``` ### Make ``` make ``` ### Make Install ``` sudo make install ``` 看起來沒什麼錯誤。 ![截圖 2025-04-11 晚上8.44.29](https://hackmd.io/_uploads/SJP0AK8Ake.png) ![截圖 2025-06-24 下午6.14.41](https://hackmd.io/_uploads/HkQnqeu4gx.png) ## 設定 bochs 這是系統 default 吃的設定檔。 ![截圖 2025-04-11 晚上9.11.10](https://hackmd.io/_uploads/r1rNScLR1g.png) 先備份後再修改。 ``` cp .bochsrc .bochsrc.backup ``` ### 關閉 Audio and speaker ![截圖 2025-04-12 凌晨12.07.33](https://hackmd.io/_uploads/rysORhL01x.png) ### 設定 Display >[!Caution] 好像不用設定這個 ![截圖 2025-04-12 清晨6.25.51](https://hackmd.io/_uploads/ryNmwfD0ye.png) ## 執行 bochs ``` ./bochs ``` ![截圖 2025-04-11 晚上9.02.33](https://hackmd.io/_uploads/rJbM7q8Ayg.png) 直接 enter 選擇 default .bochsrc ![截圖 2025-04-12 清晨6.05.34](https://hackmd.io/_uploads/BkLUzGv01x.png) 執行結果 ![截圖 2025-04-12 凌晨12.22.41](https://hackmd.io/_uploads/HJWRU6UAyg.png) >[!Tip]這個錯誤是因為我們還沒製作虛擬硬碟。 ## 製作虛擬硬碟 >參考資料:[9.2. How to make a simple disk image](https://bochs.sourceforge.io/cgi-bin/topper.pl?name=New+Bochs+Documentation&url=https://bochs.sourceforge.io/doc/docbook/user/index.html) ``` ./bximage ``` ![截圖 2025-04-12 凌晨12.33.50](https://hackmd.io/_uploads/HkY_L6L01x.png) 修改 .bochsrc ![截圖 2025-04-12 凌晨12.38.18](https://hackmd.io/_uploads/HkGG8pIRyl.png) 成功讀到虛擬硬碟。 ![截圖 2025-04-12 凌晨12.36.23](https://hackmd.io/_uploads/BJuPv6UCke.png) >[!Tip]這個錯誤是因為我們還沒把這個虛擬硬碟,變成開機硬碟。 下一章將會繼續撰寫 MBR。 ## Cross Compiler 目的是要在 ARM 的機器上 編譯成 x86 相容的執行檔。 https://learn.arm.com/install-guides/gcc/cross/ ``` sudo apt-get install gcc-x86-64-linux-gnu g++-x86-64-linux-gnu ``` https://linux.die.net/man/1/x86_64-linux-gnu-gcc ``` x86_64-linux-gnu-gcc -S -o main.S main.c ``` Build 32 bits ``` x86_64-linux-gnu-gcc -m32 -c -o main.o main.c ``` ## debugger https://bochs.sourceforge.io/doc/docbook/user/internal-debugger.html ## Assembly Tutorial https://www.tutorialspoint.com/assembly_programming/index.htm # Vim ``` vi ~/.vimrc ``` ``` syntax enable set smartindent set tabstop=4 set shiftwidth=4 set expandtab " display line number set number filetype on autocmd FileType make set noexpandtab shiftwidth=4 softtabstop=0 ``` # include file 統一都放在 include folder 下。 ![截圖 2025-07-08 上午10.58.10](https://hackmd.io/_uploads/B1huKW9Hgx.png)