stm32 개발환경을 리눅스에서 설치하는 방법을 소개합니다.

리눅스는 우분투 기준으로 설명하겠습니다.

펌웨어 퓨징은 ST-Link/v2를 사용하고 툴체인은 arm-none-eabi-를 사용합니다.


<설치 전 확인사항>

먼저 64비트 우분투일 경우 32bit 라이브러리를 설치합니다.


$ sudo apt-get install ia32-libs


패키지를 못찾거나 설치가 안되면 32-bit package repo를 활성화 합니다.


$ sudo dpkg --add-architecture i386

$ sudo apt-get update

그리고 다시 설치를 시도 합니다.

$ sudo agt-get install ia32-libs


1. 툴체인 다운로드

리눅스 호스트에 arm-none-eab-를 설치합니다. 링크는 아래 참조합니다.

https://launchpad.net/gcc-arm-embedded/+download

여기서 압축 패키지로 받습니다. 현재 gcc version 4.9.3 20150303 버전까지 나왔습니다.

압축을 해제하고 경로를 복사해놓습니다.

$ tar -xvjf gcc-arm-none-eabi-4_9-2015q1-20150306-linux.tar.bz2

$ cd gcc-arm-none-eabi-4_9-2015q1/bin

$ pwd
-Download/gcc-arm-none-eabi-4_9-2015q1/bin   <--- 이 경로를 복사합니다.


2. 툴체인 경로 환경 변수 등록


$ vi ~/.bashrc

아래 항목을 추가 합니다. 툴체인 경로는 이전 단계에서 압축 해제한 디렉토리를 지정합니다.

export PATH=$PATH:<툴체인 압축 해제 경로>


어떠한 경로에서든지 아래 명령어가 실행되는지 확인합니다.

$ arm-none-eabi-gcc -v


3. Texane's Stlink Utility 빌드 및 설치

STMicroelectronics에서 제공하는 ST-Link Utility는 윈도우 버전만 있고 리눅스/맥은 없습니다.

따라서 오픈소스 계열의 stlink utility 중에 Texane's Stlink를 사용하겠습니다.

빌드하기 전에 미리 필요한 패키지를 설치합니다.


$ sudo apt-get install git libusb-1.0.0-dev pkg-config autotools-dev

소스를 다운받습니다.

$ git clone git://github.com/texane/stlink.git

$ cd stlink

$ ./autogen.sh

$ ./configure

$ make

이렇게 하면 두가지 바이너리가 생성됩니다. st-util과 st-flash입니다.

st-util은 GDBserver와 디버깅을 위해 통신하기 위한 프로그램이고 st-flash는 펌웨어 Writing을 위해 사용합니다.

여기서는 st-flash를 가지고 빌드한 바이너리를 타겟에 다운로드하도록 하겠습니다.

해당 유틸리티가 있는 경로를 마찬가지로 ~/.bashrc에 추가합니다.

export PATH=$PATH:<stlink가 있는 경로>


그리고 STLINK V/2 장치에 접근을 허용하기 위해 49-stlinkv2.rules 파일을 /etc/udev/rules.d/에 복사합니다.

stlink$ ls *rules
49-stlinkv1.rules  49-stlinkv2-1.rules  49-stlinkv2.rules

여기서 가지고 있는 st-link에 맞게 복사하시면 됩니다. 저는 V2를 가지고 있어서 49-stlinkv2.rules를 복사합니다.

stlink$ sudo cp 49-stlinkv2.rules /etc/udev/rules.d/


4. 타겟에 펌웨어 퓨징.


이제 실제 stm32 보드에 다운로드합니다. 빌드 한 바이너리를 준비합니다. main.bin이라고 한다면.


$ st-flash --reset write main.bin 0x08000000


--reset은 다운로드 후에 리셋을 수행해서 바이너를 실행하고 0x08000000은 플래시 시작주소입니다.


그리고 현재 플래시에 있는 정보를 read해서 dump도 가능합니다.


$ st-flash read out.bin 0x08000000 4096

플래시 시작주소에서 4kbyte(4096byte)를 out.bin이라는 파일로 덤프합니다.


이렇게 하면 리눅스나 맥에서도 stm32 펌웨어를 개발할 수 있습니다.