linux设备驱动第三版由于年代比较久远,有很多东西已过时。开一贴记录自己发现的一些问题。
4.3.1.4. seq_file接口
此节最后提到用
struct proc_dir_entry*
create_proc_entry(const char *name, mode_t *mode, struct proc_dir_entry *parent);
在/proc中创建实际的文件
此函数已过时,用以下函数替代:
#include <linux/proc_fs.h> struct proc_dir_entry*
proc_create(const char *name, umode_t mode, struct proc_dir_entry *parent, const struct file_operations *proc_fops);
5.3.1. Linux旗标实现
此节中对于镖旗semaphore的初始化提到了
void sema_init(struct semaphore *sem, int val); DECLARE_MUTEX(name) DECLARE_MUTEX_LOCKED(name); void init_MUTEX(struct semaphore *sem); void init_MUTEX_LOCKED(struct semaphore *sem);
这几个方法,但是在我的Ubuntu 16.04(4.4.0-47-generic)的linux/semaphore.h中只有
DEFINE_SEMAPHORE(name) __SEMAPHORE_INITIALIZER(name, n) void sema_init(struct semaphore *sem, int val)
这三个初始化的方法定义,没有查到具体的文献,但是书中提到的那些初始化方法在一些linux源码网站也只能在2.x版本的源码中能搜索到。
6.1. ioctl接口
此节中讲到驱动程序使用的ioctl方法定义为
int (*ioctl) (struction inode, struc file *filp, unsigned int cmd, unsigned long arg);
此方法为file_operations结构体里的一个函数指针,已过时
用以下函数替代:
#include <linux/fs.h> long (*unlocked_ioctl) (struct file *filp, unsigned int cmd, unsigned long arg); long (*compat_ioctl) (struct file *filp, unsigned int cmd, unsigned long arg);
详见What is the difference between ioctl(), unlocked_ioctl() and compat_ioctl()?