---
# System prepended metadata

title: gr-modtool 建立module
tags: [Gnuradio]

---

# gr-modtool 

先行安裝modtool依賴套件
* clang-format

## 開始建立
使用`sudo gr_modtool newmod try1`就會建立名為gr-try1的OOT架構模塊
![](https://hackmd.io/_uploads/rkRlXO4A3.png)

使用`gr_modtool add ieo`來生成我們要撰寫block的相關檔案(這裡生成名字為ieo的新block)
那要分別輸入:
block type
Language
copyright holder
Add Python QA code 使用python生成ctest測試檔案
Add C++ QA code
![](https://hackmd.io/_uploads/Hk_VmONCn.png)

由於之前新增過block 所以需要多這一步驟(修改文件也需要，唯有只建立一個block不需要)
輸入`gr_modtool bind ieo`
![](https://hackmd.io/_uploads/HJio8dVRh.png)

接下來lib就會新增 ieo_impl.cc&.h
grc會新增 try1_ieo.block.yml
python會多 qa_ieo.py
那分別對其編譯

ieo_impl.cc
block type為general
寫了一個in=out
![](https://hackmd.io/_uploads/rJO5myrCn.png)

那yml的部分也要自行更改,設置parameters,input,output
![](https://hackmd.io/_uploads/r18pHkrC3.png)

編寫測試程序(python)，將測試數據輸入，若輸入=輸出即可pass
![](https://hackmd.io/_uploads/HJvNpkH0n.png)


那最後進行makeinstall程序即可
mkdir build
cd build
cmake ..
make
ctest
測試結果
![](https://hackmd.io/_uploads/ry5dakr02.png)
sudo make install
sudo ldconfig 

打開gnu radio即可看到新增的block
![](https://hackmd.io/_uploads/SkcK1gHA3.png)

實際測試
aa  為out=in^3
aa2 為out=in^2
ieo 為out=in
![](https://hackmd.io/_uploads/ryXPegSR2.png)
![](https://hackmd.io/_uploads/B10cggHR2.png)
綠色為原始信號
![](https://hackmd.io/_uploads/SJrAlgHCn.png)
![](https://hackmd.io/_uploads/B17ybgr0n.png)
![](https://hackmd.io/_uploads/Sy9xZeSA2.png)
