Kernel/Development

    [LKM] procfs & seq_file

    Kernel version: 5.14.17 procfs이란? procfs는 proc + fs = process file system의 약자다. 모든 것을 파일로 취급하는 유닉스 사상에 따라 이 특별한 파일 시스템은 시스템 내의 정보를 제공하기 위해 존재한다. 실제로 존재하는 하드웨어에 대한 파일 시스템이 아닌 메모리 상에서만 존재하고, 가상 파일 시스템(VFS)의 인터페이스의 형태이며 /proc 경로에 마운트 되어 사용된다. 예전에 정리했던 포스팅에서도 아주 잠깐 다룬 적이 있다. [wikipedia] "ls /proc" 명령어를 사용해보면 뭔가 많이 있는 것을 확인할 수 있다. 숫자로 된 디렉터리들은 현재 올라가 있는 프로세스들의 PID를 나타내고, 나머지들도 각자의 결과를 반환하는 역할을 하는 함수들..

    [LKM] Character Device Driver

    Kernel version: 5.14.17 What is a device driver? device driver는 하나의 컴퓨터 프로그램이다. 컴퓨터나 오토마톤에 접목되어 특정 타입의 device를 동작시키거나 조종한다. device는 우리가 생각하는 여러 주변 하드웨어 기기들을 일컫는 말이다. 키보드, 마우스, 모니터, USB,... 등등 많은 종류의 하드웨어가 컴퓨터와 통신하는데 주로 sequential bytes의 형태로 이루어진다. 이 말은 즉 linux에서는 모든 devices가 file이라고 본다. ([Kernel of Linux] 강의 정리 내용을 참고하자.) 결국 우리가 만들게 될 device driver는 device라는 하나의 파일을 컨트롤하기 위한 프로그램을 만드는 것이다. devic..

    [LKM] Module Programming Basic

    Environment: Linux Kernel v2.6.14.6 LKM (Loadable Kernel Module). Module programming을 하기 위해 필요한 기본 지식과 만드는 법. 1. callee, caller 모듈 작성 callee.c #include #include #include // module init int __init init_callee(void) { return 0; } // module exit void __exit exit_callee(void) { } int add(int a, int b) { printk(KERN_ALERT "[callee Module] add called...\n"); return a + b; } int sub(int a, int b) { pri..

    [Linux Kernel] System Call 추가하기 - 미완!

    보호되어 있는 글입니다.

    [Linux Kernel] 커널 빌드 과정

    make mrproper Mr.Proper는 수세미 이름인데 딱딱한 스펀지로 되어 있어 잘 지워진다. 그래서 커널 소스 처음 가져왔을 때나 커널을 여러 번 컴파일했을 때 기존에 설정되어 있던 모든 의존 관계를 완전히 제거해주는 역할을 한다. make menuconfig GUI 메뉴 형식의 커널 환경 설정 시작 명령어. CLI는 "make config"로 가능하다. make dep 커널에 설정된 내용에 따라 소스 코드의 파일들을 확인하고 필요한 링크들을 생성하는 것과 같은 의존성 설정 작업. 의존성 확인 후 커널 컴파일에 필요한 파일들의 목록만 각 디렉터리에 .depend 파일로 저장. 이 과정을 거치지 않고 "make bzImage" 명령어를 사용해도 되지만 안 했을 때보다는 컴파일 과정이 빠르게 실행된..