목록리눅스 커널 (11)
total_activ
커널과 유저 모드마이크로소프트사에서 Windows 이전에 사용한 운영체제로, MS-DOS는 유닉스는 항상 단일 CPU 모드에서 실행된다.반면, 유닉스 같은 운영체제는 효율적인 시분할을 위해 이중 CPU 모드를 사용한다.리눅스 CPU는 커널모드와 유저모드로 동작한다. 사용자 프로세스는 유저모드에서 동작 & 접근 권한을 가질려면 시스템 호출을 통해 디바이스 드라이버나 커널 모드로 요청을 전달해야 함 ➜ 그래서 유저 모드는 페이지 폴트가 가능함더보기더보기페이지 폴트란?인터럽트의 일종프로세스가 실행중에 필요한 페이지가 물리 메모리에 없을때 발생한다. 커널 자체는 커널모드에서 동작& 프로세스 명령어 집합, 전체 메모리, 입출력 영역에 대한 모든 접근 권한 소유프로세스 독점[유저 모드]# 리눅스 커널 2.4..

커널 내부 리눅스 시동 [ x86 기반 하드웨어에서 리눅스 시동 절차 과정 ] 전원 인가 ⇩ BIOS ⇩ 부트로더(GRUB/LILO...) ⇩ 실제주소 모드 커널 ︙ x86 실제 주소 모드 (arch/x86/boot/pm.c) x86 보호 모드 ︙ 부호 모든 커널 ⇩ 사용자 프로세스와 데몬 BIOS가 MBR을 메모리에 올리면서 시작 MBR에 있는 코드는 파티션 테이블을 확인한다. 이를 통해 활성 파티션에서 GRUB, LILO, SYSLINUX와 같은 리눅스 부트로더를 읽는다. 부트로더는 압축된 커널 이미지를 메모리에 올린 후 제어권을 넘김 그러면 제어권을 받은 커널은 자신의 압축을 해제한 뒤 시동을 건다 1단계 커널 초기화 : 실제 주소 모드 어셈블리로 수행 2단계 시동 절차 : init/main.c에 ..

오늘은 간단하게 커널 최신 버전을 Ubuntu에 가져와 원시 코드를 확인한 뒤, 커널 시작 코드에 printk("Hello, I am N0min9g") 명령어를 삽입하여 부팅시 " Hello, I am N0min9g" 문자열이 출력되도록 할 것이다. 총 3가지로 진행된다. 첫번째로, kernel의 config를 구성하는 것이다. 해당 과정을 진행하지 않으면 수많은 요구사항들을 노가다로 선택해야할 것이다. 두번째로, kernel을 빌드하는 것이다. 흔히들 make bzImage와 같이 컴파일 한다고 생각하면 된다. 세번째로, kernel을 본격적으로 설치한다. 커널 최신 버전 설치 Stable 버전 kernel.org에 나타나있는 stable한 버전 '6.5.10' 버전을 확인한다. kernel.org 트..
프로세스 생성유저 레벨 프로세스 생성 과정, _do_fork() 함수 처리 흐름유저 공간에서 fork() 함수 호출커널에 프로세스 생성 요청 (리눅스에서 제공하는 라이브러리 도움을 받아서 진행)해당 라이브러리 코드가 실행되는 과정에 System Call 발생리눅스 커널 계층에서 fork()함수에 대응하는 SystemCall 핸들러인 sys_clone()함수 호출sys_clone() 함수 분석유저 계증에서 fork() 함수 호출시 커널 계층에서 실행되는 함수SYSCALL_DEFINE5(clone, unsigned long, clone_flags, unsigned long, newsp, int __user *, parent_tidptr, unsigned long, tls, ..
프로세스프로세스 소개1. 프로세스란? 프로세스는 리눅스 시스템 메모리에서 실행 중인 프로그램을 뜻한다.스케줄링 대상인 태스크와 유사한 의미로도 사용된다.다수의 프로세스를 실시간으로 사용하는 기법의 용어로 '멀티 프로세싱'이라고 한다. 리눅스 개발자 입장에서의 프로세스는 리눅스 시스템 메모리에 적재되어 실행을 대기하거나 실행하는 실행 흐름을 뜻한다. 프로세스가 실행 대기한다면 실행 할때 거치는 과정?프로세스를 식별하는 구조체 모습? : task_struct 구조체 테스크 디스크럽터는 프로세스를 관리하는 자료 구조이자 객체이다.테스크 디스크럽터는 task_struct 구조체로 표현된다.해당 구조체에 프로세스가 쓰는 메모리 리소스, 프로세스 이름, 실행 시각, PID, 프로세스 스택의 최상단 주소같은 속성 ..
임베디드 디버거의 전설 TRACE32TRACE32(T32)는 임베디드 소프트웨어에서 많이 사용되는 전설적인 디버깅 프로그램이다.색션 정보 보기 : symbol.list.section주소로 코드 정보 파악 : symbol.list.line [주소]전역 변수 확인 : var.view [전역 변수 이름]구조체를 주소로 캐스팅 : var.view %l %t (struct 구조체_이름*)주소어셈블리 코드 보기 : data.list 주소특정 조건에서만 동작하는 코드extern uint32_t raspbian_debug_state;if (raspbian_debug_state == 1004) {//추가하고 싶은 코드 입력}첫번째 명령 줄인 전역변수를 선언하고 if 문내에 수정하고 싶은 코드를 추가하면 전역변수가 100..
ftraceftrace란?printk와 dump_stack을 활용한 커널 디버깅은 한계가 존재한다.함수 호출 흐름을 소스 코드를 수정하지 않고 보고 싶음커널의 세부 실행 정보를 출려해 줬으면 좋겠음1초에 수십번 호출해도 성능 부담 없었음 좋겠음커널 로그도 같이 보고 싶음ftrace 특징인터럽트, 스케줄링, 커널 타이머등의 커널 동작을 상세히 추적함함수 필터를 지정하면 지정된 함수를 호출한 함수와 전체 콜 스택까지 출력함 (코드 수정x)함수를 어느 프로세스가 실행했는지 알 수 있음함수가 실행된 시각 정보를 알수있음ftrace 로그를 활성화해도 시스템 동작에 부하를 거의 주지 않음ftrace 설정 방식ftrace가 제공하는 트레이서를 사용하려면 ftrace 관련 코드가 컨러 이미지에 있어햐한다.즉, ftra..
printk() 함수c프로그래밍의 기초 함수 : main과 printfprintf("Hello Wordn");윈도우 콘솔 프로그램이나 리눅스 시스템 프로그램에서 printf 함수 호출 할시 → 문자 출력 이와 동일하게,printk() 함수 호출 할시 → 커널 로그 출력커널의 내부 함수에서도 에러 정보를 커널 로그로 출력할때 printk()를 주로 사용관련 예제 코드printk("pc: [] lr : [] psr : $081x\n", regs->ARM_pc, regs->ARM_lr, regs->ARM_cpsr);레지스터 세트가 커널 로그로 출력된다.%081x : c언의 printf 함수에서 사용하는 형식 지정자, 주어진 값을 8자리의 16진수로 표현하되, 값이 없는 곳은 0으로 채워 오른쪽 정렬하여 ..
디버깅이란?디버깅 :debug와 ing 합성어로 버그를 잡는 과정리눅스 커널 관점의 디버깅 의미 :커널과 드라이버가 정상 작동 할때 자료 구조와 함수 호출 흐름까지 파악하는 과정을 디버깅이라고 함필요 역량 문제 해결 능력 : 커널 디버깅 = 문제 해결 능력커널 학습 능력문제 해결 능력임베디드 및 BSP 개발 도중 직면 가능한 문제부팅 도중 커널 크래시 발생인터럽트 핸들러를 설정했는데 인터럽트 핸들러가 호출되지 않음시스템 응답 속도가 매우 느려짐파일 복사가 안됨위 문제 해결 과정문제 발생 원인 분석+ 원인 분석 방법 : 커널 로그와 메모리 덤프로 함수나 자료구조 분석을 통한 문제 원인 분석 가능 = 커널 디버깅 위의 커널 디버깅 방식에서는 다른 개발자 코드를 접할 가능성이 높음 이유는 디바이스 드라..
라즈베리 파이란라즈베리 파이는 리눅스 개발용 보드이자 소형 컴퓨터이다.장점막강한 커뮤니티 : 쉽게 자료 탐색 가능저렴한 가격간단한 설치최신 리눅스 커널을 지원라즈베리 파이 사전 준비물라즈베리파이USB 연결형 키보드HDMI 케이블충전기마이크로 SD 카드라즈베리 파이 전원 케이블라즈베리 파이 터미널 설정sudo suraspi-configLocalisation Options 클릭en_GB.UTF-8 UTF-8, en_US.UTF-8 UTF-8, ko_kr.UTF-8 UTF-8 체크cd /home/piapt-get updateapt-get upgradeapt-get intall ibusapt-get install ibus-angulapt-get install fonts-unfonts-core1. 라즈베리 파이 ..
커널의 주요 개념리눅스 커널의 메일링 리스트세계최고의 리눅스 커널 블로그https://jake.dothome.co.kr/저자 블로그 및 유튜브https://rousalome.egloos.com/category/Question_Announcementhttps://www.youtube.com/user/schezokim해당 책의 리눅스 커널 소스 버전 기준 : 4.19현재 리눅스 커널 최신 버전 : 6.4 리눅스를 배워야 하는 이유크게 3가지 존재리눅스는 IT 산업 전반의 운영체제다.네트워크, 브라우저, WAS 웹 어플리케이션, 보안 유틸리티 모두 리눅스 기반 환경오픈소스 기반 운영체제리눅스 커널을 배워야 하는 이유임베디드 리눅스, BSP(Board Suport Package) 개발자로 디바이스 드라이버 개발..