Linux12 Scatter Gather List scatterlist CPU 및 Device 관점에서의 address와 length 정보 (page 內 offset 정보 포함) page_link 기능 SG_CHAIN 설정 時, 현재 sgl은 데이터를 포함하지 않은 link 用 sgl SG_END 설정 時, 현재 sgl은 마지막 sgl이며 data를 가르키고 있음 CHAIN이 아닌 경우, page_link는 첫번째 page 정보를 가르킴 SGL Type non-chained SGL 여러개의 SGL이 연속적으로 위치 SG_MAX_SINGLE_ALLOC : non-chained SGL의 최대 크기 해당값 초과 時, 자동으로 chained-SGL 적용 chained SGL 하나의 chain 內 SGL은 연속적으로 위치 마지막 SGL은 chain을 연결하는 기.. 2024. 4. 10. Block IO 분석 Kernel의 Block Layer 내용 정리 Storage IO Framework File System Layer Disk와 Memory 사이의 Mapping 작업 수행 Search 및 Access를 위한 Data 저장 未 구성 Block Layer File System 요청에 따라 Data를 전달 IO Scheduling 기능을 이용하여 요청을 병합/분할 SCSI Layer Data 전송 기능을 수행하며 SCSI Disk 식별 일반적인 임베디드 환경에서는 SCSI Layer 도움 없이 Device로 바로 연결 LLDD (Low Level Device Dirver) Data 전송 기능을 수행하며 특정 Device 구동 기능 제공 IO submit/complete 각 Layer는 하위에 요청을 전달할때 .. 2024. 3. 24. [PalWorld] Dedicated Server 구축 (Ubuntu Linux) . 목적 PalWorld(팰월드) Dedicated Server 구축 Linux 이용하여 24시간 가동되는 Server 확보 환경 CPU: x86_64 Ubuntu 22.04 공식 가이드에서 서버 최소 사양 확인 필요 Host Server 업데이트 $ apt update && apt dist-upgrade SteamCMD 및 Dependency 설치 $ apt install software-properties-common && apt-add-repository main universe restricted multiverse && dpkg --add-architecture i386 && apt update && apt install steamcmd "steam" 계정 생성 $ apt install sudo.. 2024. 2. 13. [QEMU][GDB] Kernel Debugging (arm64) 목적 QEMU & GDB를 이용해서 Kernel Debugging HW 가상화 기능을 이용 : Host/Target이 서로 다른 상황(Host: Ubuntu x86, Target: arm64) QEMU arm64 실행방법 QEMU의 HW 가상화 기능을 이용해서 arm64 kernel을 실행하는 방법은 아래 링크 참조 [QEMU][BusyBox] MainLine Kernel Emulation(arm64) (tistory.com) [QEMU][BusyBox] MainLine Kernel Emulation(arm64) 목적 MainLine Kernel(=Vanilla)를 가상머신에서 구동 Cross Compile 및 HW 가상화 사용 (Host:Ubuntu x64, Target:arm64) QEMU 및 Bus.. 2024. 2. 5. [Ubuntu] sshfs 공유 폴더 Mount 목적네트워크 공유 폴더 생성 관련 Package 설치$ apt install sshfs 공유 폴더 Mount (접속하고자 하는 server의 IP, 계정정보 및 위치 입력)$ mkdir shared_dir/$ sshfs user_name@123.456.789.123:/server/dir ./shared_dir 만약 비밀번호를 매우 타이핑 하는게 귀찮다면, 스크립트를 작성할 수도 있다.(명심하자, 엄청난 보안 위배이다.)#!/bin/bashset -o errexitset -o nounsetset -o pipefailsshfs -o user_name@123.456.789.123:/server/dir ./shared_dir PASSWORD 부분에 ssh 계정 비밀번호를 입력하면 된다.. 2024. 2. 5. [.bashrc] - ls 관련 추가 ~/.bashrc에 아래 내용을 추가하여 ls를 조금더 편하게 사용한다 alias ll='ls -alF --human-readable --classify --group-directories-first' alias la='ls --almost-all --group-directories-first' alias l='ls -C --classify --group-directories-first' 2024. 2. 3. Device Tree 분석 (Kernel Source) .dts파일은 컴파일 후, HexFile로 생성된다. 해당 HexFile을 Linux Kernel이 Parsing 하면 아래그림과 같이 Tree 구조를 가진다. Linux Source Code 흐름을 따라가보면 아래 그림과 같다. 동일한 내용을 텍스트로 작성. setup_arch(&command_line) setup_machine_fdt(__atags_pointer) | 인수로 전달받은 디바이스 트리(fdt)가 물리 주소에 있는지 검색 | 해당 machine을 찾고 machine_desc구조체 포인터로 알아온다 | 디바이스 트리로부터 초기 부트업 과정에 미리(early) 설정해야 정보를 얻어온다 | 초기 정보에는 커맨드 라인 정보나 메모리 정보가 있다 early_init_dt_verify(phys_to_.. 2024. 2. 2. Device Tree 문법 개요 PC에서는 BIOS가 있어서 하드웨어 장치가 변경되면 자동적으로 검출하여 동작하도록 해주는 작업이 쉽다. ARM 프로세서는 BIOS가 없어서 리눅스 커널이 모든 역할을 다해주고 있어서 리눅스 커널을 믿는 수밖에 없다. 그러므로, 리눅스 커널에 도입된 해결책이 디바이스 트리(Device Tree)이며, Open Firmware(Abbreviated OF) 혹은 Flattened Device Tree(FDT)라고 언급되기도 한다. Device Tree는 정해진 API가 특정 데이터에 접근하도록 표준화된 Tree 구조체를 사용하도록 한다. 주변장치들의 버스, 주소, 인터럽트, 변수들은 정해진 관례를 지켜서 Device Tree에 표현한다. 디바이스 트리는 커널의 일부분으로서 하드웨어 정보를 추가, 제거,.. 2024. 2. 2. ZRAM 분석 . zram은 memory swap 시, flash가 아닌 ram을 사용하는 방법이다. 이때, block device의 구조를 가지고 동작하며 메모리 압축기법을 사용한다. 자세한 개념은 아래의 링크를 참고하기 바라며, 해당 포스팅 에서는 source code 분석에 대해서 얘기하고자 한다. zram - Wikipedia From Wikipedia, the free encyclopedia Linux module for compressed RAM This article is about the Linux kernel feature. For the memory hardware technology, see Z-RAM. For the Linux kernel compressed swap cache, see zswap.. 2024. 2. 2. ELF 실행 & execve ELF 실행되는 과정 요약 Source Code 분석 먼저 실행가능한 파일(ELF)에 대한 정보를 담게될 linux_binprm에 대해서 살펴보자. /* * This structure is used to hold the arguments that are used when loading binaries. */ struct linux_binprm { char buf[BINPRM_BUF_SIZE]; // ELF Header의 128개 문자르 저장한다 #ifdef CONFIG_MMU struct vm_area_struct *vma; unsigned long vma_pages; #else # define MAX_ARG_PAGES32 struct page *page[MAX_ARG_PAGES]; #endif stru.. 2024. 2. 2. Bootloader 개요 Linux Documentation을 정리하였다. (Kernel/Document/arm/Booting) Booting ARM Linux ARM Linux를 Booting 하기 위해서는 boot loader가 필요하다. boot loader는 main kernel이 수행되기 전에 동작하는 작은 프로그램을 말한다. 여러 가지 device들이 boot load를 통해 초기화되며, 최종적으로 linux kernel을 실행하며, kernel에게 필요한 정보를 전달한다. BL(Boot loader)는 간단하게 아래의 수행 과정을 거친다. 1. RAM을 설정하고 초기화한다. 2. 하나의 시리얼 포트를 초기화한다. 3. machine type을 감지한다. 4. kernel tage list를 설정한다. 5. ini.. 2024. 2. 2. [sched] Pressure Stall Information (PSI) Linux에서는 CPU, Memory, IO 등 자원을 사용하기 위한 경쟁 및 자원의 고갈로 인한 성능 영향도를 측정할 수 있는 인터페이스를 제공한다. 즉, 자원을 얻기위해 프로세스가 동작하지 못하고 얼마나 대기(stall) 하였는지 측정이 가능하다. 이 기능은 Pressure Stall Information(PSI) 이름으로 Kernel에 추가되었고, 아래에서는 그 의미와 사용 방법을 간단하게 작성하였다. ※ PSI 인터페이스 ※ 아래처럼 커맨드를 입력하여 PSI 값을 읽을 수 있다. $ cat /proc/pressure/cpu some avg10=2.98 avg60=2.81 avg300=1.41 total=268109926 $ cat /proc/pressure/memory some avg10=0.30.. 2024. 2. 2. 이전 1 다음