CentOS를 윈도우 원격을 통해 gui 방식으로 접근하여 여러 잡다한 이것저것... 을 하던 중 

 

굉장히 답없는 현상을 발견했답니다.

 

우선 제 CentOS 7 버전과 사용하는 프로그램입니다.

백업 관련 무료 프로그램으로 

DirsyncDirSyncPro-1.53-Linux

를 사용중입니다.

 

gui환경도 제공되고 어렵지 않은데다 자동으로 주기를 맞춰 백업해주기도 하고

sync기능까지 생각보다 훨씬 대단한 프로그램입니다.

 

허나 어째서인지 갑자기

분명 원격 접속이 아닌 

로컬에서 로그인 하면 잘뜨던것이

요렇게 화면이 나오질 않던겁니다.

 

버전이 문제인건지

java 가 문제인건지

기타 등등 삽질을 꽤 오래했답니다.

 

저렇게 

java : invalid source position for vertical gradient

이렇게 문구가 나오며 화면이 안나오길래

이게 문제인가 싶어 java관련 centos 에서 다 다운받아 설치하고 지우고

버전이 너무 높아져서 문제인가 싶어 java다운그레이도 해보고

웹에도 DirSync Pro 요 프로그램이 문제 인가 싶어

찾아봐도 별로 소용이 없었지요...

 

정말 문제 해결은 예상 못한곳에서 했었습니다.

바로

원격접속할때 설정 부분입니다.

 

맥에서 접근하든 윈도우에서 접근하든

원격접속할때

Display 속성에서

32bit 컬러가 아닌

16bit 컬러로 해주어야

정상적으로 아래와 같이 잘 나옵니다. ㅜ.ㅜ

굉장히 간단하면서도 어이가 없는 문제였답니다.

 

 

PS. java 관련 heap size 메시지 출력시

java -Xms1024M -Xmx2048M

이렇게 추가로 메모리를 주면 됩니다.


AT-BIOS

From OSGuru

OS (을)를 만들 때 잘 사용하는 BIOS 함수(AT 호환기종)

OS의 개발이 32 Bit 단계에 다다르면 사용할 수 없는 BIOS 함수들이기는 하지만, 부트 섹터나 OS 개발의 초반까지는 다음 BIOS 함수를 많이 사용하게 된다.

INT(0x10) : 비디오 관련

  • 비디오 모드 설정
    • AH = 0x00
    • AL = 모드(자주 사용되는 화면 모드만 설명)
      • 0x03:16색 텍스트, 80x25
      • 0x12:VGA 그래픽스, 640 x480x4bit 칼라
      • 0x13:VGA 그래픽스, 320 x200x8bit 칼라, Packed Pixel
      • 0x6a:확장 VGA 그래픽스, 800 x600x4bit 칼라
    • 반환값:없음


  • 커서 모양 설정
    • AH = 0x01
    • CH = 시작 라인
    • CL = 종료 라인
      • CH < CL라면 1개의 부분으로부터 되는 보통 커서
      • CH > CL라면 2개의 부분으로부터 되는 커서
      • CH == 0x20이면 커서는 표시되지 않는다
    • 반환값:없음


  • 커서 위치 지정
    • AH = 0x02
    • BH = 0(페이지 번호)
    • DL = x 좌표
    • DH = y 좌표
    • 반환값:없음


  • 점 출력
    • 굳이 이 함수를 이용하지 않고 바로 Video 메모리를 이용할 수도 있다.
    • AH = 0x0c
    • AL = 색상 코드(0 ~ 15)
    • CX = x좌표
    • DX = y좌표
    • 반환값:없음


  • 한 문자 출력
    • AH = 0x0e
    • AL = 문자 코드
    • BH = 0(페이지 번호)
    • BL = 문자의 색
    • 반환값:없음
    • 주의) beep(0x07), 백 스페이스(0x08), CR(0x0d), LF(0x0a)는 제어 코드로서 인식된다


  • 색상 코드를 대응되는 팔레트에 저장한다.
    • 16색 모드일 때만 사용가능하다.
    • AX = 0x1000
    • BL = 색상 코드(0 ~ 15)
    • BH = 팔레트 코드(0 ~ 63)
    • 주의) EGA 그래픽 카드와의 호환성을 유지하기 위해서 사용됩니다. 잘못 사용하면 상당히 복잡해지기 때문에 기본값 그대로 두고 사용하는 것이 좋습니다.


  • 팔레트 설정
    • AX = 0x1010
    • BX = 팔레트 번호(0 ~ 255)
    • DH = Red(0 ~ 63)
    • CH = Green(0 ~ 63)
    • CL = Blue(0 ~ 63)
    • 반환값:없음


  • 문자열 출력
    • AH = 0x13
    • AL = 옵션
      • 0x00:문자열의 속성을 BL 레지스터로 지정하고 커서는 이동시키지 않는다.
      • 0x01:문자열의 속성을 BL 레지스터로 지정하고 커서를 이동시킨다.
      • 0x02:문자열을 출력하고 커서는 이동시키지 않는다.
      • 0x03:문자열을 출력하고 커서를 이동시킨다.
      • 실제 데이터는 메모리에 [문자 코드] [칼라 코드] [문자 코드] [칼라 코드]와 같이 저장된다고 보면된다.
    • BH = 0(페이지 번호)
    • BL = 칼라 코드(AL 레지스터의 값이 0x01, 0x02일 경우에만 적용)
    • CX = 문자열의 길이
    • DL = x좌표
    • DH = y좌표
    • ES:BP = 출력할 문자열이 있는 곳의 주소
    • 반환값:없음


  • 제일 간단하게 사용할 수 있는 화면모드인 0x13의 사용법
    • 0x13번 화면모드는 그다지 해상도가 좋지는 않지만 Packed Pixel 모드이기 때문에 프로그래밍 하기가 편합니다. 우선 화면 모드를 변경하고 팔레트를 설정합니다.
    • 이 모드는 Video Ram의 0xa0000 ~ 0xafff의 64KB에 위치하게 됩니다. 정확히 말하면 320 x 200 = 64000이 되므로 62.5 KB라고 해야겠지만, VRAM는 0xa0000 ~ 0xaffff의 64 KB입니다.엄밀하게 말하면(자), 320 x200=64000이므로, 62.5 KB가 됩니다. 이 모드에서는 점 하나가 1바이트에 해당되기때문에 읽고 쓰기도 아주 간단합니다.


INT(0x11) : H/W 구성 확인

  • 컴퓨터에 설치된 H/W의 리스트를 확인한다.
    • 입력값 없음
    • 반환값:
    • AH == 장치 코드
      • 사용하는 사람이 거의 없기때문에 정확한 내용은 생략하겠습니다.


INT(0x12) : 시스템에 있는 메모리의 크기를 조사

  • 시스템에 있는 메모리의 크기를 조사
    • 입력값 없음
    • 반환값:
    • AX == 메모리의 크기(KB 단위)

INT(0x13) : 디스크 관련 함수

  • 디스크 시스템 리셋
    • AH = 0x00
    • DL = 드라이브 번호(0x00 ~ 0x7f:FDD, 0x80 ~ 0xff:HDD)
    • 반환값:
    • FLAGS.CF == 0 : 에러 없음
    • FLAGS.CF == 1 : 에러 발생, AH에 에러 코드가 저장된다.
      • 에러 코드 (FDD, HDD 모두 발생 가능한 에러 코드)
      • 0x01:디스크 Parameter가 잘못 전달되었다.
      • 0x02:Address Mark가 발견되지 않음
      • 0x04:섹터를 찾지 못했다
      • 0x09:DMA 오버플로우
      • 0x10:데이터 에러
      • 0x20:콘트롤러 이상
      • 0x40:탐색 실패(Seek Failure)
      • 0x80:타임 아웃
      • 에러 코드 (FDD일 경우의 에러코드)
      • 0x03:쓰기 금지된 디스크에 쓰기를 시도
      • 0x06:디스크를 찾지 못함
      • 0x08:DMA 오버플로우
      • 에러 코드 (HDD일 경우의 에러코드)
      • 0x05:리셋 실패
      • 0x07:Parameter 테이블이 정확하지 않음
      • 0x0a:섹터 Flag이 잘못되었음
      • 0x11:ECC 데이터 에러
      • 0xaa:드라이브가 아직 준비되지 않음
      • 0xbb:미정의 에러
      • 0xcc:쓰기 에러
      • 0xe0:상태(Status) 에러

출처 : http://blog.naver.com/leading79?Redirect=Log&logNo=20042106961


어제에 이어서 helloos.nas내용을 살펴보는것부터 시작합니다.

떡하니 갑자기 새로운 helloos.nas를 주는군요.. 그러면서.. 뭐 같은거라 하니..저도 뭐 ^^;;
그리고는 여기서 나오는 어셈블 명령어를 설명해 줍니다.

여기서 사용하는 어셈블러는 nask라는 것으로 OS제작기 No1에 올려놨답니다. ^-^;

; hello-os
; TAB=4

  ORG  0x7c00   ; 이 프로그램이 어디에 read되는가

; 이하는 표준적인 FAT12 포맷 플로피 디스크를 위한 기술

  JMP  entry
  DB  0x90
  DB  "HELLOIPL"            ; boot sector이름을 자유롭게 써도 좋다(8바이트)
  DW  512                       ; 1섹터 크기(512로 해야 함)
  DB  1                           ; 클러스터 크기(1섹터로 해야 함)
  DW  1                          ; FAT가 어디에서 시작될까(보통 1섹터째부터)
  DB  2                           ; FAT 개수(2로 해야 함)
  DW  224                       ; 루트 디렉토리 영역의 크기(보통 224엔트리로 해야 한다)
  DW  2880                      ; 드라이브 크기(2880섹터로 해야 함)
  DB  0xf0                       ; 미디어 타입(0xf0로 해야 함)
  DW  9                          ; FAT영역 길이(9섹터로 해야 함)
  DW  18                        ; 1트럭에 몇 개의 섹터가 있을까(18로 해야 함)
  DW  2                         ; 헤드 수(2로 해야 함)
  DD  0                          ; 파티션을 사용하지 않기 때문에 여기는 반드시 0
  DD  2880                     ; 드라이브 크기를 한번 더 write
  DB  0,0,0x29                ; 잘 모르지만 이 값으로 해 두면 좋은 것 같다
  DD  0xffffffff                  ; 아마, 볼륨 시리얼 번호
  DB  "HELLO-OS   "      ; 디스크 이름(11바이트)
  DB  "FAT12   "             ; 포맷 이름(8바이트)
  RESB 18                     ; 우선 18바이트를 비어 둔다

; 프로그램 본체

entry:
  MOV  AX, 0                 ; 레지스터 초기화
  MOV  SS,AX
  MOV  SP,0x7c00
  MOV  DS,AX
  MOV  ES,AX

  MOV  SI,msg
putloop:
  MOV  AL,[SI]
  ADD  SI, 1                     ; SI에 1을 더한다
  CMP  AL,0
  JE  fin
  MOV  AH, 0x0e              ; 한 글자 표시 Function
  MOV  BX, 15                  ; 칼라 코드
  INT  0x10                       ; 비디오 BIOS 호출
  JMP  putloop
fin:
  HLT                               ; 무엇인가 있을 때까지 CPU를 정지시킨다
  JMP  fin                         ; Endless Loop

msg:
  DB  0x0a, 0x0a                ; 개행을 2개
  DB  "hello, world"
  DB  0x0a                        ; 개행
  DB  0

  RESB 0x7dfe-$                 ; 0x7dfe까지를 0x00로 채우는 명령

  DB  0x55, 0xaa

; 이하는 boot sector이외의 부분을 기술

  DB  0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
  RESB 4600
  DB  0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
  RESB 1469432


뭐.. 오늘은 어셈블러 명령어에 대해서 많이 배워보는 시간일듯 하다.ㅎ
차근차근 하나씩 해보자.ㅎ

ORG : 'origin' 기계어가 실행시에 PC의 메모리내 어디에 로딩되는지를 nask에 가르쳐주기 위한 명령 (이로 인하여 $표시의 의미가 바뀌게 된다는데, 출력파일로부터의 번지수가 아니라 ORG에 지정된 주소로부터 몇번째 번지인지를 나타내게 됨)

JMP : 'jump' C언어로 따지면 goto ~~ 긴말이 필요 없다.ㅎ 그냥 지정된 분기로 이동한다.

레이블의 선언 ( ex) entry: ) : <-요 표시를 하면 바로 레이블의 선언이 된다. JMP명령이 이동할 곳을 지정할때 등에 사용된다.

MOV : 'move' 간단하게 이동 예를들어 MOV AX,0 은 AX = 0 과 같은 의미이다. C언어의 대입연산자와 같다고 보면 됨. (뭐 추가적으로 설명이 있자면 MOV SS,AX 라고한다면 SS = AX; 이지만 AX의 데이터가 지워지는 일은 없다. copy에 가까운 행동이다...ㅡ.ㅡ;; 근데 왜 MOVE?뭐 나도 모르지..ㅜㅜ)

CPU 내부의 대표적인 레지스터 8개
AX ........ 어큐뮬레이터(accumulator: 누적 연산기라는 의미)
CX ........ 카운터(counter: 수를 세는 기계라는 의미)
DX ........ 데이터(data: 데이터라는 의미)
BX ........ 베이스(base: 기초, 기점이라는 의미)
SP ........ 스택 포인터(stack pointer: 스택용 포인터)
BP ........ 베이스 포인터(base pointer: 베이스 포인터)
SI  ........ 소스 인덱스(source index: 읽기 인덱스)
DI  ........ 데스티네이션 인덱스(destination index: 쓰기 인덱스)
:: 이것들은 모두 16비트 레지스터로 뭐 읽을땐 이름보다도 에이엑스 에스아이레지스터 등 표기 그대로 읽고 있단다.;;
:: 또한 위의 나열은 기계어에 따라 레지스터 번호순으로 나열한것이다.

CPU 내부의 8bit 레지스터 8개
AL ........ 어큐뮬레이터 로우(low:낮다)
CL ........ 카운터 로우
DL ........ 데이터 로우
BL ........ 베이스 로우
AH ........ 어큐뮬레이터 하이(high:높다)
CH ........ 카운터 하이
DH ........ 데이터 하이
BH ........ 베이스 하이
:: AX = AH + AL 
        = AH(8~15bit) + AL(0~7bit)
그런고로 CPU는 총 아무리 해봐야 16바이트 밖에 기억을 하지 못한다.!! ㅡ.ㅡ;; 좀충격적이다. 위의 CPU구조는 16BIT 컴퓨터 이다. 허나 요샌 32bit, 64bit이다. 요건 요거 나름대로 예를 들어 32bit같은 경우의 레지스터리는 
EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI
요렇게 진행이 된다고 한다. E는 extend(확장)의 의미...ㅎ뭐 16bit로도 지금은 벅차다 ^^;;

세그먼트 레지스터
ES ........ 엑스트라 세그먼트(extra segment:덤 세그먼트)
CS ........ 코드 세그먼트(code segment)
SS ........ 스택 세그먼트(stack segment)
DS ........ 데이터 세그먼트(data segment)
FS ........ 명칭 없음(덤 세그먼트 2번째)
GS ........ 명칭 없음(덤 세그먼트 3번째)
:: 16bit 레지스터 이다. 이 설명은....... 아쉽지만 내일 한다고 한다.ㅡ.ㅡ;;;쭈욱~~ 설명해주면 안되나?;;
다시 저위의 helloos.nas의 어셈블로 짜여진 소스를 보자면

MOV SI,msg
:: SI=msg 라는 표현이 맞는거지만 msg라는것은 레이블이므로 레이블에 해당되는 주소부분은 SI에 넣으라는 표현으로 생각하면 된다.

MOV AL,[SI]
:: 값자기 명령어 설명을 하다가 이부분에서 메모리 설명이 나오게 되네요 저도 이걸 어찌정리해야할지 난감하군요.ㅜ
   뭐 그래도 설명을 쭈욱 해보자면 이제껏 16bit CPU는 총 16바이트밖에 저장을 못한다는 아주 불우한 사실을 알게되었습니다. 네 바로 그겁니다. CPU는 처리장치 아니 처리밖에 못하게끔 만들어진 것이지요 그럼 그 많은 크기의 데이터들은 어떻게 하느냐 바로 RAM에 저장이 되어서 CPU가 1명령어씩 처리해주는것이지요 뭐 그렇다는 겁니다. 메모리를 소개해야 저 []가 설명이 되네요 .^^;
:: MOV AL, BYTE [SI] 와 위의 표현은 같은 표현으로써 AL에 메모리의  SI번지에 해당하는 데이터를 옮겨라 입니다.ㅎ 이부분이 중요하죠 되지꼬리 별표 땡땡 ㅎㅎ BYTE와 같은 표현으로는 WORD, DWORD라고 있습니다. BYTE가 8bit WORD 16bit DWORD 32bit입니다.ㅎ
:: MOV WORD[678], 123 이라는 명령구문에 대해 잠깐 살펴보자면 메모리의 678번지와 679번지에 걸쳐서 123이라는 데이터를 넣어라 입니다만 여기서 단한가지 주의하고 놀라운 사실이 678번지에 123에 해당하는 01111011의 데이터가 들어가고 0에 해당되는 00000000의 데이터가 679번지에 들어가 진다는 것이지요 이것은 CPU설계부터가 그런것이라 무조건이라고 하니 어쩌겠습니까 잘 알아둘수 밖에 책의 그림의 설명이 너무 자세하고 분명하게 나와서 ㅎ 그대로 붙여보아요.ㅎ

 


ADD : 더하기

CMP : 'compare' 비교하라 ( ex) CMP AL,0 )
JE : 'jump if equal' CMP명령시 두 값이 같을경우 실행 ( AL == 0 일 경우 실행하라는 의미)

INT : 'interrupt' 방해하다. 자세한 설명은 다음기회에...ㅡ.ㅜ;
BIOS(Basic input output system)
OS제작자가 자주 사용할 것 같은 프로그램을 PC제조사가 미리 준비해둔 매우 고마운 물건 !?!!;; 이라고 소개가 되어있네요 처음 알았읍니다. 요런 용도일줄은..ㅋㅋㅋ

INT 뒤의 숫자를 적게 되는데 이를 통하여 BIOS내부 함수를 호출한다고 합니다.
뭐 자세한 내용은 AT-BIOS라는 글 참조해주세요 ^-^;;

HLT : 'halt' CPU를 정지시킨다는 의미랍니다.

아래는 위의 어셈블리어로 작성된 소스의 내용을 C언어식으로 다시 써본것입니다. 역시 C가 이해가 쉽네요.ㅎ;;;;
 entry:
    AX = 0;
    SS = AX;
    SP = 0x7c00;
    DS = AX;
    EX = AX;
    SI = msg;
putloop:
    AL  = BYTE [SI];
    SI = SI + 1;
    if( AL == 0 ) { goto fin; }
    AH = 0x0e;
    BX = 15;
    INT 0x10;
    goto putloop;
fin:
    HLT;
    goto fin;

자.. 여기까지하면 어셈블리어에 대한 설명과 우리가 만들어보았던 간단한 Hello OS도 살펴본 셈이 된다. CPU의 내부구조와 BIOS RAM의 관계까지 알게되었다.

여기서 한가지의 포인트가 존재하는데 바로 ORG의 번지이다.
고정으로 지정되어있는 번지.. 왜 거기서부터 시작되어야 하는가를 설명한다면
0x00007c00 ~ 0x00007dff : 부트섹터가 읽혀지는 어드레스
부트섹터 따로 어떻게 설명해야 좋을지 모르겠지만 간단하게 컴퓨터가 켜지자 마자 건드는 곳! 이라고 하면 되겠다. 내가 만들 OS의 메모리의 시작주소들을 심어놓을곳? 이라고 이해하면 되려나?어떻게 이해해야 할지는 모르겠지만 간단하게 부트섹터에 대해 저자는 이렇게 말하고 있다.

[ 디스크 이미지 전체를 nask로 만드는 것이 아니고, nask로는 일단 512바이트의 부트섹터만 만들고 나머지는 디스크 이미지 관리툴로 만든다. ] 라구... 뭐 부트섹터가 시작이라는 것과 거기에 모든 프로그램을 심는 것이 아니라 시작할 프로그램의 주소 번지를 심어두면 된다!?라는거겠지 ^^;;;

자 이렇게 어셈블리어로 프로그램을 짰다면 당당히 테스트 해봐야 할것이다.
헌데 복잡하게 어셈블 파일을 어셈블러로 컴파일하고 컴파일된 파일을 img파일로 만들고 이렇게 두번의 과정을 거친후 플로피 디스켓에 담아 테스트를 해야하는 것이다.;;;ㅡ.ㅡ;;

이 복잡한 과정을 쉽게 해결하기위한것이 바로 Makefile의 도입!!!
 #파일 생성 규칙

ipl.bin : ipl.nas Makefile
    ../z_tools/nask.exe ipl.nas ipl.bin ipl.lst

helloos.img : ipl.bin Makefile
    ../z_tools/edimg.exe imgin:../z_tools/fdimg0at.tek/wbinimg src:ipl.bin len:512 from:0 to:0 imgout:helloos.img

우선 저 위의 내용을 소개 하기전에 저자가 사용하는 z_tools에 대해 설명하고자 한다. 간단하게 nask나 gcc, make 등의 툴을 모아놓은것이다. 가상머신 qemu까지 있으므로 위의 저대로 실행을 한다면 바로 플로피디스켓을 이용한 VMware방식을 사용하지 않더라도 에뮬레이터로 돌려볼수 있는것이다.

 
그럼 다시 본문으로 돌아가서
#은 Makefile에서 주석과 같은 역할.
ipl.bin : ipl.nas Makefile
:: ipl.bin을 만들고 싶으면 먼저 ipl.nas 라는 파일과 Makefile이라는 파일이 갖추어져있는지 확인하시오. 갖추어져있다면 자동으로 실행됩니다.

뭐 이런 Makefile을 통해 여러가지 배치파일들을 간소화하고 명령어들을 묶어버리는 것이지요 ^^: 요부분은 깊게 다루지 않도록 하겠습니다.ㅎ

오늘은 어셈블러와 간단한 Makefile을 알아보는것으로 마치게 되네요 ^^! 이렇게해서 OS!! 되는거니? 그런거니? ㅎㅎㅎ;;

 
 

OS = 운영체제
정말 어려운 단어입니다. 대학교 시험 시간에도 자주 나오고... 제 인생의 단 두개뿐인..최악의 학점을 받았던 과목이기두 하구요 ^^;;; ㅡ.ㅜ;;; 여튼 그래도... 여튼 매력있는 단어이죠 조금알면 알수록 더 깊이 알아가게되고 지금 사용하고 있는 운영체제의 종류나 그 성향등도 궁금해지는게 많은게 당연합니다.
제 꿈이! 인공지능에 있다보니... 임베디드나 요런 분야에 관심이 가는데 OS또한 모르고 가려해도 갈수가 없더라구요 그래서 여러권의 책도 관심있게 보구 사기도 했으나 오늘 !! 드뎌 쾈하구!! 꽃히는 책을 만났답니다.
 OS구조와 원리 - OS 개발 30일 프로젝트 - _한빛미디어_(카와이 히데미 저, 이영희 역, 노재현 감수)
책 광고하려고 쓰는건 아니구요 ^^; 책의 1장전.. 프롤로그? 요걸 읽었는데 작가의 대화하듯 프로그램을 소개하는 그 어감과 ㅎ 뭐 다소 파격적인 30 일만에 만드는 OS라는 거에 이끌리게 되어 ^^;; 이렇게 하루하루 읽어 가보기로 했답니다.ㅎ
쩝..^^;; 포기하지 않고 30일만에 끝내야 할터인데..ㅜㅜ 그게 가장큰 걱정이네요.ㅎ 화이팅!!

뭐 무작정 따라하기 느낌이니 두서가 없어도 ^^;; 이해해주세요. 꾸벅 --) __) --) ^^;;

우선 갑자기 엄청 간단한 hello world라는 메시지만 출력되는 OS를 만듭니다.! ㅎㅎ

bz.exe 라는 프로그램을 이용해서 만드는데요
기계어를 다이렉트로 만들어주는 프로그램이랄까나요?;;
뭐 어디 찾아보니 게임 핵같은데도 쓰이는것 같습니다만 ^^;;;;;거기까진 모르겠구요
책에서 소개된 페이지는 막힌 페이지더라구요...ㅜㅜ 그래서 무식하게 일본 야후 들어가서 c.mos bz로 검색하니 ㅎㅎㅎ 나오더군요 ^^;; 책과 같은 버전으루..ㅎㅎㅎㅎ
뭐 그래서 냅다 다운받아서 아래와 같이 열심히 타이핑 했답니다.ㅜㅜ;;

bz.exe : 바이너리 에디터의 일종으로 간단하게 직역하면 2진수 편집기 ^^!


ㅎㅎ 이게 바로 BZ (바이너리에디터)입니다.ㅎㅎ

뭐 그냥 이게 다에요 ...;;;; 이룬.ㅜ;
그리고는 아래와 같이 쭈욱~~ 따라하시면 됩니다.
우선은 아래와 같이 절대 틀리지 않게 타이핑 하시면 되요 스페이스는 자동이니 뭐 무시하시고 열심히 입력하시면..ㅎㅎ 뭐 됩니다.;;;


이렇게 쭈욱 숫자랑 영어만 .. 뭐 아시는분은 아시겠지만 16진수로 0번지부터 쭈욱 입력해 나가시다 보면 옆에 자동적으로 뭐가 막 나타나는데요~~ 뭐 말그대로 자동으루요 ^^ㅎ 요게 엄청 신기하더군요....ㅎ
저아래 나지막히 겨우 읽을수 있는건 hello, world 요부분?ㅎ

뭐 우선 백문이 불여일견!! 한번 보시죠! 계속해서 입력합니다. 00만 .~~ 언제까지? 168000번지까지.. 왼쪽이 주소번지를 가리키는 거거든요.ㅎ 뭐 계속해서 넣으세요!! 쭈욱!! 팁은 Copy&Paste가 되는거니깐요 ^^;; 요거 잘쓰시면 되요.. 뭐... 한가하시다면 00을 계속 누르라고.. 저자가 말하더라고요.. 제가아니구 책 저자가...ㅡ.ㅡ;;



이렇게 00~을 쭈우~~~~욱 원없이 복사하고 나니.... 갑자기

0001F0주변과 001400주변에다가.. 다음과 같이.. 00이 아닌 숫자를 넣어주어야 한다는군요.;; 나참 어이없어서..뭐 우선 하라는대로 해야죠 ^^;;



처음엔... 이글쓰기 전까지만 해도.. 0001F0 주위에 값들을..바꾸는걸 몰랐었답니다.ㅜ;; 다시보이니 보이는군요.. 헌데 신기한건.. 그 주위의 값들 고치지 않고 돌려봤는데 되던걸요 ^^;; 뭐..;; 중요한건 아니었나봐요.ㅎ;;

여튼.. 잘 모르는 관계로 패스~~

그리고 Save 를 누르고는 helloos.img 로 저장을 합니다.ㅎㅎㅎ~~ 헬로~~OS~~

그리고는 갑자기 황당한 요구를 합니다.;;
이 시대에.. 플로피 디스켓을 이용해서 부팅해보라합니다.ㅡ.ㅜ;;
지금이 어느시대인데. ..ㅡ.ㅜ;;

ㅋㅋㅋ 뭐.. 그래서 VMware로 가상머신으로 돌리기로 맘먹었지요..ㅎ
VMware 환경은.. 간단하게 Setting했답니다. ㅎ


 

VM의 간단한 셋팅입니다.
VMware Version은 7.1.0 build-261024 를 사용합니다.ㅎ

중요한 포인트는 플로피 디스켓입니다.
위와 같이 Use floppy image file을 선택해서 위에서 열심히 BZ로 작업하고 저장했던 파일을 선택합니다.

그리고 당당하고 과감하게!! VM 가동!!ㅡㅡㅎ

참... 아주... 깜찍하죠? ㅎㅎㅎㅎ
그래도 감개가 무량합니다. 오오~~ 오오~~ 오오~~ 3번하고 나니.. 뭐 별다른 감흥은 없더군요.ㅜㅜ;;
OS라는게.. 참.. 하드웨어 장치를 쓰기 편하게 해주는 프로그램이다!! 라고 생각을 하면서.. 구동자체는 간단하구나.. ㅋㅋ
뭐 별생각이 다들면서.. 결론은.. 신기하더군요.ㅎ 재밌꾸!! 흥미진진하잖습니까? 나만 그런가 ^^;;; 뭐 여튼..다음 단계로 ㄱㄱㄱㄱㄱ~~~

뭐 끄는 건.. 전원을 눌러서 꺼버리라네요.ㅜㅜ;;
자 그렇게 전원을 끄구 계속 해서 궈궈궈궈~~

; hello-os
; TAB=4

; 이하는 표준적인 FAT12 포맷 플로피 디스크를 위한 기술

  DB  0xeb, 0x4e, 0x90
  DB  "HELLOIPL" ; boot sector의 이름은 자유롭게 써도 좋다(8바이트)
  DW  512  ; 1섹터의 크기(512로 해야 함)
  DB  1  ; 클러스터의 크기(1섹터로 해야 함)
  DW  1  ; FAT가 어디에서 시작될까(보통은 1섹터째부터)
  DB  2  ; FAT의 개수(2로 해야 함)
  DW  224  ; 루트 디렉토리 영역의 크기(보통은 224엔트리로 한다)
  DW  2880  ; 드라이브 크기(2880섹터 해야 함)
  DB  0xf0  ; 미디어 타입(0xf0해야 함
  DW  9  ; FAT영역 길이(9섹터로 해야 함)
  DW  18  ; 1트럭에 몇개의 섹터가 있을까(18로 해야 함)
  DW  2  ; 헤드 수(2로 해야 함)
  DD  0  ; 파티션을 사용하지 않기 때문에 여기는 반드시 0
  DD  2880  ; 드라이브 크기를 한번 더 write
  DB  0,0,0x29 ; 잘 모르지만 이 값으로 해 두면 좋은 것 같다
  DD  0xffffffff ; 아마, 볼륨 시리얼 번호
  DB  "HELLO-OS   " ; 디스크 이름(11바이트)
  DB  "FAT12   " ; 포맷 이름(8바이트)
  RESB 18   ; 우선 18바이트를 비어둔다

; 프로그램 본체

  DB  0xb8, 0x00, 0x00, 0x8e, 0xd0, 0xbc, 0x00, 0x7c
  DB  0x8e, 0xd8, 0x8e, 0xc0, 0xbe, 0x74, 0x7c, 0x8a
  DB  0x04, 0x83, 0xc6, 0x01, 0x3c, 0x00, 0x74, 0x09
  DB  0xb4, 0x0e, 0xbb, 0x0f, 0x00, 0xcd, 0x10, 0xeb
  DB  0xee, 0xf4, 0xeb, 0xfd

; 메세지 부분

  DB  0x0a, 0x0a  ; 개행을 2개
  DB  "hello, world"
  DB  0x0a   ; 개행
  DB  0

  RESB 0x1fe-$    ; 0 x001fe까지를 0x00로 채우는 명령

  DB  0x55, 0xaa

; 이하는 boot sector이외의 부분을 기술

  DB  0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
  RESB 4600
  DB  0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
  RESB 1469432


바로 어셈블로 위와 같은 프로그램을 만드는거다.ㅎㅎ
뭐 여기부턴.. 뭐랄까.. 훔.. 심오하달까? 왠지 모르고 막무가내로 끌려간달까?
따라하래서 따라했지만.. 내꺼는 아닌듯한 그런기분? 훔..ㅡ.ㅡ;;

뭐 왠만한건 주석으로 나와있지만..
약간의 소개를 더 하자면

DB : 'data byte' 파일의 내용을 1바이트만 직접 쓰는 어셈블러의 명령어 소문자 'db'도 사용가능
RESB : 'reserve byte' 바이트 예약? RESB뒤의 나오는 숫자만큼 띄어놓는다.
           (단 여기서 사용되는 nask 어셈블러에서는 숫자만큼 0x00으로 채워놓는다.)
DW : 'data word' 16비트 2바이트
DD : 'data double-world' 32비트 4바이트
RESB 0x1f-$
 : 채워야 할 0x00의 개수를 유동적으로 알아서 채워주게끔 만들기 위해서 사용..?;;; 잘 이해되지 않는군요.ㅜ

뭐 첫날은.. 어셈블러를 이용해서 OS를!?아직 OS라 불러야 할지는 모르겠지만 여튼 돌아가는것!!
OS 끝까지 정복해 보겠으~~ 아자아자!!ㅎㅎ


첨부파일은 바이너리 에디터 bz와 nask라는 어셈블러 nas파일로 만들어준후에 어셈블러를 통해서 img파일을 만들면 된다.
ex) nask.exe helloos.nas helloos.img

간단한 스위칭 대수의 기본 성질... 매번...까먹어서 다시 찾곤하다니..ㅜㅜ 이젠 안까먹어..ㅋㅋㅋ

a + 0 = a                a + 1 = 1                a + a' = 1
a * 1 = a                a * 0 = 0                a * a' = 0

a + a = a                a * a = a

(a')' = a

a(b+c) = ab + ac     a + bc = (a+b)(a+c)

DeMorgan 법칙
(ab)' = a' + b'
출처:디지털시스템(Alan B. Marcovitz)_인터비젼

하나씩 해놓은것에 대해서 요렇게 조그맣게라도 기록을 남기지 않으면... 점점 굳어져가는 제 뇌의 기능에 의하여 자꾸 지워지므로.. 요렇게라도 글을 남겨보려고 적습니다. ^^; 처음 적는 포스팅이니... 궁금하신점이나 기타 문의사항 완전 환영입니다.
^-^

Fedora에 다윈 스트리밍 서버를 설치해보았습니다.

우선... 기본적인 자료는 네이버에서 블로그 검색해보시면 많이 나와있구요.. 그중에 조금!! 퍼왔어요 ^^; 조금 많이~~ 정작 제가 문제됬던 부분은...어이없게 해결했지만..30분이라는 무려 30분이라는 시간 소모가..ㅜㅜ;
잡담은.. 여기까지 하구 설명시작 하겠습니다.

우선 제 컴퓨터의 설치 환경입니다.


OS : CentOS

우선 실행하기 전에 해줘야 할일들 ^^
선행작업

1. yum install wget              => 파일을 직접 다운 받아야 하기에 ... 뭐... yum이 설치 되어 있으시겠죠?;그렇죠?
2. yum install gcc*              => 컴파일을 해야하기에...;;; 설명이 모자란듯 싶네요.ㅜ gcc만 설치하면 안됨.;

이제 시작입니다. 요부분은 http://linuxis.tistory.com/trackback/687 서 퍼왔습니다.;;

#cd /usr/local
#wget http://dss.macosforge.org/downloads/DarwinStreamingSrvr6.0.3-Source.tar
#tar xvf DarwinStreamingSrvr6.0.3-Source.tar
#wget http://www.abrahamsson.com/dss-6.0.3.patch
#patch -p0 < dss-6.0.3.patch
#cd DarwinStreamingSrvr6.0.3-Source
#./buildtarball
#cd DarwinStreamingSrvr-Linux
#./Install
Installing Darwin Streaming Server

Checking for and Killing currently running Darwin Streaming Server
...(생략)...

characters long
Enter DSS Administrator Username : (Admin Username 입력)

DSS Administrator Password cannot contain spaces, or quotes, either single or double, and cannot be more than 80
characters long
Enter DSS Administrator Password: (패스워드 입력)
Re-enter DSS Administrator Password: (패스 워드 확인)
Adding userName admin
Setup Complete!

이렇게... 나와야 정상이겠습니다만.. 저는.. Enter DSS Administrator Username : (Admin Username 입력) 나오기 전에 이런 메시지가 뜨더군요

qtss : 지정된 사용자를 찾을수 없습니다.

뭐 요것땜에 30분~1시간을 허망하게 ㅜㅜ 여튼 결론부터 말씀드리면
user 그룹은 qtss로 등록되어있으나 사용자 목록에 추가가 안되어 있어서 발생되는 것 같네요. ^^; 어디까지나 주관적인 생각이라서..ㅜ;;
여튼 해결방안은 간단합니다.

#adduser qtss -g qtss
// -g 옵션은 qtss라는 그룹에 qtss사용자 추가라는 말이랍니다. ^^;

이렇게 해주고 다시 위의

#./Install
이렇게 해주면 짜잔~~ 아주 깔끔하게 설치가 되지요

그리고 나서

http://아이피주소:1220/
이렇게 익스플로러에서 들어가려고 하면 다시 에러가 발생합니다. 페이지를 찾을수 없다나 뭐라나.. ^^;;  요건 간단하게

#setup
으로 들어가서 방화벽 해제 해주니 깔끔하게 해결 되는군요 ^^!

그럼 짜자잔~~ 잘 돌아갑니다.!! 휘유~~ㅎㅎ

짝짝짝!!

+ Recent posts