以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。
一、proc文件系统介绍
1、操作系统级别的调试一般很困难
简单的程序可以单步调试;复杂一点的程序可以printf、cout等打印信息调试(即输出信息到控制台),也可以利用框架体系日志记录信息调试(即输出信息到某个txt);内核很复杂,比如是多线程的,调试起来很困难。此时,proc虚拟文件系统应运而生。
2、proc虚拟文件系统的工作原理
linux内核是一个非常复杂的的程序,调试此程序很困难。另外kernel这样庞大的项目,添加或更改其中一个功能是非常麻烦的,因为该功能可能会影响其他功能。早期内核版本中尽管调试很麻烦,但是高手们凭借个人超凡脱俗的能力还是可以驾驭,但是到了2.4左右的版本时,难度就非常大了。为了降低内核调试和学习的难度,内核开发者们在内核中添加了一些属性专门用于调试内核,proc虚拟文件系统就是一个尝试。
工作原理:在内核中构建一个虚拟文件系统/proc,内核运行时,将内核中一些关键的数据结构,以文件的方式呈现在/proc目录中的一些特定文件中,这样一来,就可以将不可见的内核中的数据结构,以可视化的方式呈现给内核的开发者。
proc文件系统提供了一种调试内核的方法。开发者通过实时观察/proc/xxx文件,可以获取内核中特定数据结构的值;或者对比添加新功能的前后,判断新功能产生的影响对与否。
3、常用proc中的文件介绍
proc目录中的文件,文件大小都是0,因为它们只是一个接口,并非真实存在于硬盘的文件。当读取这些文件时,内核并不是去硬盘寻找这个文件,而是将内核内部的某些数据结构映射出来,格式化成字符串后返回。尽管我们看到的内容和普通文件一样的,但是我们明白这个内容是实时地从内核中数据结构来的,而不是从硬盘中来的。另外这些文件都是只读的,不能更改。
常用proc中的文件如下:
(1)/proc/cmdline,这是命令行参数。
(2)/proc/cpuinfo
(3)/proc/devices,调试驱动的时候会用到。
(4)/proc/interrupts
二、proc文件系统的使用
1、cat以手工查看,如“cat /proc/cmdline”。
2、程序中可以文件IO访问。
3、在shell程序中用cat命令结合正则表达式来获取并处理内核信息;
三、sys文件系统
1、sys文件系统的介绍
sys文件系统和proc文件系统一样,都是虚拟文件系统,都在根目录下有个目录(一个是/proc目录,另一个是/sys目录),因此都不是硬盘中的文件,都是内核中的数据结构的可视化接口。
2、sys文件系统与proc文件系统的对比
(1)/proc中的文件只能读,/sys中的文件可以读写读
/sys中的文件就是获取内核中数据结构的值,而写入/sys中的文件就是设置内核中的数据结构的元素的值。
(2)/proc文件系统比/sys文件系统出现得早,但/sys文件系统比/proc有规划
历史上是先有/proc文件系统的,人们希望通过这种技术来调试内核。实际做出来后确实很有用,所以很多内核开发者都去内核添加代码,向/proc目录中写文件。内核管理者起初对proc目录的使用没有统一规划,导致后面proc里面的东西很杂乱;而内核管理者对/sys文件系统进行了规划,使用sys目录时有了规矩。