第一章:逆向工程环境搭建——Linux环境配置
说实话,做FPGA逆向工程,第一步不是学算法,也不是看网表。而是先把你的开发环境收拾利索了。我见过太多人,一上来就急着分析网表,结果装个Python库报错半天,最后连门都没进去。
这一章,咱们就把Linux环境、Python3、Tcl/Tk、常用EDA工具链,还有几个关键的开源库,一次性搞定。嗯,跟着我来,别急。
1.1 为什么选Linux?
你可能用Windows习惯了。但做逆向,尤其是网表级别的分析,Linux是绕不开的。原因很简单:
- EDA工具原生支持Linux:Vivado、ISE、Yosys,这些工具在Linux下跑得最稳。Windows下装Vivado,我遇到过各种玄学问题,比如编译到一半崩溃。
- Python生态更干净:Linux下装Python库,基本不会遇到路径乱码、DLL缺失这种破事。
- 脚本化操作方便:Tcl/Tk、Shell脚本,在Linux下就是亲儿子。
1.2 Python3环境配置
Python3是咱们分析网表的主力语言。我个人习惯用Python 3.8以上版本。Ubuntu 20.04自带Python 3.8,省事。
先检查一下系统里有没有Python3:
python3 --version
如果没装,或者版本太低,用这个命令装:
sudo apt update
sudo apt install python3 python3-pip python3-venv
这里有个坑——千万别直接用系统自带的pip装库。我建议用虚拟环境。为什么呢?因为不同项目可能依赖不同版本的库,混在一起迟早出问题。
创建虚拟环境:
python3 -m venv fpga_re_env
source fpga_re_env/bin/activate
激活之后,你的终端前面会出现 (fpga_re_env) 字样。这时候装库,就只影响当前环境。
1.3 Tcl/Tk安装
Tcl/Tk在FPGA工具链里无处不在。Vivado的Tcl控制台、ISE的脚本,都靠它。咱们装它,主要是为了后面跑一些自动化脚本。
安装命令:
sudo apt install tcl tk
验证一下:
tclsh
% puts "Hello, FPGA Reverse!"
Hello, FPGA Reverse!
% exit
看到输出就对了。Tcl语法其实挺简单的,后面用到的时候我会细讲。
1.4 常用EDA工具链安装
这里咱们装三个工具:Vivado、ISE、Yosys。前两个是商业工具,Yosys是开源的。
1.4.1 Vivado
Vivado是Xilinx家的主力工具。装它有点大,大概30GB左右。下载地址在Xilinx官网,需要注册账号。
安装步骤:
- 下载
Xilinx_Vivado_SDK_*.tar.gz - 解压:
tar -xzf Xilinx_Vivado_SDK_*.tar.gz - 运行安装脚本:
./xsetup - 选择版本,我一般选Vivado HL WebPACK,够用了
- 安装路径建议别用默认的,我放在
/opt/Xilinx
装完之后,设置环境变量:
source /opt/Xilinx/Vivado/2023.1/settings64.sh
验证:
vivado -version
~/.bashrc 里,每次打开终端就不用重新敲了。
1.4.2 ISE
ISE是Xilinx的老工具,主要用来处理老款芯片(比如Spartan-6、Virtex-5)。虽然官方已经停止支持了,但逆向工程里经常遇到老网表,所以还得备着。
安装方法和Vivado类似,但要注意:ISE对Ubuntu 20.04以上的系统兼容性不太好。我建议用Docker跑:
docker pull xilinx/ise:latest
或者装个虚拟机跑CentOS 6。嗯,这确实有点麻烦,但没办法,老工具就这样。
1.4.3 Yosys
Yosys是开源界的宝贝。它能做综合、优化、网表转换,还能读入EDIF、Verilog网表。逆向分析里,我经常用它来做网表格式转换。
安装Yosys:
sudo apt install yosys
或者从源码编译(推荐,能用到最新功能):
git clone https://github.com/YosysHQ/yosys.git
cd yosys
make
sudo make install
验证:
yosys -version
看到版本号就对了。
1.5 开源库安装与测试
接下来装两个关键库:pyverilog和edifparser。它们能帮我们解析网表文件。
1.5.1 pyverilog
pyverilog是一个Python库,能解析Verilog代码,生成抽象语法树(AST)。逆向分析时,我常用它来提取网表中的模块和连线信息。
安装:
pip install pyverilog
测试一下:
python3 -c "import pyverilog; print('pyverilog imported successfully')"
写个小脚本试试:
from pyverilog.vparser.parser import parse
ast, _ = parse(['test.v'])
print(ast.children())
如果没报错,说明装好了。
1.5.2 edifparser
edifparser是用来解析EDIF网表的。EDIF是一种中间格式,很多EDA工具都支持导出。逆向分析时,EDIF文件里包含了完整的网表结构。
安装:
pip install edifparser
测试:
python3 -c "import edifparser; print('edifparser imported successfully')"
解析一个EDIF文件:
from edifparser import EdifParser
parser = EdifParser('test.edf')
cells = parser.get_cells()
print(cells)
你会看到所有cell的名字和类型。这就是网表的基本单元。
1.6 知识体系总览
下面这张图,把咱们这一章的内容串起来了。你一看就明白:
这张图里,Linux环境是底座。上面搭了Python3、Tcl/Tk、EDA工具链、开源库四根柱子。每一根都缺不了。
1.7 环境验证清单
装完之后,我建议你跑一遍这个清单,确保所有东西都正常:
| 组件 | 验证命令 | 预期结果 |
|---|---|---|
| Python3 | python3 --version |
Python 3.8+ |
| Tcl | tclsh 然后 puts hello |
输出 hello |
| Vivado | vivado -version |
显示版本号 |
| Yosys | yosys -version |
显示版本号 |
| pyverilog | python3 -c "import pyverilog" |
无报错 |
| edifparser | python3 -c "import edifparser" |
无报错 |
全部通过?恭喜你,环境搭好了。后面咱们就可以正式开始分析网表了。
公众号:蓝海资料掘金营,微信deep3321