이번에는 batch file에 대해서 알아보기 위해 'run xdlrc_convert.bat' file 분석을 해보겠습니다.


setlocal

명령어로 local variation을 사용한다고 설정한다.


set /p ans=Run xdlrc_convert for all Virtex-5 devices? [y/n]

명령어는 ans라는 variable에 값을 받을 것인데, /p 옵션을 통해서 Run xdlrc_convert for all Virtex-5 devices? [y/n] 이라는 글도 같이 뜨도록 만들어 주는 것이다.


if not "%ans%"=="y" goto end

이것은 ans라는 variable에 y가 아니면 끝내는 명령어이다.


set V5DEVICES=xc5vfx30tff665

는 V5DEVICES라는 variable에 xc5vfx30tff665를 넣어주는 것이다.


set V5DEVICES=%V5DEVICES% xc5vfx70tff665

명령어는 위에서 V5DEVICES variable에 xc5vfx30tff665가 입력되었는데, 그 뒤에 xc5vfx70tff665도 붙여주는 것이다.

그럼 결과적으로 V5DEVICES variable 내부에는 'xc5vfx30tff665 xc5vfx70tff665'가 들어있게 된다.


아래에서도 계속해서 비슷하게 해서 V5DEVICES 내부에 'xc5vfx30tff665 xc5vfx70tff665 xc5vfx70tff1136' 이런식으로 들어가게 된다.


이 아래에는 이번에 새로 xdl 명령어를 추가하기 위해 추가한 

call C:\Xilinx\14.7\ISE_DS\settings64.bat

명령어를 입력해주게 되는데, 이것은 C:\Xilinx\14.7\ISE_DS\settings64.bat 파일을 실행시켜주는 것이다.


cd /D "%~dp0..\data"

명령어를 통해서 ~~\bil-master\data로 명령어를 실행시킬 path를 설정한다.

'~dp0'는 처음에 이 batch file을 실행시킬 때의 argument에 대한 것인데, 0번 째 argument로 현재 directory path를 들고 온 것이다. 그래서 ~dp0는 ~\bil-master\scripts\를 의미한다.


xdl -report -pips -all_cons %%i

명령어를 통해서 V5DEVICES에 넣어놓았던 xc5vfx30tff665 같은 특정 보드들을 하나씩 가져와서 해당 ISE 명령어를 돌린다.

이 결과로 ~\bil-master\data\에 .xdlrc file이 만들어진다.

(그런데 여기서 모든 보드를 위한 것들은 안만들어진다. 이유는 잘 모르겠는데 Webpack version이라 그런 것일 수도 있다는 생각을 했다. 일단 한개의 보드 용으로만 돌아가면 될 것이라 생각하여 지금은 넘어갔다)

(+. 옆에서 win10으로 했을 때는 동일하게 했는데 다른 보드도 성공했다.)


"%~dp0..\bin\win32\MSVC 2008\xdlrc_convert\Release\xdlrc_convert" %%i.xdlrc

위의 명령어는 번역하면 아래와 같다.

~\bil-master\bin\win32\MSVC 2008\xdlrc_convert\Release\xdlrc_convert.exe xc5vfx30tff665.xdlrc

여기서 xc5vfx30tff665.xdlrc는 예제이다. 이것은 for문이 돌아갈 때 마다 다음 보드명으로 바뀔 것이다. (xc5vfx30tff665.xdlrc 다음 xc5vfx70tff665.xdlrc 이런 식으로)

이 명령어의 결과로는 ~.xdlrc file을 이용하여 ~.dev file을 ~\bil-master\data에 만들어준다.

이것이 논문에서 봤던 ~.xdlrc file은 너무 커서 간략화시킨 file을 만들어준 것이다.


del %%i.xdlrc

이 명령어를 이용해서 ~.xdlrc file을 지워주었다. ~.xdlrc file은 너무 커서 ~.dev file을 생성하고 지워준다.

이번에는 BIL code를 구동하기 위해서 어떤 일들을 해야 하는지 알아보겠습니다.


일단 bil-master/scripts에 ‘copy cfgdbs.bat’ 부터 실행한다.


그 다음에 ‘run v5data_gen.bat’를 실행한다.


그리고 ‘run xdlrc_convert.bat’를 실행하려니 xdl명령어를 모른다는 문제가 생긴다.

(“‘xdl’ 은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다” 라고 나온다)

(그런데 결국 이것은 *.dev file을 만들려고 있는 것인데, 처음에 압축파일을 풀면 있기 때문에 안돌려도 된다.....)

그래서 ISE를 깔아야 하나 싶어서 ISE v14.7을 다운받았다.

내부에서는 Free Version인 Webpack을 선택하여 설치한다.

얘는 license가 필요없다.

근데 windows 환경은 얘를 설치만 해서는 xdl command가 뭔지 모른다.


그래서 windows command에서 xdl command를 알아들을 수 있도록 해주어야 한다. (ISE Tcl Console에서는 xdl command가 돌아가는 것을 확인했다.)

그래서 [Solved:  ‘xdl’ is not recognized as an internal or external… - Community Forums](https://forums.xilinx.com/t5/Implementation/xdl-is-not-recognized-as-an-internal-or-external-command/td-p/724809) 페이지를 확인하니, ‘setting64’라는 것을 xdl 전에 실행해야 한다고 나온다.

그래서 ‘run xdlrc_convert.bat’ 내부에서 xdl command 실행하기 전에

‘call C:\Xilinx\14.7\ISE_DS\settings64.bat’  명령어를 입력해놓았다.

이러니까 xdl command를 알아듣고 돌아갔다.


이 다음에는 v5cfgmap_gen을 실행한다.

그러면 \bil-master\data\에 *.map file들이 만들어진다.


그리고 run bitcorrelate.bat를 돌리면 잘 돌아가고 Configuration Database가 나오게 된다.

그러면 이제 논문의 Fig. 1에서 원하는 것들은 모두 돌아간 것이다.


이제 Configuration Database가 만들어졌으니 Fig. 2을 참조하여 계속해서 다른 프로그램을 돌리면 된다.

'Research > FPGA Security' 카테고리의 다른 글

[Analysis - BIL] Batch file (run xdlrc_convert.bat)  (0) 2018.04.06

+ Recent posts