一、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
【内核层】
【用户层】