亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Linux proc system

2019-11-09 14:37:19
字體:
來源:轉載
供稿:網友

linux PRoc system

proc 文件系統是由內核創建的虛擬文件系統,被內核用來向外界報告信息的一個文件系統,存儲著當前內核運行狀態的一系列特殊文件,是在系統運行時才創建的,所以它僅存在于內存之中而不在外存(硬盤、Flash)上。通過proc虛擬文件可以實現Linux內核空間和用戶間之間進行通信,可以說是內核向用戶空間打開的一扇窗戶。

1.proc目錄分析


Linux系統開機完成進入文件系統后,進入proc目錄

這邊對proc目錄下常見文件進行簡要分析:

1.cat /proc/number

proc目錄下包含許多以數字命名的子目錄,這些數字表示系統當前正在運行進程的進程號,里面包含對應該進程相關的多個信息文件。

例如打開進程270的目錄,如下:

/proc/270# lsauxv exe net stackcgroup fd ns statclear_refs fdinfo oom_adj statmcmdline limits oom_score statuscomm maps oom_score_adj taskcoredump_filter mem pagemap wchancpuset mountinfo personalitycwd mounts rootenviron mountstats smaps

其中每一個文件都有具體的含義,

如:cmdline-啟動當前進程的完整命令,mem-當前進程所占用的內存空間等

2.cat /proc/cmdline

在啟動時傳遞至內核的相關參數信息,這些信息通常由u-boot傳遞的;

/proc# cat cmdline console=ttyS0,115200n8, init=/etc/preinit mac_addr=00:0A:0B:0C:0D:0E,, ip=none root=ubi0:rootfs ubi.mtd=4 rootfstype=ubifs rw noinitrd

3.cat /proc/cpuinfo

處理器的相關信息的文件;

proc# cat cpuinfo Processor : ARMv7 Processor rev 1 (v7l)processor : 0BogoMIPS : 1292.69processor : 1BogoMIPS : 1292.69Features : swp half thumb fastmult vfp edsp neon vfpv3 tls CPU implementer : 0x41CPU architecture: 7CPU variant : 0x2CPU part : 0xc09CPU revision : 1

4.cat /proc/crypto

系統上已安裝的內核使用的密碼算法及每個算法的詳細信息列表;

/proc# cat crypto name : hmac(sha256)driver : hmac(sha256-generic)module : kernelpriority : 0refcnt : 1selftest : passedtype : shashblocksize : 64digestsize : 32name : md5driver : md5-genericmodule : kernelpriority : 0refcnt : 1selftest : passedtype : shashblocksize : 64digestsize : 16

5.cat /proc/devices

系統已經加載的所有塊設備和字符設備的信息,包含主設備號和設備組名;

/proc# cat devices Character devices: 1 mem 4 ttyS 5 /dev/tty 5 /dev/console 5 /dev/ptmx 10 misc 13 input 89 i2c 90 mtd180 usb188 ttyUSBBlock devices:259 blkext 8 sd 9 md 31 mtdblock 65 sd 66 sd

6.cat /proc/filesystems

當前被內核支持的文件系統類型列表文件,被標示為nodev的文件系統表示不需要塊設備的支持;通常mount一個設備時,如果沒有指定文件系統類型將通過此文件來決定其所需文件系統的類型;

/proc# cat filesystems nodev sysfsnodev rootfsnodev bdevnodev procnodev cgroupnodev cpusetnodev tmpfsnodev debugfsnodev sockfsnodev usbfsnodev pipefsnodev anon_inodefsnodev rpc_pipefsnodev devptsnodev ramfsnodev nfsnodev jffs2 yaffs yaffs2nodev mtd_inodefsnodev ubifs vfat fuseblknodev fusenodev fusectl

7.cat /proc/interrupts

架構系統上每個IRQ相關的中斷號列表,多路處理器平臺上每個CPU對于每個I/O設備均有自己的中斷號;

/proc# cat interrupts CPU0 CPU1 29: 351743 3480462 GIC twd 36: 2005 0 GIC pfe_hif 37: 0 0 GIC pfe_hif_nocpy 45: 0 0 GIC spacc 53: 1 0 GIC dwc_otg, dwc_otg:usb3 54: 0 0 GIC xhci-hcd:usb1 59: 1621 0 GIC serial 60: 192 0 GIC comcerto_spi 61: 0 0 GIC comcerto_spi 62: 12 0 GIC I2C 90: 0 0 GIC pmutimer 91: 15 0 GIC timer4 92: 0 0 GIC timer5 94: 0 0 GIC rtc-alarmIPI0: 0 0 Timer broadcast interruptsIPI1: 17381 7533 Rescheduling interruptsIPI2: 0 0 Function call interruptsIPI3: 92 63 Single function call interruptsIPI4: 0 0 CPU stop interruptsErr: 0

8.cat /proc/iomem

每個物理設備在系統內存中的映射信息;

/proc# cat iomem 00000000-02bfffff : System RAM03400000-03ffffff : ddr04000000-3fffffff : System RAM04008000-0455dfff : Kernel text0458a000-0461ea07 : Kernel data83000000-83001fff : iram904500d0-904500d8 : comcerto_wdt90498000-90498fff : comcerto_spi.09049c000-9049cfff : I2C904e0000-904e001f : c2k-rtc90500000-9050ffff : apb905e0000-905e0403 : c2k mdma base address92000000-92ffffff : dwc_otg.096000000-960002c0 : dw_dmac.096400000-9640001f : serial96500000-96500fff : comcerto_spi.19a000000-9affffff : ipsec9b000000-9bffffff : elp9c000000-9cffffff : axi9d000000-9d00ffff : ahci9f000000-9f7fffff : xhci-hcdc0000000-c3ffffff : comcertoflash.0c8300000-c8301fff : comcertonand

9.cat /proc/meminfo

系統中關于當前內存的利用狀況等的信息,其內容顯示為兩列,前者為統計屬性,后者為對應的值;

/proc# cat meminfo MemTotal: 1012928 kBMemFree: 901932 kBBuffers: 0 kBCached: 32764 kBSwapCached: 0 kBActive: 56176 kBInactive: 21676 kBActive(anon): 46048 kBInactive(anon): 4644 kBActive(file): 10128 kBInactive(file): 17032 kBUnevictable: 0 kBMlocked: 0 kBHighTotal: 0 kBAnonPages: 45120 kBMapped: 9912 kBShmem: 5604 kBSlab: 17872 kBSReclaimable: 2860 kBSUnreclaim: 15012 kBKernelStack: 1072 kBPageTables: 1276 kB

10.cat /proc/mounts

系統當前掛載的所有文件系統,此文件指向/proc/self/mounts。

如下所示,其中第一列表示掛載的設備,第二列表示在當前目錄樹中的掛載點,第三點表示當前文件系統的類型,第四列表示掛載屬性(ro或者rw),第五列和第六列用來匹配/etc/mtab文件中的轉儲(dump)屬性;

/proc# cat mountsrootfs / rootfs rw 0 0ubi0:rootfs / ubifs rw,noatime 0 0proc /proc proc rw,noatime 0 0sysfs /sys sysfs rw,noatime 0 0tmpfs /tmp tmpfs rw,nosuid,nodev,noatime 0 0tmpfs /dev tmpfs rw,noatime,size=512k,mode=755 0 0devpts /dev/pts devpts rw,noatime,mode=600 0 0debugfs /sys/kernel/debug debugfs rw,relatime 0 0none /proc/bus/usb usbfs rw,relatime 0 0

11.cat /proc/modules

當前裝入內核的所有模塊名稱列表,其實與lsmod命令得到的結果一樣,只不過lsmod排版的更好看,/proc/modules的信息更全面。

如下所示,其中第一列表示模塊名,第二列表示此模塊占用內存空間大小,第三列表示此模塊有多少實例被裝入,第四列表示此模塊依賴于其它哪些模塊,第五列表示此模塊的裝載狀態(Live:已經裝入;Loading:正在裝入;Unloading:正在卸載),第六列表示此模塊在內核內存(kernel memory)中的偏移量;

/proc# cat modules cls_fw 3409 0 - Live 0x8352d000sbr_cdev 1970 0 - Live 0x83529000 (O)nbvpn 4111 1 sbr_cdev, Live 0x83524000 (O)nf_nat_ftp 1346 0 - Live 0x834ee000nf_conntrack_ftp 4626 1 nf_nat_ftp, Live 0x834e4000fci 3474 5 - Live 0x834c2000 (O)/proc# lsmod Module Size Used by Tainted: P cls_fw 3409 0 sbr_cdev 1970 0 nbvpn 4111 1 sbr_cdevnf_nat_ftp 1346 0 nf_conntrack_ftp 4626 1 nf_nat_ftpfci 3474 5

12.cat /proc/partitions

塊設備每個分區的主設備號(major)和次設備號(minor)等信息,同時包括每個分區所包含的塊 (block)數目,可以與/proc/mtd的內容一起查看;

/proc# cat partitions major minor #blocks name 31 0 1024 mtdblock0 31 1 1024 mtdblock1 31 2 1024 mtdblock2 31 3 8192 mtdblock3 31 4 94208 mtdblock4 31 5 1024 mtdblock5 31 6 8192 mtdblock6 31 7 94208 mtdblock7 31 8 1024 mtdblock8 31 9 2048 mtdblock9 31 10 12288 mtdblock10 31 11 32768 mtdblock11 31 12 2048 mtdblock12 31 13 128 mtdblock13 31 14 512 mtdblock14 31 15 128 mtdblock15 31 16 128 mtdblock16 31 17 64 mtdblock17 31 18 64 mtdblock18 31 19 84320 mtdblock19/proc# cat mtd dev: size erasesize namemtd0: 00100000 00020000 "barebox"mtd1: 00100000 00020000 "bareboxfact"mtd2: 00100000 00020000 "env"mtd3: 00800000 00020000 "kernel1"mtd4: 05c00000 00020000 "rootfs1"mtd5: 00100000 00020000 "reserved_dtb1"mtd6: 00800000 00020000 "kernel2"mtd7: 05c00000 00020000 "rootfs2"mtd8: 00100000 00020000 "reserved_dtb2"mtd9: 00200000 00020000 "configcert"mtd10: 00c00000 00020000 "reserved_avcsign"mtd11: 02000000 00020000 "webrootdb"mtd12: 00200000 00020000 "license"mtd13: 00020000 00010000 "uloader"mtd14: 00080000 00010000 "barebox"mtd15: 00020000 00010000 "env"mtd16: 00020000 00010000 "boardinfo"mtd17: 00010000 00010000 "md5sum1"mtd18: 00010000 00010000 "md5sum2"mtd19: 05258000 0001f000 "rootfs"

以上內容只是對proc目錄進行簡單的分析,更具體的可以查看proc文件系統詳解。

2.proc接口的實現


在proc文件系統中,我們可以將對虛擬文件的讀寫作為與內核中實體進行通信的一種手段,進行傳輸操作內核數據,但是與普通文件不同的是,這些虛擬文件的內容都是動態創建的。

proc的定義在include/linux/proc_fs.h下,接口函數的實現在/fs/proc/generic.c/fs/proc/文件夾下尋找,第一節的proc目錄分析,很多都是在/fs/proc/文件夾在實現的,從文件名稱就可以看出,如下:。

/fs/proc$ lsarray.c generic.c kcore.c mmu.c proc_sysctl.c task_mmu.cbase.c inode.c kmsg.c nommu.c proc_tty.c task_nommu.ccmdline.c internal.h loadavg.c page.c root.c uptime.ccpuinfo.c interrupts.c Makefile proc_devtree.c softirqs.c version.cdevices.c Kconfig meminfo.c proc_net.c stat.c vmcore.c

proc接口的創建有兩種方式,create_proc_entryproc_create,下面分別舉例說明:

1.create_proc_entry方式

直接查看源碼,應該比較容易理解

//包含proc頭文件#include <linux/proc_fs.h>//定義proc接口static struct proc_dir_entry *proc_dir = NULL;static struct proc_dir_entry *proc_test1 = NULL;static struct proc_dir_entry *proc_test2 = NULL;//proc read的實現函數static int proc_test1_read(char *page, char **start, off_t off, int count, int *eof, void *data){ int len = 0; len = sprintf(page, "proc_test1 read ok!/n"); return len;}//proc write的實現函數static int proc_test1_write(struct file *file, const char __user * buf, unsigned long count, void *data){ int val; if(sscanf(buf, "%d", &val) != 1) return -EINVAL; if(val == 1) printk("proc_test1 write true/n"); else printk("proc_test1 write false/n"); return val;}//proc接口創建static int proc_test_fs_create(void){ proc_dir = proc_mkdir("proc_test", NULL); if(!proc_dir) return -ENOMEM; proc_test1 = create_proc_entry("proc_test1", 0644, proc_dir); if(!proc_test1) return -ENOMEM; proc_test1->read_proc = proc_test1_read; proc_test1->write_proc = proc_test1_write;}要使用proc虛擬文件需要包含頭文件

2.proc_create方式

我們首先查看這兩個創建函數的結構:

create_proc_entry(const char *name, mode_t mode, struct proc_dir_entry *parent)proc_create(const char *name,mode_t mode, struct proc_dir_entry *parent, const struct file_Operations *proc_fops)

可以觀察到proc_create函數增加一個struct file_operations結構體,那在實現的時候有什么區別呢?

proc_create方式的實現其實在/fs/proc/文件夾下有很多例子,如cmdline.c/version.c等,對應申明等動作上面已經給出,這邊就不再重復了,直接寫一個proc_create方式的例子吧。

static int proc_test2_show(struct seq_file *seq, void *v){ seq_printf(seq, "proc_test2 read ok!/n"); return 0;}static int proc_test2_open(struct inode *inode, struct file *file){ return single_open(file, proc_test2_oshow, NULL);}static int proc_test2_write (struct file *file, const char *buf, unsigned long count, void *data){ int val; if(sscanf(buf, "%d", &val) != 1) return -EINVAL; if(val == 1) printk("proc_test2 write true/n"); else printk("proc_test2 write false/n"); return val;}static struct file_operations proc_test2_fops = { .open = proc_test2_open, .write = proc_test2_write, .read = seq_read, .llseek = seq_lseek, .release = single_release,};static int proc_test_fs_create(void){ proc_test2 = proc_create ("proc_test2", 0644, proc_dir, &proc_test2_fops); if (!proc_test2) return -ENOENT;}

注意到proc_create函數增加一個struct file_operations結構 ,而不是像create_proc_entry那樣直接返回。其實原理也一樣,一個是將成員函數write、read等指向proc接口proc_dir_entry,而這邊是將成員函數wriet、read等指向結構體file_operations。

使用proc_create方式則不使用read成員,因為當cat該proc成員時,seq_read()函數被反復調用,導致一直打印read函數的內容,不過也可以通過判斷off_t *off變量進行處理,這邊不過多描述。

既然不使用read的方式,那就有新的方式代替,這邊使用成員open,通過上面的例子可以很直觀的看到,open函數會調用show函數,所以show函數的內容就是cat時得到的內容,write成員則與create_proc_entry的實現方式一致。

Linux proc system的分析就到這邊,有感悟時會持續會更新。

注:以上內容都是本人在學習過程積累的一些心得,難免會有參考到其他文章的一些知識,如有侵權,請及時通知我,我將及時刪除或標注內容出處,如有錯誤之處也請指出,進行探討學習。文章只是起一個引導作用,詳細的數據解析內容還請查看Linux相關教程,感謝您的查閱。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品三级美女白浆呻吟| 成人高清视频观看www| 国产一区二区av| 成人女保姆的销魂服务| 国内精品久久久久影院优| 久久视频国产精品免费视频在线| 久久久久99精品久久久久| 亚洲va男人天堂| 欧美一区二区三区艳史| 精品久久香蕉国产线看观看亚洲| 成人精品网站在线观看| 亚洲午夜国产成人av电影男同| 久久亚洲欧美日韩精品专区| 在线观看成人黄色| 91精品免费看| 亚洲毛片在线看| 亚洲图片欧美午夜| 狠狠色狠色综合曰曰| 国产原创欧美精品| 欧美一级免费视频| 一本一本久久a久久精品综合小说| 精品国产一区二区三区久久狼5月| 久99九色视频在线观看| 欧美激情免费观看| 2024亚洲男人天堂| 91九色视频在线| 欧洲成人免费视频| 久久精品国产欧美亚洲人人爽| 欧美日韩美女在线| 国产成人+综合亚洲+天堂| 97av在线视频免费播放| 亚洲国产小视频在线观看| 久热精品视频在线免费观看| www.美女亚洲精品| 自拍偷拍亚洲区| 日韩美女在线播放| 日韩三级影视基地| 国产精品人成电影| 美女视频久久黄| 亚洲男人第一网站| 精品国偷自产在线| 亚洲剧情一区二区| 最新日韩中文字幕| 一区二区三区国产在线观看| 久久精品成人欧美大片| 日韩影视在线观看| 日韩电影免费观看在线| 色噜噜国产精品视频一区二区| 亚洲黄一区二区| 欧美小视频在线| 欧美一级免费看| 97精品国产97久久久久久| 亚洲精品久久久久久久久| 日本亚洲欧美三级| 中文字幕精品一区久久久久| 亚洲第一在线视频| 亚洲网站在线看| 精品呦交小u女在线| 国产精品高潮呻吟久久av无限| 国产91精品不卡视频| 亚洲xxxx在线| 57pao国产精品一区| 亚洲欧美激情精品一区二区| 亚洲欧美三级在线| 亚洲精品国产精品乱码不99按摩| 欧美专区在线视频| 欧美久久久精品| 亚洲va久久久噜噜噜久久天堂| 日韩av快播网址| 欧美成aaa人片在线观看蜜臀| 97在线免费观看| 精品久久久久久久久久久久| 国产精品av免费在线观看| 亚洲成人在线网| 久久久久久国产三级电影| 这里只有精品在线播放| 国产97在线亚洲| 亚洲a在线播放| 日本亚洲欧洲色α| 亚洲成色777777女色窝| 日韩极品精品视频免费观看| 亚洲国产成人一区| 国产成人精品午夜| 奇米一区二区三区四区久久| 欧美一区亚洲一区| 国产精品一二三在线| 亚洲少妇激情视频| 欧美一区二区大胆人体摄影专业网站| 亚洲激情视频在线观看| 成人黄色av播放免费| 日韩av中文在线| 色婷婷综合成人| 欧美色videos| 久久久久久久国产精品| 日韩av在线网页| 日韩av在线影院| 欧美午夜性色大片在线观看| 国产69精品久久久| 久久久精品美女| 26uuu另类亚洲欧美日本一| 国产精品久久久久久久久久久新郎| 欧美日韩福利视频| 欧美孕妇毛茸茸xxxx| 欧美日韩一二三四五区| 奇米4444一区二区三区| 啪一啪鲁一鲁2019在线视频| 国产精品入口免费视频一| 国产性猛交xxxx免费看久久| 久久久久久久久中文字幕| 欧美日韩第一页| 欧美激情一区二区三级高清视频| 国产精品69久久久久| 国产mv久久久| 亚洲国产精品高清久久久| 色噜噜狠狠狠综合曰曰曰| 欧美午夜激情小视频| 欧美成人激情图片网| 亚洲精品国精品久久99热一| 欧美资源在线观看| 91精品久久久久| 国产精品一区二区久久久久| 中文字幕最新精品| 亚洲视频在线免费看| 黑人巨大精品欧美一区免费视频| 精品亚洲精品福利线在观看| 91成人在线播放| 国产在线视频一区| 精品国产91久久久| 久久精品99久久久香蕉| 亚洲摸下面视频| 午夜精品福利电影| 久久久国产成人精品| 国内外成人免费激情在线视频网站| 57pao成人永久免费视频| 国内精品视频在线| 中文字幕一精品亚洲无线一区| 久久天天躁狠狠躁夜夜av| 亚洲美腿欧美激情另类| 久久久久日韩精品久久久男男| 色综合久久天天综线观看| 国产精品综合不卡av| 69av在线播放| 精品女同一区二区三区在线播放| 日本久久久久久久久| 国产91色在线|免| 欧美孕妇性xx| 亚洲精品一区二区在线| 欧美极品美女电影一区| 亚洲欧美日韩在线一区| 久久久久久久久久久人体| 九九精品视频在线| 国产精品日日做人人爱| 欧美日韩国产一区二区| 久久久人成影片一区二区三区观看| 日韩综合中文字幕| 久久婷婷国产麻豆91天堂| 在线视频欧美日韩| 亚洲人成电影在线播放| 91在线观看免费高清完整版在线观看| 久久久精品国产亚洲| 日韩视频免费在线观看| 国产视频精品va久久久久久| 2019日本中文字幕| 色婷婷综合久久久久中文字幕1|