Home > 제품소개 > 에뮬레이터 > MAJIC-MT > 개발환경
< 에뮬레이터 >
CodeViser : 제품소개 / 개발환경 / 기술지원 / 자료실
MAJIC-LT : 제품소개 / 개발환경 / 기술지원 / 자료실 / 비교차트 / 지원리스트
MAJIC-LX : 제품소개 / 개발환경 / 기술지원 / 자료실 / 비교차트 / 지원리스트
MAJIC-MT : 제품소개 / 개발환경 / 기술지원 / 자료실 / 비교차트 / 지원리스트
ARMTOOLS : 제품소개 / 개발환경 / 기술지원 / 지원디바이스
J-LINK(Flash전용) : 제품소개 / 개발환경 / 기술지원 / 자료실

무제 문서

1. NON-OS에서의 개발환경 구축

우선 NON-OS라고 하면 일반적으로 Firmware 개발 환경을 말한다.
Firmware 개발 환경에서 주로 사용하는 컴파일러는 ARM사의 ADS1.2와 SDT 2.51을 기준으로
MAJIC과 연동해서 사용하는 방법에 대해 설명을 하겠다.

  [1] ARM ADS1.2 사용법

MAJIC setup wizard 프로그램을 설치한 후에 rdimajic.dll을
C:\program files\ARM\ADS1.2\Bin 폴더에 아래와 같이 복사한다.
AXD의 Options → Configure Target... 을 클릭하면 아래의 메뉴가 나오는데
복사한 파일을 add 하면 된다.



Configure를 클릭하면 Monice가 실행되고 JTAG 연결을 확인 할 수 있다.

  [2] ARM SDT2.51 사용법

ARM사의 SDT는 현재는 단종된 제품이지만 기존의 사용자가 많기 때문에 관련해서 설명을 하겠다.

MAJIC용 설치 프로그램을 설치한 후에 rdimajic.dll을
C:\ARM251\Bin 폴더에 아래와 같이 복사한다.
ADW의 Options → Configure Debugger... 을 클릭하면 아래의 메뉴가 나오는데
복사한 파일을 add 하면 된다.



Configure를 클릭하면 Monice가 실행되고 JTAG 연결을 확인 할 수 있다.

  [3] Debugging 하는법
위와 같이 일련의 세팅이 끝나고 디버거와 타겟의 연결이 끝나면, 디버깅 방법을 선택해야 한다.
중요한 것은 Boot는 ROM에서 Break Point찍어 가며 디버깅을 하고 Main 프로그램 또는
어플리케이션은 RAM에서 디버깅을 하는 것이 일반적인 방법이다.

① Bootloader 디버깅하기
우선 Bootloader를 디버깅하기 위해서 Flash에 Boot Image를 프로그램해야 한다.
예를 들면 boot.bin을 Flash 0x0번지에 프로그램을 한다.
프로그램 방법은 DRAGON-ICE용 Flash utility로 쉽게 프로그램할 수 있다.
주의할 점은 Compile 시에 Linker에서 RO-Base는 0x0 RW-Base 0x3000,0000(RAM 시작 번지)에
놓고 컴파일을 한다.


예 1) ADS의 경우



예 2) SDT의 경우



Bootloader 디버깅 실행 화면이다.


② Main Program 디버깅
컴파일시에 RO-Base를 0x3000,0000(RAM 시작번지) RW-Base는 비워두면 된다.
이렇게 컴파일한 후 Main Program을 디버깅하면 된다.
차이점은 Bootloader에서 이미 타겟보드의 Memory를 이미 초기화 했기 때문에
RAM break를 찍을 수 있기 때문에 소스레벨 디버깅이 아주 용이하다.

2. OS에서의 개발환경 구축

우선 OS는 크게 두가지로 구분 지울 수 있다.
1. Embedded Linux
2. Embedded Windows(WinCE .Net & Pocket PC)

OS 개발환경에서 JTAG 에뮬레이터인 MAJIC으로 디버깅하는 방법에 대해 설명하겠다.

  [1] Embedded Linux

MAJIC의 경우 Embedded Linux 환경에서 디버깅하기 위해 mdi-Server라는 별도의
프로토콜을 사용한다. 일반적으로 GDB-Server를 이용해서 어플리케이션을 디버깅하듯이
GDB와 MDI-Server를 이용해서 Bootloader 및 커널을 디버깅 할 수 있다.

① MAJIC Software 설치하기
EPI에서 제공하는 Edta 2.0 for Linux를 넣으면 아래와 같은 파일이 있다.
>>cd /
>>mount /dev/cdrom
>>cd /mnt/cdrom
>>ls
>>cd linux
>>cd edta
>>mkdir /root/epi
>>cp edt.tar /root/epi
>>cd /root/epi
>>tar -xvf edt.tar
>>export PATH=$PATH:/root/epi/bin

# path를 지정한다.
>>pico w /root/.bash_profile #path 설정
X-hyper250B 보드용으로 만든 cmd 파일 덮어쓰기
x-hyper250-linux.cmd , startice.cmd, epimdi.cfg 파일을
/root/epi/bin 폴더의 파일에 덮어쓰기 한다.
>>pico w epimdi.cfg
>>IP부분을 MAJIC의 IP로 세팅을 한다.
Host PC IP : 192.168.0. 100
MAJIC IP : 192.168.0.155
X-hyper250B IP : 192.168.0.10


② MAJIC IP 세팅하기

>> cd /root/epi/bin
>>monice d /dev/ttyS0 vpxa250 -7 l
mon>>do
mon>>eo tia=192.168.0.155
mon>>eo tig=192.168.0.1
mon>>eo tin=255.255.255.0
mon>>q y
그런 후에 MAJIC의 power를 끈 후 다시 켠다.
IP 세팅이 완료되면 Ping Test를 해본다.
>> ping 192.168.0.155


Building the Kernel Image

[root@mc /] cd /root/xhyper250/Kernel/linux-2.4.18-rmk7-pxa1-xhyper250R1.1
Then run menuconfig to configure the build for the Linux kernel.

[root@mc linux-2.4.18-rmk7-pxa1-xhyper250R1.1] make menuconfig
Menuconfig has been shipped by Hybus to default to all correct settings for the X-Hyper250B
evaluation board. In order to debug the Linux kernel with the MAJIC though, one setting will
need to be changed. Under kernel hacking change Include debugging information in kernel
binary to be enabled. This will cause the vmlinux file to be compiled with the g switch,
and therefore have source and symbolic debug information. Then next step is to build the
image:
[root@mc linux-2.4.18-rmk7-pxa1-xhyper250R1.1] make dep
[root@mc linux-2.4.18-rmk7-pxa1-xhyper250R1.1] make zImage kernel
If the compilation works correctly the vmlinux file will show up in the current directory,
and the zImage file will show up in the /arch/arm/boot directory, off of the current working
directory.
After successfully recompiling the kernel the zImage file should be copied to the /tftpboot
directory in order for TFTP to find it during the re-programming stage.


Programming the Kernel Image
Before reprogramming the Linux kernel ensure that TFTP and BOOTP have been installed
and configured on the host computer. Instructions for this can be found in the X-Hyper250B
manual on page 68. The original instructions for reprogramming the Linux kernel can be found
on page 22.
Connect to the target with Minicom, then power cycle the board so that it will reboot.
Instructions for configuring Minicom can be found in the X-Hyper250B manual on page 12.
[root@mc /] minicom
X-HYPER250>

--------------------------------------------------------------------------------------
X-HYPER250-R1
Copyright (C) 2002 Hybus Co,. ltd.
X-HYPER250 comes with ABSOLUTELY NO WARRANTY; Read the GNU GPL for
details. This is free software, and you are welcome to redistribute it
under certain conditions; read the GNU GPL for details.
Support: http://www.hybus.net
--------------------------------------------------------------------------------------
Autoboot in progress, press any key to stop ...
At this point hit any key so that Autoboot will be aborted. You can then type in the
commands to have the kernel
flashed to the target.
Autoboot aborted
Type "help" to get a list of commands

X-HYPER250> tftp zImage kernel
No IP. Bootp start...
Our Ethernet address is 00D0 CAD1 2577.
Sending bootp packet... .
Bootp Packet received.
Host (server) Ethernet : 0006 5BE5 8F23
Host (server) IP : 205.158.243.30
Client (target) Ethernet : 00D0 CAD1 2577
Client (target) IP : 205.158.243.205
TFTP Start...
Host (server) IP : 205.158.243.30
Client (target) IP : 205.158.243.205
Loading Filename : zImage-rf-061603-xhyper250
Save Address : 0xA0008000
Loading start...
0x000D10B4 (856244) bytes received.
tftp done.

X-HYPER250> flash kernel
Saving kernel to flash...
Erase flash blocks from 0x000C0000 to 0x001BFFFF.
Erase Block at : 0x00180000.
Done.
Write to flash...
Writing at 0x001C0000...
Done
X-HYPER250>
Be sure to try rebooting the kernel image to ensure that it programmed successfully:
X-HYPER250> reboot
Restarting...
Now the kernel has been successfully re-programmed to flash. It is now guaranteed
that the vmlinux file and zImage file
will match for kernel debugging purposes.

Debugging the Kernel
Refer to the Getting Started with MAJIC and Linux application note for information on
configuring the MAJIC for the
X-Hyper250 target. In this situation the samples file found in the /root/epi/bin directory
should be used for connecting to the target. MDI-Server can either be run from the
/root/epi/bin directory,
or the startup files can be copied to the /root/epi/bin directory before starting.
Keeping the Minicom window open to monitor the target, now open two more console windows.
Start MDI-Server in
the second console window.
[root@mc bin]# mdi-server -l mdi.so
Started listening socket on port 2345.
Then start a GDB session in the third console window:
[root@mc bin]# ./xscale_le-gdb
GNU gdb 5.2.1
Copyright 2002 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you
are
welcome to change it and/or distribute copies of it under certain
conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for
details.
This GDB was configured as "--host=i686-pc-linux-gnu
--target=armv5tel-hardhat-linux".
Now enter the following command in GDB:
(gdb) set remoteti 10
(gdb) file /root/xhyper250/kernel/linux-2.4.18-rmk7-pxa1-xhyper250R1.1/vmlinux
Reading symbols from /tftpboot/vmlinux-rf-061603-xhyper250...done.
(gdb) target remote localhost:2345
Remote debugging using localhost:2345
0x00000000 in ?? ()
This is following the Getting Started with MAJIC and Linux application note exactly.
In the MDI-Server window you should now see:
Accepted gdb MDI connection.
Attaching...Capabilities:
TraceOutput
TraceCtrl
End of Capabilities List
Devices:
Index Name
[0] PXA250 for Hybus Linux
Selecting device [0] of 1
Notification from the target:
Target power detected on VREF
Auto JTAG detection process detected 1 TAP
JTAG connection established
Done.
Now, in GDB, let the target run:
(gdb) cont
Continuing.

In the Minicom window you should see the Linux kernel begin to boot up:
-------------------------------------------------------------------------------------
X-HYPER250-R1
Copyright (C) 2002 Hybus Co,. ltd.
X-HYPER250 comes with ABSOLUTELY NO WARRANTY; Read the GNU GPL for
details. This is free software, and you are welcome to redistribute it
under certain conditions; read the GNU GPL for details.
Support: http://www.hybus.net
--------------------------------------------------------------------------------------
Autoboot in progress, press any key to stop ...Autoboot started.
Starting kernel ...
Uncompressing
Linux.............................................................Linux
version 2.4.18-rmk7-pxa1-xhyper250R1.1 (root@mc) (gcc version 3.2.1
200203CPU: Intel XScale-PXA250 revision 4
Machine: X-Hyper250B PXA250 evaluation board
On node 0 totalpages: 16384
zone(0): 16384 pages.
zone(1): 0 pages.
zone(2): 0 pages.
Kernel command line: root=1f03 rw console=ttyS0,115200 init=/linuxrc
Console: colour dummy device 80x30
Calibrating delay loop... 397.31 BogoMIPS
Memory: 64MB = 64MB total
Memory: 62436KB available (1451K code, 292K data, 356K init)
Dentry-cache hash table entries: 8192 (order: 4, 65536 bytes)
Inode-cache hash table entries: 4096 (order: 3, 32768 bytes)
Mount-cache hash table entries: 1024 (order: 1, 8192 bytes)
Buffer-cache hash table entries: 4096 (order: 2, 16384 bytes)
Page-cache hash table entries: 16384 (order: 4, 65536 bytes)
POSIX conformance testing by UNIFIX
Linux NET4.0 for Linux 2.4
Based upon Swansea University Computer Society NET3.039
Initializing RT netlink socket
PXA USB Controller Core Initialized
get_random_bytes called before random driver initialization
USB Function Ethernet Driver Interface
Starting kswapd
JFFS2 version 2.1. (C) 2001 Red Hat, Inc., designed by Axis Communications
AB. Console: switching to colour frame buffer device 80x30
pty: 256 Unix98 ptys configured
Serial driver version 5.05c (2001-07-08) with no serial options enabled
ttyS00 at 0x0000 (irq = 14) is a PXA UART
ttyS01 at 0x0000 (irq = 13) is a PXA UART
ttyS02 at 0x0000 (irq = 12) is a PXA UART
ads7843 touch screen driver initialized
block: 128 slots per queue, batch=32
Cirrus Logic CS8900A driver for Linux (V0.01)
eth0: CS8900A rev D at 0xf0000300 irq=0, no eeprom , addr:
00:12:34:56:78:9A ac97_codec: AC97 Audio codec, id: 0x4352:0x5914
(Cirrus Logic CS4297A rev B) Probing X-Hyper250 Flash at physical
address 0x00000000 Using buffer write method
Using static partition definition
Creating 4 MTD partitions on "X-Hyper250 Flash":
0x00000000-0x00040000 : "Bootloader"
0x00040000-0x000c0000 : "Partition Tables"
0x000c0000-0x001c0000 : "Kernel"
0x001c0000-0x02000000 : "Filesystem"
Linux Kernel Card Services 3.1.22
options: none
Intel PXA250/210 PCMCIA (CS release 3.1.22)
X-Hyper250 PCMCIA INIT


MMC subsystem, $Revision: 0.3.1.14 $
MMC block device driver, $Revision: 0.3.1.16 $
PXA250 MMC controller driver, $Revision: 0.3.1.12 $
NET4: Linux TCP/IP 1.0 for NET4.0
IP Protocols: ICMP, UDP, TCP
IP: routing cache hash table of 512 buckets, 4Kbytes
TCP: Hash tables configured (established 4096 bind 8192)
NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
NetWinder Floating Point Emulator V0.95 (c) 1998-1999 Rebel.com
VFS: Mounted root (jffs2 filesystem).
Freeing init memory: 356K
Setting up RAMFS, please wait ...
done and exiting
INIT: version 2.78 booting
INIT: Entering runlevel: 3
Starting syslog Starting system logger:
Starting pcmcia Starting PCMCIA
Starting etwork Starting network
Starting X...
Xhyper250RB login:
Log into Embedded Linux as the root user:
Xhyper250RB login: root
You can now change directory and view the file structure of the operating system:
[root@Xhyper250RB /root]$cd ..
[root@Xhyper250RB /]$ls
bin dev home linuxrc mnt rd sbin usr
conf etc lib lost+found proc root tmp var
[root@Xhyper250RB /]$
Begin debugging the Linux kernel by setting, and hitting, several breakpoints.
Use the Cntrl-C command to gain control
of the target, then type the following commands
Program received signal SIGTRAP, Trace/breakpoint trap.
(gdb) b sys_sync
Breakpoint 2 at 0xc009074c: file buffer.c, line 366.
(gdb) b get_pid
Breakpoint 3 at 0xc006ca1c: file fork.c, line 89.
(gdb) info breakpoints
Num Type Disp Enb Address What
2 breakpoint keep y 0xc009074c in sys_sync at buffer.c:366
3 breakpoint keep y 0xc006ca1c in get_pid at fork.c:89
(gdb) cont
Continuing.
In Embedded Linux run the list (ls) command in order to cause the breakpoint
at get process identification (get_pid) to be hit:
[root@Xhyper250RB /]$ls
In GDB you should see:
Breakpoint 3, get_pid (flags=17) at fork.c:89
89 {
Let the target run again and try executing the sync command:
(gdb) cont
Continuing.

[root@Xhyper250RB /]$sync
In GDB you should see the get_pid breakpoint hit first, and then if you continue,
the sys_sync breakpoint hit.
Breakpoint 3, get_pid (flags=17) at fork.c:89
89 {
(gdb) c
Continuing.
Breakpoint 2, sys_sync () at buffer.c:366
366 fsync_dev(0);
(gdb)
You have now successfully demonstrated kernel level debugging
on the Hybus X-Hyper250B board.
GDB commands
b
: breakpoint
Ex) b line number

GDB>> b 333
b get_pid
b sys_sync

info breakpoints

breakpoint 걸린 위치 및 경로
l
: list

소스 레벨 디버깅시 소스를 확인할 수 있음

S
: step

한 줄식 소스를 보면서 디버깅할 수 있음
Ex> S 10

나) Embedded Windows(WinCE .Net & Pocket PC)

요구사항:

① 인텔 DCPXA250 Lubbock Development Board

② EPI majic MX II Multi-processor Advance JTAG Interface Controller
③ WinCE PlatformBuilder 4.1 .Net

절차:
먼저, majic setup wizard를 실행해서 MAJIC의 IP address와 startice.cmd
및 epimdi.cfg 만든다.


next


① MAJIC에 Serial 포트를 PC Serial 포트에 연결한다. 제공된 RS232C Cable을 반드시
사용해야 한다.(Cross cable이 아님)

② 시작 → EPI tools → EDTA → Majic Setup Wizard 실행한다.

③ "Setup Static IP Related Address Information on your MAJIC" → 'Go' 클릭한다.



④ 고정 IP와 Subnet Mask 그리고 Gateway 넣는다. IP는 사용자 컴퓨터의 IP 대역에 맞게
넣어야 한다. 'Next' 클릭한다.

⑤ 'I will be using a serial port to communicate with my MAJIC'을 선택한다.

⑥ 'Install IP'선택하고 콘솔에서 Serial 포트를 통해 IP가 세팅되는 화면이 정상적으로 나타난다.

디버거 환경을 WinCE PlatformBuilder를 선택해서 startice.cmd, epimdi.cfg 파일을
생성
한다.
① 시작 → EPI Tools → EDTA → Majic Setup Wizard 실행

② 'Choose your Debugger'란에서 'Platform Builder (WinCE/PocketPC)' 선택하고
'Go' 클릭한다.

③ Project Name을 넣고 'Next' 클릭한다. 특별한 의미는 없다.



④ Target CPU와 Byte Endian을 선택한다. CPU에 대한 정확한 정보를 알고 있어야 한다.



⑤ MAJIC과 PC와의 연결 방법을 선택한다. Serial이나 이더넷을 선택한다.



⑥ 설치된 EPITool의 Targets 폴더에서 맞는 사용자 보드에 맞는 Configuration File을
선택한다.



⑦ Startice 및 epimdi.cfg 파일 생성할 디렉토리를 선택한다.



Majic과 WinCE Platform Builder에서 eboot 디버깅

① Lubbock board용 Eboot.nb0 파일을 보드에 굽는다.
② bootloader가 성공적으로 프로그램 되어 있으면 하이퍼터미널에서 38400-8-N-1 세팅을
한 후 타겟보드에 전원을 넣는다.



③ WinCE Platform Builder를 실행한다. Lubbock보드용 Project파일을 만든 후
ethernet으로 nk.bin파일을 다운로드 한다.
Target → Configure Remote Connection.



④ 이더넷 선택 후 configure 버튼을 클릭하면 'XSC1BD42973'이 팝업창에 나타난다.
그런 후에 Platform 세팅 부분에서 아래와 같이 옵션을 선택한다.





⑤ Target → Download/Initialize를 선택후 nk.bin 파일을 다운로드 한다.



⑥ 그러면 정상적으로 WinCE 이미지가 부팅이 된다. 그럼 지금부터 eboot 이미지 디버깅
하는 방법을 설명하겠다.

⑦ 주의할점은 Flash에 프로그램 되어 있는 이미지와 디버깅 할 이미지가 동일해야만 한다.
또한, eboot가 있는 파일의 경로를 아래와 같이 등록을 해야지만 소스레벨로 디버깅이
가능하다.

%_TARGETPLATFORM%\target\%_TGTCPU\%WinCEDEBUG%

⑧ Path를 얻기 위해서 Open the Platform Builder → open the lubbock platform
→ Build → Open Build release directory → 그러면 command window에서
'set'을 치면 소스가 있는 전체 경로를 볼 수 있다.

C:\WinCE410\PLATFORM\XSC1BD\target\ARMV4I\retail\eboot.bin.

⑨ 이 이미지를 위한 소스코드를 보기 위해서
File → Open → C:\WinCE410\PLATFORM\XSC1BD\EBOOT\main.c

그런 다음 소스코드에서 breakpoint를 찍고 아래와 같이 breakpoint edit 창에서
hardware breakpoint를 선택한다. Edit → Breakpoint



Target 보드를 MAJIC으로 연결 후 Target → Connect 그리고 나서
Debug → Go를 클릭한 후 아래와 같은 화면을 볼 수 있다.






이렇게 해서 WinCE에서 eboot 및 커널 디버깅을 할 수 있다.


Today/Total   1 / 943,822