본 사이트는
.com
사이트 제작 도구로 제작되었습니다. 지금 나만의 사이트를 만들어보세요.
시작하기
  • Home

  • About

  • Blog

  • More

    Use tab to navigate through the menu items.
    • All Posts
    • Linux kernel
    • linux-mm
    • Training
    • Practice
    • WAIOS
    • Parallel Computing
    • Hardware
    • System hacking
    • linux-hardening
    • Patch review
    • etc
    • Performance
    • Tracing
    • Study note
    검색
    [Practice] WAIOS 제작 (4)
    Wonhyuk Yang
    • 2021년 7월 21일

    [Practice] WAIOS 제작 (4)

    Intro 저번 시간에는 고수준 입출력 함수 printk를 구현했었어요. qemu를 통해 빌드된 이미지를 실행시키면 정상적인 경우라면 "Hello world!"같은 printk에 입력으로 준 문자열이 출력이 될 거에요. 하지만 아무것도 출력되지 않는다면 어디선가 문제가 발생했다는 것이지요. 그러면 우리의 cpu는 어디서 무엇을 하고 있는 것일까요? GDB를 통해 어디서 무엇때문에 이러는 것인지 알아보도록 할게요. Phase 1 아래의 커맨드를 통해 qemu를 디버거에 연결할 수 있도록 해줘요. $ qemu-system-aarch64 -M virt -kernel Image -S -s -nographic -cpu cortex-a57 -serial mon:stdio 각 옵션들은 다들 아시겠지만 다시 설명해드리면, -M virt: machine 옵션으로 Virt 보드를 선택함. -kernel Image: 커널 옵션으로 Image를 커널 이미지로 사용. -
    조회수 96회댓글 0개
    [Practice] WAIOS 제작 (3)
    Wonhyuk Yang
    • 2021년 7월 20일

    [Practice] WAIOS 제작 (3)

    이번 시간에는 저번 시간에 만든 uart 드라이버를 이용하여, C 표준 입출력 스타일의 함수를 만들어보도록 할게요. print와 같이 고수준 함수들이 지원이 된다면 좀 더 쉽게 정보들을 덤프할 수 있고 여러가지 재미있는 일들을 할 수 있어요. 결과적으로, 구현의 목표 함수들은 아래와 같아요. printk atoi vsprintk Variodic function printf 함수는 일반적인 함수와는 다르게 가변인자를 사용하는 함수에요. 따라서 헤더 파일에는 다소 생소하게 선언된 것을 확인할 수 있어요. "..."으로 표시하여 해당 함수는 가변인자를 받는다고 알려주고 있어요. extern int printf (const char *__restrict __format, ...); 따라서, 우리만의 printk를 구현하려면 printf와 동일하게 가변인자를 처리할 수 있어야 해요. 가변인자를 처리하기 위해서 ISO C는 stdarg.h에 정의된 4가지 매
    조회수 31회댓글 0개
    리눅스 커널의 container_of 매크로
    ybgwon@gmail.com
    • 2021년 7월 14일

    리눅스 커널의 container_of 매크로

    이 글은 리눅스 커널의 container_of 매크로 함수를 설명하는 글입니다. 요즘 리눅스에서 container를 이야기하자면 저는 container 가상화 시스템 docker가 떠오릅니다. 그만큼 요즘 가상화 관련 분아갸 hot하기 때문이어서 인데요, 제가 이야기하고자 하는 커널의 container_of 는 가상화와 관련 없습니다. 차라리 커널의 범용적인 매크로에 가깝다고 보시면 됩니다. container_of(ptr, type, member) 위 매크로의 이름을 직역을 하자면 "what container of this member?" 정도로 될 것 같네요. 즉, 포인터(ptr)가 가리키는 구조체 멤버(member)를 포함하는 구조체 (type)의 주소를 반환하는 함수 입니다. 써놓고 저도 이게 뭔 말이야 싶네요. container_of 를 제대로 이해하기 위해서는 리눅스 커널의 자료 구조들이 어떻게 사용되는지 알아야 합니다. 그 중 대표적인
    조회수 463회댓글 2개

    © 2023 by WHOAMI