Micosoft Windows에서 리눅스를 coLinux!!

2009. 1. 10. 23:58 컴퓨터/마이크로소프트

정말 대단한 coLinux

와! 간만에 눈이 확 커지는 프로그램을 알게 되었습니다. coLinux. 정말 대단하다고밖에 말이 안 나오는군요. 궁금해 하실 것 같아서 어떤 프로그램인지 먼저 말씀 드리겠습니다. VMware와 같이 하나의 컴퓨터에 또 다른 OS를 사용할 수 있게 해주는 프로그램입니다. 프로그램 이름에서 느낄 수 있듯이 현재는 ArchLinux, Debian, Fedora, GUbuntu와 그 유명한 Gentoo까지 리눅스만 실행할 수 있습니다. 그러나 앞으로 유능하고 헌신적인 프로그래머에 의해 더욱 다양한 OS를 즐길 수 있을 것이라고 기대합니다.

가상 컴퓨터 프로그램

리눅스를 이용하는 것이 어디 개발 분야 뿐이겠습니까마는 리눅스 시스템이 필요하다면 가장 좋은 방법은 리눅스 용으로 컴퓨터를 따로 설치하는 것입니다. 그러나 비용 문제나 다른 사정으로 PC 한 대만 가용하거나 노트북만 이용해야 한다면 대안으로 가상 컴퓨터 프로그램을 이용하는 방법이 있습니다.

여러가지 가상 프로그램이 있습니다만 제 경험상으로 가장 신뢰하는 프로그램은 VMware입니다. Virtual PC를 오래 사용해 보고 Virtual Box도 사용해 보았지만, 안정성뿐만 아니라 시리얼 포트와 같이 외부 장치 사용에도 아무 이상 없이 사용할 수 있었던 것은 VMware뿐이었습니다.

VMware를 처음 사용했을 때 한참 동안 넋을 잃고 쳐다보던 화면입니다. 도대체 어떻게 만들었을까? 정말 신기했습니다. 물론 프로그램에서 CMOS 모습을 흉내낸 것이지만, 전체적으로 작동하는 모습이 정말 컴퓨터 한대를 그대로 사용하는 듯한 착각에 충분히 빠지게 합니다.

가상이지만 그야말로 완전 독립된 컴퓨터로 CMOS 설정부터 OS 설치까지 일반 컴퓨터를 사용하는 방법과 똑 같으며, 시리얼 포트나 USB 장치와 같이, 함께 공유할 수 없는 자원은 같이 쓸 수 없다 뿐이지 모체가 되는 원래의 PC에는 전혀 영향을 미치지 않습니다. 그래서 어떤 프로그램을 검사해 보거나 잠시 테스트할 때에는 VMware의 가상 컴퓨터를 이용하기도 합니다만, 다른 컴퓨터와 함께 연동해야 할 경우, 그 다른 컴퓨터를 VMware로 구성하여 사용할 수 있습니다.

시스템 사양만 받추어 준다면 이런 가상 PC를 한 번에 3대, 4대, 또는 그 이상으로 여러 컴퓨터를 동시에 실행하여 사용할 수 있습니다. 정말 대단하지 않습니까?

리눅스 이뮬레이터 Cygwin

이렇게 좋은 VMware에 단점을 지적하라고 한다면 아무래도 무겁다는 것을 말씀드리지 않을 수 없습니다. 가상의 컴퓨터도 컴퓨터 이기 때문에 CPU 사용률뿐만 아니라 미리 가상 컴퓨터가 사용할 메모리를 뚝 떼어 주어야 하기 때문에 전체적으로 시스템이 느려지고 둔해지는 느낌을 받습니다. 그나마 요즘 컴퓨터가 많이 빨라져서 예전과는 달리 이런 불편이 많이 줄었습니다만, 구형 PC나 노트북 같은 경우 부담되는 경우가 많습니다.

이런 경우, 사용할 OS가 리눅스라면 VMware 대신에 Cygwin과 같은 리눅스 이뮬레이터를 사용할 수 있습니다. Cygwin은 VMware처럼 완벽한 가상 컴퓨터를 제공하는 것이 아니라 이뮬레이터로, Microsoft Windows 안에서 리눅스 프로그램과 파일을 사용할 수 있도록 해주는 말 그대로 이뮬레이터입니다.

그래서 VMware처럼 CMOS 환경 설정과 같은 것은 없고 메모리 할당 같은 것도 없습니다. 그냥 실행하면 리눅스 콘솔이 뜨고, 그 콘솔을 이용하거나 텔넷으로 연결하여 마치 리눅스를 사용하듯히 사용할 수 있습니다.

정리하여 다시 말씀드리면 Cygwin은 VMware 비해서 매우 가볍다는 점입니다. 느린 시스템에서도 부담없이 리눅스를 운영할 수 있다는 것이죠. 그러나 완벽한 리눅스는 아니어서 프로그램 코딩에서도 제약이 있습니다. 지금은 어떤지 모르겠습니다만, 저도 한 때 Cygwin을 이용하려고 부단히 노력한 적이 있습니다만 fork()나 공유메모리를 사용할 수 없어서 포기했습니다. 사용한다면 크로스 컴파일러를 사용하는 정도로만 사용했습니다.

그리고 또 하나, Cygwin의 리눅스는 어떤 리눅스? 젠투? 데비안? 페도라? 글쎄요. 또 하나의 리눅스라고 생각됩니다. 그래서 문제가 발생하면 웹에 제공되는 수많은 정보를 제대로 사용하지 못하는 그런 문제가 있더군요. 물론 제가 몰라서 그럴 수 있겠지만, 입문자에게 어렵다면 쉬운 시스템이라고 말하기는 어렵습니다.

그렇다면 coLinux는?

죽입니다!! 끝내줍니다!! VMware처럼 완전 독립된 컴퓨터 환경을 제공하는 것은 아니지만, Cygwin처럼 가볍고, 그러면서도 Cygwin에서 안 되었던 fork() 함수나 공유메모리를 아무 이상 없이 사용할 수 있었습니다. 아울러 자기가 애용하는 리눅스를 선택하여 사용할 수 있고, 그 리눅스에 맞추어서 제공되는 정보나 지식을 그대로 이용할 수 있습니다. 예를 들어 페도라나 CentOS의 system-configure-network를 이용하여 네트워크 환경을 수정할 수 있습니다.

VMware의 장점과 Cygwin의 장점을 하나로 합쳐진 모습으로 완벽한 독립 컴퓨터 시스템을 제공하지 않지만 현재 배포되는 리눅스를 그대로 사용할 수 있도록 해주면서 Cygwin처럼 가볍게 사용할 수 있다, 라고 정리할 수 있겠습니다.

사용한지 얼마 안 되지만 짬짬이 coLinux를 이용하여 개발환경을 구축하려고 노력 중입니다. 그래서 정리될 때마다 제가 운영하고 있는 FALINUX 포럼에 글을 올리고 있습니다.

아직 글로 정리하지 못해 강좌 글에 올리지 못했지만, 이미 gcc를 설치하고 걱정되는 몇 가지를 이미 테스트해 보았습니다. 앞서 언급했던 fork() 함수와 공유메모리를 이상없이 사용할 수 있었습니다.(야호~!) 그리고 시스템 통신에 약방의 감초격인 rs-232c 통신을 이상없이 사용할 수 있었습니다.(굳~드!)

보실까요? ^^ 저는 CentOS를 애용하고 있기 때문에 Fedora 이미지를 선택했습니다. 그리고 yum을 이용하여 gcc와 g++을 설치했습니다. 예전 같으면 gcc 소스를 내려받아 어렵게 환경 설정하고 여러가지 단계를 거쳐 설치했겠지만, yum으로 간단하게 설치했습니다.

]# yum instll gcc
]# yum install gcc-c++

fork() 함수 사용 가능

그리고 아래의 코드를 이용하여 fork() 함수 사용을 확인해 보았습니다.

#include <stdio.h>
#include <unistd.h>

int main()
{
   int   counter  = 0;
   pid_t pid;

   printf( "작식 프로세스 생성");
   pid   = fork();

   switch( pid)
   {
      case -1  :
      {
         printf( "자식 프로세스 생성 실패\n");
         return -1;
      }
      case 0   :
      {
         printf( "저는 자식 프로세스로 디스카운트하겠습니다.\n");
         while( 1 )
         {
            printf( "자식: %d\n", counter--);
            sleep( 1);
         }
      }
      default  :
      {
         printf( "저는 부모 프로세스로 카운트하겠습니다.\n");
         printf( "자식 프로세스의 pid는 %d입니다.\n", pid);
         while( 1 )
         {
            printf( "부모: %d\n", counter++);
            sleep( 1);
         }
      }
   }
}

이상 없이 실행되었습니다.

]$ ./test 
작식 프로세스 생성자는 자식 프로세스로 디스카운트하겠습니다.
자식: 0
작식 프로세스 생성저는 부모 프로세스로 카운트하겠습니다.
자식 프로세스의 pid는 2695입니다.
부모: 0
자식: -1
부모: 1
자식: -2
부모: 2
자식: -3
부모: 3
      :

공유 메모리 사용 가능

공유 메모리인 만큼 두 개의 프로그램을 작성하여 테스트했습니다. 테스트 방법은 FALINUX 포럼에 올려진 "shmget() 공유 메모리 생성" 글에 소개된 예제를 이용했습니다.

공유 메모리를 생성하고 계속 카운터를 증가시키는 counter.c 입니다. 공유 메모리의 변수 값을 증가 시킬 뿐 화면에 출력하는 것은 없습니다.

#include <stdio.h>      // printf()
#include <unistd.h>     // sleep()
#include <sys/ipc.h>
#include <sys/shm.h>

#define  KEY_NUM     9527
#define  MEM_SIZE    1024

int main( void)
{
   int   shm_id;
   void *shm_addr;
   int   count;

   if ( -1 == ( shm_id = shmget( (key_t)KEY_NUM, MEM_SIZE, IPC_CREAT¦0666)))
   {
      printf( "공유 메모리 생성 실패\n");
      return -1;
   }

   if ( ( void *)-1 == ( shm_addr = shmat( shm_id, ( void *)0, 0)))
   {
      printf( "공유 메모리 첨부 실패\n");
      return -1;
   }

   count = 0;
   while( 1 )
   {
      sprintf( (char *)shm_addr, "%d", count++);       // 공유 메모리에 카운터 출력
      sleep( 1);
   }
   return 0;
}

counter.c에서 계속 증가 시키는 공유 메모리의 값을 아래의 show_counter.c 로 출력합니다.

#include <stdio.h>      // printf()
#include <unistd.h>     // sleep()
#include <sys/ipc.h>
#include <sys/shm.h>

#define  KEY_NUM     9527
#define  MEM_SIZE    1024

int main( void)
{
   int   shm_id;
   void *shm_addr;

   if ( -1 == ( shm_id = shmget( (key_t)KEY_NUM, MEM_SIZE, IPC_CREAT¦0666)))
   {
      printf( "공유 메모리 생성 실패\n");
      return -1;
   }

   if ( ( void *)-1 == ( shm_addr = shmat( shm_id, ( void *)0, 0)))
   {
      printf( "공유 메모리 첨부 실패\n");
      return -1;
   }

   while( 1 )
   {
      printf( "%s\n", (char *)shm_addr);    // 공유 메모리를 화면에 출력
      sleep( 1);
   }
   return 0;
}

역시 실행이 너무 예쁘게 잘 되었습니다. 아우~ 죽겠다!!

]$ ./counter &
[1] 2697
]$ ./show_counter
3
4
5
6
7

      :

시리얼 통신도 이상없이 사용 가능

coLinux에서 리눅스를 실행할 때 아래의 옵션을 추가하면 /dev/ttyS0 장치를 사용할 수 있습니다.

  • ttys0=COM1,"BAUD=115200 PARITY=n DATA=8 STOP=1 dtr=on rts=on"

등록 문장이 ttyS0가 아니라 ttys0 로 소문자 s 임에 주의하세요. 자, 이렇게 환경에 추가하여 리눅스를 실행하면 이렇게 시리얼 통신도 훌륭하게 실행됩니다. 아우~ 좋다~!!

결언

fork()나 공유메모리, 시리얼 통신 외에도 확인해야 될 것이 많습니다. 현재 가장 궁금한 것은 Frame Buffer 출력을 어떻게 확인하느냐 하는 점입니다. 요즘 Frame Buffer를 이용하여 그래픽 라이브러리를 만들고 있거든요.

아직 확인할 것이 있으면서도 소개를 드린 것은 프레임버퍼가 안 되더라도 매우 유용한 프로그램임에 틀림 없다는 생각에서입니다. 이렇게 좋은 프로그램은 많은 분이 알고 사용해 주어야 한다고 생각되며, 아울러 제가 고심하는 부분이나 다른 분의 정보를 구걸하기 위함입니다. 이번 기회에 coLinux를 사용해 보시고, 또 애용하고 계신다면 좋은 정보를 알려 주시면 감사하겠습니다. 부탁드립니다.

이 댓글을 비밀 댓글로

티스토리 로그인이 풀리면 여기를 클릭하세요.

    • darkleo
    • 2009.01.11 00:05
    항상 좋은 프로그램 소개 해 주셔서 감사합니다 ^_^
    물론 jwmx 프로그램들도 잘 사용하고 있습니다 이것도 너무 감사합니다.
  1. 와 멋진 프로그램이군요! 저도 한때 cygwin을 쓰다가 한계를 느껴서 그냥 리눅스를 깔았는데 이런것도 있었다니, 좋은 정보 감사합니다 ^^

    물론 저는 개발을 하진 않지만 가끔 프로그램을 짜야할 때가 있어서... ㅎㅎ
    • 네, cygwin도 유용한 툴입니다만 사용 중에 막히는 경우가 많더군요.
      해서 VMware나 Virtual PC를 사용해 왔습니다만,
      coLinux 정말 반갑군요. ^^
    • 2009.01.11 04:52
    호오... 코리눅스가 아직 업데이트가 되고 있었군요. 예전에 학생때 써보고 재미있어서 이것저것 해봤던 기억이 납니다. 그 때는 저거 더이상 업데이트 안하고 손놓고 있었던것 같은데, 다시 업데이트 하는걸 보니 너무 반갑네요 -ㅁ-. 지금보면 마치 맥에서 패러랠즈를깔고 윈도우를 쓰는 느낌인것 같습니다.

    저기다가 X윈도 클라이언트를 설치하면 X윈도용 어플도 별도의 창으로 띄울수 있습니다. 진정 윈도와 리눅스가 합쳐진 느낌이지요.
    • 네, 자세한 히스토리는 모릅니다만 계속 업데이트되는 것으로 생각됩니다.
      지금도 만족합니다만 앞으로 더욱 발전해 갔으면 좋겠습니다.
      비스타나 Windows7에서의 사용은 어떤지 궁금하기도 하지만,
      계속 업데이트되어 앞으로 나올 새로운 OS에서도 이상없이 지원되었으면 하는 바람입니다. ^^
  2. 신기합니다..
  3. 오오..... 새로운 세계를 본 듯한 느낌이네요 ㅇㅅㅇ
  4. 요즘은 선택도 가능한 모양이군요. 리눅스를 처음 배우려고 하는 사람들에게 추천해 주던 프로그램입니다. 윈도우에서 별 다른 작업없이 돌아가니까요.
    • 네, 도아님. 자기가 애용하는 리눅스를 그대로 사용할 수 있는 것이
      너무 좋았습니다. 같은 리눅스인데, 페도라에만 익숙하다 보니
      그 유명한 데비안이나 요즘 한창 인기있는 우분투로 바뀌면
      어떻게 사용해야할지 답답할 때가 많습니다. ^^
    • 애용자
    • 2009.01.12 14:56
    또 하나의 솔깃해지는 프로그램을 알져주시는군요^^;;
    저같은 비 컴퓨터 전공자에겐 리눅스로의 외도는 로망이자
    한편으로는 윈도우도 잘 못하면서 리눅스를 건들이게 되어
    그야말로 효율면에서 블랙홀이 되는 요상한 대상입니다. ㅎㅎ
    오래된 컴에 리눅스 설치해놓고 잘 쓰지도 않고 있는데 그래도
    귀가 얇은 지라 이번에 노트북에 이거 한번 깔아봐야겠습니다.
    • 태봉
    • 2009.01.12 15:09
    에혀...페도라만 조금 끄적끄적해본 저로서는 전혀...모르겠네요.
    • 업무에 관계 있어서 사용하지만, 필요한 것만 알다 보니,
      저도 잘은 모릅니다.
      지금도 헷깔리는 것이 많군요. ^^;
    • kylon
    • 2009.01.13 00:45
    jwfreenote관련 문의 입니다.
    폴더내에 노트를 계속 만들어 100개가 넘어 가면
    숫자가 늘어 가게 됩니다.
    폴더 이름 뒤에 숫자가 붙게 되는데
    폴더_01
    폴더_02
    .
    .
    .
    폴더_09
    폴더_10
    폴더_100
    이렇게 되는군요
    10번 다음은 11번이 되어야 하는데..
    그리고 또 20번 다음은 200번 입니다.
    숫자가 제대로 적용 되게 고쳐 주세요..
    • 골든리트리버
    • 2009.01.13 09:43
    소개글을 읽고 어제 설치를 해서 사용을 해 보고 있습니다.. 좋은 프로그램을 소개해 주셔서 감사합니다..^^
    저도 주로 Vmware를 사용하고 있지만, 정작 무거움 때문에 필요할 때만 띄워서 사용을 했는데..

    잠깐밖에 사용을 안해봐서 뭐라고 하기 그렇지만.. 첫 느낌은.. "오~~"하는 느낌..^^

    아무튼.. 정말로 계속 업데이트가 되었으면 좋겠네요..
    • 네, 앞으로 계속 왕성하게 업데이트 작업이 이루어 졌으면 좋겠습니다.
      아울러 다른 열성적인 개발자들의 참여로 더욱 다양한 리눅스 이미지와
      편리와 도움을 주는 유틸리티도 함께 개발되어 나왔으면 하는 바람입니다. ^^
  5. 저희는 운영체제 회사인데 저희 회사 리눅스에는 Wine이 기본으로 들어가기 때문에 거기서 스타도 되고 WOW도 되고 그렇답니다. ^^

    그런데 오히려 Windows에서 리눅스 환경을 구현해 주는 재미있는 물건이 있었네요!

    재미있는 기사 잘 보고 갑니다.
    • 글을 재밌게 봐 주셔서 감사합니다. 임베디드 리눅스 쪽만 관계하다 보니
      아직 Wine을 사용해 본적이 없습니다.
      저는 MS 윈도우에서 주로 델파이를 주 개발툴로 사용하다 보니,
      같은 회사에서 만든 리눅스용 개발툴인 카이릭스가 나온다고 했을 때에는 매우 관심이 컸습니다.
      그때 그 제품이 Wine을 이용했다는 것으로 알고 있습니다. ^^
    • 천하무적Vtm
    • 2009.02.14 16:48
    지나가는 블로그에 태클거는 건 좀 뭐하지만....

    Cygwin은 OS나 에뮬레이터가 아니라, Windows 환경에 POSIX 표준 레이어를 제공하는 라이브러리입니다.
    그래서 리눅스 실행파일(eg. ELF)을 실행시키는 것을 불가능지만
    리눅스용 app들을 별다른 수정 없이 윈도우용으로 컴파일시킬 수 있습니다.

    이와 다르게 coLinux는 Linux Kernel을 Windows용으로 포팅시킨겁니다.
    옛날에 해커들이 시스템 수정한 걸 쉽게 확인하려고 커널을 User-mode에서 돌리던 것에서 착안했다더군요.
    여튼 그 특성상 호환성과 속도만큼은 최강입니다.
    단점으로 꼽자면, Windows에서 이미 리소스를 관리하고 있음에도 coLinux 커널이 이를 다시 관리한다는 점입니다.
    부팅을 두번해야한다는 얘기지요 = _=)
    • 아, 그렇군요. 말씀 고맙습니다. 프로그램을 이해하는데 큰 도움을 받았습니다. 감사합니다. ^^
    • good4sky
    • 2009.07.25 15:18
    좋은 정보 이군요.
    수년전에 게임기 GP2X 나왔을 당시에.. GP2X 개발용으로 시작한 andLinux 가 있습니다.

    coLinux + Ubuntu + Xming 환경이구요.
    참고 : http://www.andlinux.org/

    저는 리눅스 뉴비 인데요. andLinux로 리눅스 세계에 발을 들여 놨습니다.
    s3c2440 보드에 리눅스 포팅용으로 개발 환경을 구축하고 사용하고 있어요.
    andLinux beta1 사용중.

    삽질하면서 한글입력기, TFTP 서버, NFS 서버 , crosstool chain, eclipse cdt 설치 했었구요
    이클립스로 u-boot, linux kernel 소스 에디트 하면서 컴파일 하니 좋습니다.

    가장 좋은 점은 PC에 무선랜을 달면 PC 한대로 개발환경이 갖추어 지네요.
    저도 coLinux 관련 적극 추천 합니다..

    jwmx님 건승하세요^^
    • andLinux를 사용하시는 군요.좋은 말슴 감사합니다.
      good4sky님께서도 하시고자 하는 일 모두 이루시기 바랍니다. ^^
    • 애용자
    • 2009.09.15 15:19
    설치 강좌를 falinux에 올려주셨는데 질문 답변을 잘 못보시는 것 같고 또 질문을 여러사람이 보는 것 좋을 것 같아 여기에 질문을 올립니다.

    위의 강좌에 보면 WinPCap을 설치하라고 나와있는데 저도 다운 받아서 설치를 했습니다. 여기까지는 별 문제가 없는데 이것을 설치하고 나니까 네트워크 연결이 하나 더 생기고 고정 아이피를 설치해줬는데 계속 언플러그 상태라고 나오네요.

    그래서 WinPCap 웹페이지의 설명을 자세히 읽어봤는데 IP 설정을 해도 unplug로 나올 수 있지만 괜찮다. linux에서 지정하면 된다. 이런 식으로 설명이 되어 있더군요. 그래서 강좌에 나오는대로 eth0, eth1을 설정하는데 부팅하면서 여기서 부터 뭔가 에러가 발생해서 제대로 안되더군요.

    이거 어떻게 된건지 WinPCap을 제거하고 다시 설치하려고 해도 프로그램 제거만 되지 네트워크는 제거가 안되더군요.
    • 네, WinPCap을 사용하면 랜카드 2개의 정보를 올려야 하기 때문에 복잡하고 불편하지요.
      브리지를 이용하시는 것을 어떨까요? 브리지를 이용하면 WinPCap을 따로 설치할 필요없이
      coLinux만 설치하시면 됩니다.
      브리지 사용에 대한 자세한 내용은 아래의 글을 참고하여 주십시오.

      http://forum.falinux.com/zbxe/?document_srl=507011
    • 애용자
    • 2009.09.15 21:37
    네트워크 연결 제거는 coLinux를 제거하니까 같이 제거 되는 거였군요. WinPCap에서 네트워크를 만든걸로 생각했습니다. 그래도 네트워크 설정이 제대로 잘 안되는군요. 참 갈 길이 멀군요.
    • 네, coLinux를 설치하면 가상 네트워크 하나가 생깁니다.
      위에서 소개한 링크를 확인해 보시면, coLinux의 네트워크를
      브리지로 연결하여 간단하게 네트워크를 구성하는 방법이 나와 있습니다.
      꼭 참고해 보십시오. ^^
    • 애용자
    • 2009.09.16 16:32
    우선 가장 문제는 coLinux 네트워크가 연결되지 않는다는 점입니다. 스샷을 보면 IP 설정을 안해도 처음부터 연결된 상태로 나오는데 저는 처음 설치하고 나서 연결이 안되고 새로 IP를 정해줘도 연결이 안되네요.
    참고로 저는 대학교에서 고정IP를 쓰고 있습니다. 학교에서 IP에 MAC adress 관리가 엄격하기는 합니다만 MAC address에 상관없이 쓸 수 있는 IP를 할당해도 같은 증상입니다. 그렇다 보니 네트워크 브리지도 소용이 없네요.
    Virtual PC로 갈아타는게 내공이 짧은 저로서는 정신 건강에 이로울 것 같습니다. ^^
    • 애용자
    • 2009.09.17 09:57
    이제서야 네트워크 연결시키는 법을 알았습니다. 이것저것 삽질하다가 됐네요 -_-;;

    1. 네트워크 연결에서 coLinux 네트워크의 속성을 선택합니다.
    2. 구성을 클릭
    3. 고급 탭을 선택
    4. 속성 중에 Media Status 를 선택해서 값을 Always conneted 로 바꿔주면 되는군요.

    이제서야 네트워크 브리지를 구성할 차례인가요 ㅎㅎ;
error: Content is protected !!