Linux/Kernel Analysis

    [ARMv8] aarch64 프로세서 상태 레지스터(PSTATE)

    [ARMv8] aarch64 프로세서 상태 레지스터(PSTATE)

    PSTATE는 프로세서 상태 레지스터입니다. 이 레지스터를 이용해 프로세서의 상태를 알수도 있고 설정할 수도 있습니다. 아래 그림은 ARM Developer 페이지에서 가져온 그림입니다. PSTATE field를 정의해 놓았습니다. (http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.den0024a/BABICCBC.html) PSTATE의 각 비트가 하나 씩 어떤 행위를 하는지 정리해보겠습니다. N(Negative Condition Flag) : 연산의 결과 값이 음수인 경우 설정되는 비트 Z(Zero Condition Flag) : 연산의 결과 값이 0인 경우 설정되는 비트C(Carry Condition Flag) : 캐리 발생 시 설정되는 비트..

    [커널분석] parse_early_param()

    parse_early_param() 함수는 커널 부트업 타임에 사용하는 early parameter를 파싱해 오는 함수로 boot command line을 파싱해오는 역할을 합니다. parse_early_param()init/main.c1234567891011121314/* Arch code calls this early on, or if not, just before other parsing. */void __init parse_early_param(void){ static int done __initdata; static char tmp_cmdline[COMMAND_LINE_SIZE] __initdata; if (done) return; /* All fall through to do_early_par..

    [커널분석] static void __init setup_machine_fdt(phys_addr_t dt_phys)

    fdt를 최초 셋업하는 함수입니다. 함수 인자로 phys_addr_t 자료형의 dt_phys를 전달받는다. 전달받은 주소를 이용해 부팅과정 중 먼저 필요한 항목에 대해 설정해준다. 185 static void __init setup_machine_fdt(phys_addr_t dt_phys)186 {187 void *dt_virt = fixmap_remap_fdt(dt_phys);188 const char *name;189190 if (!dt_virt || !early_init_dt_scan(dt_virt)) {191 pr_crit("\n"192 "Error: invalid device tree blob at physical address %pa (virtual address 0x%p)\n"193 "The..

    void __init early_fixmap_init(void) (작성중...)

    [주의] - 코드 분석 시 잘못된 부분도 있을 수 있으므로, 참고만 부탁드립니다. [분석 기준] kernel version : linux kernel 4.16 architecture : aarch64 (arm64) [사전 지식]fixmap영역은 컴파일 타임에 가상 주소공간이 이미 결정된 매핑 메모리 영역입니다. 따라서 매핑된 메모리 영역을 사용하기 위해서 fixmap영역을 초기화 해줄 필요가 있습니다. 리눅스 커널은 pgd, pud, pmd, pte를 이용하여 페이징 기법을 제공하고 있습니다. pgd와 pud, pmd, pte 중 무엇을 사용하느냐에 따라 단계별 페이징으로 나뉠 수 있습니다. pgd -> pte을 사용하는 2단계 페이징, pgd -> pmd -> pte를 이용한 3단계 페이징, 4가지 모..

    [Linux] Writing udev rules, udev 규칙 작성법에 관하여..

    gitbook에서 보기 Writing udev rules (udev rules 작성 위한 참고문서) 2015. 10. 23 linuxias@gmail.com Introduction 이 문서를 읽기 전에.. 이 문서는 아래 문서를 번역하여 제공하는 것 입니다. 올바른 해석이 아닐 수도 잘못된 지식이 포함되어 있을 수 있으니 참고해 주시기 바랍니다. 내용 진행 상 불필요한 부분은 제거한 부분도 있으니 원문 또한 참고하면서 봐주시기 바랍니다. 잘못된 내용이나 수정이 필요한 내용이 있다면 linuxias@gmail.com 로 메일로 해당 내용 보내주시면 감사하겠습니다. 많은 도움이 되었으면 좋겠습니다. 원문 : http://www.reactivated.net/writing_udev_rules.html 이 문서에..

    [Linux Kernel] 프로세스 상태 분석

    [Linux Kernel] 프로세스 상태 분석

    리눅스에서 프로세스의 상태를 한번 알아보겠습니다. 프로세스에 대해서는 앞에서도 간단히 설명 드렸습니다. 실행중인 프로그램이라고 단순히 설명 할 수 있습니다. 이러한 프로세스들은 여러가지의 상태를 가지게 되는데, 이 상태들에 대해 오늘 한번 알아보겠습니다. 구글에 검색해 보면 많은 사람들이 자료를 블로깅해 놓았을텐데, 보면 다들 분류하는 상태의 갯수가 다른 것 처럼 보입니다. 하지만 크게 보시면 시스템의 프로세스는 5가지의 상태를 가지게 됩니다. 1179 struct task_struct { 1180 volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ 1181 void *stack; 1182 atomic_t usage; 1183 unsigne..