linux驱动设备程序(内核层、应用层)

一、linux驱动程序

1、分类

字符设备(驱动)、块设备(驱动)、网络设备(驱动)。

2、核心

应用程序运行在用户空间(3G);<系统调用>——><陷入>——><实现底层驱动操作>

驱动程序运行在内核空间(1G)。

【最初在字符设备中创建】

【Kconfig】

【Makefile】

注:括号中的名字来自于make menuconfig。

之后为了更加方便编译等,不用每次进行上述操作:

【Makefile】

并在first_driver中对设备进一步进行打开、读写、关闭等操作。如下

3、编写模块

(1)注册函数为:
int register_chrdev(unsigned int major(设备号), const char *name, const struct file_operations *fops);

(2)销毁函数:

static inline void unregister_chrdev(unsigned int major, const char *name)  。

(3)写文件时,从用户层得到

 static inline unsigned long __must_check copy_from_user(void *to, const void __user *from, unsigned long n)

(4)读文件时,去到用户层

static inline unsigned long __must_check copy_to_user(void __user *to, const void *from, unsigned long n)

(5)映射地址(将物理地址映射到内核的虚拟地址空间)

#define ioremap(cookie,size)        __arm_ioremap(cookie(物理地址), size, MT_DEVICE)

(6)释放映射内存

#define iounmap(cookie)         __arch_iounmap(cookie)

eg:①first_driver.c

【内核层】

【用户层】

②led.c

【内核层】

【用户层】

上一篇:OpenCV-图像透视变换-三、实现方法


下一篇:VSCode调试Electron