처음 AVR 글을 봤을 때는 리눅스(우분투)를 기준으로 해서 윈도우에서는 어떻게 하면 될까 찾아보다 Atmel Studio를 쓰면 된다는 것이었다. 하지만 나는 VScode를 쓰고 싶었고, 어떠한 IDE를 사용하던 쓸 수 있게 하고 싶어 그 방법은 고려하지 않았다.

고로 남은 방법은 MSYS2와 WSL인데, MSYS2는 라이브러리가 꼬여서 중간에 하다 그만뒀고, WSL2는 USB 연결이 되지 않아서(되기는 하는데 손이 아주 많이 간다) 마찬가지로 그만뒀다. 리눅스였다면 그냥 터미널에서 받으면 되는데... 해서 "윈도우 패키지 관리자를 쓰면 되는 거 아닌가?"라는 생각으로 검색을 했더니 레딧에서 "윈도우에서 할 사람은 Scoop 쓰면 scoop install make avr-gcc avrdude 적으면 끝이야. 로컬 scoop으로 경로가 추가되어서 매번 PATH 추가 할 필요가 없어."

레딧의 그 댓글

내가 아는 패키지 관리자는 Winget이랑 chocolatey 정도였는데, Scoop이 추가로 있었다니... 응? 윈도우에도 패키지 관리자가 있었다고? 그걸 이제 알았다고? 괜찮다. 나도 알고만 있었지 활용한 지 얼마 안 되었으니..

예를 들면 엣지 키는 것도 기분 더러워서 Winget으로 파이어폭스 설치하는 정도?

해서 Scoop을 이용해서 윈도우에서 AVR 프로그래밍을 하는 방법을 알려주려고 한다.

보통 사람이라면 그냥 아두이노 IDE나 Atmel Studio를 쓰지 나처럼 VSCode를 고집하고 컴파일하고 플래시하는 행위를 하나하나 하는 사람은 미친놈이라고 한다.

하지만 재밌죠?

AVR 개발환경 구축

제일 먼저 Scoop을 설치해야지. Powershell을 열어서 아래 명령어를 써주자.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression

그럼 이렇게 친절하게 설치하고 있다는 것을 알려준다.

그리고 아래 명령어로 필요한 패키지를 받자

scoop install avr-gcc

make와 avrdude는 avr-gcc 패키지 안에 다 들어있으니 굳이 설치 할 필요 없다.
끝이다. exe 파일을 받고 자시고 그냥 저 명령어로 끝난 것이다.

시작 전에 Powershell에서 아래 명령어로 경로가 인식이 되었는지 확인하자.

avr-gcc --version
avr-gdb --version
avrdude --version
make --version

위와 같이 나오면 성공.

아두이노 LED 깜빡이기

시작하기 전에 본인은 아두이노 우노 공식보드를 사용했다.

호환보드로 하는 경우 별도의 드라이버를 추가로 설치해야 한다. LED는 +가 13번, -는 GND에 연결하자.

LED를 이렇게 연결해주면 된다.
아두이노 우노의 포트위치는 장치 관리자 -> 포트에서 확인하면 된다.
COM3가 우노의 포트위치이다.

VScode(또는 다른 IDE)를 실행한 다음 폴더를 만들고 C언어 소스와 Makefile을 아래와 같이 작성하면 된다. Makefile을 만들지 않고 명령어로 하나하나 다 해도 되는데 반복작업은 조금이나마 편한 방법으로 하는 것을 추천한다.
그리고 소스파일과 Makefile은 같은 위치에 있어야 하며, Makefile은 꼭 "Makefile"로 작성해야 인식한다. makefile, Makefile.mak 이런 식으로 저장하면 인식이 되지 않는다.

 

led.c

#include <avr/io.h>

#define F_CPU 16000000 //MCU Frequency rate
#define BLINK 5000 //Delay time(ms)

#include <util/delay.h>

int main (void)
{
  // Arduino digital pin 13 (pin 5 of PORTB) for output
  DDRB |= 0B100000; // PORTB5 (1 << PB5)

  while(1) {
    // turn LED on
    PORTB |= 0B100000; // PORTB5 (1 << PB5)
    _delay_ms(BLINK);

    // turn LED off
    PORTB &= ~ 0B100000; // PORTB5 (1 << PB5)
    _delay_ms(BLINK);
  }
}

Makefile

# GNU make macro
# CFLAGS : Compiler option, CC : Compiler
# LDFLAGS : Linker option, LD : link
# PROGRAM : Source file name
# $@ : Name of current target, $< : First dependency

# avr-gcc commands (Part)
# -c : Compile only, -ihex : Intel hex file, -R : Remove, -o : output, -O : Optimize, -Os : Optimize for size
# -D : Define, -mmcu : MCU Target, UL : Unsigned Long

# avrdude commands (Part)
# -F : Override invalid Signature check, -V : Do not verify, -c : Specify programmer type 
# -p <partno> : Required. Specify AVR Device
# -P : Port, -b <boudrate> : Override RS-232 baud rate 
# -U <memtype>:r|w|v:<filename>[:format] : Memory operation specification

# Makefile rule
# <Target>: <Dependencies>
#    <Recipe> Must be indented with a TAB

# Macro define section
CC = avr-gcc
CFLAGS = -c -Os -D F_CPU=16000000UL -mmcu=atmega328p
LDFLAGS = -mmcu=atmega328p
PROGRAM = led
OBJCOPY = avr-objcopy

# Port where your Arduino Uno is connected
PORT = COM3

# command section
all: ${PROGRAM}.hex 

${PROGRAM}.hex: ${PROGRAM}.elf
    ${OBJCOPY} -O ihex -R .eeprom ${PROGRAM}.elf ${PROGRAM}.hex

${PROGRAM}.elf: ${PROGRAM}.o
    ${CC} $(LDFLAGS) -o $@ $^

${PROGRAM}.o: ${PROGRAM}.c 
    ${CC} $(CFLAGS) -c -o $@ $<

flash: ${PROGRAM}.hex
    avrdude -F -V -c arduino -p ATMEGA328P -P ${PORT} -b 115200 -U flash:w:${PROGRAM}.hex

clean: FRC
    del ${PROGRAM}.elf ${PROGRAM}.hex ${PROGRAM}.o
FRC:

작성을 다 했다면 VScode에서 터미널을 열고
make를 입력하자. 터미널이 보이지 않는다면 F1을 눌러서 아래와 같이 terminal을 입력하면 된다.

Powershell 선택하면 됩니다.

make를 입력하면

 

led.elf, led.hex, lex.o가 만들어진다.

여기서 make flash를 입력하면 비로소 led.hex가 아두이노 우노에 업로드가 되어 LED가 점등이 된다.

 

깜빡깜빡깜빡깜빡

 

이제 순수 C언어로 아두이노를 지배하자.

서론

리눅스에 어느 정도 들어온 대부분의 사람들은 배포판을 이리저리 옮기더라.(나만 그런가). 하지만 난 빡센 배포판으로 옮긴 적은 없다. 데비안/우분투, 페도라/RHEL, 아치 기반에서 돌고 도는 정도이다. NixOS라던가, Gentoo, Slackware, Bedrock 이런 친구들은 시도조차 하지 않았다. 최대한 신경을 덜 쓰는 쪽으로 쓰고 싶었기에..

 

지금은 윈도우 11로 다시 돌아왔다. 이유는 굳이 리눅스를 쓸 이유를 못 느꼈기 때문이다. 어쩌면 내 욕심일 수도 있다. 리눅스 배포판 중에서 윈도우와 견줄 수 있을 정도의 배포판을 원한다는 것은... 리눅스는 아니지만 같은 유닉스 계열인 MacOS(일부는 유닉스가 아니라고 하지만 BSD 커널을 쓴 것부터가..) 말고는 없다고 보는 것이 맞을 것이다.

 

리눅스와 첫 만남

아마 초등학교 고학년 때? 잠깐 써봤을 것이다. 당시에도 고물이었던 인텔 2520m이 들어간 2코어 짜리에 6기가 메모리로 이것저것 해봤었다. 왜인지는 모르겠지만 맥이 엄청 갖고 싶었는지 해킨토시도 찾아봤던 미친놈이었다. 아마 진짜로 시도했다면 노트북이 무사하지 못했을 수도.. 그래서 대안으로 찾은 것이 Elementary OS였다. 당시 Juno였나? 그게 최신이었을 거다. 오.. 하면서 싱글벙글하며 써봤는데 좀.. 그랬다. 지금도 별로다. 뭐 당시에는 리눅스라는 존재도 몰랐을 것이다. 그냥 다른 OS 인가보다 하고 넘어갔겠지. 그러고 우분투랑 민트 깔아본 게 끝이었다. 이후 쭉 윈도우만 써왔다.

 

다시 리눅스에 발을 들이다 (윈도우에 한쪽 발을 담그며)

그러고 몇 년이 지났을까? 홍대병 비슷한 게 도졌는지 리눅스를 써보겠다고 마음을 먹었다. 우분투 계열로 감 조금 잡다가 아치 리눅스로 넘어갔던... 뭐 당시 아치를 골랐던 이유는 처음부터 내가 골라서 만드는 그런 DIY를 목표하는 디스트로라서 설치했었다. 롤링릴리즈라 sudo pacman -Syu 하면 업데이트는 끝이었으니. 근데 문제는, 막상 커스텀을 하라고 풀어줬더니 커스텀을 안 해. 롤링릴리즈라서 깨지는 건 다반사였고. 건물이 무너지는 정도는 아니었지만 부스러기가 떨어지거나 치수가 맞지 않는 정도? 그래서... 아 얘는 아니구나 하고 다시 윈도우로 돌아갔다. 이후 반복이다.

 

그리고 현재

윈도우가 확실히 본가에 온 것 같은 느낌이다. 자원은 리눅스보다 많이 먹지만 사양이 빡빡한 것도 아니고.. 하지만 GUI가 너무 잘 되어있고 호환성이라든지 드라이버 같은 친구들도 큰 문제없이 잘 잡힌다. 그러던 중 AVR을 하고 싶어서 리눅스를 설치하려다 "그래 그냥 WSL로 쓰자" 했지만 USB 연결하는데 짜증이 났다. Msys2는 라이브러리가 다 흩어져 있길래 포기했다. 그것도 못하니? 네. 저는 못합니다. 그래서 리눅스로 넘어갈까 생각 중이다.

하지만 어떤 배포판으로 갈 것인가? 이게 문제다. 전에는 외장 GPU는 끄고 Only 내장 그래픽만 사용해서 Wayland로도 잘 되었다. 왜? 라이젠 내장 그래픽, 즉 라데온이었기 때문에 지원이 잘 되었거든. 근데 이젠 Nvidia도 쓸 일이 생겨 선택지가 확 줄어들게 되었다.. 왜냐면 Nvidia는 Wayland에서 말썽이거든. Xorg에서는 잘 되지만 HiDPI가 문제고.. 중간에 우분투로 갔지만 스케일을 변경하면 화면이 이상해져서 재부팅은 필수였다.

 

그래서 배포판을 고를 때 나름대로의 조건을 써놓았다.

  1. Nvidia GPU를 안정적으로 구동하고 GUI로 GPU 스위칭이 될 것
  2. HiDPI를 지원할 것(Wayland 세션은 다 됨, 하지만 Nvidia ㅡㅅㅡ)
  3. 저장소와 커뮤니티 규모가 클 것(우분투 기반이니 문제 없따.)
  4. 레퍼런스 배포판일 것(데비안, 우분투, 페도라)
  5. 안정적이면서 가능한 최신 소프트웨어를 제공할 것(페도라가 생각나지만 apt랑 pacman에만 익숙해진 나..)
  6. Snap 없음(우분투는 아웃)

 

이렇게 해서 부합한 배포판이 Pop!_OS다.

그렇다. 내가 그렇게 써본 것들 중에 지나친 친구.

System76에서 개발한 거라서 Nvidia 지원에는 진심이었다.

Xorg라서 Nvidia GPU도 잘 되고, HiDPI를 자체적으로 지원하니까 일석이조.

그때 걸렀던 이유가 22.04여서 그랬는데, 다시 생각해 보니 큰 문제는 없었던 것 같다.

왜냐면 27년 4월까지 지원해서 아직 기간이 남았고, 그래도 최신 소프트웨어는 받을 수 있으니.

Gnome(Cosmic이지만 gnome 튜닝한 거)이지만 UI가 좀 못생겼다 뿐이지 나머진 만족했던 배포판이다.

왜? DE 정도는 내 입맛대로 꾸미면 되니까!

 

결론

해서.. Pop!_OS로 넘어가려 한다. 아치 좋아요 좋은데 나한텐 과해.. 신경을 덜 쓰고 싶은 배포판을 원했기에 위 배포판으로 추린 거다. 말 나온 김에 AVR도 기회가 되면 세팅방법도 올려보겠다.

그래서 리눅스 누구한테 추천하냐고? 음... 본인이 알지 않을까?

 

 

 

 

 

+ Recent posts