헥헥... 12시가 넘어서야 겨우 마이크로 소프트웨어 4월호 원고를 탈고했습니다. 상당히 일찍 끝날줄 알았더니, 결국 밤 늦게까지 하게 되는군요. 내일 강의가 무지하게 많은데... 조는 것 아닌가 모르겠습니다. ㅜ_ㅜ...

 원고도 마무리한 김에 지난번에 찜해두었던 기사를 소개해 드립니다. 저도 아직 보지는 않았구요, 앞부분만 조금 읽었습니다. 대충 보니 C++로 플러그인 프레임워크를 구축하는 예제를 보여줄 모양이던데... C++로 어떻게 플러그인 인터페이스를 맞출 것인가에 대한 내용도 들어있는 걸 보니 나쁘지는 않을 것 같습니다. ^^;;;;

 원문은 http://www.ddj.com/cpp/204202899 에서 보실 수 있으며 Part 5까지해서 5회 분량으로 되어있는 듯 합니다. 시간날때 한번 읽어봐야겠네요 ^^)/~

 그럼 다들 좋은 밤 되시길~~!!!


 다들 설은 잘 보내셨는지요? 저는 할머니댁에서 실컷 NDS만 하고 왔답니다. 이틀만에 게임 소프트를 하나 깨고 왔을 정도니... 얼마나 했는지는 굳이 설명을 안드려도 될 듯합니다(NDS 충전만 중간에 2번 했습니다). 시간이 아주~ 안가더군요. ㅜ_ㅜ

 게임을 하는 중간 중간에 지쳐서 올해는 무엇을 해야할지 고민해 봤습니다. 목표를 정하고 달리는 스타일은 아니지만, 너무 지겨워서... ㅡ_ㅡa;;;;

 일단 크게 64bit CPU 분석과 VT(Virtualization Technology) 분석을 목표로 잡았습니다. 64bit 쪽은 예전부터 관심이 있던 부분이었고, VT 기술쪽은 제가 잘 모르고 있는 부분이라 공부를 위해 잡았습니다.

 아직은 32bit가 대세인듯 하지만, 언젠가는 64bit의 시대로 가겠지요 ^^;;; 그전에 미리 대비해 놓는 것도 나쁘지 않을 것 같습니다. VT 기술쪽은 제가 따로 생각한 부분이 있어서, 실제 CPU의 명령을 사용해서 제어를 해보는 단계까지 진행할 생각입니다. VT는 아주 유용하게 써먹을 수 있을 것 같거든요. ^^)/~!!!

 가장 이상적인 것은 64bit OS를 만들어서 VT 기술을 이용해 32bit OS를 돌리는 것이 아닐까 생각합니다. 지금 32bit용 OS 프레임워크를 가지고 있으니 64bit용 OS 프레임워크를 만들고 VT 기술을 넣으면 딱이겠네요. 하핫~

 올해도 마구 달려보렵니다.
 여러분들도 새해 복 많이 받으시고 목표 다 이루시길 바랍니다. ^^)/~

 화이팅~!!!!

21 OS 프레임워크 소스 릴리즈

 

들어가기 전에...

 

 KKAMAGUI OS 프레임워크 설치 환경은 20 작업환경 설치 참고하면 개발 환경 및 실행 환경을 설치할 수 있다.

 

 프레임워크의 소스 코드 및 도움말은 아래와 같다.

  • FrameWork-v1.0.3.zip : KKAMAGUI OS 프레임워크 버전 1.0.3 소스 ( 2007/09/03 릴리즈 버전)

    • 화면 출력 관련 함수들을 Kernel Shell에서 StdLib로 모두 이동
    • Standard Library의 printf 형태의 kPrintf() 함수 제공으로 화면 출력의 편의성 증대
    • Kernel Shell 소스 코드 정리
    • 간단한 파일 시스템 추가
    • 00 작업일지 참고

 

  • Framework-v1.0.2.zip : KKAMAGUI OS 프레임워크 1.0.2 소스 (2007-08-31 릴리즈 버전)

    • 이클립스 환경으로 전환
    • 태스트 스위칭 및 메모리 관리 부분 포함
    • 기존의 불편한 make 방식을 수정
    • 이클립스로 컴파일 가능하도록 수정
    • djgpp 와 기타 툴체인(Cygwin, MinGW)의 충돌을 막기위해 DJGPP의 파일이름 수정
    • 자세한 내용은 20 작업환경 설치 문서 참조
    • 파일 및 링크를 위해서는 Framework 폴더에서 djmake만 입력하면 수행 가능

 

  • Framework-v1.0.1.zip : KKAMAGUI OS 프레임워크 1.0.1 소스 (2007-07-04 릴리즈 버전)

    • 커맨드 라인 방식의 빌드
    • 순수하게 프레임워크 파일만 가지고 있음
  • index-v1.0.1.zip : KKAMAGUI OS 프레임워크 설명 파일. index.chm파일 참조 (2007-07-04 릴리즈 버전)

 

2007/07/19 02:35:41 수정

 kLock(), kUnlock() 함수를 Intel CPU에서 지원하는 명령을 이용해서 새로 작성했다.

  • Asm.asm : kLock(), kUnlock() 수정

 

2007/07/11 03:45:30 수정

 make 파일을 간단하게 정리했다. makefile에 대한 사용법은 02 간단한 Make 사용법을 참조하도록 하자.

 

2007/07/10 06:23:33 수정

 큰 수정 2가지가 있었다. 각 항목은 00 작업일지를 참고하자.

  • FW.zip : asm.asm 파일과 asm.h, isr.asm 파일 수정

 

2007/07/09 20:14:58 수정

 Task.c 파일에서 kSetupTask 함수에서 버그가 발생되어 수정했다.

  • Task.c : kSetupTask() 수정

 

첨부:

287529_Framework-v1.0.3-Basic.zip
0.07MB
287537_Framework-v1.0.3-2월호.zip
0.07MB
291769_Framework-v1.0.3-3월호.zip
0.07MB
367072_Framework-v1.0.3-4월호.zip
0.08MB
146692_FrameWork-v1.0.1.zip
0.27MB
146693_index-v1.0.1.zip
1.00MB
146828_Task.c
0.00MB
148078_makefile
0.00MB
155323_Asm.asm
0.03MB
188485_FrameWork-v1.0.2.zip
0.09MB
285323_FrameWork-v1.0.3.zip
0.10MB
146828_Task.c
0.00MB
147077_FW.zip
0.01MB

20 작업환경 설치

들어가기 전에...

1.작업 환경

프레임워크의 작업환경은 아래와 같다.

2.DJGPP(GCC) 설치 및 NASM 설치

2.1 DJGPP(GCC) 설치 방법

http://www.delorie.com/djgpp/zip-picker.html 로 이동하면 필요한 항목을 선택할 수 있다.

아래와 같이 대충 설정하고 나서

맨 아래에 있는 "Tell me which files I need" 버튼을 클릭하면 아래에 보는 것과 같이 필요한 파일들이 줄줄 나온다.

unzip32.exe to unzip the zip files 95 kb

v2/copying.dj DJGPP Copyright info 3 kb
v2/djdev203.zip DJGPP Basic Development Kit 1.5 mb
v2/faq230b.zip Frequently Asked Questions 664 kb
v2/readme.1st Installation instructions 22 kb

v2gnu/bnu217b.zip Basic assembler, linker 3.9 mb
v2gnu/gcc412b.zip Basic GCC compiler 4.0 mb
v2gnu/gdb611b.zip GNU debugger 1.5 mb
v2gnu/gpp412b.zip C++ compiler 4.1 mb
v2gnu/mak3791b.zip Make (processes makefiles) 267 kb
v2gnu/txi48b.zip Info file viewer 779 kb

아래의 파일들을 다 다운 받고 그 아래쪽에 보면 설치에 관한 내용이 있는데, 그것대로 실행하면 설치는 끝난다.

C:\> mkdir djgpp  
C:\> cd djgpp  
C:\DJGPP> unzip32 d:\tmp\djdev203.zip  
C:\DJGPP> unzip32 d:\tmp\faq230b.zip  
C:\DJGPP> unzip32 d:\tmp\bnu217b.zip  
C:\DJGPP> unzip32 d:\tmp\gcc412b.zip  
C:\DJGPP> unzip32 d:\tmp\gdb611b.zip  
C:\DJGPP> unzip32 d:\tmp\gpp412b.zip  
C:\DJGPP> unzip32 d:\tmp\mak3791b.zip  
C:\DJGPP> unzip32 d:\tmp\txi48b.zip

그리고 마지막으로 "내컴퓨터" 아이콘의 속성을 클릭하여 고급 탭에 들어가서 환경 변수 설정을 해주어야 한다.

나는 "D:\djgpp" 폴더에 인스톨 했기 때문에 저렇게 입력했으니, 각자 자기 폴더에 맞도록 변경해서 입력하면 된다.

설치 확인은 cmd 창에서 gcc를 입력했을 때, 아래와 같이 나오면 정상적으로 설치가 된것이다.

C:\> gcc
gcc.exe: no input files

2.2 DJGPP 관련 파일 변경(2007/08/31)

자신의 윈도우에 다양한 툴체인이 깔려있다면, 위와 같이 PATH의 가장 앞쪽에 DJGPP 폴더를 설정하면 문제가 발생할 수 있다. 따라서 DJGPP 폴더의 bin 폴더로 이동해서 gcc.exe, gpp.exe, ld.exe, make.exe 파일 이름을 수정해 주면 어느정도 충돌을 막을 수 있다.

해당 파일들의 앞에 dj를 추가하여 djgcc.exe, djgpp.exe, djld.exe, djmake.exe로 수정하도록 하자.

2.3 NASM 설치

http://nasm.sourceforge.net/ 로 가서 파일을 다운로드 한 뒤에, DJGPP가 설치된 폴더 안의 "bin"에 압축을 풀어 실행파일을 복사해 주면 끝난다.

설치 확인은 cmd 창에서 nasm을 입력했을 때, 아무것도 안나오면 정상적으로 설치된 것이다. 만약 파일이 없다고 에러가 나면 정상적으로 복사가 되지 않은 것이니 다시 복사를 하도록 한다.

3. VirtualBox 설치

http://www.virtualbox.org/ 로 가서 파일을 다운로드 한 뒤에, Next를 눌러 설치한다. 설치가 크게 어렵지 않으므로 설치가 끝난 후, "시작" 버튼으로 가서 Virtual Box를 실행한다.

프로그램이 실행되면 "new 버튼" 을 눌러 프레임워크를 실행할 환경을 설정한다.

  • "VM Name and OS Type" 에서 Name은 "KKAMAGUI OS Framework"를 입력하고 OS Type은 "Other/Unknown"으로 입력
  • "Memory"에서 8Mbyte로 설정
  • "Virtual Hard Disk"에서 "No Hard Disk"로 설정

설정을 완료하게 되면 아래와 같은 화면이 표시된다.

여기서 Floppy를 클릭하여 아래와 같이 실행할 이미지를 설정해 준다.

그후 "Start 버튼" 을 눌러 실행을 확인한다.

4.이클립스(Eclipse) 프로젝트 생성 및 빌드

이클립스를 사용하는 경우 매우 편리하게 프로젝트를 빌드할 수 있다. 이클립스에 대한 사용방법에 대한 내용은 06 이클립스(Eclipse) CDT 설치07 이클립스(Eclipse) 단축키 및 환경설정를 참고하도록 하고 문서에 따라 OSFramework 프로젝트를 생성한 다음 해당 폴더에 프레임워크 압축파일을 풀면된다. 압축을 푼다음 프로젝트를 Refresh하거나 이클립스를 닫고 다시 실행하면 변경된 사항이 적용되어있을 것이다.

djmake.exe를 이용해서 실행해야 하므로 이클립스를 열어 Project -> Properties 를 클릭하여 아래를 djmake로 바꿔주도록 하자.

<이클립스 설정 변경>

*만약 이클립스 환경을 사용하지 않는 경우라면 기타 에디터로 소스를 수정한다음 커맨드 라인에서 DJGPP용 make.exe(djmake.exe)를 실행하면 빌드가 된다. *

5.마치면서...

이상으로 프레임워크 작업환경 설치에 대해서 알아보았다. 프레임워크가 정상적으로 컴파일 되는지 확인해 보자.

안녕하십니까 까마굽니다 (__)

삽질에 삽질을 거듭하다보니, 16bit와 32bit Asambler를 만들게... 머 그냥 Directive를 통해 전환이 가능한 형태이구요, 열심히 Intel의 테이블을보고 만들었습니다.

아직 LABEL에 대한 처리가 좀 미흡하고, mov 명령에 대한 구현 및 테스트를 하고있어서 다른 명령의 형식에는 어떻게 적용될지는 의문입니다만, 여튼 별반 수정없이처리할 수 있을꺼 같군요. 만들어 놓고도 참 신기합니다. 동작을 하긴 하는군요.

정말 이렇게 난잡한 프로그램은오래간만에 짜보는듯...Type Match를 위해 if-else switch의 난무.. ㅡ0ㅡ;;;;나중에 LABEL에 대한 마무리 처리를 조금 한다음, 소스코드를 좀더 간단하게 정리를해야 겠습니다. 아.. 오늘은 머리도 아프고 속도 영 않좋군요.병이 났나 봅니다 그려.. ㅋㅋㅋ그럼 다들 몸조심 하시고..

좋은하루 되세요 (__)

 안녕하십니까 까마굽니다 (__)
 으으.. 오늘 Machine Code Generator를 만들다가, OpCode까지는 어케 선택을 해줬는데, Mod 및 SIB를 선택하지 못하여 하루종일 보냈슴다. 이제야 필을 받아서 일단 mov reg, reg 형식을 대략 완성하고 output을 냈는데요,다행이도 nasm이랑 output이 같게 나오는걸 보니, 테이블을 틀리게 만든건 아닌거같군요.

 흠, 아직 테이블을 좀더 만들고 테스트해야 하는게 있긴하지만 머, 일단 첫발을내딛었기땜시롱 한자 끄적여 봅니다. 처음에는 모든 경우의 수를 생각하고 Scanner랑 Parser를 만들었는데요, 오늘 딱생각하니 빼먹은것이 있군요.

 으으, 다 포함하려니 소스가 자꾸 복잡해져서리 일단간단하게 완성하고 덧붙이던가 해야 되겠군요.에궁, 징짜 너무 빡시네요.

 그럼 좋은하루 되세요 (__)아래는 테스트 결과
/////////////////////////////////////////////////////////////////////////////
//input file
/////////////////////////////////////////////////////////////////////////////
mov ebx, eax
mov ebx, ecx
mov ebx, edx
mov ebx, esi
mov ebx, edi
mov ecx, eax
mov ecx, ebx
mov ecx, ecx
mov ecx, edx
mov ecx, esi
mov ecx, edi
mov edx, eax
mov edx, ebx
mov edx, ecx
mov edx, edx
mov edx, esi
mov edx, edi
mov esi, eax
mov esi, ebx
mov esi, ecx
mov esi, edx
mov esi, esi
mov esi, edi
mov edi, eax
mov edi, ebx
mov edi, ecx
mov edi, edx
mov edi, esi
mov edi, edi

//////////////////////////////////////////////////////////////////////////////
// 아래는 Kkamagui Simple Asambler Output
//////////////////////////////////////////////////////////////////////////////
Output[89C3]
Output[89CB]
Output[89D3]
Output[89F3]
Output[89FB]
Output[89C1]
Output[89D9]
Output[89C9]
Output[89D1]
Output[89F1]
Output[89F9]
Output[89C2]
Output[89DA]
Output[89CA]
Output[89D2]
Output[89F2]
Output[89FA]
Output[89C6]
Output[89DE]
Output[89CE]
Output[89D6]
Output[89F6]
Output[89FE]
Output[89C7]
Output[89DF]
Output[89CF]
Output[89D7]
Output[89F7]
Output[89FF]

 안녕하십니까 까마굽니다 (__)
 요 이틀째 어셈블러 제작에 매달리고 있는데요, 오늘 오전즈음해서 scanner를테스트한 다음, 그 output을 parser에 넣고 문법을 검사하려다보니, 기본적인 검사를 하더라도, 어셈명령에 따른 operand의 갯수 같은 것이 필요하겠더라구요.

 그리고 머신코드를 생성할 때는 각 operand에 따른 머신 코드의 맵핑 테이블이필요한데, 막상 고민해보니 깔끔한 생각이 안떠오르더군요. 하드코딩을 안할려고 머신코드의 규칙을 살펴봤으나, prefix/MOD/SIB 머 이런것들은 일정한 규칙같은게 있던데, 머신코드는.. ㅡ0ㅡ;;;;;

 그래서 nasm을 참고할려고 들여다 봤더니, 쿠.. 쿨럭...걍.. 테이블이 하드코딩 되어있더군요. ㅠㅇㅠ/~~크윽... 그래서 일단 저도 하드코딩해서 테이블을 만들어 놓고 이제 parser를만들어 테스트를 할려고 생각중입니다.하.. 참나... 이거 무쟈게 빡시군요.기본적으로 제가 쓰는 명령만 구현하는데도, 한참 걸리겠습니다. 그려...일단 오늘도 삽질 @0@/~~

 그럼 좋은하루 되세요 (__)

 안녕하십니까 까마굽니다 (__)
 몇주의 삽질끝에 겨우 정리를 끝내고 이제야 겨우 소스를 릴리즈 하는군요. 아래는 릴리즈 파일의 00ReadMe.txt 입니다.

그럼 좋은하루 되세요 (__)
 게시물 및 소스파일 링크http://kkamagui.codesum.org/board/read.php?table=broad&no=10
링크 클릭
//////////////////////////////////////////////////////////////////////////////
//=============================================================================//
// 2004 06 18 // KKAMA OS 첫번째 소스 릴리즈
// Home Page : http://kkamagui.codesum.org//
//=============================================================================
 1. 인사말 ---------------------------------------------------------------------
안녕하십니까 까마굽니다. (__)약 2주동안 열심히 소스를 정리한 결과, 디버깅 코드의 대부분을 정리하고 소스를 릴리즈 할 수 있는 정도가 되었습니다. 물론, 다 정리된건 아니고 한참 개발중인부분과 너무 복잡해서 정리하기에 시간이 드는 부분을 제외한 나머지 부분을 정리했습니다.정리하면서 느낀건데, 확실히 중복 개발된 코드들이 많이 보이는군요, 나중에 다시중복 개발하게 될때 한번에 모아서 처리해야겠습니다.공개하기엔 너무 허접한 소스코드라 처음에 상당히 고민을 많이 했습니다만, 한소리먹을 생각하고 공개하기로 마음 먹었습니다.KKAMA OS가 나오기까지 도움을 주신 OSX86의 Edward님, B2OS의 주인장님, OSX86의 기홍님, OSX86의 모립, 그외 여러 많은 분들께 감사드리며 KKAMA OS를 인터넷으로 보냅니다.도움이 되시길 (__)

 2. License --------------------------------------------------------------------
KKAMA OS는 소스에 저작권 제약이 없습니다. 필요에 따라 추가, 수정, 삭제, 변경이 자유로우며 코드 일부 사용 또한 제약이 없습니다.KKAMA OS 자체가 여러 자료를 참고해서 만들어졌으므로, 선현(??)들의 뜻을 따라 License를 Free로 합니다.다만, 재배포시 현재의 00ReadMe.txt 파일을 포함시켜야 합니다.
 
 3. 소스 열람시 주의사항 -------------------------------------------------------
KKAMA OS의 소스코드는 저의 코딩 스타일에 따라, Tab을 insert space로 하여 3개의스페이스로 치환되어있습니다. 물론 코드가 좀 오래되고 여기저기서 코딩한 결과,Tab문자가 스페이스로 치환되지 않아서 Tab을 3으로 맞추지 않으면 들여쓰기가 맞지않는 일이 생길 수 있습니다. 이러한 불편을 최소화하기위해서 소스를 보실때는 Tab을 3으로 조정하면 됩니다.또 각 name 들이 상당히 길고, Structure를 typedef로 줄이지 않고 그대로 사용한걸보실 수 있는데, 제가 이름을 줄여쓰는걸 별로 좋아하지 않아서 그렇습니다.소스는 최대한 간단히 구현할려고 노력했습니다만, 과연 그런지는 의문이군요. @0@/~

 4. 컴파일 및 링크 준비 --------------------------------------------------------
KKAMA OS의 소스코드는 DJGPP V2.0(GCC V3.2.1) 이상의 버전과 NASM V0.98.36에서 컴파일 및 링크되었습니다. NASM은 DJGPP용으로 나온 Binary가 있으니 사용하시면 에러없이 컴파일 가능합니다.DJGPP의 설치 및 NASM의 설치는 각 사이트 DJGPP : http://www.delorie.com/NASM : http://nasm.sourceforge.net/wakka.php?wakka=HomePage/에서 찾을 수 있습니다.설치가 잘 안되는 분은 질답란에 올려주세요. http://kkamagui.codesum.org/board/list.php?table=qna

 5. 커널 컴파일 및 이미지 만들기 -----------------------------------------------
KKAMA OS 소스코드는 특정 IDE를 사용하지 않기 때문에, DJGPP에 포함된 make.exe를통해 컴파일 됩니다.00Kernel 디렉토리는 커널소스가 포함되어있고,01Boot 디렉토리는 부트로더 및 커널로더의 소스가 포함되어있습니다.각 폴더에는 컴파일에 관련된 Makefile이 존재합니다.부트로더 및 커널로더를 컴파일할 시, MAKEBOOT.BAT를 실행하시면 01Boot 폴더에boot.bin (부트로더), kloader.com (커널로더)가 생성됩니다.커널을 컴파일할 시, make.bat를 실행하시면 00Kernel 폴더에 kkernel.bin (커널이미지)가 생성됩니다.Floopy를 통해 부팅가능한 이미지를 생성하기위해서 MAKEIMG.BAT를 실행하시면 각각생성된 boot.bin, kloader.com, kkernel.bin을 통합하여 DISK.IMG를 생성하게 됩니다.생성된 DISK.IMG를 통하여 Bochs, VMWare로 부팅이 가능합니다.DISK.IMG를 Floppy에 옮겨담기 위해서는 A: 에 빈 디스켓을 삽입하고 DISK.IMG를 실행하면 됩니다. 엔터를 입력하기를 기다리는데, 엔터를 입력하면 디스크에 쓰기가진행되고 완료되고나면 Floppy를 통해 KKAMA OS로 부팅할 수 있습니다.

 6. 커널 실행 및 테스트 --------------------------------------------------------
KKAMA OS의 홈페이지 http://kkamagui.codesum.org/kkamaosHowTo.html의 설치 및 실행순서를 참조하시면 명령어 리스트를 보실 수 있습니다.

 7. 버그 및 의문사항 -----------------------------------------------------------
KKAMA OS의 홈페이지 http://kkamagui.codesum.org/board/list.php?table=qna의 QNA 페이지를 이용하시면 됩니다
 안녕하십니까 까마굽니다 (__)
 출장중이라 소스 손대는게 별로 여의치는 않지만, 갖고 놀다보니 심각한 버그가발견되어서 수정해 올렸습니다.Release에 커널이.. HowTo에 d.img가 있는데요..이걸 두개 다 엎어쓰시면 될꺼같네요.

 이번에 추가된 사항은,stdin, stdout, stderr 의 사용 및 pipe의 추가를 들 수 있겠는데요,이걸 이용해서 gui Shell을 구현해 봤습니다.커널을 부팅해서 gui를 입력하시면.. 지난번과 변함없는 허접한 GUI 화면이 뜨구요,거기에 기본적으로 생기는 창 하나가 GUI Shell이 되겠네요..클릭 하셔서 키를 입력해 보시면.. 키가 입력되고, 콘솔에서 쓰는 명령이 그대로먹는걸 확인하실 수 있습니다.
 
 머.. 같은 루틴이니 당연한 결과.. ㅡ_ㅡa..근데.. Bochs에서.. 왜 일케 느린지 모르겠네요..V*Ware에서는 꽤 괜찮은데 말이죠..황당합니다.. 쩝쩝.. ㅡ0ㅡa...네.. 그럼 질문사항은 QnA로 올려주시구요..좋은하루 되세요 (__)
http://kkamagui.codesum.org

+ Recent posts