이 글의 목적은 외부에 있는 오라클 DB에 ODBC를 이용하여 접근하기 위한 세팅이다.

오라클은 뭘해도 귀찮다.역시 독보적인 기업이란 것의 이름만큼 독단적인 면이 있는 것 같다.
MFC에서 지원하는 쉬운 ODBC세팅들을 바로 이용할 수 없고 Oracle 서버와 연동하기 위한 Instant Client Package를 설치해야한다. Basic 패키지, ODBC 패키지 두번이나 설치해야 MFC에서 ODBC를 이용하여 개발이 가능하다.

물론, OCI(Oracle Communication Interface)를 이용한 가장 빠른 방법이 있지만 개발 시간이 더 걸리기만 하는 불필요한 작업인 것 같다. DB활용도가 높은 편이 아니다면 역시 쉬운 ODBC 강추, 나중에 DB교체도 쉽기 때문에 ODBC로 개발하기로 하였다.

예전에는 Oracle Client를 깔아야만 오라클과 연동이 가능하였지만 현재는 Instant Client만으로도 쉽게 접속이 가능하다. 하지만 관련자료가 조금(?) 부족해서 힘들었다.



1. Instant Client 의 다운로드

다운주소 : http://www.oracle.com/technology/tech/oci/instantclient/instantclient.html

  • instantclient-basic-win32-11.1.0.7.0.zip (46,734,555 bytes)
  • instantclient-odbc-win32-11.1.0.7.0.zip (728,899 bytes)

  위의 두 파일을 공통된 폴더에 압축을 푼다. 기본적으로 위의 버젼일 경우에는 instantclient_11_1 을 기준으로 풀리게 되어있다. 나중에 환경변수 설정을 용이하게 C:\Oracle\instantclient_11_1 로 해제하여 모아두었다.


2. 오라클 ODBC 드라이버의 설치

  odbc_install.exe 파일을 클릭하면 쉽게 ODBC드라이버가 자동으로 설치된다. 실패할 경우에는 dll 파일이 정상적으로 존재하는지 확인하고 부족하다면 새로 다운 받아 설치하자.

  설치 후엔 ODBC드라이버에서 아래와 같이 "Oracle in instantclient_11_1" 이 뜨는지 확인하면 설치완료.
  ( 제어판 > 관리도구 > 데이터원본(ODBC) > 드라이버 )

Oracle ODBC 드라이버



3. 환경변수 설정

  basic 패키지를 사용하기 위해서는 환경변수의 설정이 필요하다. 윈도우 환경변수 설정란으로 들어가서 아래와 같이 설치된 위치를 적어주자.

  • Path                   C:\Oracle\instantclient_11_1
  • NLS_LANG           KOREAN_KOREA.AL32UTF8
  • ORACLE_HOME    C:\Oracle\instantclient_11_1
  • TNS_ADMIN         C:\Oracle\instantclient_11_1


4. tnsnames.ora 설정

  tnsnames.ora는 PC에서 Oracle로 붙기 위한 설정 파일이라고 생각하면 된다. 아래의 샘플을 보고 자신의 서버에 맞게 세팅하자. 아래의 설정은 외부서버에 접속하기 위한 기본세팅.

 ORCL=
 (DESCRIPTION=
  (ADDRESS_LIST=
   (ADDRESS=(PROTOCOL=TCP)(HOST=아이피)(PORT=포트))
  )
  (CONNECT_DATA=
   (SERVER=DEDICATED)
   (SID=SID네임)
  )
 )

5. ODBC의 추가

  위의 ORCL은 tnsnames.ora에서 사용하는 이름이다. 이것을 ODBC에서 실질적으로 사용하는 시스템DSN으로 바꾸기 위해서 ODBC를 추가해준다. 기본적으로 시스템에서 사용하기 때문에 시스템DNS에 아래와 같이 새로 추가한다.

ODBC Oracle


6. 사용하기

사용하기는 쉽다. 역시 생각되로 그냥 CDatabase 로 ODBC 프로그래밍을 한다면 쉽게 처리가 된다.
자세한 정보는 인터넷 검색-ㅅ-;


2009/11/04 12:07 2009/11/04 12:07
말도 안되는 에러가 발생했다.
딱 2시간 전에도 컴파일 되던 동일한 프로젝트가 VS2008에서 에러가 발생한 것이다.
에러메시지는 아래와 같다.

'cmd.exe'을(를) 생성하는 동안 오류가 발생했습니다.

살다가 저런 오류는 본 적도 없다.
여러 사이트를 검색 후 찾은 것은 두가지의 해결방법!



1. 매니페스트(Manifest)의 사용으로 발생 가능
프로젝트 속성 > 매니페스트 도구 > 입력 및 출력 >패니페스트 포함 > 아니요
'예'를 '아니요'로 변경하면 다시 컴파일이 가능하다.



2. 환경변수의 변경

아마도 원인은 NSIS일 것이라고 생각된다. 이후 변해버렸다고 하는 사람들이 몇명 있다.

%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Program Files\Microsoft SQL Server\90\Tools\binn\;C:\\Program Files\\Microsoft Visual Studio 8\\Common7\\IDE;C:\Program Files\TortoiseSVN\bin;C:\Program Files\NSIS;

위와 같이 VS8의 주소란에 \\으로 되어있어서 제대로 파싱을 못 하는 경우가 있다. 이 경우에는 아래와 같이 \\을 \로 변경하면 정상적으로 컴파일이 된다.

%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Program Files\Microsoft SQL Server\90\Tools\binn\;C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;C:\Program Files\TortoiseSVN\bin;C:\Program Files\NSIS;


아직도 이 현상의 범인은 알 수가 없지만 새로운 에러 상황에 대한 대처로는 충분할 것이라고 생각한다.

2009/11/02 19:58 2009/11/02 19:58
일단 시작하기 전에 이 글은 MFC의 다이얼로그의 Picture Control로 OpenCV를 이용해서 캠 영상을 뿌리기 위한 방법을 알려주는 글입니다.^^v 쉽게 말해서~ 초보용입니다!!

OpenCV의 설치는 했으니 이제 캠과 컴퓨터를 연결해주는 아주 생각만 해도 어렵고 복잡해 보이는 일을 처리해야된다. 하지만 이런 작업들도 OpenCV 라이브러리에 다 들어있다고 하니 cvcam , 이름만 들어도 두근두근 거리게 멋지군!

나도 중간에 안 사실이지만 OpenCV 1.1부터는 cvcam이 사라지고 highgui 속에 포함된다!
다시 말해서 cvcam.lib 는 더이상 없고 함수명도 조금 달라졌다.


1. MFC 프로젝트의 생성

학교에서 지원해주는 Visual Studio 2008(VS는 너무 비싸다, 지원해주는걸 써야지^^;)을 이용해서 간단한 MFC  프로젝트를 생성한다. 그리고 프로젝트 속성에서 추가 라이브러리로
cv.lib cxcore.lib highgui.lib

을 추가한다.

OpenCV 프로젝트 설정 - 라이브러리 추가



2. stdafx.h 파일 수정



기본적으로 OpenCV를 위한 필요한 헤더 파일을 추가한다.

3. UI의 제작

.rc 파일을 수정하여 자신이 사용할 다이얼로그의 디자인을 구성한다.

간단한 UI 구성



4. MediaGestureDlg.h 헤더파일 수정


위의 멤버변수 및 함수를 추가하여준다. 위의 변수들은 m_thread 는 OpenCV를 이용해서 실시간으로 캠으로부터 이미지를 캡쳐해내기 위한 변수이고 m_msgLog 는 로그용, m_pCameraWnd는 픽처컨트롤용 핸들이다.

위에 것이 이해가 안된다면 MFC 공부하러 고고씽!!

5. MediaGestureDlg.cpp 파일 수정

BOOL CMediaGestureDlg::OnInitDialog() 속에 기본적으로 핸들값과 기본설정을 한다.


위의 소스는 쓰레드의 생성과 중지이기 때문에 쓰레드 관련해서 조금만 공부하면 쉽게 이해가 될 것이기 때문에 또 간단하게 넘어가고 제일 중요한 OpenCamera() 함수이다. ManageThread에도 존재하고 있는데 여기서 무한루프를 돌기 때문제 짧고 건조하게 짜주는게 좋지 않을까?

하지만 영상처리! 조금씩 쓰다보면 복잡해진다. 헛소리 그만하고 OpenCamera는 다음과 같이 작성한다




위의 소스에서 AddLog()는 개인적으로 필요해서 사용하는 함수이기 때문에 무시해도 된다. 기본적인 내용은 OpenCV의 내용과 동일하기 때문에 따로 설명할 것은 없다.

다음으로 소스의 가장 위쪽에 부모 파라미터 포인터 자식포인터를 위해서 아래와 같이 define문을 선언한다.



그리고 마지막으로 다이얼로그가 종료될 때 쓰레드도 함께 종료시킬 수 있도록 DestoryWindow를 재정의한다.



이렇게만 하면 아래처럼 정상적으로 프로그램이 작동하게 된다. 참 쉽죠잉~!

하지만, 이제부터 본격적인 영상처리의 입문인게요!! 푸하하하!!!

OpenCV를 이용한 다이얼로그



그리고 정말 마지막으로 허접한 위의 소스를 다운 받고 싶은 분은 아래의 링크를 눌러주세요!!



위의 소스는 OpenCV설치하기 에 적힌 것처럼 OpenCV를 사용하기 위한 설정을 마쳤다면 컴파일 하였을 경우 바로 실행될 것이다. 참고로 Visual Studio 2008로 제작하였다.

2009/06/12 00:02 2009/06/12 00:02
이제 본겨적으로 개발모드로 들어가기 전에 소스 관리 등을 위한 윈도우 개발환경을 구축할 필요가 있었다. 지금 깔아둔 것이라고는 학교에서 제공되는 Visual Studio 2008 ... 

소스관리가 필요하다. 나 같이 만들다가 갑자기 막 뜯어고치고 실패했을 때, 돌아가지 못하는 상황은 종종 발생된다. 그리고 끝도 없이 Ctrl + z 만 누르고 있다. 이제 그런 생활은 안녕! 소스관리모드 돌입!

 

1. VisualSVN  설치

역시 소스관리에서 제일 유명하신 Subversion을 설치할 예정인데 Apache 깔고 이럴러면 일이 너무 많기 때문에 한방에 해결해주는 VisualSVN Server로 결정!

재미있는 것이 VisualVCN Client는 유료인데, Server는 무료다.
Download : http://www.visualsvn.com/server/

부담없는 용량 약 4M의 프로그램을 다운 받아서 설치!

VisualSVN Server 



 

2. TortoiseSVN 설치

Subversion의 유명한 GUI 클라이언트 프로그램인 TortoiseSVN을 설치한다. 이 녀석은 윈도우의 쉘(explorer) 확장 프로그램으로 탐색기 팝업 메뉴에서 Subversion 작업을 할 수 있게 도와준다.
Download : http://tortoisesvn.net/downloads
한글언어팩 : http://tortoisesvn.net/translation_release_gui

위의 주소에서 부담없이 받을 수 있다. 역시 오픈소스 사랑해요! 

설치를 완료하면 재부팅을 요구한다. 귀찮게 하지만 작업관리자-Task Manager(Ctrl+Alt+Del)로 들어가서 쉘(explorer.exe)만 종료한 뒤 프로그램을 시작할 수 있다. 언어팩은 귀찮으니깐 패스!

 

3. 저장소(Repository) 만들기

저장소는 VisualSVN으로도 만들 수 있고 TortoiseSVN을 이용해서도 만들 수 있다. 아래의 이미지를 참고해서 편한 스타일로 만들도록 한다. 어차피 현재(2009.05.26) 저장소를 만들 때, 기본적인 파일시스템(Native FS, FSFS)의 방법으로 만들어졌다.

아래의 이미지는 MediaGestures 라는 프로젝트를 위한 저장소이다.

저장소 만들기 using TortoiseSVN



저장소 만들기 using VisualSVN Server
 

4. 저장소(Repository)의 설정

만들어진 저장소 안의 conf 디렉토리안에 설정과 관련된 파일들이 존재한다.


  • svnserve.conf : svnserve를 사용한 저장소 서버를 구성할 때 사용

  • passwd : svnserve에서 사용되는 사용자 ID/PW

  • authz : svnserver, Apache에서 사용, 접근 권한 설정 파일


하지만 이런 설정을 Linux도 아닌 윈도우에서 GUI없이 한다는 것은 매우 불편하다. 그래서 역시 VisualSVN Server를 사용해준다.  Properties 로 들어가서 간단하게 필요한 User를 추가해주면 알아서 자동으로 된다. 자세한 것은 알려하지 말자 머리아프다.

authz 설정은 Hooks 항목에서 설정할 수 있다. 필요하면^^;

SVN 유저설정
 

5. 저장소(Repository) 기본 디렉터리 생성

기본적으로 필요한 trunk, branches, tags 디렉터리를 생성한다. VisualSVN Server로 저장소를 만들 때 기본으로 함께 만들 수도 있다.

기본 디렉터리 생성





  • trunk : 개발이 이루어지는 디렉터리


  • branches : 프로젝트 안의 작은 프로젝트


  • tags : 릴리즈 버젼 보관 장소


6.  SVN에 접속하기

TortoiseSVN을 이용해서 SVN에 접속할려면 바탕화면에서 오른쪽 클릭 -> TortoiseSVN -> Repo-Browser을 클릭하고 URL(VisualSVN Server에 적힌 주소를 사용하면 된다) 입력하면 접속할 수 있다.

SVN 연결된 모습 



7. 프로젝트 Import 하기

저장소로 프로젝트를 Import하여 이제 사용하는 방법을 알아본다. 간단하게 탐색기에서 임포트할 프로젝트를 SVN > Import 하면 된다.

Project Import 


프로젝트 임포트 화면


프로젝트 임포트 중



 

8. SVN Checkout 으로 프로젝트 받기

이제 거의 끝났다. SVN에 있는 프로젝트를 받아서 바뀐 파일들을 쉽게 파악할 수 있도록 SVN Checkout을 클릭해서 원하는 위치로 받는다. 그럼 아래의 화면처럼 v(체크)표시는 바뀌지 않은 것들이고 !(느낌표)는 수정된 파일이기 때문에 commit이 필요하다는 것을 의미한다.

SVN checkout 완료



아.. 힘들다. 오늘은 여기까지 SVN을 본격적으로 사용하는 것은 다음 번에 생각하고 일단 여기까지 만족!
2009/05/26 16:33 2009/05/26 16:33
 졸업작품으로 영상처리 구현을 할 필요가 있어서 생판 첨해보는 영상처리를 당장 이번에 오는 월요일까지 만들어내야만 했다. 일단 간단한 프로토타입 프로그램이라도 만들어내라니깐 빨리 만들기 위해서 영상처리 관련 정보를 찾다보니 제일 많이 걸리는 것이 OpenCV였다.

 솔직히 내가 사용하는 것이 어디서 만들던 그런 것은 중요한 것이 아니다.  제작해주신 많은 오픈소스 업체와 관련자 분들께 죄송합니다 (__) 꾸벅, 어쩔 수 없잖아. 바쁜데 ㅠㅠ
Download : http://sourceforge.net/projects/opencvlibrary

위의 주소에서 일단 OpenCV 라이브러리를 다운 받는다.  역시 윈도우가 이런 면에서 편한 것 같다. 부담없이 윈도우용으로 패키지 된 OpenCV_1.1pre1a.exe (오늘 2009.05.15) 을 다운 받아서 바로 설치하였다.

[ Visual Studio 6.0 설정]

1. VS6.0 Option 설정 (한번만 하면 됨!)

1) Tools > Options > Directories(탭) 을 선택한다. 그리고 아래와 같이 Show directores for: 의 값을 Include files로 선택한다.

#01 VS6.0 Option 설정 - Include files 

그리고 아래의 값들을 추가시켜준다.
"C:\Program Files\OpenCV\cv\include"
"C:\Program Files\OpenCV\cxcore\include"
"C:\Program Files\OpenCV\otherlibs\highgui"
"C:\Program Files\OpenCV\cvaux\include"
"C:\Program Files\OpenCV\otherlibs\_graphics\include"

2) Show directores for: 의 값을 Library files

#02 VS6.0 Option 설정 - Library files

위의 화면처럼 아래의 값을 추가하여준다.
"C:\Program Files\OpenCV\lib"

3) Show directores for: 의 값을 Source files
"C:\Program Files\OpenCV\cv\src"
"C:\Program Files\OpenCV\cxcore\src"
"C:\Program Files\OpenCV\cvaux\src"
"C:\Program Files\OpenCV\otherlibs\highgui"
"C:\Program Files\OpenCV\otherlibs\_graphics\src"

위와 동일하게 설정하면 된다.

#03 VS6.0 Option 설정 - Source files 



2. VS6.0 프로젝트 설정 (OpenCV를 사용하는 프로젝트마다 필요)

#04 VS6.0 Project 설정

Project > Settings > Link(탭) 으로 들어가서 Object/library modules 에
cv.lib cxcore.lib highgui.lib

을 넣어준다. 그리고 이제 프로그래밍을 하면 된다^ㅡ^v

 

3. 간단한 소스




4. 에러(0xc0150002)의 발생

#05 OpenCV 컴파일&실행 중 에러

위의 세팅되로 다 하였지만 에러가 떠버렸다. 이건 뭥미! (-- );

(0xc0150002) 에러의 발생 알아보니 OpenCV_1.1pre1a.exe 버젼의 경우에는 Visual Studio 2005를 기반으로 개발되어있다고 한다.  그래서 DLL 파일 자체게 2005에서 만들어져서 VS6.0에서 사용할 때는 "초기화 할 수 없습니다" 라는 에러를 발생한다.

-0- 너무 최신 버젼(?)이라서 생기는 단점이다. 이를 해결하기 위해서는 아래에 MS사에서 제공되는 패치를 설치하면 해결할 수 있다.

Download : http://www.microsoft.com/downloads/details.aspx?familyid=200B2FD9-AE1A-4A14-984D-389C36F85647&displaylang=en

그렇게 패치까지 하고 나니깐 성공적으로 컴파일이 되었다 :)

#06 OpenCV 이미지 뛰우기 성공

드디어 캠을 통한 영상처리의 첫 발걸음 중... OpenCV를 설치하는 순간이다!
2009/05/15 18:22 2009/05/15 18:22
jtag 케이블이 없는 가운데 일단 ARM기반의 임베디드 시스템에서 사용할 커널을 포팅해보기로 하였다. 정안되면 DWN를 통해서 NAND로 올려버리고 기존에 있는 nand boot으로도 웬지 될 것 같다는 생각이 들어서 시도하였다.

01. 리눅스 커널 다운받기

Ubuntu의 커널 버젼이 2.6.27-11(uname -a로 확인가능)이기 때문에 동일한 버젼의 커널을 다운 받는다.
# wget ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.27.11.tar.gz
# tar xf linux-2.6.27.11.tar.gz

02. 우분투에서 커널 컴파일을 위해서 필요한 것!
# sudo apt-get install build-essentials
# sudo apt-get install libncurses-dev

우분투에서 커널 컴파일을 위해서 make menuconfig 를 입력하면 ncurses 라이브러리가 없다는 어처구니 없는 에러가 뜬다. 이를 해결하기 위해서 위와 같이 ncurses 라이브러리를 설치 후 계속 진행한다.

03. 커널 환경설정

먼저 Makefile을 자신의 크로스 컴파일 환경에 맞게 수정하여 준다.
# vim Makefile
// ARCH ?= 쪽 아래에 입력하여줬다.
ARCH = arm
CROSS_COMPILE = arm-linux-

환경설정 후 자신의 프로세서에 맞는 커널환경을 설정하여준다.
# make s3c2410_defconfig
# make menuconfig

위의 명령어로 커널의 환경을 설정할 수 있다. 이건 리눅스 커널 컴파일의 기초이지만 나는 잘 모른다. 이런 나와 사람들을 위해서 기본적인 환경설정 파일들이 존재한다. arch/arm/configs/ 디렉토리 안에 각 프로세서들을 위한 기본설정이 존재하는데 내가 사용하는 s3c2410 프로세서를 위한 파일 또한 존재한다. 이 기본설정을 불러오기 위해서 make s3c2410_defconfig 명령을 사용한다.

04. Machine ID 설정

처음에 포팅하는 중에는 Machine ID설정을 하지 않아서 아래와 같이 머신ID 오류가 발생했다.

MachineID Error



이를 수정하기 위해서 arch/arm/tools/mach-types.h 파일을 수정한다. 나의 SMDK2410 경우에는 0x0000000a 라고 나오니  mach-types.h 파일에서 정의된 SMDK2410의 값을 다음과 같이 수정하였다. 머신ID값은 부트로더에서 설정한 값과 같아야 한다.
...
smdk2410 ARCH_SMDK2410 SMDK2410 10
...

05. 커널 컴파일 하기
# make clean // 기존의 만들어진 오브젝트 및 임시파일들의 삭제
# make zImage

위의 단 한줄의 명령어로 커널을 만들어 낼 수 있다. 컴파일 후 커널이미지는 arch/arm/boot/zImage 위치하게 되는데 zImage 를 NAND로 올려주고 nand boot와 함께 연결 시켜주면 성공적으로 리눅스 커널이 올라갈 줄 알았는데!!!

06. 커널 올리기

SMDK2410 에서 기본적으로 제공하는 USB Downloader 프로그램을 이용해서 NAND에 커널을 올려서 테스트 해보았다. 이건 뭐 간단하니깐 말로만 설명하자면...

420loader.bin 을 0x30100000 에 올리고 zImage 를 0x30104000 에 올리고 420writer.bin 으로 NAND 에 써주면 된다^^; (너무 간단한가?)

하지만!

역시 커널에 특별한 설정없이 기본값만으로 돌리기에는 아직 무리이다. 커널패닉.

Kernel Panic



위의 화면처럼 VFS 실패로 인한 커널 패닉이 발생하였다. 하지만 힘드니깐 오늘은 여기까지!

일단 어떻게 수정하면 되는지 자료도 있고 하니 오늘은 여기까지 하고 쉬어야겠다. 어려워...^^;
2009/03/24 19:18 2009/03/24 19:18
가장 흔히 쓰인다고 하는 U-Boot (the Universal Boot Loader) 은 현재 Denx에서 계속 개발 및 배포가 이루어지고 있다.

현재 가장 쉽게 쓰이고 많은 보드들을 지원한다고 생각하면 편할 것 같다. 물론 보드 구입시 지원되는 부트로더가 있다면 매우 편리하게 개발할 수 있겠지만 나처럼 없는 가난한 이들은 가장 보편적인 것이 최고이지 않을까?

01. U-Boot 다운로드 및 압축해제
U-Boot 다운로드 : ftp://ftp.denx.de/pub/u-boot/

# tar xjf u-boot-2009.01.tar.bz2  // 현재 가장 최신 버젼

02. U-boot 기존 설정 지우기

원래는 필요는 없지만 기존의 설정이 남아있을 경우를 대비하여 기존 설정을 삭제한다.
# make distclean

03. U-Boot 의 환경설정
만약 ELDK 툴체인을 설치하지 않았다면 Makefile 을 열어서 자신의 개발환경으로 바꿔줄 필요성이 있다.

U-Boot은 현재 다양한 보드들을 기본적으로 지원하고 있어서 내가 사용중인 SMDK2410 보드도 기본설정에 있다. 그래서 편리하게 바로 설정을 사용하면 된다. 만약 보드 정보가 없다면 자신의 보드 스펙을 보고 기존의 보드의 파일을 복사하여 새로 생성해서 사용해야 할 것이다. (하지만 복잡하고 어려우니깐 일단 패스! ... 어차피 Nand Boot용 U-Boot을 만들어야되서 머리가 아프다.)
# make smdk2410_config

위의 명령어처럼 make 보드명_config 라고 적어주면 된다.

04. U-Boot 빌드하기

지금까지 성공적으로 진행하였으면 이제 실제로 부트로더로 올릴 uboot.bin 파일을 만들어보자
# make all

그냥 make 만 하여도 빌드하지만 이왕이면 확실하게! 기나긴 빌드가 끝나면 uboot, uboot.bin 등의 파일이 생성되어있다. uboot.bin 파일을 jtag 케이블을 이용해서 자신의 보드에 써주면 모든 과정 끝!

하지만!!

나는 jtag 케이블이 없다. 그래서 결심했다. Nand Boot용 U-boot 만드는 법을 찾아내기로... 과연 임베디드에 관한 지식이 전무한 내가.. 만들어낼 수 있을 것이다. 왜냐! 하면 되는거다!

해도 안되는게 있을 것인가? 자료가... 너무나 없고, 어렵다. 어렵다. 어렵다. 일단 jtag케이블을 만들어서-_- 사용하는게 더 좋을지도?
2009/03/17 20:25 2009/03/17 20:25
각 툴체인들이 컴파일 할 때 에러를 유발할 수도 있고 안 할 수 도 있다는 사실은 몸으로 약 U-boot의 컴파일을 위해서 5시간동안 투자해서 알아냈다-_-; 그래서 Das U-Boot과 함께 배포되는 ELDK패키지를 설치하면 절대로 U-boot의 컴파일 과정 중 에러가 없을 것이라는 확신을 가지고 ELDK 패키지를 설치하였다.

- U-Boot 과 크로스 컴파일러 궁합 관계

  • u-boot-1.0.0 : gcc 2.95.3

  • u-boot-1.1.2 : gcc 3.x

  • u-boot-1.1.6 : gcc-4.x


나는 최선버젼으로 하니깐 당연히 gcc-4.2 버젼이 탑재되어있는 ELDK 고고!

01. ELDK(Embedded Linux Developemnt Kit) 다운로드

위의 경로를 통해서 iso 파일을 다운로드 하여 설치하도록 하자.

02. ELDK 이미지 마운트

VMware에서 iso에 마운트 시키면 자동으로 /cdrom 으로 잡하니 걱정없이 쉽게 성공! 혹은 mount 명령어를 이용해서 다음과 같이 설정할 수도 있다.
# mount -t iso9660 -r  -o loop arm-2006-0116.iso /mnt/cdrom

03. ELDK 설치

설치를 위해서는 install 프로그램을 사용하는데 간단하게 아래와 같다.
# ./install -d /usr/local/arm

-d 옵션을 통해서 설치를 원하는 폴더를 지정하면 된다. 개인적으로 처음 공부할 때 /usr/local/arm 를 기준으로 해서 웬지 모르게 거기에 있어야지 마음이 편안하다.

04. ELDK 환경 설정

물론 안하고 사용해도 되지만 난 귀찮은 것을 딱 싫어하기 때문에 2가지를 설정한다.
# vi ~/.bashrc
$ export CROSS_COMPILE=arm-linux-
$ export PATH=$PATH:/usr/local/arm/usr/bin:/usr/local/arm/bin

위의 텍스트처럼 CROSS_COMPILE 이란 변수를 지정하면 임베디드 개발 중 Makefile에 따로 선언해 줄 필요가 없다. 그리고 PATH를 설정해서 어디서나 arm-linux-gcc 가 되도록 설정한다. (귀찮으니깐-_-)

05. arm-linux-gcc 확인

기본적으로 arm-linux-gcc -version 을 입력해서 정상적으로 버젼이 뜨는지 확인하면 설치 완료!

...

참 쉬운 설치방법이다-_-; 이렇게 하면 성공적으로 u-boot을 컴파일 할 수 있다. 하지만!! 나에겐 jtag이 없다. NAND Boot을 통해서만 가능하기 때문에 아마... u-boot을 nand boot 버젼으로 새로 수정해야할 듯하다. 그런거 모르는데...

또 공부할게 생긴건가? 언제쯤 u-boot 올리고 커널도 올려볼까?
2009/03/11 16:49 2009/03/11 16:49
1. 우분투 리눅스 설치

어제까지 힘들게 윈도우로 DNW 연결한 후에 바로 임베디드 리눅스 개발을 위한 환경 구축에 들어가기로 했다. 일단 내가 사용중인 VMWare 에 Ubuntu를 설치하였다. 우분투 선택의 가장 큰 이유는 리눅스답지 않은 예쁜 인터페이스?

Ubuntu Screenshot



2. Toolchain 만들기

Toolchain이란 개발에 필요한 여러가지 컴포넌트의 묶음을 뜻한다. 결국 Toolchain 이란 임베디드 프로그래밍을 위한 통합환경을 의미한다고 생각하면 간단한 의미이다.

  • gcc : GNU C Compiler 선행처리, 컴파일, 어셈블리, 링커의 전 처리기
  • as : GNU assembler 어셈블러 언어를 목적 코드로 변경
  • ld : GNU linker 목적 파일 결합, 참조 해결, 심볼 위치 변경
  • binutils : GNU에서 만든 각종 기본 유틸리티

    • ar : 목적 파일 어카이빙 (라이브러리 생성)
    • nm : 심볼 이름 따내기
    • ranlib : 어카이빙 색인 생성
    • size : text, data, bss 크기 확인
    • strip : 심볼제거 (어플의 크기를 현저히 줄일 수 있음)


  • make : 파일 의존성을 시간에 따라 검사, 필요한 목적파일만 생성하는 빌드
  • Makefile : make 프로그램이 프로그램을 빌드하기 위해 사용하는 입력파일
  • gdb : GNU debugger 강력한 디버깅 도구

각 컴포넌트들은 제목을 클릭하면 최신버젼으로 다운 받을 수 있다. (귀찮아서 binutils만-_-) 물론 각 프로세서마다 또 개발 환경에 따라서 버젼이 달라질 수 있는데 그 때는 GNU사이트에 직접 들어가서 찾아서 받으면 된다.

물론 귀찮을 땐, 공식 ARM 리눅스 배포판 : cross-3.2.tar.bz2, cross-3.0.tar.bz2 , cross-2.95.3.tar.bz2

개인적으로 한방에 해결하는 것을 좋아하니깐 cross-3.2.tar.bz2 를 바로 다운받아서 설치하도록 하겠다.
후에 알게 된 사실이지만 엄청나게 많은 Toolchain 들이 있고 각 컴파일러에 따라서 되었다가 안되었다가 하는 사태들이 발생하였다. 간단하게 U-boot을 컴파일하기 위해서도 정말 많은 실패를 겪었다. T-T 결국 마지막으로 선택하게 된 것은 Das U-boot과 함께 Denx사이트에 올라와 있는 ELDK 이다.

ps. EABI 툴체인도 성공적으로 컴파일 되었다.

ps2. 툴체인 패키지 유행(?)을 쫓아가기 위해서라도 포럼에서 좀 이야기하고 정보를 꾸준히 얻어야할 필요성이 있는 것 같다. (http://kelp.or.kr)


arm-linux-gcc -v 을 입력 후 gcc version 3.2 라는 화면을 볼 수 있으면 크로스-툴체인을 성공적으로 설치한 것이다.

3. 네트워크 환경 설치



  • xinetd : xinetd가 관리중인 포트로 접근이 들어오면 규칙에 따라 특정 서버 프로세스로 전송
  • tftpd : 이더넷을 이용한 파일 송수신 프로토콜(udp이용)
  • minicom : 시리얼 포트를 통한 개발을 위한 프로그램
  • build-essential : 종속관계 패키지 : g++, g++4.2, libstdc++6-4.2-dev


4. tftp 설정



그리고 마지막으로 minicom 을 설정하면 된다. minicom 설정은 다음의  PDF파일을 참고하면 될 것이다.

주변에 사람들이 임베디드 리눅스 관련자료는 많다고 해서 공부하기 쉬울거라고 했지만... 자료는 많지만 정리되지 않고 이해되지 않은 상태에선 역시나 뭐든지 어렵다. 또한 임베디드 관련자료는 말 그대로 프로세서마다 리눅스 커널마다 다 조금씩 다르다.

기본은 같겠지만 기본으로 공부하기 위해서 시작하는 나와 같은 사람들에겐 완전 힘든 일이다. 적어도 이 글이 SMDK2410보드로 공부하는 사람들에게는 조금만이라도 도움이 되길 바란다.

ps. 막상 설치 다 해놨는데... 정작 Serial 포트가 없어서 DNW 통해서 U-Boot를 올려서 사용해야 할 듯하다. 어째튼 정말 고생했다. 동근-_-;
2009/03/09 17:36 2009/03/09 17:36
삼성에서 제공하는 S3C2410X 문서에 보면 2장에 있는 TOOLKIT AND DEVUGGING 과 관련된 내용이다. 솔직히 영어로 나온게 어렵고 또 이상하게 잘 안되는 부분들 때문에 짜증 살짝 났다-_-; 그리고 처음 접하는 임베디드 .. 어렵다. 어려워!

1. 물리적인 케이블 연결

Serial 포트, USB포트들을 컴퓨터와 연결한다. (Serial 포트가 없으면 Serial-to-USB포트 구입 사용가능)

2. OM 스위치 변경

DNW와의 접속을 위한 부트모드를 NAND BOOT에서 WORD(32-BIT)모드로 바꾼다. (OM0:0, OM1:1)

SMDK2410 OM Setting



위의 사진처럼 OM스위치를 OM1의 값만 1로 변경시켜주면 NAND BOOT가 아닌 SMDK2410의 기본 부팅을 할 수 있게 된다.

3. DNW 프로그램의 실행

프로그램은 기본적으로 SMDK2410과 함께 들어있는 DNW를 이용하여 USB Downloader를 사용할 수 있다. 하지만 이를 사용할 때 보드와 USB로 연결되는데 이를 위한 드라이버가 따로 필요하다. secbulk.sys 인데 만약 기존에 설치한 경험이 있다면 c:\windows\system32\drivers 로 파일을 교체하여 주면 된다. 처음 이용할 때는 보드 전원을 켰을 때 하드웨어를 찾을 때 secbulk.sys와 sysbulk.inf 파일이 있는 폴더를 선택하여서 설치하여 주면 된다.

(하지만 처음에 이상하게 잘 안되었다. 아마 2번과정 전에 DNW부터 연결시켜서 해본다고 드라이버를 제대로 인식하지 못한 것 같다. 꼭 OM스위치 설정을 하고 DNW와의 연결 실험을 하는 것이 좋을 것 같다.)

Serial Port -> Connect 를 클릭 후 2410보드의 전원을 넣으면 아래와 같은 화면이 뜬다.

DNW 실행 모습



이게 바로 힘들게 실행시킨 DNW의 실행화면-_-.. 솔직히 혼자서 한다고 엄청 어려웠다. 스승이 필요해~~

4. 2410TEST.bin 의 다운로드

대충 DNW를 이용해서 보드와 컴퓨터간의 연결을 성공시켰으니 이번에는 테스트롬으로 올라와 있는 2410TEST.bin 파일을 다운로드 해보기로 했다.

SMDK2410보드와 함께  제공되는 CD안의 Images 중 SMDK2410_test.bin을 전송하기 위해서 먼저 다운받을 곳의 주소를 설정한다.

  1. Configuration -> Options를 클릭한 후 USB Port 항목중 Download Address 의 값을 0x30000000으로 변경.

  2. USB Port -> Transmit -> Transmit를 클릭 후 SMDK2410_test.bin 파일을 선택.

  3. 자동으로 Downloading


2410test.bin



위의 이미지처럼 다운로드 된 프로그램이 실행된다. 힘들었다. 솔직히 이렇게 다운받은 이미지를 NAND 메모리로 탑재하는 법도 모르겠고 아직은 완전 백지다-_-;
답이 없네...

그대로 어쩌다가 많은 정보를 알게되었다. 솔직히 연구실에 안 왔으면 이런 공부 시작이나 할 수 있었을까? 언젠가 대기업 다니는 애들보다 돈 많이 버는 중소기업 다니는 직장인이 되어버리겠다... (벌써 대기업의 꿈은 날아간건가... 에휴...)

사실 위에 내용까진 연구실에서 진행하던 Single-i 프로젝트 덕분에 어쩌다가 익히게 되었다. 앞으로는 이제 정말 새로운 세계와 함께 하겠군.. 재미있을 것 같애 +_+ 지금부터가 정말 시작이야!

다음은 ARM MULTI-ICE를 이용한 ARM DEBUGGER에 관한 공부인가? 덜덜...
2009/03/05 21:03 2009/03/05 21:03