starup코드는 C소스상에서 액세스 하기 힘든 초기화 과정을 C코드의 main함수가 실행되기 이전에 실행되는

ASM코드 입니다. 따라서 주된 내용은 스택의설정, 각 메모리컨트롤러 설정, 익셉션처리 설정, 인터럽트 벡터테이블

설정등입니다. 따라서 startup코드는 프로그램을 작성할 때 항상 따라온다고 보시면됩니다. startup 코드 실행이

끝나면 C소스코드의 main함수가 실행되도록 하는 jump루틴이 들어가 있습니다. 다만 ASM코드만 즉 startup코드만

가지고 간단한 프로그램을 작성하기도 합니다.

 

  Boot코드는 부트과정을 돕는 프로그램으로 사용자에 의해 작성됩니다. S3C2440이나 2410은 NAND부트모드와

NOR부트모드가 있습니다(하드웨어 적으로). NOR부트모드에서는 NOR플래시의 0x0번지에 프로그램을 저장해 두면

그 프로그램이 바로 실행됩니다. 하지만 NAND부트모드는 NAND 플래시 메모리가 랜덤액세스가 가능한 메모리가 아니므로

NAND플래시에서 프로그램 실행이 되지 않습니다. 따라서 NAND플래시에 저장된 프로그램을 SDRAM으로 옮겨서

실행해야 하는데 이 과정을 사용자가 직접 구현해 줘야 합니다. 즉 이게 NAND부팅시의 부트코드가 되는것입니다.

실제프로그램을 실행하기 위해 그 프로그램을 로딩해주는 소형의 코드들이 부트코드로 보시면됩니다.

 

NAND부트 모드에서는 부트코드가 꼭 있어야하고 NOR 부트 모드에서는 있어도 되고 없어도 됩니다. 만약에 NOR부트모드에

서 부트코드를 사용한다면 부트코드가 0x0번지에 위치하고 실행될 프로그램은 NOR플래시 메모리 뒷부분에 위치 시켰다가

부팅될 때 부트코드에 의해 실행될 프로그램을 NOR플래시에서 SDRAM으로 옮긴다음 그 프로그램으로 점프하여 실행시킬 수

있습니다. 이렇게 하는 이유는 SDRAM이 액세스속도가 빠르기 때문에 가급적이면 프로그램을 SDRAM에서 실생시키기 위해

서 이고 부트코드에 의해 본 프로그램을 업데이트 하기 위해서도 사용합니다. 매번 JTAG장비로 NOR플래시에 writing할 수 없

으니 제품을 생산한 후에 부트코드에 의해 펌웨어를 업데이트 시키는 방법도 있습니다.

 
  부트코드에도 startup 코드가 포함됩니다. 부팅을 원하는 형태로 진행하기 위한 코드이므로 어차피 사용자 프로그램이나

마찬가지입니다. 따라서 기본적인 설정에 필요한 startup코드가 포함되어야 합니다. 다만 간단한 부트코드들은 startup코드

상에서 다 구현하기도 합니다.


Cross Compiler는 컴파일러가 생성하는 오브젝트 코드가 컴파일러가 구동되는 시스템의 오브젝트 코드가 아닌 경우를 말합니다. 이를테면, 인텔i386 아키텍처 머신인 PC에서 ARM 기반의 머신인 PDA등에서 돌아가는 프로그램을 컴파일한다고 할때, 이때 i386에서 구동되는 ARM컴파일러가 필요합니다. 이것이 크로스 컴파일러입니다.
따라서 크로스 컴파일러로 생성된 코드는 다른 기기로 옮겨서 작동하는 것을 전제로 하는 컴파일러를 말합니다. 따라서 컴파일이 이루어지는 시스템에서는 작동하지 않는 것이 자연스러운 귀결입니다.

Native Compiler는 컴파일러가 생성하는 오브젝트 코드가 컴파일러가 구동되는 시스템의 오브젝트 코드인 경우를 말합니다. 컴파일이 이루어지는 시스템에서 그대로 생성된 오브젝트 코드를 실행할 수 있다면 Native Compiler라고 부릅니다.


 -프롬프트 -> minicom (엔터)-

 1. setip, sethost, setmac, setenv, netopen 수행

 2. 1.번을 수행했다면 바로 netopen

 3. tftp zImage 0x31000000 (엔터)

 4. tftp ramdisk4.gz 0x30600000 (엔터)

 5. run 0x31000000 (엔터)

 6. ID : root // PW : yan2041

 7. ifconfig eh0 10.40.1.107 netmask 255.255.255.0 (엔터)
   (위에서 10.40.1.107은 네트워크에 연결된 자신의 보드 IP)

 8. route add default gw 10.40.1.254 (엔터)

 9. route (엔터) - 라우터를 확인

10. cd /mnt/nfs (엔터)

11. ls (엔터)
    (현재 폴더에 gendisk.ko와 gpio.ko가 있는지 확인!)
    (없거나, 허가 거부가 뜬다면, 직접 /home/계정ID/driver로 이동 후, 
     각 gendisk와 gpio폴더에서 cp  gpio.ko /nfs (엔터) 와 cp gendisk.ko /nfs (엔터)를 쳐서 이동 시킴)

12. insmod gpio.ko (엔터)

13. insmod gendisk.ko (엔터)

14. lsmod (엔터)

15. mkfs.ext2 /dev/gen (엔터)

16. mount /dev/gen /mnt/hda (엔터)

17. mount (엔터) - 제대로 되었는지 확인 함.

-------------------------------------------------------------------------------
금요일은 우선 여기 까지 확인!

 
모토로라 68010 마이크로프로세서와 함께 사용되었던 68451 MMU. 예전에는 MMU가 이와 같이 따로 분리된 하드웨어였지만 최근의 아키텍처에서는 프로세서와 같은 칩에 회로로 삽입된다.

메모리 관리 장치(Memory Management Unit, 줄여서 MMU)는 CPU메모리에 접근하는 것을 관리하는 컴퓨터 하드웨어 부품이다. 가상 메모리 주소실제 메모리 주소로 변환하며, 메모리 보호, 캐시 관리, 버스 중재 등의 역할을 담당하며 간단한 8비트 아키텍처에서는 뱅크 스위칭을 담당하기도 한다.

최신 아키텍처에서 MMU는 가상 주소공간을 2N비트 크기의 페이지들로 나눈다. 그 가운데 일부 페이지는 실제 메모리 주소의 한 페이지에 대응되는데, 대부분의 경우 가상 주소공간은 실제 메모리의 주소공간보다 크기 때문에 모든 페이지가 실제 메모리에 대응되는 것은 아니다. CPU가 가상 메모리 주소를 MMU에 넘겨주면 MMU는 그 주소를 받아 뒤쪽의 N비트는 바꾸지 않고 앞쪽의 나머지 비트를 그에 해당하는 실제 메모리 주소로 바꾼다. 이때 가상 메모리 주소와 실제 메모리 주소 사이의 변환을 위해 MMU는 변환 참조 버퍼(Translation Lookaside Buffer, TLB)라는 고속의 보조기억장치를 참조한다. 이 보조기억장치에 원하는 변환 정보가 없을 때는 더 느린 다른 방법으로 페이지 변환 정보를 얻어오는데, 이 페이지 변환 정보가 담겨 있는 자료구조를 페이지 테이블(Page Table)이라 한다. 페이지 테이블의 동작은 아키텍처와 운영체제에 따라 서로 다르다.

TLB나 PTE는 또한 그 메모리 주소가 캐시에 저장되었는지, 페이지가 쓰여졌는지(dirty bit), 프로세스에게 메모리에 접근할 권한이 있는지 등의 정보를 저장하기도 한다.

TLB나 페이지 테이블이 실제 메모리 주소를 가져오지 못하는 경우가 있는데, 이를 페이지 실패(page fault)라 한다. 대부분의 경우 페이지 실패는 가상 주소공간의 페이지가 실제 메모리에 없기 때문에 발생한다. 이 경우 운영체제가 그 처리를 담당하는데, 비어 있는 메모리 공간에 페이지를 할당하거나, 비어 있는 메모리 공간이 없을 경우 실제 메모리의 한 페이지를 빼내 하드 디스크에 저장하고 (이를 페이징이라 한다) 그 자리에 요구 받은 페이지를 할당한다.

페이지 실패는 메모리 보호의 목적으로도 사용될 수 있다. 어떤 프로그램이 접근이 금지된 주소공간에 접근하려 하면 MMU는 페이지 실패를 일으킨다. 이 때 운영체제는 금지된 공간에 접근하려 하는 페이지 실패를 처리하지 않고 프로그램을 중지시킴으로써 악의가 있는 프로그램이나 버그가 있는 프로그램이 중요한 데이터를 읽거나 쓰는 것을 막을 수 있다.

--------------------------------------------------------------------------------------------------

MMU는 가상 메모리 시스템을 관리하는 하드웨어 요소이다. MMU는 설계에 따라 별도의 으로 되어 있는 경우도 있지만, 일반적으로 CPU의 일부가 된다. MMU는 가상 메모리를 실제 메모리로 사상시키는데 필요한 표를 유지할 수 있도록 소량의 메모리를 가진다.

데이터를 읽기 위한 모든 요청들은, 그 데이터를 에서 즉시 읽을 수 있는지 또는 하드디스크 등으로부터 가져와야 하는지를 결정하기 위해 일단 MMU로 보내어진다. 만약 그 데이터가 메모리에 있지 않다면 MMU는 페이지 부재에 관한 인터럽트를 발생시킨다.

MMU는 또한 메모리의 단편화 문제를 해결하기도 한다.       [출처] MMU (memory management unit)


+ Recent posts