강좌 & 팁
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 펌웨어를 개발할 수 있습니다.