일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- 문자형 디바이스 파일
- context
- sscanf
- fscanf
- pagefile.sys
- makefile
- list
- 스레드
- 환경 변수
- jenkins
- intents
- context switch
- HDR
- SDK
- socket
- DMA
- 안드로이드
- interrupt context
- 프레임버퍼
- activities
- layouts
- lifecycle
- 소캣
- interrupt handler
- 디스크 축소
- 젠킨스
- 멀티프로세싱
- memcmp
- fprintf
- sprintf
- Today
- Total
목록Linux (14)
do{학습}while

QEMU와 Buildroot로 ftrace 실습 환경 만들기이번 글에서는 QEMU와 Buildroot를 이용해 ftrace를 실습할 수 있는 환경을 구축하는 방법을 정리한다. ftrace는 Linux 커널 내부의 동작을 추적할 수 있는 매우 강력한 도구이며, 별도의 추가 설치 없이 커널만 잘 구성해도 바로 사용할 수 있다. 이 실습은 x86_64 환경을 기준으로 진행된다.1. ftrace란?ftrace는 Linux 커널에 내장된 트레이싱 프레임워크로, 다음과 같은 작업에 사용된다:함수 호출 추적스케줄링 전환 추적인터럽트 오프/온 상태 추적IRQ 지연 분석 등ftrace는 /sys/kernel/debug/tracing 디렉토리를 통해 접근할 수 있으며, debugfs 파일 시스템이 마운트되어 있어야 한다...
QEMU Cheat Sheet (x86_64, 커널 디버깅 중심)qemu 가상머신에서 컴파일된 커널이미지를 실행 시키는 명령어입니다.rootfs 없이 커널만을 실행이 가능합니다.qemu-system-x86_64 \ -kernel arch/x86/boot/bzImage \ -append "console=ttyS0 nokaslr" \ -nographic -s -S핵심 옵션옵션설명-kernel bzImage부팅할 커널 이미지 (압축된 bzImage) 지정-append "..."커널 부트 인자 전달 (console, init, nokaslr 등)-nographicVGA 끄고 시리얼로 모든 출력 (터미널 기반)-sGDB 서버 포트 1234 열기 (= -gdb tcp::1234)-S부팅 직후 CPU..
0. 동기화란?동기화(Synchronization)란 두 개 이상의 실행 흐름(예: 스레드, 인터럽트, 프로세스 등)이 공유 자원에 접근할 때,서로 충돌하지 않도록 그 접근 순서나 타이밍을 제어하는 과정을 말한다.운영체제나 커널 환경에서는 다음과 같은 상황에서 동기화가 필수적이다:여러 스레드가 같은 변수에 동시에 값을 쓰는 경우하나의 프로세스가 값을 읽는 도중, 다른 프로세스가 그 값을 변경하는 경우인터럽트 핸들러가 처리 중인 버퍼를 메인 루틴이 동시에 접근하는 경우이러한 상황에서 동기화 없이 접근하게 되면 race condition, 데이터 손상, 비정상 동작이 발생할 수 있다.따라서 동기화는 시스템 안정성과 신뢰성 보장을 위한 핵심 메커니즘이다.1. 크리티컬 섹션(Critical Section)이란?..
인터럽트와 인터럽트 컨텍스트란 무엇인가?임베디드 시스템이나 커널 수준의 프로그래밍을 하다 보면 인터럽트(Interrupt)와 인터럽트 컨텍스트(Interrupt Context)라는 개념을 자주 접하게 된다. 이 글에서는 인터럽트가 무엇인지, 인터럽트 컨텍스트란 어떤 의미인지, 그리고 왜 인터럽트 핸들러는 짧게 실행되어야 하는지에 대해 정리한다.1. 인터럽트란?인터럽트(Interrupt)는 외부 또는 내부에서 발생한 사건을 CPU에 알리는 신호이다.이 신호는 CPU가 현재 수행 중인 작업을 잠시 중단하고, 해당 사건을 처리하도록 만든다.외부 인터럽트 예시키보드 입력마우스 클릭네트워크 패킷 수신외부 장치의 상태 변화내부 인터럽트 예시타이머 만료소프트웨어 인터럽트 (softirq)시스템 호출 트랩 (sysca..
프로세스와 스레드의 차이 정리시스템 프로그래밍을 하다 보면 자주 마주치는 개념이 바로 프로세스(Process) 와 스레드(Thread) 이다. 두 개념은 모두 실행의 단위이지만, 메모리 구조와 데이터 공유 측면에서 큰 차이가 있다. 이 글에서는 이 둘의 차이를 명확히 정리한다.1. 프로세스란?프로세스는 실행 중인 프로그램을 의미하며, 운영체제에서 독립적인 메모리 공간을 갖는 단위이다. 각각의 프로세스는 코드 영역, 데이터 영역, 힙 영역, 스택 영역을 가지며, 이 메모리 공간은 다른 프로세스와 완전히 분리되어 있다. 이러한 격리 덕분에 하나의 프로세스에서 발생한 오류나 충돌이 다른 프로세스에 영향을 미치지 않는다.하지만 동시에 이 말은 기본적으로 프로세스 간에는 데이터를 직접 공유할 수 없다는 뜻이기도 ..
운영체제에서 멀티태스킹을 구현하기 위해 가장 중요한 개념 중 하나가 바로 "Context"와 "Context Switch"다. 이 글에서는 context가 의미하는 바와 context switch 과정에서 정보가 어떻게 저장되고 관리되는지를 설명한다.Context란?Context는 일반적으로 "문맥" 또는 "상황"을 의미하지만, 운영체제나 커널 레벨에서는 "CPU가 어떤 프로세스를 실행하던 시점의 상태 정보"를 의미한다. 이 상태 정보에는 다음과 같은 것들이 포함된다:레지스터 값프로그램 카운터(PC)스택 포인터(SP)프로세서 플래그그 외 아키텍처에 따라 필요한 정보들다시 쉽게 설명하자면... 여러 업무를 하고 있다고 가정할 때, 기존에 하던 업무를 잠시 멈추고 다른 업무를 하기 전에정해진 형식(threa..
mkdir {} : 여러개의 디렉토리를 생성해주는 명령어mkdir -p {hello,world}/{1,2,3}cd - : 빠르게 이전에 위치했던 디렉토리로 이동바로 이전의 디렉토리로 이동(cd .. 와 다름)touch with a range to create multiple files at once.touch log{1..10}.txtlog1.txt, log2.txt ...tail -f : 실시간으로 로그를 주적tail error_file.log | grep "error"history (num) : 최근 사용했던 명령어를 num 갯수만큼 출력 참고https://medium.com/gitconnected/5-linux-command-tricks-that-will-change-your-life-as-a-p..
이전에 윈도우 환경에서 가상머신 내 리눅스 환경에서 AOSP 소스를 빌드를 시도하였습니다. 컴퓨터 자원적으로 부족하지 않은 상황(RAM: 64GB, 14코어)에서 빌드함에도 불구하고 메모리 사용량이 높아져 빌드 도중 시스템이 멈추는 현상이 발생한적이 있습니다. 그래서 효율적으로 빌드를 하고 싶어 컴퓨터에 리눅스를 설치하여 빌드하기로 하였습니다. 윈도우를 지우는 것은 아까워 듀얼 부팅을 하기로 하였습니다. 듀얼 부팅이란?듀얼 부팅(Dual Booting)은 하나의 컴퓨터에 두 개 이상의 운영 체제를 설치하여, 부팅 시에 사용자가 어떤 운영 체제를 사용할지 선택할 수 있는 구성을 말합니다. 듀얼 부팅 설정 방법듀얼 부팅를 하기 위해서는 둘 중 하나의 운영체제는 이미 깔려있어야 합니다.1. 디스크 파티션 ..

rootfs(root file system)이란? 루트 파일 시스템은 운영체제에 필요한 어플리케이션이나 라이브러리와 같은 기본 파일을 담고 있는 저장소입니다. 루트경로('/') 즉 최상위 경로에 담기는 기본적인 파일들을 의미합니다.rootfs 생성rootfs을 생성을 위해 buildroot 혹은 yocto와 같은 리눅스 시스템 구축 오픈소스 프레임워크를 사용할 수 있습니다.해당 프레임워크들을 통해 부트로더, 커널, rootfs와 같은 시스템을 위한 패키지를 생성할 수 있습니다.rootfs 구성요소 각각의 루트 파일 시스템마다 다양한 기본 파일이 존재할 수 있습니다.바이너리 파일(binary files)실행 가능한 프로그램 파일들이 포함됩니다.예를 들어, /bin, /sbin, /usr/bin, /usr/..

Makefile은 빌드를 자동화해주는 설정 파일입니다.make 명령어와 함께 사용되며, 소스 코드를 컴파일하고 실행 파일을 만드는 과정을 쉽게 만들어줍니다.1. 빌드 자동화Makefile은 복잡한 빌드 과정을 자동화해줍니다.빌드에 필요한 파일들을 컴파일하거나 링킹하기 위한 명령어들을 Makefile에 입력하고, 의존성과 순서를 정확히 작성해두면 'make' 명령어 하나만으로 손쉽게 빌드를 수행할 수 있습니다.2. 점진적 빌드 (Incremental Build)Makefile은 변경된 파일만 다시 컴파일하는 기능을 통해 전체 빌드 시간을 단축시킵니다.예를 들어, A 파일이 변경되었을 때, A 파일에 직접적 또는 간접적으로 의존하는 파일만 다시 컴파일합니다.A 파일과 관련 없는 파일들은 다시 빌드하지 않기 ..