Chapter 01:部署開發環境 === :::info 在Mac OS 上使用 bochs(發音:box)來模擬 x86 CPU ::: >[time=Tue, Aug 12, 2025 6:37 AM] --- https://youtu.be/EKheOfnACFU <iframe width="560" height="315" src="https://www.youtube.com/embed/EKheOfnACFU?si=uKPTmyvTbxH1jNBh" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe> # Virtualbox 官方下載:https://www.virtualbox.org/wiki/Downloads ![截圖 2025-08-13 晚上8.38.10](https://hackmd.io/_uploads/Sk78D-cuxe.png) ## Checkpoint 成功啟動 Virtualbox ![截圖 2025-08-13 晚上8.35.17](https://hackmd.io/_uploads/HJCkw-qdgx.png) # Ubuntu 官方下載:https://ubuntu.com/download 根據你的 CPU 來選擇適合的 Ubuntu。 >[!Note] Virtualbox 並沒有能力支援不同的 CPU 架構。 > 檢查 Type of CPU Architecture ``` uname -m ``` ![截圖 2025-08-13 晚上8.50.42](https://hackmd.io/_uploads/BkDScZ5_xx.png) 如果選錯,就會無法成功啟動 Ubuntu。 ![111](https://hackmd.io/_uploads/rke0iZcOxx.png) 建立虛擬機 ![截圖 2025-08-13 晚上9.48.42](https://hackmd.io/_uploads/BJ_1_z9dee.png) ![截圖 2025-08-13 晚上9.44.44](https://hackmd.io/_uploads/SyV-vf9Oxe.png) ![截圖 2025-08-13 晚上9.50.23](https://hackmd.io/_uploads/HJQBOzqdle.png) 記得不要勾這個! ![截圖 2025-08-13 晚上9.51.53](https://hackmd.io/_uploads/rJes_f5_xe.png) ![截圖 2025-08-13 晚上9.52.56](https://hackmd.io/_uploads/rkI0Oz5uee.png) ## Checkpoint 安裝完成 ![截圖 2025-08-13 晚上9.57.14](https://hackmd.io/_uploads/SyHJ9z9dxl.png) 成功登入 ![截圖 2025-08-13 晚上9.58.06](https://hackmd.io/_uploads/Byv7czcOxe.png) # ssh Virtualbox 的設定 ![截圖 2025-08-13 晚上11.21.19](https://hackmd.io/_uploads/B1C3pmqdlg.png) ![截圖 2025-08-13 晚上11.23.53](https://hackmd.io/_uploads/ryvmRQ9Oxl.png) Ubuntu 安裝 ssh server ``` sudo apt-get install openssh-server ``` ## Checkpoint Host(mac OS) 透過 ssh 連到 Guest(Ubuntu)。 ``` ssh -p 9527 srhuang@127.0.0.1 ``` ![截圖 2025-08-13 晚上11.48.15](https://hackmd.io/_uploads/SJj7VVcuxg.png) ![截圖 2025-08-13 晚上11.49.17](https://hackmd.io/_uploads/SJJ4VV9uee.png) # 設定 shared folder >[!Tip] 如要使用 shared folder,需要先在 Guest(Ubuntu) 上安裝 Guset Additions。 Insert Guset Addition CD Image ![截圖 2025-08-13 晚上10.23.48](https://hackmd.io/_uploads/HyGXgmcdge.png) Guest(Ubuntu) 上安裝 Guest Additions > 參考資料:https://myapollo.com.tw/blog/ubuntu-install-virtualbox-guest-additions/ ``` sudo apt-get install -y build-essential dkms linux-headers-$(uname -r) sudo mount /dev/cdrom /mnt sudo /mnt/VBoxLinuxAdditions-arm64.run ``` ``` lsmod|grep vboxguest ``` ![截圖 2025-08-13 晚上10.20.50](https://hackmd.io/_uploads/HkTvyQqOge.png) Host(mac OS) Virtualbox 的設定 ![截圖 2025-08-14 凌晨12.30.14](https://hackmd.io/_uploads/rkU6aNq_gx.png) Ubuntu mount shared folder ``` sudo mount -t vboxsf bbb /home/srhuang/aaa ``` 解決資料夾權限的問題 ``` sudo adduser srhuang vboxsf ``` ## Checkpoint 先在 Host(mac OS) 新增 “host” folder,然後在 Guest(Ubuntu) 新增 “guest.c” ![截圖 2025-08-14 凌晨12.32.54](https://hackmd.io/_uploads/HkbvA49_ee.png) # X Window Host(mac OS) 安裝 XQuartz 官網下載:https://www.xquartz.org/ ![截圖 2025-08-14 凌晨1.54.50](https://hackmd.io/_uploads/ryFFZLcdel.png) 安裝完成 ![截圖 2025-08-14 凌晨1.56.33](https://hackmd.io/_uploads/HkolGIcOlg.png) Guest(Ubuntu) 安裝 X-Window > 參考資料:[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 fluxbox x-window-system-core xdm ``` 修改 ssh 設定 ``` sudo vim /etc/ssh/sshd_config X11Forwarding yes X11DisplayOffset 10 X11UseLocalhost yes ``` ![截圖 2025-08-14 凌晨12.40.42](https://hackmd.io/_uploads/H1_8gH9uxx.png) ## Checkpoint Host(mac OS) 重新使用 ssh 連上 Guest(Ubuntu)。 ``` ssh -X -Y -p 9527 srhuang@127.0.0.1 ``` ![截圖 2025-08-14 凌晨12.48.31](https://hackmd.io/_uploads/H1HbzS5Oll.png) > 參考資料:[測試 X11](https://superuser.com/questions/695950/x11-keyboard-utility-to-display-key-presses) ``` xev ``` ![截圖 2025-08-14 凌晨12.49.30](https://hackmd.io/_uploads/rk6NGB9uxx.png) # bochs >[!Tip] bochs 是專門用來模擬 x86 CPU。 官方網站:https://bochs.sourceforge.io/ ![截圖 2025-08-14 凌晨2.02.23](https://hackmd.io/_uploads/BklUXUcule.png) >[!Tip] Version 3.0 有些問題,建議使用 Version 2.8。 官網下載 2.8:https://sourceforge.net/projects/bochs/files/bochs/2.8/ ![截圖 2025-08-14 凌晨2.05.31](https://hackmd.io/_uploads/BJy7EI5Oge.png) 在 Host(mac OS)下載完成後,放到 share folder 下。 ![截圖 2025-08-14 凌晨2.07.27](https://hackmd.io/_uploads/S1G6VUc_xe.png) 在 Guest(Ubuntu) 下解壓縮 ``` tar zxvf bochs-2.8.tar.gz ``` ![截圖 2025-08-14 凌晨2.10.11](https://hackmd.io/_uploads/rk77rUc_gl.png) 安裝必要套件 ``` sudo apt-get install xorg-dev sudo apt-get install libltdl-dev ``` Build bochs ``` cd bochs-2.8 ``` ``` export CONFIGURE_ARGS=" \ --enable-debugger \ --enable-iodebug \ --enable-x86-debugger \ --with-x \ --with-x11 \ " ``` >[!Tip]`.conf.linux` 會吃這個 variable `CONFIGURE_ARGS`。 ``` sh .conf.linux ``` ``` make ``` make 之後長這樣。 ![截圖 2025-08-19 下午6.32.08](https://hackmd.io/_uploads/B1x1XCWYlg.png) ``` sudo make install ``` make install 之後長這樣。 ![截圖 2025-08-14 凌晨2.20.46](https://hackmd.io/_uploads/rkUswLq_xg.png) 先備份原始設定 ``` cp .bochsrc .bochsrc_backup ``` 關閉 Audio and speaker ``` vim .bochsrc ``` ![截圖 2025-08-14 凌晨2.40.33](https://hackmd.io/_uploads/SyRd2Icdxx.png) 執行 bochs ``` ./bochs ``` ![截圖 2025-08-14 凌晨2.43.13](https://hackmd.io/_uploads/BJbm6L9uge.png) ![截圖 2025-08-19 下午6.35.09](https://hackmd.io/_uploads/HkIQN0ZYee.png) ## Checkpoint 恭喜成功!!! ![截圖 2025-08-14 凌晨2.32.43](https://hackmd.io/_uploads/SJRwqUcuel.png) # 編譯環境 >[!Tip] 目的是要在 ARM 的機器上 編譯成 x86 相容的執行檔。 安裝 cross compiler >參考資料:https://learn.arm.com/install-guides/gcc/cross/ ``` sudo apt-get install gcc-x86-64-linux-gnu ``` 安裝 x86 assembly compiler ``` sudo apt install nasm ``` ## Checkpoint ``` x86_64-linux-gnu-gcc -v x86_64-linux-gnu-ld -v nasm -v ``` ![截圖 2025-08-14 凌晨3.19.18](https://hackmd.io/_uploads/BketrD5_eg.png) # Tools ## tmux 安裝請參考這篇文章:https://hackmd.io/@srhuang/r1Xq97ERkx 我的設定:https://github.com/srhuang/tools/blob/main/.tmux.conf ![截圖 2025-08-14 凌晨3.06.56](https://hackmd.io/_uploads/rybufDcuge.png) ## vim 我的設定:https://github.com/srhuang/tools/blob/main/.vimrc ![截圖 2025-08-14 凌晨3.09.09](https://hackmd.io/_uploads/ByWzXP9Oee.png)