'혼자서 놀기...'에 해당되는 글 26건
- 2009.09.02 순대보드 u-boot - 4
- 2009.09.01 메모리 단위
- 2009.08.14 망고64 GNU ARM 개발툴 설치 2
- 2009.08.14 망고64 Cygwin 환경설치
- 2009.08.11 순대보드 u-boot - 3
- 2009.08.11 순대보드 u-boot - 2
- 2009.08.05 VMware http://vmware.com/info?id=97. 오류 해결 방법
- 2009.06.22 Ubuntu 에서 리눅스 개발환경 설정
- 2009.06.19 Ubuntu에서 NFS setting
- 2009.06.19 Ubuntu에서 tftp setting
2009. 9. 2. 13:41
순대보드 u-boot - 4
2009. 9. 2. 13:41 in 혼자서 놀기.../순대보드(AHAV9302)
AHAV9302를 설정하는 파일들을 생성하거나 수정하는 작업이다.
지금부터는 적절하게 디렉토리를 생성하고, 전에 패치해서 생성된 파일들 중 필요한 파일들을 복사해서 수정하는 적업을 할 것이다.
$ mkdir board/ahav9302
$ cp board/cs-e9301/* board/ahav9302/.
$ mv board/ahav9302/cs-e9301.c board/ahav9302/ahav9302.c
새로 생성하고 복사를 한 디렉토리 "/board/ahav9302/"를 보면 총 7개의 파일(Makefile, config.mk, pll_cfg.S, ahav9302.c, sdram_cfg.S, u-boot.lds)이 있는 것을 확인할 수 있다. 각각의 파일은 AHAV9302 보드에 맞도록 이리 저리 수정해야 한다.
그런데.. 어떤 식으로 수정을 해야 한다는 것인지..
"각각의 파일들을 수정하는 이유에 대해서 이 강좌에 일일이 써내려 가다가는 너무 오래 걸릴것으로 판단이 됩니다. 이전의 강좌에서 하드웨어 주소의 설정을 참고하신다면, 수정한 이유등에 대한 것은 그다지 고민할 부분은 아니라고 생각이 듭니다."라고 강의에는 되어 있는데.. 도통 감이 오질 않는다.
일단 따라하기니깐 나중에 다시 생각하기로 하고.. 따라하자!!! ㅎ
아.. 위처럼 디렉토리를 만들고 파일들을 수정해도 되지만, 아래의 파일을 압축을 풀어서 해당 디렉토리로 복사를 해도 된다. 강의 하시는 "순대국밥"님이 미리 만들어 두신 파일들이다.
7개의 파일 중 flash_cfg.S와 u-boot.lds 파일을 제외한 파일들은 모두 수정이 된 파일이니, 수정되기 전과의 바뀐 부분이 무엇인지 보는 것도 도움이 될 것이다. '데이터 시트'도 꼼꼼히 보라는데.. 개인적으로 데이터 시트만 보면 아직 익숙치 않아 그러는지 눈도 침침해지고 졸리기까지 하다.. -_-
그 이외의 필요한 파일들을 수정해 주어야 한다.
vi 에디터를 사용해 vi common/cmd_boot.c 파일을 연다.
31번 라인 위 아래의 #if, #endif 구문을 주석처리 한다.
62번 라인을 아래와 같이 수정한다.
저장을 하고 파일을 닫는다.
다시 vi 에디터를 사용해 "common/cmd_bootm.c"파일을 열고 아래와 같이 수정을 한다.
470라인 정도에 위의 그림과 같은 부분이 있다. "#ifdef ~ #endif" 부분을 주석처리 한다.
다음은 네트웍과 CPU 관련된 부분의 작업이다. 아래의 "순대국밥"님이 미리 만들어 놓은 파일을 받아서 압축을 풀고 기존의 위치에 복사해 넣으면 된다. 아직 무슨 내용인지는 모른다... -_-;;
압축을 풀면 아래의 4개의 파일이 존재한다. u-boot 루트 디렉토리에서 경로를 찾아 복사를 한다.
net/eth.c
net/net.c
cpu/arm920t/ep93xx/eth.c
cpu/arm920t/ep93xx/cpu.c
여기까지 진행을 하면 정상적으로 동작하는 u-boot에 대한 수정이 완료된 것이다. 컴파일을 해서 AHAV9302를 위한 u-boot.bin을 생성을 하자.net/net.c
cpu/arm920t/ep93xx/eth.c
cpu/arm920t/ep93xx/cpu.c
$ make ARCH=arm CROSS_COMPILE=arm-elf- distclean
$ make ARCH=arm CROSS_COMPILE=arm-elf- clean
$ make ARCH=arm CROSS_COMPILE=arm-elf- ahav9302_config
$ make ARCH=arm CROSS_COMPILE=arm-elf-
$ make ARCH=arm CROSS_COMPILE=arm-elf- clean
$ make ARCH=arm CROSS_COMPILE=arm-elf- ahav9302_config
$ make ARCH=arm CROSS_COMPILE=arm-elf-
컴파일이 완료되면 u-boot.bin 파일이 생성되어 있는 것을 볼 수 있다.
u-boot.bin 을 생성하면 mkimage라는 파일이 하나 생기는데, 이 파일을 다음과 같이 링크를 걸어준다.
$ sudo ln -s /opt/arm9sbc/ahav/build/u-boot-1.1.6/tools/mkimage /usr/bin/mkimage
이제 AHAV9302보드에 생성한 u-boot.bin을 옮기는 작업을 할 것이다.
"Cirrus Logic 사이트"에서 다운로드 툴(Download.zip)을 다운로드 받아서 사용할 것이다.
윈도우즈 상에서 Download.zip를 다운을 받아 압축을 푼다. 그리고 이 디렉토리에 u-boot.bin 파일을 옮긴다. 예전에 삼바를 구축하였기 때문에 삼바로 리눅스 기계로 접근을 해서 u-boot.bin 파일을 복사해 오면 될 것이다.
윈도우즈의 명령 커맨드창(cmd)를 열어 Download 디렉토리로 이동을 한 뒤 다음과 같이 입력하고 엔터키를 누른다.
아래의 화면과 같이 나온다면 정상적으로 u-boot.bin파일을 AHAV9302 보드로 옮긴 것이다.
AHAV9302 보드를 부팅해보자!
'혼자서 놀기... > 순대보드(AHAV9302)' 카테고리의 다른 글
순대보드 Kernel Image (0) | 2009.09.02 |
---|---|
순대보드 u-boot - 3 (0) | 2009.08.11 |
순대보드 u-boot - 2 (0) | 2009.08.11 |
순대보드 u-boot - 1 (4) | 2009.04.02 |
순대보드 CrossCompile 환경 - 2 (0) | 2009.04.01 |
나는 소프트웨어 쟁이였구나..
데이터 시트를 보고, 메모리 맵을 보고 0x~로 된 녀석들이 당최 한눈에 들어오질 않는다.
전 부터 한 번쯤 정리를 해야지 라고 생각만 하다가.. 오늘에서야 소원 성취한다.
1 byte |
= |
8 bit |
= |
0x0000
0001 |
1 KB |
= |
1024 byte |
= |
0x0000
0400 |
1 MB |
= |
1024 KB [(1024*1024)byte] |
= |
0x0010
0000 |
2 MB |
= |
2048 KB |
= |
0x0020
0000 |
4 MB |
= |
4096 KB |
= |
0x0040
0000 |
8 MB |
|
|
= |
0x0080
0000 |
16 MB |
|
|
= |
0x0100
0000 |
32 MB |
|
|
= |
0x0200
0000 |
64 MB |
|
|
= |
0x0400
0000 |
128 MB |
|
|
= |
0x0800
0000 |
256 MB |
|
|
= |
0x1000
0000 |
512 MB |
|
|
= |
0x2000
0000 |
1 GB |
= |
1024 MB |
= |
0x4000
0000 |
2GB |
= |
2048 MB |
= |
0x8000
0000 |
어떤 데이터 시트를 보면 Mbit 라고 되어 있는 애들도 있다.
이 녀석은 bit 단위로 계산을 해서 나온 녀석인데, 1Byte가 8bit 이므로 /8을 해주면 byte 단위로 알아 먹을 수 있다.
이렇게 정리를 하고나니 속이 다 시원하다 ㅎ
당최 알아먹기 힘들었던 bit의 세상에 눈을 뜬 기분!!
'혼자서 놀기...' 카테고리의 다른 글
VMware - keyboard hook timeout... error 해결책 (1) | 2009.11.29 |
---|---|
Little Endian 과 Big Endian (0) | 2009.10.06 |
VMware http://vmware.com/info?id=97. 오류 해결 방법 (0) | 2009.08.05 |
Ubuntu 에서 리눅스 개발환경 설정 (0) | 2009.06.22 |
Ubuntu에서 NFS setting (0) | 2009.06.19 |
2009. 8. 14. 14:41
망고64 GNU ARM 개발툴 설치
2009. 8. 14. 14:41 in 혼자서 놀기.../Firmware
일반적으로 데스크톱, 노트북과 같은 x86 플랫폼에서 작성된 프로그램은 ARM 프로세서에서 동작하지 않는다. x86 컴파일러를 사용해서 만들어진 x86 전용 프로그램이니깐!!
그래서 ARM 프로세서 위에서 돌아가는 프로그램을 만들기 위해서는 ARM용 컴파일러가 있어야 한다.
물론 ARM 프로세서 위에서 돌아간다고 해서 뭐 ARM에서 프로그래밍 하지는 않는다. 할 수도 있겠지만(?) 성능이나 여러 상황들을 고려해 볼때.. 무리가 있다.
하지만 x86 플랫폼에서 아주 멋진 프로그램을 만드어 놓구선, 이를 ARM 용 컴파일러를 이용해서 ARM용 프로그램으로 만들수 있다. 이런 방법을 크로스 "컴파일(cross compile)"이라 하고, 이 때 사용되는 ARM용 컴파일러를 "크로스 컴파일러(Cross-Compiler)"라고 부른다.
그래서 이번엔 "GNU ARM Toolchain"이라는 크로스 컴파일러를 설치하려 한다.
일단 GNU ARM 홈페이지를 방문해 보자
GNU ARM Toolchain은 Cygwin, Linux, MacOS에서 사용되는 ARM Cross-compiler 인듯 하다. 일단 cygwin도 지원이 되고, 설치를 했으니 이녀석도 설치를 해봐야 할 듯 하다.
녹색(연두색??)으로 되어 있는 메뉴중 FILES를 클릭하면 다운로드 받을 수 있는 여러 버전의 파일들을 볼 수 있다. 그 중 cygwin용 GCC-4.1 toolchain 바이너리 파일을 다운로드 받아서 설치할 것이다.
GNU ARM 설치는 특별한 것이 없다. 디폴트 설치 값으로 다음 -> 다음 ... 계속 눌러주기만 하면 된다.
Select Additional Tasks 화면이 나오면, 일단 cygwin을 설치 했고, 또 사용할 것이기 때문에.. 체크 되어있는 Cygwin option을 해제 시켜 주어야 한다.
이것을 제외하고는 특별히 신경 쓸 것도 없고, 다음 다음 하다가 마지막에 Finish 버튼을 눌러주는 것으로 설치 완료이다.
일단 설치가 잘 되었는지 확인을 해야할 듯 하다.
cygwin을 실행하고 프롬프트에 아래와 같이 입력을 하고 엔터키를 누른다.
$ arm-elf-gcc -v
다음과 같이 크로스 컴파일러의 configuration정보와 version이 나온다면 정상적으로 설치 완료된 것이다.
'혼자서 놀기... > Firmware' 카테고리의 다른 글
망고64 Cygwin 환경설치 (0) | 2009.08.14 |
---|
2009. 8. 14. 14:03
망고64 Cygwin 환경설치
2009. 8. 14. 14:03 in 혼자서 놀기.../Firmware
쓸데없는 욕심에 없는 돈 모아서 새로산 "망고64" 보드를 가지고 무얼 할까.. 고민하다가.. "Embedded Crazy Boys" 라는 까페의홈페이지에 있는 펌웨어 강의를 따라해가며 공부나 해볼까 한다.
"미친초보 펌웨어"라는 강좌이다. 이름 참 맘에드는데 ㅎ
순대보드는 뭐하나요? 라고 물으신다면.. 시간 나는대로 이것 저것 해가며 조금씩 보고 있는 중임.. -_-;
기존에 Vmware 리눅스 환경에서 이것 저것 조금 해본적은 있는데.. 리눅스에서 환경을 구축해볼까 하다가.. 일단 따라하기니깐.. 강좌의 내용을 그대로 한번 따라해보고.. 어느정도 이해가 되면, 그때 리눅스로 이사를 갈까 한다.
Cygwin 설치
기존에 cygwin 설치에 대해서는 "http://todayis.tistory.com/71" 에서 포스팅 한 적이 있긴 한데.. "미초펌"강좌에는 망고 보드에 맞게 설정을 하는 듯하여.. 그대로 따라하기!!
일단 "cygwin" 홈페이지에 들어가서 필요한 파일을 다운로드 받자.
메인 페이지의 중간을 보면 다음과 같은 부분이 있다.
"Install or update now!(using setup.exe)" 를 클릭하자
Run 을 클릭해 실행!!
다음(Next >) 버튼을 클릭한다.
아래와 같은 화면이 나오면, 인터넷으로 설치하기(Install from Internet)를 선택하고 다음 버튼을 클릭한다.
Select Root Install Directory 화면에서 "Root Directory"로 사용할 디렉토리를 지정한다. 나머지 부분들은 디폴트로 사용하면 된다.
Select Local Package Directory 화면에서는 자신이 원하는 곳을 선택하고 다음버튼을 클릭한다. 이 위치에 cygwin에서 다운로드 받은 패키지들이 저장된다.
Select Your Internet Connection.. 인터넷 연결 설정에 관한 부분이다. "Direct Connection"을 선택하고 다음버튼을 클릭한다.
Choose A Download Site에서 cygwin을 다운로드 할 사이트를 선택한다. 대충 아무 곳을 선택해서 다음버튼을 클릭하면 된다. 본인의 경우 ftp://ftp.daum.net를 선택해서 다운로드 받았다.
Select Packages에서 설치할 패키지를 선택한다.
예전에 cygwin을 설치할 때는 전체 Default로 해서 설치를 했던것 같다. 여기서는 필요한 패키지를 선택해서 해주는 듯 하다.
역시 배운 사람들은 뭔가 다르긴 다르다...
기본적으로 Default로 되어 있는데.. 위 그림의 붉은 박스가 있는 Devel을 클릭해 몇몇 패키지를 추가하고 다음버튼을 클릭해 설치를 한다. 추가할 패키지는 make, binutils, autoconf, automake, libtool 등이다. 필요에 따라 Editor - vim을 추가해 주어도 될듯하다.
추가로 개인취향에 따라 필요하다고 생각되는 부분은 각자 알아서 하면 될듯함!!
쭉쭉!! 쭉쭉~~ 설치가 완료되면 아래와 같은 화면이 나온다.
마침(Finish)버튼을 클릭하면 완료!!!
cygwin 아이콘을 더블클릭하여 실행하면 정상적으로 cygwin이 설치된 모습을 볼 수 있다.
미친초보 펌웨어를 따라하기이므로 다음 번엔 ARM을 위한 GNU 개발 툴을 설치할 예정이다.
'혼자서 놀기... > Firmware' 카테고리의 다른 글
망고64 GNU ARM 개발툴 설치 (2) | 2009.08.14 |
---|
2009. 8. 11. 20:43
순대보드 u-boot - 3
2009. 8. 11. 20:43 in 혼자서 놀기.../순대보드(AHAV9302)
순대보드의 u-boot를 올리기 위한 마지막 단계(?)로 순대보드에 특화된 동작을 하는 파일을 등록하는 부분이다.
먼저 "include/configs/ahav9302.h"를 생성하고 필요한 부분들을 등록하는 작업을 해야한다.
"순대보드 u-boot - 1"에서 순대보드와 그나마 비슷한 EP9301 패치파일을 사용해서 cs-e9301에 대한 패치를 한 적이 있다. 그리하여 "include/configs/cs-e9301.h"를 참고하여 ahav9302.h를 작성할 수 있다.
ahav9302.h는 순대보드의 u-boot에서 사용하게 될 여러 환경변수 같은 것을 등록하게되는 파일이다.
이 파일의 전체적인 구조는 다음과 같다.
#ifndef__CONFIG_H
#define__CONFIG_H
/*
1. 부트로더 변수의 초기값 및 모니터 설정 등록.
2. 아키텍쳐, 보드, 클럭, MMU 등의 설정.
3. 콘솔 접속을 위한 시리얼 설정 및 등록.
4. 네트웍 설정.
5. 메모리 맵 설정.
6. 플래쉬 메모리 설정.
7. 기타 등등.
*/
#endif
#define__CONFIG_H
/*
1. 부트로더 변수의 초기값 및 모니터 설정 등록.
2. 아키텍쳐, 보드, 클럭, MMU 등의 설정.
3. 콘솔 접속을 위한 시리얼 설정 및 등록.
4. 네트웍 설정.
5. 메모리 맵 설정.
6. 플래쉬 메모리 설정.
7. 기타 등등.
*/
#endif
위의 내용을 실제 구현한 ahav9302.h 파일이다.
#ifndef __CONFIG_H
#define __CONFIG_H
/* 1. 부트로더 변수의 초기값 및 모니터 설정 등록. */
#define CONFIG_ETHADDR 00:60:6E:F0:00:02
#define CONFIG_NETMASK 255.255.255.0
#define CONFIG_IPADDR 192.168.100.181
#define CONFIG_SERVERIP 192.168.100.250
#define CONFIG_GATEWAYIP 192.168.100.254
#define CONFIG_BOOTDELAY 3
#define CONFIG_CMDLINE_TAG 1
#define CONFIG_INITRD_TAG 1
#define CONFIG_SETUP_MEMORY_TAGS 1
#define CONFIG_BOOTARGS "console=ttyAM0,115200 root=/dev/ram0 rw init=/sbin/init initrd=0xc0800000"
#define CONFIG_BOOTFILE "ahav9302.img"
/* 2. 아키텍쳐, 보드, 클럭, MMU 등의 설정. */
#define CONFIG_ARM920T 1
#define CONFIG_EP93XX 1
#define CONFIG_EP9302 1
#define CONFIG_AHAV9302 1
#define CONFIG_SYS_CLK_FREQ 14745600 /* 14.7456 MHz */
#define CFG_HZ 2048
#undef CFG_CLKS_IN_HZ
#define USE_920T_MMU 1
#define CONFIG_USE_IRQ 1
/* Monitor Configuration. */
#if defined(USE_920T_MMU)
#define CONFIG_COMMANDS (CONFIG_CMD_DFL | \
CFG_CMD_DIAG | \
CFG_CMD_SDRAM | \
CFG_CMD_JFFS2 | \
CFG_CMD_DHCP | \
CFG_CMD_PING | \
CFG_CMD_NET | \
CFG_CMD_MII)
#else
#define CONFIG_COMMANDS (CONFIG_CMD_DFL | \
CFG_CMD_DIAG | \
CFG_CMD_SDRAM | \
CFG_CMD_JFFS2 | \
CFG_CMD_DHCP | \
CFG_CMD_PING | \
CFG_CMD_NET | \
CFG_CMD_MII & \
~CFG_CMD_CACHE)
#endif /* defined(USE_920T_MMU) */
#include <cmd_confdefs.h> /* Must be AFTER any CONFIG_COMMANDS */
#define CFG_PROMPT "AHAV9302> "
/* Enable "long" help in the monitor */
#define CFG_LONGHELP
#define CFG_CBSIZE 1024 /* Console I/O Buffer Size */
#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
#define CFG_MAXARGS 16 /* max number of command args */
#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */
#define CFG_LOAD_ADDR 0xC0008000 /* default load address */
/* 3. 콘솔 접속을 위한 시리얼 설정 및 등록. */
#define CONFIG_BAUDRATE 115200
#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
#define CFG_SERIAL0 (0x808C0000)
#define CFG_SERIAL1 (0x808D0000)
#define CFG_PL010_SERIAL
#define CONFIG_PL01x_PORTS { (void *)CFG_SERIAL0, (void *)CFG_SERIAL1 }
#define CONFIG_CONS_INDEX 0
/* 4. 네트웍 설정. */
#define CONFIG_DRIVER_EP93XX_MAC
#define CONFIG_MII
#define CONFIG_MII_SUPPRESS_PREAMBLE
#define CONFIG_PHY_ADDR (0)
#define CFG_DIRECT_FLASH_TFTP
#undef CONFIG_NETCONSOLE
/* 5. 메모리 맵 설정. */
#define CONFIG_NR_DRAM_BANKS (8)
#define PHYS_SDRAM_1 (0xC0000000)
#define PHYS_SDRAM_1_SIZE (0x00800000)
#define PHYS_SDRAM_2 (0xC1000000)
#define PHYS_SDRAM_2_SIZE (0x00800000)
#define PHYS_SDRAM_3 (0xC2000000)
#define PHYS_SDRAM_3_SIZE (0x00800000)
#define PHYS_SDRAM_4 (0xC3000000)
#define PHYS_SDRAM_4_SIZE (0x00800000)
#define PHYS_SDRAM_5 (0xC4000000)
#define PHYS_SDRAM_5_SIZE (0x00800000)
#define PHYS_SDRAM_6 (0xC5000000)
#define PHYS_SDRAM_6_SIZE (0x00800000)
#define PHYS_SDRAM_7 (0xC6000000)
#define PHYS_SDRAM_7_SIZE (0x00800000)
#define PHYS_SDRAM_8 (0xC7000000)
#define PHYS_SDRAM_8_SIZE (0x00800000)
#define CFG_MEMTEST_START (0xC0000000)
#define CFG_MEMTEST_END (0x01000000)
#define CONFIG_BOOT_PARAM_ADDR (PHYS_SDRAM_1 + 0x100)
/* -----------------------------------------------------------------------------
* Run-time memory allocations
*
* The global data area size (must be > sizeof(gd_t)), stack sizes, and heap
* size are set using the values below.
*/
#define CFG_GBL_DATA_SIZE (128)
#define CONFIG_STACKSIZE (128 * 1024)
#if defined(CONFIG_USE_IRQ)
#define CONFIG_STACKSIZE_IRQ (4 * 1024)
#define CONFIG_STACKSIZE_FIQ (4 * 1024)
#endif /* defined(CONFIG_USE_IRQ) */
#define CFG_MALLOC_LEN (512 * 1024)
/* 6. 플래쉬 메모리 설정. */
/* -----------------------------------------------------------------------------
* FLASH and environment organization
*
* 0x60000000 - 0x6003FFFF (256KB) u-boot
* 0x60040000 - 0x6005FFFF (128KB) environment #1
* 0x60060000 - 0x6007FFFF (128KB) environment #2
* 0x60080000 - 0x6009FFFF (128KB) unused
* 0x600A0000 - 0x600BFFFF (128KB) unused
* 0x600C0000 - 0x600FFFFF (256KB) unused
* 0x60100000 - 0x602FFFFF (2MB) uImage(kernel image)
* 0x60300000 - 0x606FFFFF (4MB) rImage(ramdisk image)
* 0x60700000 - 0x60FFFFFF (10MB) (JFFS2)
*/
#define CFG_FLASH_CFI
#define CFG_FLASH_CFI_DRIVER
#define CFG_MAX_FLASH_BANKS (1)
#define CFG_MAX_FLASH_SECT (128)
#define PHYS_FLASH_1 (0x60000000)
#define CFG_FLASH_BASE (PHYS_FLASH_1)
#define CFG_MONITOR_BASE (CFG_FLASH_BASE)
#define CFG_MONITOR_LEN (256 * 1024)
#define CONFIG_ENV_OVERWRITE /* Vendor parameters are unprotected */
#define CFG_ENV_IS_IN_FLASH
#define CFG_ENV_ADDR (0x60040000)
#define CFG_ENV_ADDR_REDUND (0x60060000)
#define CFG_ENV_SECT_SIZE (0x00020000)
#define CFG_ENV_SIZE (CFG_ENV_SECT_SIZE)
#define CFG_ENV_SIZE_REDUND (CFG_ENV_SECT_SIZE)
#define CFG_JFFS2_FIRST_BANK (0)
#define CFG_JFFS2_FIRST_SECTOR (28)
#define CFG_JFFS2_NUM_BANKS (1)
#endif /* __CONFIG_H */
#define __CONFIG_H
/* 1. 부트로더 변수의 초기값 및 모니터 설정 등록. */
#define CONFIG_ETHADDR 00:60:6E:F0:00:02
#define CONFIG_NETMASK 255.255.255.0
#define CONFIG_IPADDR 192.168.100.181
#define CONFIG_SERVERIP 192.168.100.250
#define CONFIG_GATEWAYIP 192.168.100.254
#define CONFIG_BOOTDELAY 3
#define CONFIG_CMDLINE_TAG 1
#define CONFIG_INITRD_TAG 1
#define CONFIG_SETUP_MEMORY_TAGS 1
#define CONFIG_BOOTARGS "console=ttyAM0,115200 root=/dev/ram0 rw init=/sbin/init initrd=0xc0800000"
#define CONFIG_BOOTFILE "ahav9302.img"
/* 2. 아키텍쳐, 보드, 클럭, MMU 등의 설정. */
#define CONFIG_ARM920T 1
#define CONFIG_EP93XX 1
#define CONFIG_EP9302 1
#define CONFIG_AHAV9302 1
#define CONFIG_SYS_CLK_FREQ 14745600 /* 14.7456 MHz */
#define CFG_HZ 2048
#undef CFG_CLKS_IN_HZ
#define USE_920T_MMU 1
#define CONFIG_USE_IRQ 1
/* Monitor Configuration. */
#if defined(USE_920T_MMU)
#define CONFIG_COMMANDS (CONFIG_CMD_DFL | \
CFG_CMD_DIAG | \
CFG_CMD_SDRAM | \
CFG_CMD_JFFS2 | \
CFG_CMD_DHCP | \
CFG_CMD_PING | \
CFG_CMD_NET | \
CFG_CMD_MII)
#else
#define CONFIG_COMMANDS (CONFIG_CMD_DFL | \
CFG_CMD_DIAG | \
CFG_CMD_SDRAM | \
CFG_CMD_JFFS2 | \
CFG_CMD_DHCP | \
CFG_CMD_PING | \
CFG_CMD_NET | \
CFG_CMD_MII & \
~CFG_CMD_CACHE)
#endif /* defined(USE_920T_MMU) */
#include <cmd_confdefs.h> /* Must be AFTER any CONFIG_COMMANDS */
#define CFG_PROMPT "AHAV9302> "
/* Enable "long" help in the monitor */
#define CFG_LONGHELP
#define CFG_CBSIZE 1024 /* Console I/O Buffer Size */
#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
#define CFG_MAXARGS 16 /* max number of command args */
#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */
#define CFG_LOAD_ADDR 0xC0008000 /* default load address */
/* 3. 콘솔 접속을 위한 시리얼 설정 및 등록. */
#define CONFIG_BAUDRATE 115200
#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
#define CFG_SERIAL0 (0x808C0000)
#define CFG_SERIAL1 (0x808D0000)
#define CFG_PL010_SERIAL
#define CONFIG_PL01x_PORTS { (void *)CFG_SERIAL0, (void *)CFG_SERIAL1 }
#define CONFIG_CONS_INDEX 0
/* 4. 네트웍 설정. */
#define CONFIG_DRIVER_EP93XX_MAC
#define CONFIG_MII
#define CONFIG_MII_SUPPRESS_PREAMBLE
#define CONFIG_PHY_ADDR (0)
#define CFG_DIRECT_FLASH_TFTP
#undef CONFIG_NETCONSOLE
/* 5. 메모리 맵 설정. */
#define CONFIG_NR_DRAM_BANKS (8)
#define PHYS_SDRAM_1 (0xC0000000)
#define PHYS_SDRAM_1_SIZE (0x00800000)
#define PHYS_SDRAM_2 (0xC1000000)
#define PHYS_SDRAM_2_SIZE (0x00800000)
#define PHYS_SDRAM_3 (0xC2000000)
#define PHYS_SDRAM_3_SIZE (0x00800000)
#define PHYS_SDRAM_4 (0xC3000000)
#define PHYS_SDRAM_4_SIZE (0x00800000)
#define PHYS_SDRAM_5 (0xC4000000)
#define PHYS_SDRAM_5_SIZE (0x00800000)
#define PHYS_SDRAM_6 (0xC5000000)
#define PHYS_SDRAM_6_SIZE (0x00800000)
#define PHYS_SDRAM_7 (0xC6000000)
#define PHYS_SDRAM_7_SIZE (0x00800000)
#define PHYS_SDRAM_8 (0xC7000000)
#define PHYS_SDRAM_8_SIZE (0x00800000)
#define CFG_MEMTEST_START (0xC0000000)
#define CFG_MEMTEST_END (0x01000000)
#define CONFIG_BOOT_PARAM_ADDR (PHYS_SDRAM_1 + 0x100)
/* -----------------------------------------------------------------------------
* Run-time memory allocations
*
* The global data area size (must be > sizeof(gd_t)), stack sizes, and heap
* size are set using the values below.
*/
#define CFG_GBL_DATA_SIZE (128)
#define CONFIG_STACKSIZE (128 * 1024)
#if defined(CONFIG_USE_IRQ)
#define CONFIG_STACKSIZE_IRQ (4 * 1024)
#define CONFIG_STACKSIZE_FIQ (4 * 1024)
#endif /* defined(CONFIG_USE_IRQ) */
#define CFG_MALLOC_LEN (512 * 1024)
/* 6. 플래쉬 메모리 설정. */
/* -----------------------------------------------------------------------------
* FLASH and environment organization
*
* 0x60000000 - 0x6003FFFF (256KB) u-boot
* 0x60040000 - 0x6005FFFF (128KB) environment #1
* 0x60060000 - 0x6007FFFF (128KB) environment #2
* 0x60080000 - 0x6009FFFF (128KB) unused
* 0x600A0000 - 0x600BFFFF (128KB) unused
* 0x600C0000 - 0x600FFFFF (256KB) unused
* 0x60100000 - 0x602FFFFF (2MB) uImage(kernel image)
* 0x60300000 - 0x606FFFFF (4MB) rImage(ramdisk image)
* 0x60700000 - 0x60FFFFFF (10MB) (JFFS2)
*/
#define CFG_FLASH_CFI
#define CFG_FLASH_CFI_DRIVER
#define CFG_MAX_FLASH_BANKS (1)
#define CFG_MAX_FLASH_SECT (128)
#define PHYS_FLASH_1 (0x60000000)
#define CFG_FLASH_BASE (PHYS_FLASH_1)
#define CFG_MONITOR_BASE (CFG_FLASH_BASE)
#define CFG_MONITOR_LEN (256 * 1024)
#define CONFIG_ENV_OVERWRITE /* Vendor parameters are unprotected */
#define CFG_ENV_IS_IN_FLASH
#define CFG_ENV_ADDR (0x60040000)
#define CFG_ENV_ADDR_REDUND (0x60060000)
#define CFG_ENV_SECT_SIZE (0x00020000)
#define CFG_ENV_SIZE (CFG_ENV_SECT_SIZE)
#define CFG_ENV_SIZE_REDUND (CFG_ENV_SECT_SIZE)
#define CFG_JFFS2_FIRST_BANK (0)
#define CFG_JFFS2_FIRST_SECTOR (28)
#define CFG_JFFS2_NUM_BANKS (1)
#endif /* __CONFIG_H */
아직은 잘 모르겠다.
걍 u-boot README 파일을 참고해가며 보면 알 수 있다고 한다.
실제 cs-e9301.h파일과 비교해보면 몇 군데를 제외하고는 거의 같음을 알 수 있다. 조만간 시간을 내서 README 파일을 한번 읽어는 봐야 할것 같은데... -_-;;
'혼자서 놀기... > 순대보드(AHAV9302)' 카테고리의 다른 글
순대보드 Kernel Image (0) | 2009.09.02 |
---|---|
순대보드 u-boot - 4 (0) | 2009.09.02 |
순대보드 u-boot - 2 (0) | 2009.08.11 |
순대보드 u-boot - 1 (4) | 2009.04.02 |
순대보드 CrossCompile 환경 - 2 (0) | 2009.04.01 |
2009. 8. 11. 20:17
순대보드 u-boot - 2
2009. 8. 11. 20:17 in 혼자서 놀기.../순대보드(AHAV9302)
새로운 보드에 u-boot를 올리기 위해선 몇가지 해주어야 하는 작업이 있는데.. 대략 순서를 말하자면 이렇다.
1. 해당 보드의 Machine Type을 생성하고 이를 "include/asm-arm/mach-types.h"에 등록한다.
2. 순대보드를 컴파일 할 수 있도록 Makefile을 수정한다.
3. 순대보드의 초기화를 위해 필요한 부분들을 생성한다.
2. 순대보드를 컴파일 할 수 있도록 Makefile을 수정한다.
3. 순대보드의 초기화를 위해 필요한 부분들을 생성한다.
먼저 첫번째 작업 Machine Type을 생성하고 등록하자.
u-boot의 최상위 디렉토리에서 작업을 하면 된다.
$ vi include/asm-arm/mach-types.h
...
671 #define MACH_TYPE_NEC_MP900 659
672 #define MACH_TYPE_VVTK1000 661
...
...
671 #define MACH_TYPE_NEC_MP900 659
672 #define MACH_TYPE_VVTK1000 661
...
중간 쯤.. 그러니깐 라인수로 671번 째 라인을 보면 MACH_TYPE_NEC_MP900이라는 부분이 있다. 그 녀석 아래에 순대보드의 Machine Type를 추가해 넣는다.
671 #define MACH_TYPE_NEC_MP900 659
672 #define MACH_TYPE_AHAV9302 660
673 #define MACH_TYPE_VVTK1000 661
672 #define MACH_TYPE_AHAV9302 660
673 #define MACH_TYPE_VVTK1000 661
또, 라인수로 8590라인 정도에
#ifdef CONIFG_MACH_NEC_MP900
...
#endif
라는 부분이 있다.
그 아래 순대보드에 관련된 부분을 추가해 준다. 그냥 "NEC_MP900" 된 부분을 "AHAV9302"로 바꾸어주면 된다.
...
8590 #ifdef CONFIG_MACH_NEC_MP9008591 # ifdef machine_arch_type
8592 # undef machine_arch_type
8593 # define machine_arch_type __machine_arch_type
8594 # else
8595 # define machine_arch_type MACH_TYPE_NEC_MP900
8596 # endif
8597 # define machine_is_nec_mp900() (machine_arch_type == MACH_TYPE_NEC_MP900)
8598 #else
8599 # define machine_is_nec_mp900() (0)
8600 #endif
8601
8602 #ifdef CONFIG_MACH_AHAV9302
8603 # ifdef machine_arch_type
8604 # undef machine_arch_type
8605 # define machine_arch_type __machine_arch_type
8606 # else
8607 # define machine_arch_type MACH_TYPE_AHAV9302
8608 # endif
8609 # define machine_is_ahav9302() (machine_arch_type == MACH_TYPE_AHAV9302)
8610 #else
8611 # define machine_is_ahav9302() (0)
8612 #endif
...
위와 같은 작업을 통해 생각보다 간단하게 순대보드(AHAV9302)를 새로운 머신 아키텍쳐(Machine Architecture)로 u-boot에 등록하게 된다.
다음은 순대보드(AHAV9302)용 u-boot를 컴파일 하기 위해 Makefile을 수정해야 한다.
역시 u-boot의 최상위 디렉토리에서 작업을 하면 된다.
vi 에디터를 열어 아래와 같이 ARM92xT Systems라는 부분을 찾아서 그 부분의 가장 아래 ahav9302_config를 추가한다.
$ vi Makefile
...
1756##########################################################
1757 ## ARM92xT Systems
1758##########################################################
1758##########################################################
...
1782 ahav9302_config : unconfig
1783 @$(MKCONFIG) $(@:_config=) arm arm920t ahav9302 NULL ep93xx
1783 @$(MKCONFIG) $(@:_config=) arm arm920t ahav9302 NULL ep93xx
...
"ARM92xT Systems" 라고 된 부분은 ARM92xT의 여러 보드들을 등록해 놓은 곳이다. 물론 순대보드의 경우 등록이 되지 않았기 때문에 추가로 등록을 해주는 것이다.
아래로 쭉 내려가다 보면.. 어디선가 많이 들어본듯한 smdk2440, smdk2410 보드도 등록되어 있음을 볼 수 있다.
실제 u-boot를 컴파일 할 때 다음과 같은 구문을 사용하게 된다.
$ make ARCH=arm CROSS_COMPILE=arm-elf- ahav9302_config
이런식으로 하여 여러 보드 중 ahav9302의 u-boot.bin을 생성하게 되는 것이다.
다음은 순대보드(AHAV9302)에 특화된 동작을 하는 부분을 생성하는 부분인데.. 양이 좀 많아질듯 하니깐 다음번에..
[참고] 당근이의 AVR 갖고 놀기
'혼자서 놀기... > 순대보드(AHAV9302)' 카테고리의 다른 글
순대보드 u-boot - 4 (0) | 2009.09.02 |
---|---|
순대보드 u-boot - 3 (0) | 2009.08.11 |
순대보드 u-boot - 1 (4) | 2009.04.02 |
순대보드 CrossCompile 환경 - 2 (0) | 2009.04.01 |
순대보드 CrossCompile 환경 - 1 (0) | 2009.03.31 |
2009. 8. 5. 12:30
VMware http://vmware.com/info?id=97. 오류 해결 방법
2009. 8. 5. 12:30 in 혼자서 놀기...
Windows 7 에서 VMware를 사용하던 도중 http://vmware.com/info?id=97. 오류 메시지를 보게 되었다.
대충 내용을 보아하니..
내 컴퓨터의 power-saving이라는 기능 때문에 CPU의 clock가 변할 수 있단다. 이러한 이유료 현재 윈도우즈에서 말해준 CPU clock과 VMware가 알아낸 CPU clock가 달라서 VMware의 속도가 상당히 느려질 수 있다는..-_-;;
뭐 그냥 써도 상관은 없을 듯 하지만, 그래도 왠지 신경쓰이는건....
해결책은 VMware의 config.ini를 수정해 주어야 한다.
windows XP 의 경우..
C:\Documents and Settings\All Users\Application Data\VMware\VMware Workstation\config.ini
Vista & windows 7 의 경우..
C:\ProgramData\VMware\VMware Workstation\config.ini
C:\Documents and Settings\All Users\Application Data\VMware\VMware Workstation\config.ini
Vista & windows 7 의 경우..
C:\ProgramData\VMware\VMware Workstation\config.ini
일단 파일을 열어 아래와 같이 내용을 입력한다.
host.cpukHz = 2664000
host.noTSC = TRUE
ptsc.noTSC = TRUE
host.noTSC = TRUE
ptsc.noTSC = TRUE
"host.cpukHz" 의 경우 자신의 CPU speed에 맞게 설정을 해야한다.
위의 오류 메시지 사진을 보면 알수 있듯 windows가 말해준 CPU speed xxxxMHz를 넣어주면 될 것이다. VMware가 측정한 CPU speed와 Windows 에서 알려준 CPU speed가 맞지 않아 나타난 오류이니깐.. ^^;
그래서 본인의 경우 2664000(2664MHz)를 넣어주었다.
config.ini 파일은 있을 수도 있고, 없을 수도 있다.
있으면 내용을 수정하면 될 것이고, 없으면 해당 폴더에 새로이 만들어주면 될 것이다.
추가로.. Windows 7의 경우 config.ini 를 수정할 때 administrator 계정으로 작업을 해주어야 한다. 안하면.. 저장이 안되어서... ^^;;
참고 자료 - http://communities.vmware.com/thread/153173
'혼자서 놀기...' 카테고리의 다른 글
Little Endian 과 Big Endian (0) | 2009.10.06 |
---|---|
메모리 단위 (0) | 2009.09.01 |
Ubuntu 에서 리눅스 개발환경 설정 (0) | 2009.06.22 |
Ubuntu에서 NFS setting (0) | 2009.06.19 |
Ubuntu에서 tftp setting (0) | 2009.06.19 |
2009. 6. 22. 13:23
Ubuntu 에서 리눅스 개발환경 설정
2009. 6. 22. 13:23 in 혼자서 놀기...
이솝 프로젝트에 ubuntu에서 리눅스 개발환경에 대한 글이 있어 참고할겸 포스팅!
1. 기본 개발 패키지 설치
우분투 리눅스 명령 프롬프트에서 다음을 입력한다.
$ sudo apt-get install libqt3-headers libqt3-mt-dev build-essential bin86 kernel-package libstdc++6
$ sudo apt-get install libncurses5-dev g++ gcc libc6-dev libc-dev gcc-3.4 libncurses5 libncurses5-dev libqt3-mt-dev
$ sudo apt-get install python-dev python patch m4 make ccache perl diffstat bitbake wget curl ftp cvs git subversion
$ sudo apt-get install git tar bzip2 gzip unzip jade docbook docbook-utils texinfo texi2html sec bison bc libc6-dev
$ sudo apt-get install libsdl1.2-dev mktemp help2man gawk qemu
$ sudo apt-get install libncurses5-dev g++ gcc libc6-dev libc-dev gcc-3.4 libncurses5 libncurses5-dev libqt3-mt-dev
$ sudo apt-get install python-dev python patch m4 make ccache perl diffstat bitbake wget curl ftp cvs git subversion
$ sudo apt-get install git tar bzip2 gzip unzip jade docbook docbook-utils texinfo texi2html sec bison bc libc6-dev
$ sudo apt-get install libsdl1.2-dev mktemp help2man gawk qemu
참고로 putty에서 작업을 할 때 위의 내용을 복사해서 마우스 오른쪽 키를 클릭하면 편하게 붙여넣기를 할 수 있다.
2. 우분투 패키지 업데이트
$ sudo apt-get upgrade
$ sudo apt-get update
$ sudo apt-get update
3. TFTP 설치 및 설정
http://todayis.tistory.com/222 참고
4. NFS 설치 및 설정
http://todayis.tistory.com/223 참고
5. Samba 설치 및 설정
http://todayis.tistory.com/221 참고
6. Root 계정 활성화
$ sudo passwd root
설정 후 su root 명령으로 root 계정을 사용할 수 있다.
원문 : 이솝 프로젝트(http://www.aesop.or.kr/?document_srl=32193)
'혼자서 놀기...' 카테고리의 다른 글
메모리 단위 (0) | 2009.09.01 |
---|---|
VMware http://vmware.com/info?id=97. 오류 해결 방법 (0) | 2009.08.05 |
Ubuntu에서 NFS setting (0) | 2009.06.19 |
Ubuntu에서 tftp setting (0) | 2009.06.19 |
Ubuntu에서 Samba setting (0) | 2009.06.19 |
2009. 6. 19. 14:30
Ubuntu에서 NFS setting
2009. 6. 19. 14:30 in 혼자서 놀기...
NFS는 컴퓨터 사용자가 원격 컴퓨터에 있는 파일을 마치 자신의 컴퓨터에 있는 것처럼 검색하고, 마음대로 저장하거나 수정하도록 해주는 클라이언트/서버형 응용 프로그램이다.
임베디드 시스템 작업을 하기위해선 NFS가 필히 있어야 한다. 없을 시 원활한 개발을 하기가 힘든 상태가 된다는..
뭐.. 여튼 그렇단다.. ^^;
일단, NFS와 관련된 패키지를 설치한다.
$ sudo apt-get install nfs-kernel-server nfs-common portmap
NFS server 설정
$sudo vi /etc/exports
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes hostname1(rw,sync) hostname2(ro,sync)
#
# Example for NFSv4:
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt)
# /srv/nfs4/homes gss/krb5i(rw,sync)
#
/rootfs 192.168.0.100(rw,no_root_squash,no_all_squash,async)
NFS로 사용할 디렉토리명, 마운팅 가능한 디바이스의 아이피, 그 밖의 세팅의 형식으로 세팅을 하면 된다.# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes hostname1(rw,sync) hostname2(ro,sync)
#
# Example for NFSv4:
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt)
# /srv/nfs4/homes gss/krb5i(rw,sync)
#
/rootfs 192.168.0.100(rw,no_root_squash,no_all_squash,async)
/etc/exports 파일 작성 시 디렉토리명과 디바이스 아이피 사이의 공백은 tab 키로 띄운다.
NFS를 재시작한다.
$ sudo /etc/init.d/nfs-kernel-server restart
$ sudo exportfs -r
이렇게 해서 /etc/exports에 설정된 데이터가 적용된다. server는 한 번만 실행해 놓고 새로운 디렉토리가 추가되면 exportfs -r 만 해주면 된다.
'혼자서 놀기...' 카테고리의 다른 글
메모리 단위 (0) | 2009.09.01 |
---|---|
VMware http://vmware.com/info?id=97. 오류 해결 방법 (0) | 2009.08.05 |
Ubuntu 에서 리눅스 개발환경 설정 (0) | 2009.06.22 |
Ubuntu에서 tftp setting (0) | 2009.06.19 |
Ubuntu에서 Samba setting (0) | 2009.06.19 |
2009. 6. 19. 12:30
Ubuntu에서 tftp setting
2009. 6. 19. 12:30 in 혼자서 놀기...
TFTP(Trivial File Transfer Protocol)은 FTP처럼 파일을 전송하기 위한 프로토콜이다. 하지만, TFTP는 FTP보다 훨씬 단순한 방식으로 파일을 전송하기 때문에 구현이 간단하다는 등의 장점을 가지고 있어 임베디드(Embedded) 시스템에서 운영체제 업로드에 주로 사용된다.
일단 apt-get을 사용하여 tftp를 설치하자.
$ sudo apt-get install xinetd tftp tftpd
설치가 완료되면 tftp를 사용하기 위해 /etc/xinetd.d/tftp 파일을 생성해서 아래와 같이 세팅을 하자.
$ sudo vi /etc/xinetd.d/tftp
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
tftp 서버로 사용할 디렉토리를 생성한다.
$ sudo mkdir /tftpboot
$ sudo chmod 777 /tftpboot
$ sudo chmod 777 /tftpboot
tftp 서버를 다시 실행한다.
$ sudo /etc/init.d/xinetd restart
간단한 테스트를 통해서 tftp가 정상적으로 동작하는지 알아본다.
tftpboot에 간단한 파일 하나를 만들어놓고, 다운로드가 제대로 되는지 알아본다.
$ touch /tftpboot/aaa.txt
$ tftp localhost
tftp> get aaa.txt
tftp> quit
$ ls
...
aaa.txt
$ tftp localhost
tftp> get aaa.txt
tftp> quit
$ ls
...
aaa.txt
파일을 하나 만들어서, tftpboot로 업로드가 제대로 되는지 알아본다.
$ touch bbb.txt
$ tftp localhost
tftp> put bbb.txt
tftp> quit
$ ls /tftpboot
...
bbb.txt
$ tftp localhost
tftp> put bbb.txt
tftp> quit
$ ls /tftpboot
...
bbb.txt
정상적으로 파일 업/다운로드가 이루어 지고 있다면 tftp가 정상적으로 설치된 것이다.
'혼자서 놀기...' 카테고리의 다른 글
메모리 단위 (0) | 2009.09.01 |
---|---|
VMware http://vmware.com/info?id=97. 오류 해결 방법 (0) | 2009.08.05 |
Ubuntu 에서 리눅스 개발환경 설정 (0) | 2009.06.22 |
Ubuntu에서 NFS setting (0) | 2009.06.19 |
Ubuntu에서 Samba setting (0) | 2009.06.19 |