cat procdriverrtc

xiaoxiao2021-02-28  43

在drivers/rtc/rtc-proc.c 中定义了一个接口,是的可以通过cat /proc/driver/rtc 来查询rtc的情况. 在rtc_device_register->rtc_proc_add_device void rtc_proc_add_device(struct rtc_device *rtc) { //proc_create_data 会在/proc/driver/rtc 下创建一个文件 if (is_rtc_hctosys(rtc)) proc_create_data("driver/rtc", 0, NULL, &rtc_proc_fops, rtc); } 这个时候如果cat /proc/driver/rtc的时候会调用 static const struct file_operations rtc_proc_fops = { .open = rtc_proc_open, .read = seq_read, .llseek = seq_lseek, .release = rtc_proc_release, }; 的rtc_proc_open static int rtc_proc_open(struct inode *inode, struct file *file) { int ret; struct rtc_device *rtc = PDE_DATA(inode); if (!try_module_get(rtc->owner)) return -ENODEV; 会打开rtc_proc_show ret = single_open(file, rtc_proc_show, rtc); if (ret) module_put(rtc->owner); return ret; } 。所以cat /proc/driver/rtc的时候最终会调用rtc_proc_show static int rtc_proc_show(struct seq_file *seq, void *offset) { int err; struct rtc_device *rtc = seq->private; const struct rtc_class_ops *ops = rtc->ops; struct rtc_wkalrm alrm; struct rtc_time tm; err = rtc_read_time(rtc, &tm); if (err == 0) { seq_printf(seq, "rtc_time\t: d:d:d\n" "rtc_date\t: d-d-d\n", tm.tm_hour, tm.tm_min, tm.tm_sec, tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday); } return 0; } 实际测试如下:
转载请注明原文地址: https://www.6miu.com/read-78929.html

最新回复(0)