<aside> 💡

UFS围绕一个核心理念:

***「一切皆是文件」(Everything is a File)*它强行规定,不管你是什么硬件(鼠标、键盘、LED灯),在用户程序(User App)眼里,你就是一个文件。


因此,用户只懂4个标准操作(System Calls):

👆先回顾 Unix File System 里讲的核心哲学:「Everything is a File (一切皆是文件)」

既然用户只懂4个标准操作,那么驱动的角色就是「做填空题」,把这四个基操的内容填上


第一步:定义合同(The Implementation)

static ssize_t zili_demo_char1_read(struct file *fp, char *buf, size_t count, loff_t *position){
	int num; 
	if (count < strlen(msg)) num = count; 
	else num = strlen(msg); 
	copy_to_user(buf, msg, num); 
	return num;
}

核心痛点:内核空间(Kernel Space)和用户空间(User Space)的内存是隔离的。

关键逻辑:你不能直接用 ⁠memcpy 或指针赋值。

第二步:签署合同(The Definition)

**直观理解:**内核要求所有驱动填一张 标准合同(Struct file_operations),里面填 函数指针

static struct file_operations zili_demo_fops = { 
	owner: THIS_MODULE, 
	open: zili_demo_char1_open, 
	read: zili_demo_char1_read, 
	release: zili_demo_char1_release, 
};

**作用:**比如,当用户对驱动文件喊 read():