---
# System prepended metadata

title: 組語作業一兼開發環境配置
tags: [組語作業]

---

GNU 是一個開源的作業系統

需要的工具:
1. GNU binutils: 包含了一些binary tool
    * ID: GNU Linker
    * as: GNU assembler
    * odjcopy: 能在不同類型的object file間轉換
    * odjdump: GNU disassembler，反組譯器，負責將machine code 轉回組合語言
2. GNU C/C++ compiler: 又稱為gcc，好用的編譯器
3. GNU Newlib

# 環境配置
操作的linux環境是Ubuntu 20.04.6 LTS
## 安裝GNU binutils
來到home目錄，創建一個資料夾system_resourse放binutils的執行檔；再創建一個資料夾sourse_code，接著cd至該資料夾中，並下載壓縮檔
```
mkdir system_resourse
mkdir sourse_code
cd sourse_code
wget https://ftp.gnu.org/gnu/binutils/binutils-2.31.1.tar.gz
```
![](https://hackmd.io/_uploads/SyhPeMikp.png)

接著解壓縮檔案
```
tar -zxvf ./binutils-2.31.1.tar.gz
```

為了使sourse code跟編譯後的檔案分離，在sourse code的資料夾中再創建一個名為build_binutils的資料夾，並cd到其中；接著執行指令使shell script 創建makefile
```
mkdir build_binutils
cd build_binutils
../binutils-2.31.1/configure --prefix=/home/system_resourse --target=arm-none-eabi
```
![](https://hackmd.io/_uploads/rkuymzjka.png)

使用make指令使用makefile，接著將執行檔裝到/home/system_resourse中
```
make
make install
```
## 安裝 arm 跨平台工具
下載arm 跨平台工具 (arm-cross-toolchain-linux-64-20.4.gcc10.tar.gz)，並將壓縮檔移動至home目錄下

解壓縮檔案
```
tar -zxvf ./arm-cross-toolchain-linux-64-20.4.gcc10.tar.gz
```

配置環境變數
先打開文件
```
nano ~/.bashrc
```
將這行加在最下面
```
export PATH=/home/arm-tool-20.04-20220919/bin:$PATH
```

加入後
輸入ctrl+O 儲存檔案
輸入Enter確定儲存
輸入ctrl+X 離開

## 安裝其他相關套件
```
sudo apt-get update
sudo apt-get install gcc g++ autoconf autogen texinfo zlib1g-dev tcl-dev tk-dev libgmp-dev libmpc-dev libmpfr-dev libisl-dev mesa-common-dev libjpeg-dev libtogl-dev python-dev flex bison itcl3 itk3 iwidgets4 libncurses5
```

## 安裝X server 以顯示GUI介面
原理: 在Window端安裝X server，以將虛擬機連線到Window端並投影GUI畫面

先安裝X server (VcXsrv)
https://sourceforge.net/projects/vcxsrv/files/latest/download

啟動XLaunch.exe
![](https://hackmd.io/_uploads/BJ4PVKseT.png)

一直按下一步，直到看到這項並打勾
![](https://hackmd.io/_uploads/Ski5Vtjx6.png)

按完成後，允許所有選項
![](https://hackmd.io/_uploads/BJUDBtsxT.png)

開啟Ubuntu，配置環境變數
先打開文件
```
nano ~/.bashrc
```
將這行加在最下面
```
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0
```

加入後
輸入ctrl+O 儲存檔案
輸入Enter確定儲存
輸入ctrl+X 離開

除錯: 發現還是不行時，前往防火牆進階安全設定，刪除跟VcXsrv有關的規則再試試
![](https://hackmd.io/_uploads/BJRbHFolT.png)

### 使用方式
在window端啟用 XLaunch.exe，接著輸入以下指令
```
arm-none-eabi-insight
```
![](https://hackmd.io/_uploads/rkbCwYjxT.png)


## 安裝GDB
首先，來到home目錄下，並輸入以下指令
```
mkdir gdb
cd gdb
makir installation
git clone https://sourceware.org/git/insight.git
cd insight
git submodule init
git submodule update
git config fetch.recurseSubmodules true
./configure --prefix=/home/gdb/installation --target=arm-none-eabi \ --enable-sim
make
make install
```

接著配置環境變數
先打開文件
```
nano ~/.bashrc
```
將這行加在最下面
```
export PATH=/home/gdb/installation/bin:$PATH
```

加入後
輸入ctrl+O 儲存檔案
輸入Enter確定儲存
輸入ctrl+X 離開

## 壓縮作業
壓縮當前目錄下的所有檔案成hw1_410410054.tar.xz
```
tar Jcvf hw2_410410054.tar.xz .
```

## 基本操作
編譯C程式成組合語言檔案 (.c -> .s)
```
arm-none-eabi-gcc –S –g sample.c –o sample_armg.s
```

組譯組合語言檔案 (.s -> .o)
```
arm-none-eabi-as hw1.s -o hw1.o
```

編譯組合語言檔案 (.s -> .exe)
```
(x) arm-none-eabi-gcc hw1.s –o hw1.exe
(O) arm-none-eabi-gcc -g -O0 hw2.s -o hw2.exe
```

查看組語的檔案資訊
```
more sample_armg.s
```


