ITGenerations
임베디드 정보 정리 본문
1. EMS 개발 환경 구축이란?
리눅스가 설치된 호스트 PC에 타겟보드를 위한 개발 환경을 구축하는 것이다.
Host PC 혹은 Target B/D에 알맞는 OS를 설치하여 개발 환경에 적절한 환경을 구축하는 것을 EMS 개발 환경 구축이라고 한다.
2. EMS에서는 왜 HOST PC와 TARGET B/D가 필요한가?
임베디드 시스템을 구축하기 위해서는 프로세서가 탑재된 타겟보드, 소프트웨어 그리고 각종 입출력 장치들로 구성이 되어 있는데, 프로세서 자체로는 os가 없기 때문에 os를 설치하기 위해서, 파일을 설치하기 위해서는 Host PC가 필요로 한다. 다시 말하면, Target board와 Host PC의 개발 환경이 다르기 때문에, Host PC에서 편리하게 App, S/W를 개발하여 Host PC에
컴파일하기 위해 필요하다.
3. 임베디드 시스템이란 무엇인가?
마이크로 프로세스가 탑재되어있는 프로세서를 이용하며, S/W, H/W 그리고 외부입출력장치가 연결되어 있고 사용자가 요구하는 특정한 기능을 수행하며, 컴퓨터와 같지만, 컴퓨터는 아니며 더 넓은 포괄적인 의미를 함유한다.
시스템 구성에는 크게 하드웨어(프로세서, 입출력장치, 네트워크장치) 소프트웨어(OS-커널,시스템소프트웨어,응용프로그램,파일시스템) 으로 구성되어있다.
4. Toolchain이란 무엇인가?
타겟 시스템용 시스템 및 응용 소프트웨어 개발에 필요한 모든 환경을 통칭한다. 호스트 시스템에 설치되는 타겟 시스템을 위한 개발환경이다.
교차컴파일러 및 각종 라이브러리를 의미
5. Toolchain을 어떻게 빌드하는가?
#mount /mnt/cdrom 마운트한다
#cat /proc/mounts | grepcdrom 마운트 확인한다
#mkdir /XHYPER255 내용물을 HOST PC 디렉터리로 복사한다
#cd /XHYPER255/Toolchain
#ls
#cp hybus-arm-linux-R1.1tar.gz /usr/local/ /usr/local로 파일 복사하며, 툴체인을 묶어놓은 파일이다.
#cd /usr/local/
#tar zxvf hybus-arm-linux-R1.1.tar.gz 압축해제 PATH 추가 -> 어느 경로에 있어도 실행가능하게 한다.
#vi /root/.bash_profile
#source /root/.bash_profile source 명령어로 PATH 적용 시킨다 -> arm-linux-로 시작되는 Toolchain에서 사용가능
6. JTAG란 무엇인가?
Joint Test Access Group의 약자이며, 칩 내부에 Boundary - Scan Cell을 두어 외부 핀과 일대 일로 연결시켜 프로세서가 인위적인 동작을 수행할 수 있도록 하드웨어 및 연결 상태 등을 점검한다.
주요 기능은 회로의 배선과 소자의 전기적 연결 상태 점검하고 디바이스 간의 연결 상태 점검, 플래시 메모리 퓨징한다. 여기서는 보드에 대한 디버깅 기능보다 부트로더를 플래시 메모리에 퓨징하기 위한 용도로 쓰인다.
보드와 단자 사이의 거리가 좁아짐에 따라 발생하는 여러가지 문제점을 해결하기 위해 생겨난것이다.
JTAG가 제공하는 기능은 프로세서의 상태와 상관없이 디바이스의 모든 외부 핀을 구동시키거나 값을 읽어 들일 수 있는 제공/디바이스 내에서 모든 외부와의 연결점을 가로챔, 즉 외부로 나가는 각각의 핀들과 일대 일로 연결/각각의 셀은 serial shift regisher(boundary scan register)형성하기 위해서 서로 연결되어 있다./전체적인 인터페이스는 5개의 핀에 의해서 제어된다. TDI, TMS, TCK, nTRST, TDO/회로의 배선과 소자의 전기적 연결상태 테스트한다./디바이스가느이 연결상태 테스트한다./플래시 메모리 퓨징한다.
7. JTAG를 어떻게 빌드하는가?
#cd /XHYPER/Jflash-pxa255/ 디렉터리로 이동
#ls 제공되는 jflash프로그램으로 옵션 선택
#make clean makefile이 작성되어 있으면 make명령어로 JTAG소스가 컴파일 되며 Jflash-XHYPER255란 바이너리 생성한다.
#make
#ls
#./Jflash -Xhyper255 ... /IMAGE/x-boot255 위와 같이 실행하면 JTAG를 통해 flash 0번지부터 fusing할 수 있다.
8. Bootloader란 무엇인가?
시스템 부팅을 위해서 필요하고 플래쉬 메모리에 저장되어 잇다. 다른 기능으로는 하드웨어(MPU, SDRAM, FLASH, URAT, GPIO)등을 초기화 한다. 그리고 커널에서 이미지를 다운받으며 플래시 메모리를 제어한다. 부트스트랩 로더의 준말이기도 하다(Bootstrap loader)
9. Bootloader를 어떻게 빌드하는가?
#ls
Boot-XHYPER.tar.gz 타겟보드용 툴체인이 설치되어 있어야 된다.
#tar zxvf Boot-XHYPER.tar.gz
#ls src/include/x-boot255 컴파일이 완성되면 이게 생긴다. 이것은 부트로더 이미지가 되고 jflash를 이용하거나 이미 올라간 부트로더를 이용해서 보드에 올리면 된다.
#make
#ls
#.JflashXHyper255 ..../IMAGE/x-boot255 명령으로 타겟보드에 부트로더 퓨징 이제 타겟보드 리셋하면 부드로더 프롬프트상에서 여러가지 명령어 사용
10. Kernel이란?
리눅스 커널이 공개되어 있어 자유롭게 커널 제어가 가능하며 운영체제의 핵심이 된다. 컴퓨터 내의 자원을 사용자와 프로그램이 사용할 수 있도록 관리해주는 프로그램이다. 응용프로그램과 하드웨어 간의 조정자 역할을 한다. 여러 프로그램들을(프로세스들과 쓰레스들) 위해 메모리 관리를 하며 컴퓨터 자원을 배분해주는 역할을 한다.
11. Kernerl 빌드 및 설치는?
X-Hyper255A 커널 컴파일
linux-2.4.18-rmk7-pxa-xhyper255.tar.gz 로 컴파일하여 ZImage 생성하는 과정
#pwd
#ls
#make menuconfig -> kernel configuration 설정
#make dep -> 의존성 검사
#make zImage ->Kernel image 생성 / 오류없이 컴파일 되면 zImage생성
#cp zImage /tftpboot tftp를 이용해 보드에 올린다.
#pwd
#ls
#make munuconfig
1. make mrproper
-기존 커널의 의존성에 대한 설정 모두 제거
2. make menuconfig
-커널 환경 설정
--1. make munuconfig
---config.in을 읽어서 메뉴로 표현
--2. 메뉴 설정
--3. 설정 저장
---내용 2가지로 저장
--4. .confg
---Makefile에서 이용
3. make dep
- 커널 소스 파일의 의존성 확인
4. make clean
- 오브젝트 파일 및 구버전 파일 소스 삭제
5. make zImage
- 실행 가능한 커널 이미지 빌드
6. make modules
-커널에서 사용할 모듈 빌드
7. make modules_install
- 생성된 모듈을 /arch/arm/boot에 설치
12. Makefile은 어떻게 만드는가?
main.c
bar.c
car.c
C 문법에 맞게 정확하게 기술
$Vi Makefile
------------------------------------
foo : main.o bar.o car.o
gcc -o foo main.o bar.o car.o
main.o : main.c
gcc -c main.c
bar.o : bar.c
gcc -c bar.c
car.o : car.c
gcc -c car.c
clean :
rm -f foo *.o
---------------------------------------
$ls -lt
$file foo
64bit Exectable
$./foo
Good bye My Love
Hello World
$vi car.c
--------------------------------------
#include <stdio.h>
void car(void)
{
printf("Good bye My Love. \n");
}
--------------------------------------
$vi bar.c
--------------------------------------
#include <stdio.h>
void bar(void)
{
printf("Hello World. \n");
}
--------------------------------------
$vi main.c
--------------------------------------
extern void car(void);
extern void bar(void);
#include <stdio.h>
void bar(void)
{
bar();
car();
return 0;
}
--------------------------------------
$cd april april 디렉터리로 이동
$rm * 전부 삭제
$gcc -c main.c 컴파일
$gcc -c read.c 컴파일
$gcc -c write.c 컴파일
$gcc -o test main.o read.o write.o 세 파일을 하나로 묶음
$./test
test : main.o read.o write.o
gcc -o test main.o read.o write.o
main.o : io.h main.c
gcc -c main.c
read.o : io.h read.c
gcc -c read.c
write.o : io.h write.c
gcc -c write.c
13. vi명령어
$touch
$ls
tmp test
$rm tmp
$cd
$pwd
/home/it334
$ls -l
drwxrw_r__ sige name o -> directory
_rwxrw_r__ sige name o -> file
$touch tmp1
$ls -lt
$rm tmp
$rmdir test
$ps 현재 프로세스 상태
$ps -a
$ps -elf
$ps -elf > tmp2
$ls -lt
$cat tmp2
$ls -lt
$ cat tmp2
$more tmp2
$less tmp2
(위 세가지 명령어는 파일을 읽을수 있는 명령어들)
$grep kworker tmp2
$grep -n kworker tmp2
$ps -elf | grep kworker
$vi tmp2
방향키
왼쪽 H
오른쪽 L
아래쪽 J
위쪽 K
L -> H -> J -> K (동서남북)
shift + ; -> :
:se nu 넘버링
DD 한줄 삭제
U 복구
3DD 3줄 삭제, 3은 다른 숫자로 변경 가능
X 한글자 삭제
CW 변경할 문자 입력(수정)
VI 2가지 모드
편집모드 ESC
입력모드 I/A/O
:25 25번 줄로 이동
$ 해당 라인의 맨끝으로 커서이동
^ 해당 라인의 맨 앞으로 커서 이동
shift + z 저장하고 나옴
:q! 저장 안하고 나옴
:wq 저장하고 나옴
:wq! 저장하고 나옴
$head tmp2 tmp2파일의 상단 10줄만 출력
$head -20 tmp2 tmp 파일의 상단 20줄만 출력
$tail tmp2 tmp2파일의 하단 10줄만 출력
$tail -20 tmp2 tmp2파일의 하단 20줄만 출력
$DW 단어 삭제
yank
:1,$S/ROOT/root/g 1부터 끝까지 ROOT -> root로 변경
:25,50S/root/AAA/g 25부터 50까지 root -> AAA로 변경
14. linux cmd
cmd는 13번과 같이 다양한 명령어가 있다.
'Univ > 임베디드' 카테고리의 다른 글
0508수업자료 (0) | 2018.05.08 |
---|---|
임베디드 (0) | 2018.05.01 |
JFFS2/Ramdisk 개요/개발환경구축/tftp (0) | 2018.05.01 |
수업 교재(E-book) (0) | 2018.04.17 |
X-HYPER 관련 정보 요약정리 (0) | 2018.04.16 |