$ uname -m
x86_64

$ uname -mnr
hostname  2.6.18-164.el5 x86_64
 

$ lsb_release -a

 LSB Version:    :core-3.0-ia32:core-3.0-noarch:graphics-3.0-ia32:graphics-3.0-noarch
Distributor ID: CentOS
Description:    CentOS release 4.7 (Final)
Release:        4.7
Codename:       Final

'c or linux' 카테고리의 다른 글

TOP 을 통해 본 리눅스 메모리  (0) 2012.01.06
Swap 메모리  (2) 2012.01.05
ubuntu 패스워드 변경  (0) 2011.11.23
Ubuntu 11.04 패스워드 분실시 처리  (0) 2011.11.15
ubuntu를 한국에서 빨리 다운받을 수 있는 곳  (0) 2011.11.08
Posted by '김용환'
,

 

과거에 임베디드 시스템을 개발 및 포팅할 때는 컴파일과 업로드(버닝) 이렇게 두가지를 사용했다. 컴파일할 때는 크로스 컴파일러 쓰고 업로드할 때는 따로 하드웨어 업체(삼성, LG)에서 준 툴을 이용해서 업로드 했다. 이번에 아두이노를 분석해가면서 avrdude 라는 파일을 처음 보게 되어서 공부차 작성해 본다. 

avrdude는 AVR 마이크로 콘트롤러에 ROM과 EEPROM 이미지를 업로드하는 유틸리티이다. “http://www.nongnu.org/avrdude/” URL에 따르면, Braian S. Dean이라는 사람이 AVR 마이크로 시리즈를 위한 in-system 프로그램 프로젝트중의 하나였다고 한다.처음에는 FreeBSD에 포팅했었고 다양한 운영체제서도 동작하기를 원하는 요구사항이 있어서, 싸이트(http://savannah.nongnu.org/projects/avrdude)를 오픈하고 사람들이 접근해서 쓸 수 있도록 하였다.

아두이노 및 다른 ISP칩셉에 연동이 가능하다. 그 이유는 설정파일 (avrdude.conf)을 가지고 할 수 있다.

<http://savannah.nongnu.org/projects/avrdude>

image

 

기능을 알기 위해서 살펴본다.

>avrdude
Usage: avrdude [options]
Options:
  -p <partno>                Required. Specify AVR device.
  -b <baudrate>              Override RS-232 baud rate.
  -B <bitclock>              Specify JTAG/STK500v2 bit clock period (us).
  -C <config-file>           Specify location of configuration file.
  -c <programmer>            Specify programmer type.
  -D                         Disable auto erase for flash memory
  -i <delay>                 ISP Clock Delay [in microseconds]
  -P <port>                  Specify connection port.
  -F                         Override invalid signature check.
  -e                         Perform a chip erase.
  -O                         Perform RC oscillator calibration (see AVR053).
  -U <memtype>:r|w|v:<filename>[:format]
                             Memory operation specification.
                             Multiple -U options are allowed, each request
                             is performed in the order specified.
  -n                         Do not write anything to the device.
  -V                         Do not verify.
  -u                         Disable safemode, default when running from a scrip
t.
  -s                         Silent safemode operation, will not ask you if
                             fuses should be changed back.
  -t                         Enter terminal mode.
  -E <exitspec>[,<exitspec>] List programmer exit specifications.
  -x <extended_param>        Pass <extended_param> to programmer.
  -y                         Count # erase cycles in EEPROM.
  -Y <number>                Initialize erase cycle # in EEPROM.
  -v                         Verbose output. -v -v for more.
  -q                         Quell progress output. -q -q for less.
  -?                         Display this usage.

avrdude version 5.11, URL: <http://savannah.nongnu.org/projects/avrdude/>

 

아두이노 우노에 이미지를 업로드하려면 다음과 같이 사용하는데, 간단히 보면 다음과 같다.

> avrdude -p atmega328p -P com3 -c arduino -U flash:w:gds.hex:i

   
-p atmega328p    마이크로 프로세서의 타입을 지정한다.
-c arduino 통신 프로토콜을 지정한다.
-P com3 com3 시리얼 포트로 내려받는다.
-U flash:w:gds.hex:i

flash 는 flash memory를 의미
w 는 write를 의미
test.hex = 업로드할 파일
I = Intel 의 hex format을 의미

Posted by '김용환'
,

 

C 소스를 가지고 윈도우에 설치된 체인툴을 가지고 크로스 컴파일을 해보려고 시도했다.

 

소스에 가장 먼저 #define 되어야 하는 부분은 AVR 타입에 대한 정보이다. 만약 이 부분을 넣지 않으면 warning과 함께 컴파일이 되지 않는다. avr/include/avr 디렉토리의 io.h 파일에 정의되어 있다.

….

#elif defined (__AVR_ATmega328P__)
#  include <avr/iom328p.h

….

#  if !defined(__COMPILING_AVR_LIBC__)
#    warning "device type not defined"
#  endif
#endi

 

아두이노 우노(arduino uno) 라면 ATmega328 프로세스를 사용하고 있으므로, 다음과 같이 정의해야 한다.
#define __AVR_ATmega328P__

또는 avr-gcc 실행시 –mmcpu 파라미터값에 atmega328p를 추가해야 한다.

 

아주 간단한 소스를 컴파일하고 업로드하는 것을 해본다.

<test.c>

#define __AVR_ATmega328P__
#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>

int main() {
  // 셋업
  DDRB = 0xFF;

  while (1) {
    PORTB = 0xFF;
    _delay_loop_2(1000;
    PORTB = 0x00;
    _delay_loop_2(1000);
  }
}

 

avr 칩에서 동작하는 바이너리 파일을 만든다.

> avr-gcc -O test.c -o test.bin

 

.text와 .data 파일이 포함하는 .hex 파일을 만든다.

>avr-objcopy -j .text -j .data -O ihex test.bin test.hex

 

.hex 파일을 가지고 아두이노 uno에 업로드를 하면 된다.  [속도(b옵션) : 115200, 보드이름(p옵션) arduino 가 반드시 맞아야 한다.] 보드이름에 대한 자세한 정보는 avrdude.conf에 기록 되어 있음

>avrdude -P com3  -b 115200 -p m328p -c arduino -C../etc/avrdude.conf -F -e -U flash:w:test.hex


Posted by '김용환'
,