'포팅'에 해당되는 글 1건

  1. 2009.03.31 WebKit 포팅에 관해 (12)

WebKit 포팅에 관해

Dev 2009.03.31 12:42
단말 엔지니어에게 포팅이란,
HAL API를 타겟 플랫폼에 맞게 구현해주는 작업이다. WIPI를 비롯한 기타 단말 솔루션들은 HAL API set 이 분명하게 정의되어 있다. 정해진 C함수들을 정해진 규격대로 구현하면 포팅이 끝난다. 근데 WebKit 은 이게 모호하다. 플랫폼에 dependent 한 포팅 레이어가 소스 트리 여러 곳에 산재해 있다. 기존 WIPI 포팅에 익숙한 한국의 단말엔지니어에게는 난감한 구조다. 하지만 여기에도 WebKit 나름의 규칙과 일관성이 있다. 익숙해지면 그럴만 하다고 동의할 수 있는 문제다.

WebKit port 의 특징은 포팅 타겟을 OS 로 한정하지 않는다는 점이다.
WebKit의 포팅 타겟은 Windows 나 Linux 같은 OS가 아니라, CoreGraphics, Cairo 같은 그래픽 툴킷, CFNetwork, CURL 같은 네트웍 툴킷이다. Cairo 가 올라간 OS 면 Windows 든 Linux 든 WebKit Cairo port 가 화면을 출력할 수 있다. 마찬가지로 CURL 이 올라간 OS 면 Windows 든 Linux 든 WebKit CURL port 가 네트웍을 이용할 수 있다.

WebKit 이 요구하는 툴킷들을 나열하면 대략 다음과 같다.
* 그래픽 툴킷 : CoreGraphics 또는 Cairo
* 네트웍 툴킷 : CFNetwork 또는 CUrl
* 이미지 디코더 : giflib, jpeglib, libpng ...
* XML 파서 : libxml, libxslt
* DB 라이브러리 : SQLite

WebKit 포팅 절차를 요약하자면 다음과 같다.
1. 사용할 툴킷 set 을 선택한다.
2. 선택한 툴킷을 타겟 OS 또는 타겟 device 에 포팅한다.
3. WebKit 을 올린다.

간단하다.
하지만 언제나 그렇듯, 간단함에도 불구하고 일이 되려면 개발자의 눈물겨운 노력이 있어야 한다.
Posted by ingee

댓글을 달아 주세요

  1. PSS 2009.04.06 18:18 신고  댓글주소  수정/삭제  댓글쓰기

    안녕하세요?
    웹킷 포팅 관련해서 많은 정보 감사드립니다.
    그런데, 말씀하신 툴킷이라는 것의 정체가 뭔지 잘 모르겠네요.
    CoreGraphics, Cairo 등등 이런 것들이 어떤 것인지 잘 이해가 되지 않네요.
    그게 무엇이던 디바이스와 연결시켜주는 작업이 필요할 것 같은데, 그런 작업은 해당 툴킷을 포팅하면서 하게 되는건가요?

    • ingee 2009.04.09 13:42 신고  댓글주소  수정/삭제

      Cairo를 예로 들어 설명하자면, Cairo는 light-weight한 그래픽 라이브러리입니다. 화면에 그림을 그리는 다양한 API들을 제공합니다. Cairo를 디바이스에 맞게 포팅하면, Cairo를 사용하는 WebKit port를 실행시킬 수 있습니다. 설명이 될런지요?

  2. PSS 2009.04.06 18:37 신고  댓글주소  수정/삭제  댓글쓰기

    예를 들어 screenRect 라는 함수를 보면 win, wx, gtk, qt 등으로 구분되어 작성이 되어 있습니다.
    이런 부분들이 OS 에 따라 작성된 부분으로 보이는데, 이것들과 말씀하신 CoreGraphics, Cairo 와의 관계가 어떻게 되는 것인지요?
    답변 미리 감사드립니다.

    • ingee 2009.04.09 13:42 신고  댓글주소  수정/삭제

      GTK 프레임워크는 화면에 그림을 그리기 위해 Cairo를 사용합니다. MS Windows도 Cairo를 포팅해서 화면에 그림을 그리도록 할 수 있습니다. 그럴 경우 그림을 그리는 대부분의 작업은 Cairo에서 해결되지만, 그래도 최종적인 포팅 타겟(GTK나 win32)에 의존적인 코드가 존재합니다. 그런 부분이 WebCore/platform 폴더 아래에 있는 소스 디렉토리들에 모여 있습니다.

      예로 드신 screenRect() 함수도 최종적인 포팅 타겟에 의존적인 함수입니다. GTK Cairo를 쓸 경우 PlatformScreenGtk.cpp 파일의 screenRect() 함수를, win32 Cairo를 쓸 경우 PlatformScreenWin.cpp 파일에 있는 screenRect()를 사용하도록 프로젝트를 설정해야 합니다.

      설명이 도움되면 좋겠습니다.

  3. Euijung 2009.04.14 18:27 신고  댓글주소  수정/삭제  댓글쓰기

    혹시 mips보드에도 포팅해보셨나요?^^;

    제가 au1250보드에 웹킷과 midori를 포팅해보고싶은데. 무지해서 그런지 자료찾기도 힘들고,
    사실 감도 잘 안옵니다 도움받고 싶어요^^

    • ingee 2009.04.15 13:04 신고  댓글주소  수정/삭제

      제게는 MIPS 보드 자체가 생소합니다. ^^
      타겟이 다르더라도 웹킷에 대한 이런저런 정보는 공유할 수 있을 것 같습니다. 자주 들러주시고, 의견 주세요.

  4. azz 2009.06.15 10:43 신고  댓글주소  수정/삭제  댓글쓰기

    webkit 관련자료 검색하다가 오게됐습니다
    먼저 webkit관련 좋은정보를 올려주신것에 감사합니다 ^^;;

    이 글을 읽다가 한가지 궁금한게 있어서 그러는데
    저러한 툴킷을 사용하는것이 webkit엔진 구동에 있어서 반드시 필요한것인지가 알고 싶네요

    예를들어,
    윈32상에서는 그래픽API를 윈도우에서 제공하고 있는데 이를 가지고서만 그래픽은 안되고
    윈32상에서도 CG나 Cairo를 포팅해야만 하는지가 궁금합니다

    구글링해봐도 webkit사용에 툴킷은 기본적으로 다 붙여 사용한거 같아서.. 참 궁금하네요
    아시면 답변해주시면 감사하겠습니다

    • ingee 2009.06.15 15:54 신고  댓글주소  수정/삭제

      그래픽의 경우 MS Windows GDI위에 막바로 포팅하는 것이 가능합니다. 그런 일을 해낸 업체도 있구요. 문제는 그러기 위해서는 "GDI위에 막바로 포팅하는 일"을 직접 해야 합니다. 다시말해 그런 포팅 소스를 직접 작성해야 합니다. 그래픽 처리를 위해 카이로나 코어그래픽스를 많이 쓰는 이유는 그런 (안정적인) 포팅 소스가 이미 존재하고 있으며 공개되어 있기 때문입니다.

      장황하게 썼지만 요약하자면, 님이 하신 이야기는 분명히 가능한 일이며, 일의 양과 목적을 보고 판단할 문제입니다.

  5. laconicblue 2012.03.07 21:50 신고  댓글주소  수정/삭제  댓글쓰기

    buildroot 를 사용해서 directfb + libgtk2 위에서 webkit 을 구동해서 browser 를 사용하려는 시도를 하다가
    막히는게 많아서 찾다보니, 여기까지 왔습니다.

    뭔가 이미 있는 것을 찾아서 편하게 해보려는데 맨 아래 글이 저를 부끄럽게 하는군요..=-=
    "하지만 언제나 그렇듯, 간단함에도 불구하고 일이 되려면 개발자의 눈물겨운 노력이 있어야 한다"

    감사합니다.

  6. 좡이 2012.09.05 11:32 신고  댓글주소  수정/삭제  댓글쓰기

    중간에 정리해주신 "툴킷" 이라는것을 라이브러리라고 이해해도 되겠지요??
    좋은 요약 좋은 정보 감사합니다. ^^

    자주 올게요!!