国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Linux】linux5.6引入struct proc_ops,用以替代struct file_operations在/proc下進(jìn)行文件操作

這篇具有很好參考價(jià)值的文章主要介紹了【Linux】linux5.6引入struct proc_ops,用以替代struct file_operations在/proc下進(jìn)行文件操作。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一. 問(wèn)題引入

linux5.10生成在/proc目錄下的文件時(shí),利用cat讀取文件,提示:

operation not permitted

該報(bào)錯(cuò)是錯(cuò)誤碼:EPERM,不允許操作

二. 問(wèn)題原因

發(fā)現(xiàn)是在移植內(nèi)核代碼時(shí),未對(duì)proc接口進(jìn)行適配。
linux-5.6引入結(jié)構(gòu)體struct proc_ops,用以替代struct file_operations在/proc下進(jìn)行文件操作。
proc_create中的proc_ops結(jié)構(gòu)體類型定義改變,導(dǎo)致不匹配

//struct proc_dir_entry *proc_create(const char *name, umode_t mode, struct proc_dir_entry *parent, const struct file_operations *proc_fops);
struct proc_dir_entry *proc_create(const char *name, umode_t mode, struct proc_dir_entry *parent, const struct proc_ops *proc_ops);

struct proc_ops定義:

//proc_fs.h
struct proc_ops {
	int	(*proc_open)(struct inode *, struct file *);
	ssize_t	(*proc_read)(struct file *, char __user *, size_t, loff_t *);
	ssize_t	(*proc_write)(struct file *, const char __user *, size_t, loff_t *);
	loff_t	(*proc_lseek)(struct file *, loff_t, int);
	int	(*proc_release)(struct inode *, struct file *);
	__poll_t (*proc_poll)(struct file *, struct poll_table_struct *);
	long	(*proc_ioctl)(struct file *, unsigned int, unsigned long);
#ifdef CONFIG_COMPAT
	long	(*proc_compat_ioctl)(struct file *, unsigned int, unsigned long);
#endif
	int	(*proc_mmap)(struct file *, struct vm_area_struct *);
	unsigned long (*proc_get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
};

引入原因,見提交:proc: decouple proc from VFS with “struct proc_ops”
貼一下提交的翻譯,有興趣的可以自己了解:

目前核心 /proc 代碼使用“結(jié)構(gòu)file_operations”作為自定義鉤子,但是,VFS 不直接調(diào)用它們。 每次 VFS 擴(kuò)展file_operations鉤子集時(shí),/proc 代碼都會(huì)無(wú)緣無(wú)故地膨脹。
引入“struct proc_ops”,它只包含 /proc 允許調(diào)用的那些鉤子(打開、釋放、讀取、寫入、ioctl、mmap、poll)。 它也不包含模塊指針。

三. 解決方法

將需要生成在/proc下的文件的結(jié)構(gòu)體用struct proc_ops代替struct file_operations,例如:

//static const struct file_operations alignment_proc_fops = {
//	.open		= alignment_proc_open,
//	.read		= seq_read,
//	.llseek		= seq_lseek,
//	.release	= single_release,
//	.write		= alignment_proc_write,
//};

static const struct proc_ops alignment_proc_ops = {
	.proc_open	= alignment_proc_open,
	.proc_read	= seq_read,
	.proc_lseek	= seq_lseek,
	.proc_release	= single_release,
	.proc_write	= alignment_proc_write,
};

參考:【Linux】Ubuntu20.04 內(nèi)核5.11.8 用proc_create和seq_file創(chuàng)建proc文件文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-716910.html

到了這里,關(guān)于【Linux】linux5.6引入struct proc_ops,用以替代struct file_operations在/proc下進(jìn)行文件操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • rk3568_linux5.10 調(diào)試6275p pcie wifi

    rk3568_linux5.10 調(diào)試6275p pcie wifi

    a : config 部分必須選擇 Device Drivers --- Network device support --- Wireless LAN --- Rockchip Wireless LAN support --- [*] build wifi ko modules [*] Broadcom Wireless Device Driver Support --- 選擇好路徑: (/system/etc/firmware/fw_bcm43752a2_pcie_ag.bin) Firmware path (/system/etc/firmware/nvram_ap6275p.txt) NVRAM path Enable Chip Interface (

    2024年02月08日
    瀏覽(119)
  • 【Linux】proc文件系統(tǒng)

    【Linux】proc文件系統(tǒng)

    【Linux】proc文件系統(tǒng) 前言 ?一、proc文件系統(tǒng)簡(jiǎn)介 1.1 proc文件系統(tǒng)是什么? 1.2?proc文件系統(tǒng)的作用和特點(diǎn) 1.3 proc文件系統(tǒng)提供的信息 二、proc文件系統(tǒng)常用節(jié)點(diǎn)詳述 2.1 /proc/cpuinfo? 2.2 /proc/meminfo 2.3 /proc/kallsyms 2.4 /proc/interrupts 2.5 /proc/loadavg 三、總結(jié) 重要的環(huán)節(jié):帶著問(wèn)題不斷前

    2024年02月06日
    瀏覽(26)
  • linux proc系統(tǒng)

    Linux的/proc文件系統(tǒng)是一個(gè)特殊的文件系統(tǒng),它提供了訪問(wèn)內(nèi)核和進(jìn)程信息的接口。它不是一個(gè)存儲(chǔ)在硬盤上的文件系統(tǒng),而是一個(gè)虛擬的文件系統(tǒng),存在于內(nèi)存中,用于向用戶和進(jìn)程展示有關(guān)系統(tǒng)狀態(tài)和進(jìn)程信息的數(shù)據(jù)。 /proc目錄下的文件和子目錄提供了對(duì)系統(tǒng)狀態(tài)和進(jìn)程信

    2024年02月12日
    瀏覽(16)
  • Linux /proc和/sys

    Linux /proc和/sys

    在 Linux 系統(tǒng)中,/proc和/sys都是特殊的文件系統(tǒng),數(shù)據(jù)內(nèi)容是存放在內(nèi)存中,這兩個(gè)目錄文件中的內(nèi)容由內(nèi)核動(dòng)態(tài)生成,查看這個(gè)文件中的內(nèi)容,實(shí)際上就是查詢內(nèi)核的某些狀態(tài)或信息。 可以將這兩個(gè)目錄文件理解為虛擬的目錄,即在硬盤上不存在。 proc 是process(進(jìn)程)的縮

    2024年02月08日
    瀏覽(36)
  • 一文搞懂linux的proc文件

    一文搞懂linux的proc文件

    ? 目錄 proc文件夾是干嘛用? proc下都有什么系統(tǒng)信息? ?/proc/bus /proc/buddyinfo /proc/cgroups??????? /proc/cmdline /proc/consoles /proc/cpuinfo /proc/crypto /proc/devices /proc/diskstats /proc/execdomains /proc/fb /proc/filesystems? ? ? ? /proc/fs /proc/inerrupts /proc/iomem /proc/ioports /proc/irq /proc/kallsyms /proc/keys /pr

    2024年02月03日
    瀏覽(28)
  • Intel(R) Ethernet Controller I225-V linux5.4支持

    我們新板卡使用了Intel(R) Ethernet Controller I225-V網(wǎng)卡,使用的內(nèi)核版本是linux-5.4.0,但是加載igc驅(qū)動(dòng)后,報(bào)錯(cuò) igc: probe of 0000:01:00.0 failed with error -2 分析igc驅(qū)動(dòng)源碼后,發(fā)現(xiàn)讀出來(lái)的phy id是0x67C9DCC0,驅(qū)動(dòng)源碼中igc_init_phy_params_base函數(shù)發(fā)現(xiàn),并不支持這個(gè)PHY ID,代碼如下: 經(jīng)過(guò)修改

    2024年02月02日
    瀏覽(47)
  • linux下sys目錄與proc目錄的作用

    linux下sys目錄與proc目錄的作用

    在Linux系統(tǒng)中,/sys目錄是一個(gè)特殊的虛擬文件系統(tǒng)(sysfs),用于提供對(duì)內(nèi)核和設(shè)備的運(yùn)行時(shí)信息的訪問(wèn)。它是在內(nèi)核中運(yùn)行的驅(qū)動(dòng)程序和子系統(tǒng)的接口,可以用于獲取和配置系統(tǒng)的硬件和內(nèi)核信息。 以下是/sys目錄的一些主要作用: 設(shè)備和驅(qū)動(dòng)程序信息:/sys目錄提供了與設(shè)

    2024年02月04日
    瀏覽(23)
  • Linux查看進(jìn)程運(yùn)行輸出(/proc/<pid>/fd)

    輸入ps或ps -ef root@TinaLinux:/proc/631/fd# ps PID ? USER ? ? TIME ? COMMAND ? ? 1 root ? ? ? 0:03 /sbin/procd ........... ? 631 root ? ? ? 0:06 ./rt_agent ? 694 root ? ? ? 0:00 [kworker/2:2] ? 771 root ? ? ? 0:23 /home/upg/fupg 要查看的進(jìn)程id為631。 切換到/proc/pid/fd下,如 root@TinaLinux:~# cd /proc/631/fd root@TinaLin

    2024年02月11日
    瀏覽(23)
  • RK3399驅(qū)動(dòng)開發(fā) | 15 - RTC實(shí)時(shí)時(shí)鐘芯片HYM8563S調(diào)試(基于linux5.4.32內(nèi)核)

    Linux內(nèi)核中使用RTC設(shè)備來(lái)提供硬件時(shí)間,為了兼容各種各樣的RTC硬件,Linux內(nèi)核提供了R

    2024年02月09日
    瀏覽(25)
  • 在嵌入式Linux中使用C++讀取 /proc/meminfo 文件來(lái)獲取系統(tǒng)內(nèi)存大小

    在嵌入式Linux中,可以使用C++編程語(yǔ)言通過(guò)讀取? /proc/meminfo? 文件來(lái)獲取系統(tǒng)內(nèi)存大小。以下是一個(gè)示例代碼片段: 上述代碼打開? /proc/meminfo? 文件并逐行讀取其中的內(nèi)容。當(dāng)找到以 \\\"MemTotal:\\\" 開頭的行時(shí),提取出內(nèi)存大小信息并去除空格和單位(KB),然后將其轉(zhuǎn)換為無(wú)符

    2024年02月10日
    瀏覽(17)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包