linux 驱动, struct file , struct node, private_data

首先是关于什么是 praviate_data :

来看看正点原子是怎么使用的。

网上找的一些资料:

总结一下:

1 私有数据 是 struct file特有的。

2private_data 可以自己随便设置。

3 一般是在 open 函数中设置好,然后在 read, write 函数中使用。

4 private_data 一般是设置的 cdev, 以及 dev_t 结构体。

然后是 struct file 与 strcut node 的联系。

网上的资料: 这个文章总结的非常好。可以看到 struct file 与 struct node 是两条线。

然后是 struct file

先来看看网上的截图:

然后是 关于char_dev 的描述。

主设备号最大是 255 就是这么来的。

然后是关于cdev 的介绍。

然后是 struct node

疑问: 那么问题来了,到底,什么是字符设备呢?是为了解决什么问题呢?又懵逼了。

关于inode 的内容。

复制代码
struct inode {  
  struct hlist_node i_hash;  
  struct list_head i_list;  
  struct list_head i_sb_list;  
  struct list_head i_dentry;  
  unsigned long  i_ino;  
  atomic_t  i_count;  
  unsigned int  i_nlink;  
  uid_t   i_uid;//inode拥有者id  
  gid_t   i_gid;//inode所属群组id  
  dev_t   i_rdev;//若是设备文件,表示记录设备的设备号  
  u64   i_version;  
  loff_t   i_size;//inode所代表大少  
#ifdef __NEED_I_SIZE_ORDERED  
  seqcount_t  i_size_seqcount;  
#endif  
  struct timespec  i_atime;//inode最近一次的存取时间  
  struct timespec  i_mtime;//inode最近一次修改时间  
  struct timespec  i_ctime;//inode的生成时间  
  unsigned int  i_blkbits;  
  blkcnt_t  i_blocks;  
  unsigned short          i_bytes;  
  umode_t   i_mode;  
  spinlock_t  i_lock;   
  struct mutex  i_mutex;  
  struct rw_semaphore i_alloc_sem;  
  const struct inode_operations *i_op;  
  const struct file_operations *i_fop;   
  struct super_block *i_sb;  
  struct file_lock *i_flock;  
  struct address_space *i_mapping;  
  struct address_space i_data;  
#ifdef CONFIG_QUOTA  
  struct dquot  *i_dquot[MAXQUOTAS];  
#endif  
  struct list_head i_devices;  
  union {  
    struct pipe_inode_info *i_pipe;  
    struct block_device *i_bdev;  
    struct cdev  *i_cdev;//若是字符设备,对应的为cdev结构  
  }; 
}; 

struct inode{...}

然后是是 文件系统对于 cdev 的访问, 这个我不是很理解,先复制过来。

相关推荐
小此方几秒前
Re:Linux系统篇(五)指令篇 ·四:shell外壳程序及其工作原理
linux·运维·服务器
其实防守也摸鱼21 分钟前
sqlmap下载和安装保姆级教程(附安装包)
linux·运维·服务器·测试工具·渗透测试·攻防·护网行动
jingyu飞鸟44 分钟前
Linux系统发送邮件,解决信誉等级低问题 docker compose修改启动一键使用
linux·运维·docker
Lumos_7771 小时前
Linux -- exec 进程替换
linux·运维·chrome
数智化精益手记局1 小时前
人员排班管理软件的自动化功能解析:解决传统手工人员进行排班管理耗时长的难题
运维·数据结构·人工智能·信息可视化·自动化·制造·精益工程
LeocenaY1 小时前
C语言面试题总结
c语言·开发语言·数据结构
ElfBoard2 小时前
飞凌精灵(ElfBoard)技术贴|如何在RK3506开发板上实现UART功能复用
大数据·linux·人工智能·驱动开发·单片机·嵌入式硬件·物联网
HackTorjan2 小时前
AI驱动的制品库高效管理:智能分类、自动化追踪与全生命周期优化
linux·人工智能·分类·自动化
.千余2 小时前
【Linux】进程概念
linux·服务器·开发语言·学习
蜡台2 小时前
centos 8 安装 nginx-1.29.8 及相关配置教程
linux·nginx·centos