비스타에서 "대상 폴더 액세스 거부", "권한이 필요합니다" 등등의 이유로 파일 못지우는 경우 다음과 같이 하세요.



1. 명령 프롬프트를 오른쪽 클릭해서 "관리자 권한으로 실행"합니다.

2. 지우고 싶은 파일 혹은 폴더에 대해서 다음과 같이 입력하세요. (예를 들어 "Program Files" 폴더를 지운다고 한다면)

takeown /f "Program Files" /r

3. 그다음 다음과 같이 입력하세요.

icacls "Program Files" /grant Administrators:F /T

그리고 지워보세요. ^^
Posted by 응이

댓글을 달아 주세요

Little endian과 big endian

etc 2009.09.05 09:38

사람은 processor보다 위대한 존재이죠. 그러니까 형 (big)이고요,
processor는 동생 (little)입니다. - 걸리버 여행기 -

 

숫자로 가득 메워진 - 영화 메트릭스의 오프닝에 다다다다 올라가는 듯한 - 기계의 언어 세상에서 그 숫자들을 제대로 해석하려면 한 가지 익혀두어야 하는 법칙이 하나 있습니다. 메모리 영역이나, 기계어 영역의 숫자들을 제대로 이해하려면 꼭 알아둬야 하는 법칙이기도 합니다.

 

아래의 내용은 어디선가 주워 들은 얘기를 다시 한번 재미 삼아 들려 드릴 테니, 잘 들어보세요. 흥미진진합니다.

 

 

 

사용자 삽입 이미지

 

" 같은 일을 하는데 방법이 두 가지가 있다면, 아마도 두 개의 서로 다른 회사는 서로 다른 방법을 채용할 가능성이 다분할 것입니다.  머피의 법칙이기도 한 이런 가능성은 서로 다른 칩디자이너가 메모리에서 데이터를 서열화하는 방법에도 또한 마찬가지로 통용됩니다.  걸리버 여행기에 등장하는 소인국은 매우 작은 나라인데, 그에 걸맞게 사소한 정치적인 문제를 가지고 있었습니다.   Big-Endian당과 Little-Endian당이 격론을 벌이는데, 그 격론의 내용이라는 것이 반숙된 달걀을 깨고자 할 때, 뭉툭한 끝(Big-End)을 먼저 깰 것인가 아니면 뾰족한 끝(Litttle-End)부터 먼저 깰 것인가라는 것 이었습니다. 1980년 4월 1일, 대니 코헨(Danny Cohen)이 지금에서는 유명하게 된 "On Holy Wars and a Plea for Peace"라는 책에서  워드에서의 바이트 오더링(Byte Ordering in Words)에 대해 논하면서 '엔디안'이라는 용어를 이 문제를 지칭하는데 처음 사용했습니다. 그 후 곧바로 이 용어는 고착되었고, 엔디안 이라는 용어는 Byte Ordering을 의미하게 되었습니다.   유닉스 프로그래머는 "NUXI 문제"라고 부르기도 하는데, 바이트 오더링에 착오가 생기면 'UNIX"라는 단어의 입력에 대해 앞뒤가 뒤바뀌어 'NUXI'라는 출력이 나오니까 말입니다. " 재미있죠?


 

이 이야기에서부터 시작하면 모든 processor는 Little Endian 또는 Big Endian중 하나를 사용하게 되는데, 이는 무엇을 의미하는 걸까요? 이것은 processor가 memory에 저장하는 방식을 의미하는데, 저장 방식이 다를 뿐이죠. 이 방식을 이해하지 못하면, 디버깅 시에 오류에 빠질 수가 있으니 꼭 이해해야 하는 부분 임을 이해해 주세요. 당부.

아래 그림을 보면 이해가 확실히 될 것입니다..

자, 그럼 예를 들어 dword 0x12345678, word 0x1234, 또는 byte 0x12를 0x1000번지부터 저장하는 방식을 볼까요? 번지 하나에는 1byte가 들어갑니다요. (dword는 4byte, word는 2byte, byte는 8bit 크기로 다룰께요.)

                                    0x1000   0x1001   0x1002  0x1003
Big Endian     dword       0x12       0x34      0x56     0x78
                      word        0x12       0x34
                      byte         0x12     

Little Endian  dword       0x78       0x56      0x34     0x12
                      word        0x34       0x12
                      byte        0x12
  

자, 그림을 보니 확 느낌이 오죠?  - 라고 말했지만, 중요한 것은 Little Endian은 그 크기만큼 무조건 거꾸로 읽는다 가 힌트입니다. -

자, 그럼 Big Endian과 Littel Endian은 어떤 차이가 있을까요?

   쉽게 말해서 "Little Endian은 상위bit (MSB)를 상위 주소에 저장을 하고 있습니다요"가 힌트입니다. 네 그렇습니다. Little Endian으로 처리를 하게 되면, Processor는 Software에서 정해준 type 크기 만큼 그대로 읽어와서 처리를 하게 되고요,  Big Endian의 경우에는    대신 낮은 주소부터 읽어와서 MSB로 넣어주면 됩니다. (MSB가 LSB쪽으로 정렬되어 있으니까요, MSB와 LSB는 사족에!)
 
   dword type의 0x12345678을 저장하는 것을 다시 그림을 그려서 본다면 아래와 같습니다.

                                0x12345678
                                 MSB      LSB

                      Big Endian                Little Endian
0x1003                0x78                          0x12
0x1002                0x56                          0x34
0x1001                0x34                          0x56
0x1000                0x12                          0x78

   
사실 어느 게 더 좋다고 말하긴 어려우나, ARM의 경우에는 Little Endian을 지원하니, Little Endian의 경우를 잘 알아 두는 것이 좋겠지요?

근데, 또 재미난 사실이 하나 있습니다.
우리가 소프트웨어를 구성할 때 Little Endian이냐 Big Endian이냐를 compile환경에서 설졍 해 줄 수가 있습니다. 물론 ARM 환경의 Embedded system이라면, Little Endian으로 Memory의 내용을 인식하는 것이 Default이니까, Compile할 때는 Little Endian으로 option을 주고 compile해야겠지요?

컴파일 버전 중 사용하는 ads 의 Compile flag들을 에서 확인해 보면, 다음과 같은 구문을 확인할 수 있을 것입니다.

#-------------------------------------------------------------------------------
# Compiler code generation options
#-------------------------------------------------------------------------------

END = -littleend#               # Compile for little endian memory architecture
....... (생략) ..........
CODE = $(END)
....... (생략) .........


자, 어떤가요? 간단하죠? 교훈이 하나 있어요. 뭐냐하면, 다음과 같은 논리입니다. 사람은 processor보다 위대한 존재이죠. 그러니까 형 (big)이고요, processor는 동생 (little)입니다. 그런 의미에서면, 사람이 읽기 편하게 메모리에 저장되면 big endian, 사람이 읽기 불편하면 little endian이라고 기억해 두면 잘 기억되겠죠?

* 사족 : NUXI 문제를 word씩 읽는다고 가정했을 때, Little Endian으로 NUXI으로 저장되어 있다면, Little Endian으로 읽으면 (1 word = 2 bytes) UNIX가 되지만, 그대로 Big Endian으로 읽으면 NUXI가 됩니다. 마치 띄어쓰기를 잘 못해 아버지가 방에 들어가신다와 비슷한 꼴인 듯한 기분인데요. 

 

        

ARM에서는 어떻게 Big Endian/ Little Endian 지원하는가요?

        기왕 Little Endian과 Big Endian 얘기가 또 나왔으니까 하는 말입니다. ARM의 경우, Little, Big Endian을 모두 지원하는데, 이건 어떻게 결정하느냐, ARM core를 채용해서 구현한 chip이 어떻게 생겼느냐에 따라 다릅니다. 보통은 외부에서 pin을 하나 설정해서 Low/ High로 Endain을 다르게 동작하게 만드는 것이 Alternative입니다만, chip에 따라서는 한가지만 지원하도록 아예 SoC를 하는 경우가 많습니다. 이런 설정에 따라서 compile을 할 때, Little, Big Endian을 제대로 setting해서 compile해줘야 합니다. 또는 이렇게 따로 설정하지 않은 경우에는 ARM은 default Little Endian이며, Co processor 레지스터 CP 15를 통해서 Big Endian으로 만들 수 있습니다.

 

 

 LSB와 MSB는 bit를 따질 때 높은 쪽 자리의 숫자이냐, 낮은 쪽 자리의 숫자이냐를 따질 때 쓰는 용어인데, 예를 들어, 8bit의 이진수가 10001000있다고 치면, 이때 맨 왼쪽 자리를 MSB (Most Significant Bit)라고 부르고요, 이 예에서는 1이 되겠죠. 그리고 맨 오른쪽 자리를 LSB (Least Significant Bit)라고 부르고요, 이 예에서는 0이 되겠네요. 그래서 상위 2bit를 지칭 할 때는 MSB 2bit이라고 하고 맨 왼쪽 두 자리 10이 되고요, 하위 3bit를 지칭 할 때는 LSB 3bit라고 부르고, 맨 오른쪽 세자리 000을 의미해요.

Posted by 응이

댓글을 달아 주세요

FPGA는 개발을 완성했을때 많은 불용게이트가 생기고
게이트를 프로그래밍 하기 위한 회로가 있어서
실지의 제품에서는 필요없는 회로가 되고
대량생산에 적용할 경우 코스트가 높아지는 원인이 됩니다.
그래서 완벽히 FPGA의 작동이 확인되면 모든 쓸모없는 회로와 게이트를
빼고 좀더 작은 면적의 웨이퍼를 사용하여
프로그램 불가능한 마스크타입의 회로로 만드는것이 ASIC입니다.
물론 FPGA도 ASIC에 속하지만 프로그램 가능한 ASIC 입니다.
원래 ASIC라 함은 FPGA,PAL,CPLD,GAL같은것도 모두 포함되지만
예전에는 ASIC를 개발할때 FPGA를 먼저 만들어 보는 과정이 없이
직접 ASIC을 타아겟으로 하여 그대로 설계하는 관습이 있었는데
그때의 관습때문에 특히 FPGA를 최적화 하여
마스크 타입의 ASIC으로 만든것을 ASIC 이라 합니다.
FPGA가 나옴으로 해서 ASCI의 개발 코스트가 아주 싸지게 된거지요.
SOC도 역시 ASIC에 속하고 개발과정은 ASIC개발 과정과 거의 유사합니다.
단지 아날로그 부분이 대폭 강화가 되어 있고 코일이나 대용량의
콘덴서 까지도 넣어서 칩한개에 필요한 제품의 모든 기능을
탑재하는것을 말합니다.
MP3칩 같은것이나 유전질병 진단을 위한 DNA칩,
CMOS 이미지 센서 같은것이 여기에 속합니다.
들어갈수 있는 부품의 제한이 없이 반도체 웨이퍼 위에 올릴수 있는 부품이라면
뭐든 사용할수 있는것이 일반 ASIC과 다릅니다.
DSP는 ASIC 과는 다른 종류로서 고속의 마이크로 프로세서에 해당합니다.
마이크로 프로세서가 단지 디지탈 신호만 처리할수 있는것에 비해
DSP는 아날로그 신호를 고속으로 처리할수 있도록 여러가지 대처가 되어 있는데
칩 내부에 곱셈기,부동소숫점 연산기가 하드웨어적으로 되어 있습니다.
물론 아날로그 신호도 직접 처리할수 있도록 아날로그 입출력 포트도
칩속에 내장되어 있습니다.
즉 DSP는 마이크로 프로세로 빠른 속도의 아날로그 신호를 디지탈적으로
처리하기 위해서 만들어진 마이크로 프로세서 입니다.
하지만 좀 옛날에 개발된 속도가 느린 DSP는
요즘의 프로세서보다도 느린경우도 많습니다.
도대체 DSP라고 볼수 없을 만큼 느리지만 DSP를 지향하여 만들어서
발표했기 때문에 DSP라고 부를 뿐입니다.
일반 마이크로 프로세서도 회로의 여러부분이 DSP처럼 하드웨어화 된것이
요즘은 많이 나오고 곱셈기 정도는 하드웨어화 하는것이 보통입니다.
하지만 시대의 조류에 따라 DSP는 마이크로프로세서보다 더욱더 빠른 속도로
아날로그 처리와 부동 소숫점 처리를 할수 있도록 설계합니다.
그렇게 일반 마이크로프로세서와 구별 시켜 DSP라는이름값을 하도록
고속의 아날로그 신호 처리를 강조하여 만든 마이크로 프로세서가
바로 DSP입니다.
그래서 DSP의 사용방법이나 프로그래밍 방법도
거의 마이크로 프로세서와 같습니다.
그러나 FPGA나 ASIC과는 완전히 다른것입니다.
DSP는 프로그램에 의해 하나하나의 명령이 페치되면서 해석되고 움직이지만
ASIC종류는 명령 해석과정이 없이 하드웨어가 직접 움직이니까요.
Posted by 응이

댓글을 달아 주세요

VxWorks명령어

etc 2009.05.12 16:04

*-* 목차 *-*
1. 태스크 관리용 명령어
2. 태스크 정보용 명령어
3. 시스템 정보 명령어
4. 시스템변경과 디버그용 명령어
5. 오브젝트 표시용 명령어.
6. 네트워크 상태표시용 명령어
*-* *-* *-* *-* *-* *-* *-* *-*


1. 태스크 관리용 명령어

  sp                디폴트 파라멘트를 갖는 태스크를 생성한다.
  sps              태스크를 생성하지만, 중단시켜 둔다.
  td                 태스크를 삭제한다.
  ts                 태스크를 중단한다.
  tr                  중단했던 태스크를 재개한다.
  period           임의의 함수를 정기적으로 호출하는 태스크를 생성한다.
  repeat           임의의 함수를 반복적으로 호출하는 태스크를 생성한다.
  taskIdDefault  디폴트(현재)태스크 아이디의 설정과 표시한다.


2. 태스크 정보용 명령어

① checkStack     

  인수로 태스크를 지정한 경우, 태스크의 스택정보 상태를 표시.
태스크를 지정하지 않은 경우, 전체 태스크의 스택정보 상태를 표시. (스택정보 상태 : 스택크기, 현재 스택바이트수) 

최대 사용스택 바이트수(HIGH)는 스택의 선두부의 미사용 바이트수 (MARGIN=SIZE-HIGH) 이다.
필요한 스택공간양을 알고 싶을 때나 스택오버플로를 검지하고 싶을 때 사용
② i                      

  시스템정보를 표시한다.
이 명령어는 시스템내의 태스크와 각 태스크에 관한 정보(상태, PC, SP, TCB주소등)를 표시한다.
메모리 절약을 위해, 이 명령어는 타겟에 대해 소개(?)를 반복한다.
그로 인해, 일관성을 잃은 스냅샷을 표시하기도 한다.
③ iStrict  

  i명령어와 같은 정보를 표시하지만, 타겟에대한 조회는 1번에 행한다.
도중, 메모리를 여분으로 소비하지만 정확한 스냅샷을 얻을 수 있다.
④ ti  

  태스크정보를 표시한다.
태스크의 TCB에 들어있는 전체의 정보를 표시한다.
태스크정보에는, i명령어가 표시하는 정보에 더해, 태스크의 전체 레지스터 및 TCB체인내의 링크를 포함한다. 파라메터를 생략하는 경우, 현재 태스크에 관한 정보가 표시된다.
⑤ w  

  태스크의 보유정보의 요약을 태스크별로 표시한다.
시스템내의 전체 태스크에 대해, 혹은, 인수를 지정한 경우, 지정태스크에 대해  taskWaitShow를 정지모드로 호출한다.
⑥ tw  

  해당태스크가 보유상태인 오브젝트에 관한 정보를 표시한다.
해당태스크에 관해, taskWaitShow를 장황모드(?)로 호출한다.
⑦ tt  

  스택 트레이스를 표시한다.
⑧ taskIdFigure

  태스크명을 지정하면 태스크 아이디를 알려준다.


3. 시스템 정보 명령어

  devs               타겟시스템이 인식하는 전체의 디바이스 드라이버의 리스트를 표시한다.
  lkup                심볼 테이블의 심볼 리스트를 표시한다.
  lkAddr             지정한 값에 가까운 주소의 심볼리스트를 표시한다.
  d                     타겟메모리를 표시한다.
                        시작주소, 메모리단위의 사이즈, 표시하는 단위수를 지정할 수 있다.
  l                      지정한 주소의 명령을 역 어셈블해서 표시한다.
  printErrno         최신의 에러 상태를 표시한다.
  h                     명령어 이력을 최대 20행까지 표시한다.
  help                 선택한 쉘명령어를 요약해서 표시한다.
  cd                   호스트의 work directory로 변경한다. (타겟에서는 무효)
  pwd                 호스트의 work directory를 표시한다.
  ls                    호스트의 work directory내의 파일 리스트를 표시한다.
  version             VxWorks의 버전정보를 표시한다.
  shellHistory       쉘이력을 설정 혹은 표시한다.
  printLogo          Tornado쉘의 로고를 표시한다
  shellPromptSet  C인터프리터의 쉘프롬프트를 변경한다.


4. 시스템변경과 디버그용 명령어
  ld                오브젝트 모듈을 타겟에 로드해, 실행중의 애플리케이션에 동적으로 링크한다.
  unld             동적으로 링크된 오브젝트 모듈을 타겟 메모리로부터 삭제해, 점유했던 영역을 개방
  m                 adr로 시작하는 width(byte,short,long)만큼의 메모리를 변경한다.
  mRegs          특정의 태스크의 레지스터값을 변경한다.
  b                  지정한 태스크 혹은 전체의 태스크에 대해 브레이크 포인트의 설정과 표시를 한다.
  bh                하드웨어 브레이크 포인트를 설정한다.
  s                  프로그램을 다음 명령으로 진행시킨다.
  so                 서브루틴을 1개 뛰어 건너 뛰어, 1줄씩 실행한다.
  c                   브레이크 포인트로부터 수행한다.
  cret               현재 서브루틴로 돌아 올 때까지 수행한다.
  bdall              전체 브레이크 포인트를 삭제한다.
  bd                 브레이크 포인트를 삭제한다.
  bootChange    보존되어진 부트 파라메터를 변경한다.
  CTRL+X or      reboot 타겟의 제어권을 타겟 부트롬에 반납한다. 타겟서버를 리셋해, 쉘을 재접속


5. 오브젝트 표시용 명령어
6. 네트워크 상태표시용 명령어

Posted by 응이

댓글을 달아 주세요

단말기 S/W 구조

etc 2009.05.11 10:42
  • rex: 퀄컴의 RTOS, 4KB ROM, 400B RAM, 500B 스택, 우선순위 스케줄링
  • Task


    •  watch dog task
      : 최상위 우선 순위를 갖고 모든 task 감시, 일정 시간 내에 특정 비트를 설정치 안ㅇㅎ으면 리셋
    • TMC  task
      : 3계층에서 동작하며 단말기의 호 처리를 총 감독
    • Diagnostic(진단) task
      : DM과 상호작용, 단말기 내부의 제어, 디버그 및 데이터 로깅, Uart와 USB I/O 포함
    • User Interface task
      : Handset task와 sound task 통해 입출력 처리, call manager와 연동하여 호 처리
    • TxRx task

      : Tx task -> 2계층에서 동작, 발신호 및 채널 검색등 송신 관련 처리
        Rx task -> Tx task 반대. ㅋ

    • NV task
      : 다른 task들을 위해 flash를 잃어 오고 저장,
    • Sleep task
      : 우선 순위가 매우 낮음
    • Call Manager task
      : 호 처리를 위해 UI와 TMC task의 인터페이스
    • SMS task

      : 문자

    • EFS task
      : 파일 시스템, MIDI와 같은 멀티미디어 파일 저장에 사용
    • PSDM task
      : App/UI가 자신의 현재 위치 정보를 얻을 수 있는 인터페이스
    • searcher task
      : 시스템의 타이밍 정보를 얻고 ,각종 시스템 정보 획등
    • Protocol service task
      : 무선 데이터 망을 위한 TCP/IP/PPP의 프로토콜 처리
    • UI task
      : 폰의 H/W에 display, sound, key entry에 대한 인터페이스
        기능 -> dial a num, make calls, menu change, display, display icons


      • 부팅시 초기화 수행
      • Giant loop -> 수행할 다음 행동들의 명령어 대기, 수행 후 다시 대기
      • signal -> input은 signals를 통해 waiting/processing signals
      • 계층 -> Dispatcher
               -> Handler
               -> state machine
      • ui로 시작 -> h : handler
                     -> s : state
                     -> x : eXternal interface
                     -> u : utility function
      • ui.c - Dispatcher layer


        • 가장 최상층
        • giant loop 구성
        • 입력에 대한 적절한 처리를 하는 함수로 이동
        • ui task가 시작 될 때마다 호출, start-up 초기화 의무

      •  Handler layer


        • ui task의 외부 입력 처리
        • 키 입력, 다른 task에서 올 명령, call back  타이머 명령등
        • 시그널 처리를 위한 함수 호출

      • signal handler


        • ui task 의 대부분 시그널 처리
        • 다양한 이벤트 형태로 시그널을 변환
        • 처리할 state machine으로 전달

      • key handler

        • HS task로부터 키를 누르면 처리
        • 이벤트로 변경
        • 이벤트 큐에 추가

      • Callback timer handler

        • 절절한 시간 간격의 시그널을 얻음
      • command handler

        • 다른 task로부터 온 메시지를 이벤트로 변경하고 state machine으로 전달
        • UI_CMD_Q_SIG 이벤트 받을시 command queue에 입력.
      • UI task와 Call Manager task 통신

        • 통화 시작, power on/off, 통화끝, 걸려온 전화에 응담(UI가 command를 보내는 경우)
        • CM이 events/responses 보내는 경우, 통화가 connect, release, alert exists
    • 부팅 과정

      • start-up : 리셋 처리부터 기본적인 입출력 장치의 초기화 과장
      • NAND는 (page로 액세스, 주소 접근 X)이기 때문에 MSM의 internal RAM에 부트코드를 실행시켜
        NAND의 내용을 RAM에 올린다.

        1. NAND의 부트로더 부분을 MSM의 부트 시퀀스 제어기가 internal RAM으로 복사 ,실행
        2. NAND의 DMSS를 SDRAM의 0x00000000 번지로 복사
        3. SDRAM으로 부터 2차 부팅 실행
      • bootapp.s가 bootstrap, CPU register 초기화, call main()
      • mobile.c의 main()의 rex_init() 실행
      • task 실행
    • call manager

      • 클라이언트 app가 DMSS와 AMSS 소프트 웨어를 접근하는 인터페이스
      • 클라이언트 APP와 DMSS 분리
      • 동작원리 -> 동기식
                     -> 비동기식 : 요청과 응답에 대한 callback


    • CDMA 2000 layer 1 : H/W 적인 동작 위주의 Physical layer
    • CDMA 2000 layer 2:

      • message transmission
      • guaranteed delivery
      • dectection of all duplicate MSG
      • exception reporting
      • error rate statitics -> stop & wait
                                  -> go bakc - N
                                  -> selective - repeat ARQ
    • CDMA 2000 layer 3 : DMSS
  • Posted by 응이

    댓글을 달아 주세요

    cygwin 메뉴얼

    etc 2008.10.24 10:18

    알아서 보고 해라 ㅋㅋ
    Posted by 응이

    댓글을 달아 주세요

    1

    Dream come true.
    응이

    달력

    태그목록