포럼 회원으로 등록하신분만 다운로드가 가능합니다. 최대 업로드 가능한 용량은 1GB 입니다.

<< 이솝보드로 AXD 와 H-JTAG 으로 펌웨어 프로그래밍 하기 >>

                                                                        07.05.23 ~ 24 이재명 (이솝 아이디 : kerneld)

0. 이 문서의 목적 및 알림

        고가의 JTAG 디버거 없이 훌륭한 디버깅 환경을 구축하고
        실제로 펌웨어를 이솝보드에 올려 테스트 해볼수 있도록 합니다.

        또한 윤광윤님의 도움으로 위글러 호환 JTAG 없이 이솝보드와 함께 들어있는
        Byte Blaster MV 로도 가능하게 되었고 안정적으로 플래시에 다운로드가 가능하게 되었습니다.
        윤광윤님께 감사의 말씀 드립니다. ^-^


1. 준비물

        - S3C2440 용 모니터 프로그램 소스
                http://manager3.dothost.co.kr/bbs/zboard.php?id=OHM_Co_Data&page=1
                &sn1=&divpage=1&sn=off&ss=on&sc=off&select_arrange=headnum&desc=asc&no=328

                위 링크에서 소스를 받으면 Mon2440 디렉토리가 있는데 그것이 S3C2440 용 모니터프로그램으로
                삼성전자에서 제작한 것입니다.
                아무 수정없이 이솝보드에 올려보니 잘 돌아가서 이걸 기준으로 펌웨어 접근을 하면 쉬울듯 하네요.
                펌웨어 공부하기에 딱 좋은 소스인것 같습니다.

        - ADS 1.2 (ARM Develop Suite v1.2)
                AXD (디버거) 또한 설치 됩니다.

        - H-JTAG 0.4.4 또는 그 상위 버전
                http://www.hjtag.com

                위 홈피에서 최신 버전을 받습니다.
                MULTI-ICE, TRACE32, OPENice 등과 같은 고가의 JTAG 디버거가 하는 일을 소프트웨어로 가능하게
                하는 프로그램이라고 생각하시면 됩니다.

        - Byte Blaster MV
                이솝 3차 보드와 함께 들어있는 JTAG 동글 입니다.

        - 터미널 프로그램
                윈도우즈에 기본 설치되는 하이퍼터미널도 무관하지만 SecureCRT 프로그램을 강추합니다.


2. 준비물들들 모두 설치하고 연결 합니다.


3. AXD 로 실제 디버깅을 해보자

        3.1. 모니터 프로그램 컴파일

                CodeWarrior for ARM Developer Suite (ADS 1.2 에 포함되어 있슴) 를 실행 시키고
                모니터 프로그램의 프로젝트 파일(Mon2440.mcp) 을 오픈 합니다.

                Edit -> DebugRel Settings -> Linker -> ARM Linker 를 선택하면
                우측에 RO Base 가 0x0, RW Base 가 0x33ff0000 로 되어 있습니다.
                이 설정은 컴파일된 바이너리 이미지를 플래시에 구울때 설정이고

                우리는 AXD 로 이미지를 SDRAM 에 올려서 테스트를 할 것이므로 RO Base 를
                SDRAM 시작 번지인 0x30000000 으로 변경 합니다.

                OK 눌르시고
                Project -> Make 를 하여 새로운 이미지를 생성 합니다.

                (당연한 이야기겠지만 플래시에 구우신다면 RO Base 를 0x0 로 바꿔주셔야 합니다.
                RW Base 는 놔두시구요.)

                현재 타겟이 DebugRel 으로 되어 있기 때문에
                모니터 프로그램 소스 디렉토리Mon2440_DataDebugRel 디렉토리에 컴파일된 이미지들이
                생성 됩니다.

                Mon2440.axf 과 uMon2440.bin 이 생성 되는데
                axf 는 AXD 에서 사용 할 수 있는 디버깅 정보가 포함된 이미지 파일이고
                bin 은 디버깅 정보가 빠진 이미지 파일 입니다.

                여기까지 이미지를 만들었으니 AXD 를 사용하기 위해 H-JTAG 을 실행합니다.

        
        3.2. H-JTAG 설정
                Settings -> JTAG Settings 를 선택하시고 Byte Blaster MV 를 사용하기 위해서
                아래와 같이 설정 합니다.
                (위글러 호환 JTAG 동글 있으신 분은 Wiggler 만 선택하시고 OK 누릅니다.)
                        
                        Jtag Selection        : User Defined
                        nTRST output inverted : 체크 해제
                        TMS                   : Pin3  D1
                        TCK                   : Pin2  D0
                        TDI                   : Pin8  D6
                        TDO                   : Pin11 Busy
                        nTRST                 : Pin4  D2
                        nSRST                 : NO SYS RST

                설정 하시고 OK 누른 다음에..

                위쪽 툴바에서 돋보기를 눌렀을 때 ARM920T 가 제대로 나오는지 확인 하시고
                (혹시 안되시는 분들은 sjf2440 툴로 이솝 u-boot 이미지를 구우신 후 해보시기 바랍니다.)
                (저도 처음엔 안되었는데 이상하게 sjf2440 으로 이미지 구운 후로는 잘되네요.)
                (당연히 giveio.sys 는 설치되어 있어야 합니다. giveio.sys 설치 방법은)
                (이솝 홈페이지 -> Download -> 2. JTAG flash write software with documentation )
                (다운 받아 압축을 풀면 giveio.sys 설치 문서 PDF 파일이 있습니다. 이것을 참고 하시면 됩니다.)

                Script -> Auto Init 을 반드시 체그 해줍니다!!
                (이것 체크 안하시면 AXD 제대로 안되고 H-Flash 도 안됩니다.)

                이제 Init Script 를 설정 해야되는데요
                아래 내용을 [원하시는 파일이름.his] 로 만들어 줍니다. 물론 앞에 탭 문자는 제거 하셔야 합니다.
                        
                        DisMMU+++
                        Delay+++10
                        Setmem+32-Bit+0x48000000+0x2045550
                        Setmem+32-Bit+0x48000004+0x700
                        Setmem+32-Bit+0x48000008+0x700
                        Setmem+32-Bit+0x4800000C+0x700
                        Setmem+32-Bit+0x48000010+0x700
                        Setmem+32-Bit+0x48000014+0x700
                        Setmem+32-Bit+0x48000018+0x700
                        Setmem+32-Bit+0x4800001C+0x18005
                        Setmem+32-Bit+0x48000020+0x700
                        Setmem+32-Bit+0x48000024+0x8D0459
                        Setmem+32-Bit+0x48000028+0x32
                        Setmem+32-Bit+0x4800002C+0x30
                        Setmem+32-Bit+0x48000030+0x30

                그리고 이것을 Script -> Init Script -> Load 에서 선택하시면 됩니다.

                위 내용은 메모리 컨트롤 레지스터들의 값을 초기화 해주는 것입니다.
                Setmem 은 AXD 에서 사용하는 명령어인데 DisMMU, Delay 는 잘 모르겠네요.
                BWSCON, BANKCON0 ~ MRSRB7 까지 값을 설정 합니다.
                자세한 내용은 S3C2440A 데이터시트(이솝 홈페이지에서 다운로드 가능)를 참고하세요.
                
                마지막으로 OK 누르시면 H-JTAG 에서 할 일은 끝났습니다.

        
        3.3. 터미널 프로그램 실행

                AXD 실행에 앞서 실행 결과를 보기 위하여 터미널 프로그램을 아래와 같은 설정으로
                실행 합니다.
        
                Port      : 이솝과 연결되어 있는 COM 포트 번호
                Baud rate : 115200
                Data bits : 8
                Parity    : None
                Stop bits : 1


        3.4. AXD 설정 및 실제 디버깅

                AXD 를 실행하고

                Options -> Configure Target.. 을 선택 합니다.

                우측에 ADD 버튼을 클릭 하고 H-JTAG 이 설치된 디렉토리로 이동 합니다.
                (기본은 C:Program FilesH-JTAG)
                여기에 H-JTAG.dll 를 선택하시고 열기 버튼을 누릅니다.
                OK 를 누르시면 이제 모든 준비는 끝났습니다!

                실제 컴파일된 이미지를 올릴 차례입니다.
                axf 파일을 이솝 메모리에 올릴수 있는데 방법은 아래와 같습니다.

                File -> Load Image...

                모니터 프로그램의 컴파일된 이미지(Mon2440.axf) 를 선택 합니다.
                (참고로 AXD 에서 AXF 뿐만 아니라 ELF 파일도 디버깅 할수 있습니다.)

                로딩에 성공 했으면 스타트업 코드(어셈블리어로 된) 가 보일 것이고
                화면 위 툴바중 플레이 버튼 처럼 생긴 버튼이 있습니다. 이 버튼을 누르시거나
                
                Execute -> Go

                를 선택 하셔도 됩니다.
                Go 를 한번 눌렀을 때 아래 소스에서 멈추는데

                void Main(void)
                {

                한번 더 누르면 터미널에 글자들이 뜨면서 실행이 됩니다.

                Go 버튼을 기준으로 버튼이 아래와 같이 배열 되어 있습니다.

                        Go     Stop     Step In      Step     Step Out     Run to Cursor

                Go 버튼은 그냥 주욱 실행하는 것이고
                Step 으로 시작하는 것들은 한줄한줄 실행 한다거나 한 블록을 실행 하는 등의 기능을 가지고
                Run to Cursor 는 커서 위치까지 실행하고 멈춥니다.

                이제 상태 값들을 살펴 봐야 할텐데요.
                Processor Views -> Registers 를 선택하면 현재 상태의 레지스터 값을 확인할 수 있습니다.

                메모리 값도 확인해 보시고 브래이크포인트도 걸어보시기 바랍니다.
                코드 한줄한줄 실행하면서 레지스터 값을 확인하는 즐거움을 여러분들도 느껴 보셨으면 좋겠네요.
                사용해보시면 감이 오실겁니다.


4. 테스트 완료한 이미지를 NOR 플래시에 굽기

        H-JTAG 을 설치하시면 H-Flasher 라는 프로그램이 같이 설치되는데
        SJF2440 프로그램과 같이 이미지를 플래시에 구울수 있는 프로그램 입니다.

        일단 모니터프로그램 프로젝트 파일(Mon2440.mcp)을 여시고
        RO Base 를 0x0 로 바꾸고 컴파일을 다시 합니다.
        0x0 는 NOR 플래시의 시작 위치이고 이솝 보드가 켜지자 마자
        올린 이미지를 실행 하기 위해서 0x0 로 RO Base 를 지정해 줍니다.

        일단 아래 내용을 [원하시는 파일이름.hfc] 로 만듭니다. 당연히 탭 문자는 제거하시구요.

                FLASH SECTION:
                AMD
                AM29LV160DB
                MEMORY SECTION:
                16
                0x0
                0x30000000
                SCRIPT SECTION:
                DisMMU+++
                Delay+++10
                Setmem+32-Bit+0x48000000+0x2045550
                Setmem+32-Bit+0x48000004+0x700
                Setmem+32-Bit+0x48000008+0x700
                Setmem+32-Bit+0x4800000C+0x700
                Setmem+32-Bit+0x48000010+0x700
                Setmem+32-Bit+0x48000014+0x700
                Setmem+32-Bit+0x48000018+0x700
                Setmem+32-Bit+0x4800001C+0x18005
                Setmem+32-Bit+0x48000020+0x700
                Setmem+32-Bit+0x48000024+0x8D0459
                Setmem+32-Bit+0x48000028+0x32
                Setmem+32-Bit+0x4800002C+0x30
                Setmem+32-Bit+0x48000030+0x30

        위 설정은 NOR 플래시 메모리 선택, 메모리 시작 번지, 초기화 스크립트 등등을
        설정 하는 겁니다.

        이제 H-JTAG 을 띄운 상태에서 H-Flasher 를 실행 시킵니다.
        화면 위에 Load 버튼을 누르고 위에서 저장한 hfc 파일을 선택합니다.
        그러면
        Flash Selection, Memory Config, Init Script 의 설정이 모두 되어 있음을
        확인하실 수 있습니다.
        특히 Init Script 를 위와 같이 설정하니 예전에는 구울때 에러가 너무 많이 발생했는데
        빠르고 에러없이 잘 되었습니다.
        
        이제 Programming 을 선택하여 이미지를 굽는 일만 남았습니다.
        Check 버튼을 눌렀을 때 제대로 선택한 것이 나오는지 확인하시고
        (만약에 무슨 드라이버를 다운로드 못받겠다는 에러 나오시면
        H-JTAG 에서 Auto Init 체크를 해주시면 됩니다.)

        Type 을 Plain Binary Format 을 선택하고
        Src File 에서 ... 버튼을 눌러서 모니터프로그램 bin 이미지 (uMon2440.bin) 를
        선택 합니다.
        Dst Addr 에는 0x0 를 입력해서 NOR 플래시에 구워질수 있도록 하구요.

        마지막으로 Program 버튼을 누르면 0x0 번지에 구워집니다~
        NOR 플래시에 잘 구워졌다면 이솝보드의 전원을 껏다 켜봅니다.
        터미널 프로그램에서 메시지가 잘 나오는지 확인해봅니다.

        U-Boot 이미지도 잘 올라갑니다.


5. 마무리

        위 정보를 알기까지 도움을 주신 고현철님, 윤덕배님께 감사 드리며
        저와 같은 삽질을 하지 마시라고 글을 남깁니다.
        그리고 Init Script 및 JTAG 동글 핀 설정은 윤광윤님께서 도와주셨습니다.
        너무 감사드립니다~ 덕분에 정말 쓸만하게 되었습니다. ^-^

고현철

2007.05.23 11:44:59
*.70.26.87

맙소사....정말 끝내셨네요....^^

이쪽 자료가 aesop에도 올라오다니, aesop의 기쁨입니다....

저야 전혀 한일은 없고, 주로 덕배님 자료를 많이 참조하셨고,
본인의 노력이 절대적인걸로 보여집니다.

정말 수고하셨고, 자료 감사합니다....

방창혁

2007.05.23 18:10:32
*.70.26.87

고생 하셨습니다. 많은 분들한테 도움이 될거라 생각됩니다.

서두원

2007.05.23 18:53:23
*.140.158.87

자료 감사히 쓰겠습니다~ ^^
으하하 좋은하루 보내세요~

유형목

2007.05.23 19:38:52
*.49.29.2

오.. 재밌는 놀꺼리를 주시니 감사합니다. ^^;

근데 aesop-2440에 들어 있는 JTAG 동글도 위에 설명한 거랑 호환 되는가요?

노트북에 ADS 1.2 도 깔려 있는지라 도전해 보렵니다.

이재명

2007.05.24 02:20:43
*.189.20.143

오늘 지하철 타면서 문뜩 떠오른 생각이
H-JTAG 은 임의로 핀 배열을 바꿀수 있다는 것이였습니다!

유형목님 말씀대로 이솝 보드와 함께 있는
JTAG 동글로도 가능 할것 같습니다~
지금 테스트 해보고 성공 하면 추가해서 올리도록 하겠습니다~ ^^

김현기

2007.05.24 02:40:50
*.134.63.187

수고 하셨습니다~ 정말 고생하셨네여...저도 빨리 정리해서 올려야지.ㅋ

이재명

2007.05.24 03:35:17
*.189.20.143

이솝 jtag 동글 설계도 참고해서 핀 배열 바꾸어봐도
이솝에 보드와 함께있는 jtag 동글로는 안되네요..
에구 방법이 있을텐데.. ㅠ_ㅠ

윤광윤

2007.05.24 06:58:06
*.238.65.197

aEsop 보드와 aEsop J-TAG(Byte Blaster MV)도 잘되네요..
제가 설정한것은 다음과 같습니다.
음 댓글에는 HTML 안되네요,,

추가글로 올립니다.

ARM Core쓰는놈에는 아주 유용할거 같습니다.

이재명

2007.05.25 05:04:52
*.118.56.135

윤광윤 님 설정으로 하니까 플래시 쓰는것도 너무 잘되네요~ ^-^
처음 글 보는 분들을 위해서
윤광윤님 설정으로 글을 수정해 놓겠습니다~ ^-^

이재명

2007.05.25 05:59:08
*.189.20.143

수정 완료 하였습니다~ ^-^

윤덕배

2007.05.26 05:40:37
*.155.134.216

정말 수고 많이 하셨습니다.

도움이 되었다니 저도 기쁩니다. ^^

이재명

2007.05.27 23:42:13
*.57.237.131

AXD 에서 AXF 파일 뿐만 아니라 ELF 파일도 디버깅 할 수 있었네요!
방금 수정 했습니다~ ^-^

고현철

2007.05.29 01:14:28
*.70.26.87

홈페이지 documentation란에 올려도 될까요?

문관경

2007.05.29 08:03:12
*.118.75.106

ELF형식이 된다는 거면, 혹시 리눅스 커널도 디버깅이 가능하다는 이야기 인가요???
궁금하네요....

이재명

2007.05.31 10:18:09
*.227.204.54

고현철님~ 당연히 되구요 영광입니다~^-^

그리고 문관경님~ 이솝 배포 CD 에 있는 이솝 커널을 해봣는데요
Format error 가 나더라구요. 리눅스에서 file 명령으로 확인해보니.. 다음과 같이..

[root@jpower ~]# file aesopk
aesopk: PPCBoot image

그래서 안되는것 같습니다~^^

유형목

2007.05.31 18:46:18
*.49.29.2

aesopk가 만들어지는 스크립트를 살펴보면 mkimage를 써서 bzImage에 헤더를 덧붙이는 것으로 보입니다.

리눅스 커널을 디버깅 하려면 u-boot를 써서 aesopk를 로딩하는 과정이 아니고 bzImage를 직접 JTAG으로 밀어 넣어서 부팅시키는게 맞을것 같습니다.

고현철

2007.06.01 01:23:37
*.70.26.87

arch/arm/boot/Image 파일가지고 하시면 됩니다.

이 녀석이 커널 binary image입니다. elf format은 아니고요. elf format은 커널을 컴파일 하면 top directory에 vmlinux라고 생깁니다.

이 녀석을 가지고 하시면 됩니다.

고현철

2007.06.01 01:24:08
*.70.26.87

그리고, 이재명님....다음주 정도에 제주 다녀와서 정리한 후에 올려놓도록 하겠습니다.

허락해 주셔서 감사합니다..........^^

유형목

2007.06.01 08:03:37
*.131.98.102

생각해보니 bzImage는 압축된 파일입니다. --;

고도리님의 지적대로 압축되지 않은 오리지널 파일을 올리는 것이 맞습니다.

그런데 컴파일러를 ADS 1.2 가 아닌 gcc 를 써서 컴파일한 것도 소스코드 보면서 디버깅이 되나요? GDB가 JTAG과 연동된다는 얘기는 들어보지 못한것 같은데..

박종석

2007.10.11 08:47:57
*.214.75.36

cross compile된 Uboot image (ELF?)를 ADS1.2에서loading 해볼려고 했으나..
정상적으로 되지 않는것 같습니다. 유형목님이 말씀하신대로 gcc로 compile된것도
ADS에서 debug가 되나요? 안될것 같은데...
혹시 하신분 계시면 어떻게 하는지 알려주시면 감사.. ^^

Uboot ELF 화일을 아래와 같이 AxD에서 open하면 아래와 같이 log되네요

DBE Warning 00255: WIN32 exception code 0xc0000005 was caught in dbess_imagedbt_image.cpp:160
List of Articles
번호 제목 글쓴이 날짜 조회 수sort
182 S3C2440용 ARM-LINUX-GCC OABI 툴 체인 패키지 file [3] 김재훈 2009-01-29 14514
181 aesop3차 wince 관련 dnw 사용 방법 입니다. file [3] 류경훈 2008-04-01 14264
180 aesop s3c2440a 3차 보드 wince 6.0 bsp 공개 합니다. file [3] 류경훈 2008-10-20 13921
179 [자료] s3c2440 ac97, amixer 관련 file [1] 강효민 2008-10-02 12337
178 S3C2440용 Legacy NAND(Larger Block) CMD 코드 샘플 file 김재훈 2008-12-11 12337
177 제품출시에 따른 GPL에 관련 사항에 대한 정리 file [3] 고도리 2006-07-02 12215
176 aESOP JTAG file [1] 노희준 2009-03-08 11397
175 aesop-2440 2nd schematic file 고도리 2011-02-08 11364
174 S3C24xx CPU에서 H-JTAG를 이용한 플래시 메모리 퓨징 file [7] 채병철 2009-10-27 11064
173 S3C2440용 ARM-LINUX-GCC OABI Debian Root File System file JhoonKim 2010-01-14 11033
172 aesop3차 보드용 wince 5.0 bsp 입니다 file [6] 류경훈 2008-02-26 10611
171 aesop-2440a 3차보드 회로도를 구합니다. [1] 임의석 2008-04-17 10486
» [HowTo](수정완료) 이솝보드로 AXD 와 H-JTAG 으로 펌웨어 프로... [20] 이재명 2007-05-23 10330
169 AESOP toolchain에 GDB 포팅하기. 유형목 2007-10-30 9946
168 aesop 2440a 3차 보드에서 sd 카드를 쓰기 위한 수정 입니다. file [4] 류경훈 2008-03-03 9782
167 aesop-2440용 touchscreen input device 지원용 tslib configurati... file 고현철 2008-07-11 9651
166 [커널] aesop 1차용 2.4.20 kernel [1] 고현철 2008-04-28 9554
165 aesop rootfs 부팅 시 "[: 0: unknown operand" [1] 최승훈 2008-04-19 9552
164 제가 aesop2440 3rd 보드에 포팅한 wince 5.0 bsp 입니다. file [3] 이재용 2008-03-25 9479
163 S3C2410 mizi 2.4.18 kernel sound driver fixed file 고도리 2007-11-04 9463

사용자 로그인