2010년 7월 5일 월요일

Media independent interface

Ethernet
- 미국의 DEC,Intel, Xerox가 공동 개발한 LAN의 모델
  data station간의 거리가 약 2.5km 내에서 최대 1024개의 data station상호간에 10Mbps로 정보를
  교환할 수 있는 지역적 network.
  IEEE 802.3 표준을 구현한 model중의 하나임.
- CSMA/CD방식
- 10Mbps 속도 (후에 100Mbps속도가 등장하는데, 이를 Fast ethernet이라 부름)
Gigabit ethernet
- ethernet의 속도를 높인것 → 1Gbps 속도, 즉 ethernet frame을 초당 Gigabit의 속도로 전송하는 것.
- 기본적으로 광 cable상에서 전송됨.

n BASE m
n: 전송속도 (Mbps)
m: 전송거리
n BASE x
n: 전송속도
x: 전송매체

MII(Media Independent Interface)
- Fast ethernet의 MAC block과 PHY chip을 연결하는 standard interface.
  10BASE level에서는 하나의 chip에 MAC과 PHY가 구현되어 있었으나,
  fast ethernet부터 PHY와 MAC이 나뉘어짐.
  이때, MAC과 PHY의 interface를 위한 것이 바로 MII.
  Gigabit에서는 MII를 확장한 GMII(Gigabit MII)를 사용, 근본적으로는 MII와 동일.
- Wiki says
  Being media independent means that any of several different types of PHY devices
    for connecting to different media (ie. Ethernet, fiber optic, etc.) can be used without
    redesigning or replacing the MAC hardware.

RGMII(Reduced Gigabit Media Independent Interface)
- ..specifies a particular interface between an Ethernet MAC and PHY.
- RGMII uses half the number of data pins as used in the GMII.
    RGMII Pins: consist of 12pins.



Q-phase1 block diagram


Q-phase2 block diagram



2010년 6월 7일 월요일

Kernel Porting

Kernel Porting
- 새로운 HW에서 커널이 동작할 수 있도록 프로그램을 수정하는 동작

I. 준비
II. Build for target
-------------------------------------------------------------------------------------------
준비
1. Target processor 선정
2. Processor Core 선정
  - i386
PC와 동일한 구조로 개발 환경 구성이 용이하다
오랜 기간 동안 사용되어 안정성 확보
  - ARM
전력 소모가 작아서 휴대폰이나 PDA와 같은 휴대 단말기에 많이 사용됨.
네트워크 제품에도 사용된다.
  - MIPS
고속의 처리기능 보유
고속 네트워크 장비에 많이 사용된다.
멀티미디어용으로도 많이 사용됨.(STB등)
3. Target machine 등록
   - ARM processor를 사용하는 target machine에 임베디드 리눅스를 포팅하고자 할때,
     설계자는 "ARM Linux" site에서 새로운 machine을 등록하여야 한다.
http://www.arm.linux.org.uk/developer/machines
   - 등록하는 주 목적은 등록후 생성되는 machine ID를 얻기 위해서임
→ arch/arm/tools/mach-types file.
   - in the site
machine registry → submit a new machine type → enter mail addr
→ enter info about new machine
4. Linux kernel source
   - web: http://www.kernel.org/pub/linux/kernel/v2.6
   - Linux 2.4.x  vs 2.6.x


   - 필요에 따라 target platform용 patch를 얻는다. (processor, target soc, target application)
   - kernel porting
대부분 S5PC100과 같은 soc의 경우 커널을 반도체 회사에서 제공
시스템 개발자는 제공되는 커널을 이용하여 Target machine에 맞도록 porting하는 작업이 필요하다.
5. kernel source 설치
   - install kernel source
tar zvxf ~/Resource/kernel/linux-2.6.33.2.tar.gz
   - 설치후 linux-2.6.33.2 폴더가 생성된다.
6. cross compiler설치:

Build for target
procedure:
kernel configuration → kernel compile → kernel img 설치 → test

1. Modify Makefile on top of linux directory
   - 변수 ARCH
ARCH := arm
   - 변수 CROSS_COMPILE
CROSS_COMPILE = arm-linux-
2. Configuration
   - 커널 설정
커널 설정은 커널의 일부 기능을 커널 이미지에 포함 할 것인지 아닌지를 설정하는 과정임
개발 도중 필요한 커널 옵션을 3가지 중 하나로 선택하여 커널에 포함여부를 선택한다.
   - 커널 빌드에 참가 여부 선택 방법
'Y' : 커널 빌드에 참가하여 커널 이미지에 해당 기능이 삽입된다. 그만큼 커널의 크기가 커짐
'N' : 커널 빌드에 참가하지 않는다.
'M': 커널 빌드에는 참가하지 않아 커널 이미지에 포함되지 않으나
       실행중인 커널에서 insmod / rmmod라는 프로그램을 통하여 적재 또는 삭제가 가능.
   - default kernel 설정
최초 커널 빌드시 커널 설정을 기존에 사용된 설정 값으로 커널을 설정하는 방법
arch/arm/configs 폴더에 default설정 파일들이 있다.
default configuration 방법: #make s5pc100_defconfig
   - 커널 설정 방법 3가지
행단위 설정: make config // shell script기바나의 configuration
메뉴형태의 설정: make menuconfig // 메뉴형태의 color/text configuration
graphical 설정 make xconfig // x-window based graphical configuration
* Kconfig file:
커널 설정이 가능하도록 만들어주는 파일로써,
이 파일의 내용에 따라 menuconfig에 설정값들이 표시됨.
   - linux/.config file
커널설정후 생성되는 파일로 설정된 커널 옵션을 알 수 있다.
make mrproper에 의해 삭제된다.
3. kernel compile
   - uncompressed kernel image
#make Image → linux/arch/arm/boot/ 폴더에 'Image' file생성
   - compressed kernel image
#make zImage → linux/arch/arm/boot/ 폴더에 'zImage' file생성
   - to erase all object files
#make clean



2010년 6월 4일 금요일

Boot Loader

Boot Loader
  기본적인 내용은 지난번 포스팅했던 내용을 참조
  → http://wayne867.textcube.com/45

1. Boot Loader의 역할
  - Target system 초기화
.부트로더는 전원이 입력되면 타겟 시스템이 정상동작 할 수 있도록 HW및 SW동작환경을 설정
  .불필요한 HW의 동작 중지, 시스템 clk설정, 메모리 제어기 설정 및 필요에 따라 MMU설정
.프로그램 동작에 필요한 재배치(relocation),스택 영역 설정 및 C에서 사용되는 변수 영역 설정 후
 C로 작성된 함수 호출 / '재배치' means 초기 nand에 있던 program을 DRAM으로 옮기는 작업.
.부터로더에는 필요에 따라 IRQ와 같은 예외처리벡터 및 핸들러도 작성되어야 한다.
  - Target system 동작 환경
.부트 방법, 부트 디바이스를 비롯한 네트워크를 이용한 부트를 지원하기 위한 네트워크 설정
 IP주소설정등 부트로더 동작에 필요한 정보를 설정
.설정된 환경 변수 값은 플래시 메모리 또는 EEPROM에 저장하여 관리.
  - system OS Booting
.일반적으로 임베디드 시스템의 OS는 flash memory에 탑재되어 있고 부팅과정에서
 주 메모리(일반적으로 DRAM)에 탑재하여 실행.
.시리얼, 네트워크 또는 USB를 이용한 실행하는 방법 지원
 -네트워크는 TFTP를 사용
 -USB는 네트워크에 비하여 별도 설정 없이 누구나 쉽게 사용 가능
 -UART를 이용한 탑재 방법(속도가 느려 용량이 큰 OS를 탑재하기에는 부적합)
  - Flash memory 관리
.임베디드 시스템에서 가장 효율적인 보조 기억장치
  .부트로더 탑재, 시스템에 전원이 인가되면 플래시에 저장된 부트로더 실행
.부트로더 및 시스템 동작에 필요한 환경 변수 저장
.플래시 메모리에는 시스템 운영체제 이미지 탑재
 
2. 특징
  - 프로세서에 의존성이 높다
.특히 시스템 초기화 과정의 모든 코드는 어셈블러로 작성된다.
.프로그래머는 프로세서의 architecture와 programmer's model에 대해 이해를 하고 있어야 한다.
  - Target system의 하드웨어에 의존성이 높다
.프로그래머는 target system의 하드웨어를 이해하여야 한다.
.특히 메모리 인터페이스, 주변 장치 등에 대하여 잘 알고 있어야 한다.
  - 가능하면 적은 크기여야 한다.
  - 대부분은 사용자가 직접 작성하여 사용한다.

3. 종류
  - LILO: Linux Loader는 x86 컴퓨터 기반의 리눅스에서 오래 전부터 사용되고 있음
  - GRUB: Grand Unified Bootloader는 GNU 프로젝트의 부트로더
  - EtherBoot: 디스크 없는 시스템에서 이더넷을 통해 부팅할 수 있게 하는 부트로더
  - Blob: Blob는 ARM프로세서 기반의 LART 하드웨어를 위한 부트로더
  - PMON:PROM Monitor, MIPS보드를 지원하기 위해 제작된 것
  - RedBoot: Redhat에서 개발되어 배포된것
  - U-Boot: Popular, PPCBoot와 ARMBoot 프로젝트를 기반으로 개발, ARM기반 Target 보드 지원.

4. U-Boot
  - 특징
.Linux와 유사한 구조(일부 소스는 linux용을 사용, linux img를 부팅하기 쉽도록 되어 있다)
.확장이 용이함(새로운 command 추가가 쉽다, configuration에 의한 dynamic한 기능추가/확장제공)
  - getting Source.
.http://sourceforge.net/projects/u-boot
.유사한 target machine의 소스를 개발하고자 하는 target에 맞도록 복사하고 설정 환경을 만든다.
.U-Boot을 configuration하고 빌드하여 최종 이미지를 얻는다.
.target에 탑재하고 실행하면서 보드에 맞도록 포팅한다.
  - 초기화 과정
.start.S file이 U-boot의 시작.
  - Build
.build configuration
  $cd ~Work/u-boot-1.3.4
  $make dtkc100_config
.의존성(Dependency)검사
  $make dep
.build U-boot
  $make
.빌드후 생성되는 files
  u-boot.map (U-boot memory map file)
  u-boot (ELF binary format의 U-boot img. debug시에는 이 파일을 이용)
  u-boot.bin (plane binary format의 U-boot img. flash에 탑재되는 img. code와 data만 있음).
  - boot loader 탑재
.개발된 부트로더는 target의 flash에 탑재되어 부트로더 기능을 수행함.
.
  - 환경변수 설정
.printenv / 현재 설정된 환경 변수 출력 / printenv
.setenv / 환경 변수 설정 / setenv [변수명] [설정값]
.saveenv / 설정된 환경변수 저장(nand에) / saveenv

  - download (kernel및 ramdisk등)
.loadb / 시리얼로 다운로드 / loadb [주소] [속도] / load 20008000 115200
.tftp / 네트워크로 다운로드 / tftp [주소] [파일명] / tftp 20008000 zImage
.이때 주소는 target의 destination주소임.

  - booting
.bootm 명령 사용
.bootm 20008000 / 20008000번지의 내용을 사용하여 booting
.자동부트
  bootcmd
  #setenv bootcmd 'tftp 20800000 ramdisk.gz;tftp 20008000 zImage;bootm 20008000'
  #saveenv

2010년 6월 3일 목요일

Embedded Processors

ARM(Advanced RISC Machine)
시장 점유율

1. ARM, 32bit RISC processor IP
 - ARM사는 직접 반도체를 제조하여 판매하는 것이 아니라 설계한 프로세서를 반도체 회사에
   Hard Macrocell 또는 Synthesizable core로 제공(RTL level code라는 의미 같음)
 - 반도체 제조회사 또는 SoC 제조사에서는 ARM사로부터 제공받은 ARM core와 주변장치를 추가하여
   SoC를 만들어 사용자에게 판매하거나 자체 제품에서 사용함.

2. ARM Architecture
  * Programmer's Model
Programmer's Model은 ARM architecture의 분류 기준으로써,
programmer가 program을 작성하는데 필요한 각종 정보를 의미한다.
(program means assembly language, not C, C++)
즉, architecture가 동일하면 programmer's model이 동일하다.(프로그램의 호환이 가능하다)
프로그래머가 알아야할 정보들:
- 명령어(Instruction set)
- 메모리 구조
- 데이터 구조
- 프로세서의 동작 모드
- 프로세서 내부 레지스터의 구성 및 사용법
- exception 처리 방식등

  * ARM architecture / processor

  * ARM Application processor
고성능

  * ARM Embedded processor
저가, 저전력


3. 그외 CPU cores
  * MIPS
MIPS(Microprocessor without Interlocked Pipeline Stages)는 MIPS Technologies에서 개발한
RISC processor임. 초기 32-bit architecture를 사용하였으나, 이후 64-bit architecture로 확장하였다.
업계에서는 일반적으로, 저전력 기능이 우수한 ARM을 mobile용으로 사용하고,
상대적으로 속도가 우수한 MIPS는 동영상 재생및 멀티미디어 기능 지원을 위한 STB용 등으로
많이 쓰인다고 한다.

   * 참고: STi7105
STi7105 IC는 'Low cost advanced HD decoding IC for STB'로써
그 내부에는 ST40-300이라는 core를 사용하고 있다.

ST40 series는 ST와 Hitachi에서 공동 개발한 'SuperH' 라는 RISC core를 기반으로 하고 있다.

참고 자료:



2010년 6월 2일 수요일

Embedded Linux 개발환경

1. Cross 개발 환경의 이해
embedded system은 특수한 작업을 수행하도록 만들어진 system이기 때문에,
개발 환경에 있어서 흔히 우리가 접하는 PC base의 환경이 아닌 경우가 대부분이다.
예를 들어 전자레인지, 냉장고에 들어가는 시스템을 개발한다고 할 경우, 여기에는 모니터나 키보드
등이 없으므로, 여기에 들어가는 시스템을 개발할 때는 PC에서 개발을 완료한 후에 전자레인지를
구성하는 시스템에 다운로드 하여야 한다. 이때 개발하는 PC를 Host system, 전자레인지를 target
system이라 한다.
    1) Target system
개발하고자 하는 임베디드 시스템을 말한다.
예) ARM 기반의 smartphone등
    2) Host system
Target system을 개발하기 위한 개발환경을 제공하는 시스템
target을 위한 어셈블러, 컴파일러, 링커 등의 호스트 둘과 target을 개발하는데 필요한 디버거 제공함
예) ARM 프로세서용 툴과 디버거를 가지고 있는 pentium PC
    3) 개발툴
Cross Compiler: 개발된 소스 프로그램을 다른 machine의 기계어로 번역하는 프로그램
    4) Downloading
생성된 실행가능한 binary image를 target 보드의 메모리에 탑재하는 동작
kernel과 file system image를 target에 탑재, 대부분의 boot loader는 download기능을 지원한다.
Interface: TFTP for ethernet / ZMODEM with serial / USB with Active sync.
Download 방법:
ROM/Flash에 탑재하여 실행하는 방법:
 - ROM writer를 사용하는 방법
 - JTAG dongle을 이용하는 방법
DRAM에 탑재하여 실행
 - target에 모니터 프로그램, 또는 boot loader를 탑재하고
   serial, ethernet, USB등을 이용하여 다운로드 함
 - JTAG dongle을 이용하는 방법
 - 전용 ICE를 이용하는 방법.
전용 ICE를 사용하여 디버깅 정보와 함께 탑재하여 실행
 - 디버깅을 할때 매우 편리함.
    5) Debug
target system을 실행하면서 프로그램의 실행상태, 메모리, 변수 등을 프로그래머가 확인하거나
제어하면서 오류를 찾아 수정하는 동작.
실행가능한 이미지가 반드시 디버깅 정보와 함께 메모리에 탑재 되어 있어야 한다.
디버깅 전용 ICE장비와 디버거 소프트웨어를 사용한다.  
ICE장비: In-Circuit Emulator(ICE)는 호스트의 디버거 와 함께 target system의 레지스터나 메모리의
       내용을 읽거나 변경할 수 있고, break point나 watch point를 설정할 수도 있고, 프로그램을
       step-by-step으로 실행할 수 있게 해주는 장치이다.
2. Host system 구성
    1) ARM을 위한 Embedded Linux source code download from web site
Kernel: ARM Linux kernel 2.6.33.2 or later
  http://www.kernel.org/pub/linux/kernel/v2.6
    2) Boot loader source code 준비 from web
개발자는 목적에 맞는 최상의 bootloader를 선택하여 준비하고 target에 porting하여야 한다.
실습에서는 U-Boot사용
http://www.denx.de/wiki/U-Boot
    3) Console monitor tool for monitoring target system
minicom
    4) Networking
개발 환경 구성을 위해서는 TFTP, BOOTP, NFS와 같은 네트워킹 툴을 필요로 한다.
    5) Cross compiler 설치
- ARM cross compiler를 호스트 리눅스에 설치
- PATH 환경변수 설정
   /root/.bash_profile 수정
          새로운 환경 변수 적용.
- tool 사용 예시



Embedded Linux 이해

1. 운영체제(Operating System, OS)란?
컴퓨터 시스템의 전반적인 동작을 제어하고 조정하는 시스템 프로그램들의 집합.

2. OS의 역할
하드웨어와 응용 프로그램 간의 인터페이스 역할을 하면서
CPU, 주기억장치, 입출력장치등의 컴퓨터 자원을 관리.

3. Embedded Linux
공개된 리눅스 커널과 각종 응용 프로그램 소스를
임베디드 시스템에서 동작하도록 최적화 하여 사용하는 운영체제
   * 특징
- 적은 메모리 사용
- 느린 CPU에서 동작
- 특정한 목적의 응용 프로그램 탑재
   * 장점
- GPL(GNU General Public License)를 따르는 공개 소스 소프트웨어
- 두터운 개발자층, 검증된 운영체제
- 모듈 지원(불필요한 부분을 빼고 필요한 부분 추가가 가능하여 이식성 우수)
- 유닉스와 유사한 운영체제 시스템
- 다양한 플랫폼 지원
   * 단점
- 개발 환경 설정이 까다롭다
- Real-time 기능이 취약하다
- 메모리와 전력 소모량이 많다(RTOS와 비교시)
- 다양한 윈도우 시스템이 제공되고 있으나 덩치가 크거나 안저화 작업이 필요하다.

4. Linux Kernel
   * Kernel?
- 운영체제의 핵심부분
- 하드웨어와 운영체제의 다른부분 사이의 중재자 역할을 한다.
   * Micro Kernel
- 커널의 기능을 최소화하고 가장 핵심 기능만 가진다.
- QNX, 카네기 멜론의 마크 3.0(Mach 3.0)
   * Monolithic Kernel
- 커널이 운영체제가 관장하는 모든 서비스를 가진다.(프로그램 실행을 제어하며 데이터와 파일관리)
- 유닉스, 리눅스 시스템
   * 구조
- Process Scheduler
운영체제의 심장이라 할만함.
CPU를 여러 프로세스가 공평하게 사용할 수 있도록 한다.
한 순간에 오직 하나의 프로세스만이 CPU를 점유 가능,
이때 scheduler는 여러 프로세스가 CPU를 공유하여 사용 가능하도록 해준다.
(멀티태스킹이 가능한 것은 바로 이 스케줄러의 역할)
선점형(preemptive):
  프로세스별 사용시간을 지켜보면서 정기적으로 스케줄링, Real time system에 필수적임
  Real time system에서는 중요하고 긴급한 작업을 처리하기 위해 언제든지 다른 작업을 멈추고
    시스템의 자원을 선점할 수 있는 선점형 구조가 필수적임.
비선점형(nonpreemptive):
    프로세스가 자발적으로 CPU사용권을 반납했을 때만 스케줄링,
  모든 작업이 공평하게 진행되며, PC의 윈도우 OS, Linux 등이 대표적임.
  각 프로세스는 time-slice동안 처리하고, time-slice가 지나면 다른 프로세스가 실행된다.
Time-slice: 각 프로세스가 실행되는 최소한의 시간 단위
- Memory Management
여러 개의 프로세스 메인 메모리를 안전하게 공유할 수 있도록 한다.
  - Virtual File System
리눅스는 모두 파일로 관리가 된다.
하드웨어 장치도 파일로 관리 된다.
모든 파일시스템에 대한 공통 인터페이스 제공.
(서로 다른 저장매체라도 user가 access하는 방식은 동일하게 해줌)
VFS가 지원하는 파일시스템:
디스크 기반 FS: HD, FD, CD-ROM, (block device)
네트워크 FS: 다른 네트워크의 컴퓨터에 속한 파일 시스템에 접근(NFS, Coda, AFS)
특수 FS: /proc FS(사용자가 커널의 데이터에 접근할 수 있는 인터페이스제공)
            /dev FS(디바이스를 표준 파일시스템으로 관리할 수 있는 인터페이스 제공)
Root(/) directory를 기준으로 파일 트리 구성.
(모든 파일시스템을 root FS의 서브 디렉토리에 마운트 하여 사용)
File system 사용전에 실행해야 할 동작:
등록(Registration):FS에서 구현한 함수를 커널에서 사용할 수 있도록 하는 동작
                          시스템부팅 또는 FS을 구현하는 모듈을 탑재할 때 등록
Mount: 파일 시스템을 사용하기 위하여 리눅스에 연결하는 동작
Root FS과 일반 FS
root FS: 시스템 부팅하는 동안 파일 시스템 설정 이후에 마운트
일반 FS: root FS 마운트 이후에 root FS의 디렉토리 tree에 마운트
              FS을 마운트하기 위해 mount() 시스템콜을 사용한다.
- Network Interface
표준 네트워크 프로토콜과 드라이버를 제공한다.
- Inter Process Communication(IPC)
프로세스 간에 서로 정보를 교환 할 수 있는 방법을 제공한다.
프로세스들이 상호간의 활동을 조정하기 위하여 프로세스간, 커널과 통신을 하기 위한 메카니즘
종류:
Signal: 간단하고 효율적임
Pipe
Socket
Message Queue: 프로세스간 메시지 교환
Semaphore
Shared Memory: 다른 프로세스가 사용하는 메모리 영역에 대해 직접 접근하여 읽거나 씀
IPC방법중 가장 빠르다.




첨기연 교육과정 정리

지난 5월 10일부터 28일까지 첨기연 교육을 다녀왔다
"임베디드 리눅스 전문가" 과정

교육 내용을 다음의 outline으로 간단히 정리해 본다.

1. Embedded Linux 이해
2. Embedded Linux 개발 환경
3. Boot loader 이해
4. Kernel porting
5. File system
6. Linux Application
7. Linux Device Driver