프로그래밍/리눅스 시스템

[Linux Kernel] Device Driver : proc file system

KimuGamJa 2024. 4. 29. 05:32
  • proc file system 생성

- $ make 명령어를 통해 build하고, insmod 한다. => 커널 로그에 [init] HI 출력됨.

 


- $ ls –al /proc/ | grep pc 명령어를 통해 생성된 pc (proc fiile system)를 확인한다.

 

 

[Makefile]

KERNEL_HEADERS=/lib/modules/$(shell uname -r)/build

obj-m := pc.o

total : driver

driver:
	make -C $(KERNEL_HEADERS) M=$(PWD) modules

clean:
	make -C $(KERNEL_HEADERS) M=$(PWD) cleancopy

 

 

[pc.c]

#include <linux/module.h>
#include <linux/printk.h>
#include <linux/init.h>
#include <linux/proc_fs.h>
#include <linux/seq_file.h>

MODULE_LICENSE("GPL");

static struct proc_dir_entry *dir;
static struct proc_dir_entry *file;

static int pc_open(struct inode *inode, struct file *filp){
    pr_info("Open File\n");
    return 0;
}

static int pc_release(struct inode *inode, struct file *filp){
    pr_info("Close File\n");
    return 0;
}
static const struct proc_ops fops = {
	.proc_open = pc_open,
	.proc_release = pc_release,
};

static int __init pc_init(void){
	dir = proc_mkdir("pc", 0);
	file = proc_create("file", 0666, dir, &fops);

	pr_info("[init] HI\n");
	return 0;
}

static void __exit pc_exit(void){
	proc_remove(file);
	proc_remove(dir);
	pr_info("[exit] BYE!\n");
}

module_init(pc_init);
module_exit(pc_exit);copy