获取系统信息3——proc文件系统介绍和使用

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。

一、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目录时有了规矩。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461314.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阻止函数源码在控制台输出

这是一个很贱的技能,我在谷歌控制台源码里看到的。相信大家都知道,在控制台里只输入函数名,不输入 () 然后按回车,就可以输出源码。 都不会陌生吧,这也有助于我们调试,是个很棒的技巧。不过系统内置的就会输…

值不值得入手_iPhone11现在还值不值得入手?真实用户说出心里话

iPhone11作为苹果走量的一款机型,自发布以来就备受争议,有的朋友说真香,A13iOS只卖4000多,还有的朋友吐槽大黑边、828P的屏幕、信号不好还有充电太慢,特别是现在同价位能买到的安卓旗舰,要5G有5G、要高刷新…

设备驱动,字符设备驱动、(总线)设备驱动模型、sysfs文件系统、平台设备驱动

以下内容转载于微信公众号:嵌入式企鹅圈。如有侵权,请告知删除。 学习Linux设备驱动开发的过程中自然会遇到字符设备驱动、平台设备驱动、设备驱动模型和sysfs等相关概念和技术。 对于初学者来说会非常困惑,甚至对Linux有一定基础的工程师而言…

写文章最难写的是标题

最近做事情有点沉不下心来,不知道是不是在家一个月养成的坏毛病还没改过来还是怎么回事。但仔细想了想,其实这只是个借口。自从高中以来,我这个毛病好像就有了,大概是高二的时候一直到现在,老是不能全心全意的静下心来…

对于局部变量_对于SQL常用查询优化方法的整理

查询进行优化,应尽量避免全表扫描,首先应考虑在where 及order by 涉及的列上建立索引:尝试下面的技巧以避免优化器错选了表扫描:使用ANALYZE TABLE tbl_name为扫描的表更新关键字分布。对扫描的表使用FORCE INDEX告知MySQL,相对于…

wampServer2.1错误(Could not execute menu item (internal error)

安装wampServer2.1后提示以下错误Could not execute menu item (internal error) [Exception] Could not perform service action 服务尚未启动错误原因:08端口被占用(因为安装好wampServer后,默认的端口为80)解决方法&#xff1a…

黄聪:如何使用CodeSmith批量生成代码(原创系列教程)

在上一篇我们已经用PowerDesigner创建好了需要的测试数据库,下面就可以开始用它完成批量代码生成的工作啦. 下面我会一步步的解释如何用CodeSmith实现预期的结果的,事先声明一下,在此只做一个简单的Demo,并不详细的讲解CodeSmith各个强大的功能,有兴趣的朋友可以打开CodeSmith的…

字符设备驱动基础2——用开发板来调试驱动的步骤

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 步骤1:获取编译后的内核源码与镜像 描述 该内核源码主要用来编译驱动源码。该内核源码必须与开发板运行的内核源码的版本一致,否则编译后的驱动程序在开发版上运行时&#xf…

c语音异或运算符_C语言中的按位异或运算符有什么用处?

原标题:C语言中的按位异或运算符有什么用处?想知道C语言中的按位异、运算符有什么用处,首先C语言中^为按位异或运算符,若两个二进制位相同,则结果为0,不同为1例:#include "stdio.h"ma…

Android 开发笔记 一

参考 : http://www.cnblogs.com/nightkidzxc/archive/2011/12/14/2379010.html 1.得到 SD 卡的目录 : String SDPATH Environment.getExternalStorageDriectory() "/"; 2.Activity 相当于 From Activity 以 Dialog形式显示在 Manifest中设置 : android:theme&qu…

超短的判断IE javascript代码

首先说明该代码只能在IE 6~8中有效&#xff0c;再高级的IE已经修复这个BUG <script type’text/javascript’> var ie !-[1,]; alert(ie); //如果是ie&#xff0c;弹出true </script> 原因&#xff1a; 首先[1,]是个数组&#xff0c;由于有个逗号&#xff…

mysql命令导出数据库_MYSQL 数据库导入导出命令

在不同操作系统或MySQL版本情况下&#xff0c;直接拷贝文件的方法可能会有不兼容的情况发生。所以一般推荐用SQL脚本形式导入。下面分别介绍两种方法。MySQL命令行导出数据库1&#xff0c;进入MySQL目录下的bin文件夹&#xff1a;cd MySQL中到bin文件夹的目录如我输入的命令行&…

linux vmware 安装后无法桥接到物理网卡的解决办法

在linux下安装完vmware后&#xff0c;因为需要必须使用桥接网络&#xff0c;交接物理网卡总是显示could not connect /dev/vmnet0, 网上搜索了很多办法都无法解决&#xff0c;下面这个据说能解决&#xff0c;但还是不行&#xff0c;贴下来供大家参考&#xff1a;我安装了一下&a…

HDU2201

水&#xff5e; 分析&#xff1a;n&#xff0c;m。对于第一个人不抽到m号座位概率为&#xff08;n-1&#xff09;/n&#xff0c;第二个人为&#xff08;n-2&#xff09;/&#xff08;n-1&#xff09;.。。。第m个人为1/&#xff08;n-m1&#xff09;.。。。 相乘之后则为 1/n V…

字符设备驱动基础1——简单的驱动源代码分析

以下内容源于朱有鹏嵌入式课程的学习&#xff0c;如有侵权请告知删除。 参考博客&#xff1a;linux驱动开发&#xff08;一&#xff09; - biaohc - 博客园 一、驱动源代码示例 /********module_test.c代码*********/#include <linux/module.h> // module_init module…

mysql 数据检查_mysql数据一致性检查及修复

percona-toolkit-2.2.20-1.noarchmysql 5.6.29-logmaster:192.168.166.129slave:192.168.166.131一、创建数据库校验存放库CREATE DATABASE IF NOT EXISTS percona CHARACTER SET utf8;二、建立数据校验用户GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE ON *.* TO checksu…

字符设备驱动基础3——使用register_chrdev()函数注册字符设备

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 一、系统工作原理 1、工作流程 系统的整体工作流程是&#xff1a;应用层—>API—>设备驱动—>硬件。 操作系统提供的API包括open、read、write、close等函数&#xff0c;它们只是一种操作逻…

win7在未关闭vmware情况下直接关机,导致虚拟机无法克隆

今天有点小激动啊&#xff0c;着急关机&#xff0c;结果发现重启之后的虚拟机不能进行克隆操作。系统提示如下&#xff1a;the Specific Virtual Disk Needs Repair .查询“度娘”&#xff0c;突然看到一篇文章说&#xff0c;删除这啊&#xff0c;修改那的....特别复杂&#xf…

hdu 1159(最长公共子序列)

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid1159 思路&#xff1a;dp[i][j]表示s1从0~i-1,s2从0~j-1的最长公共子序列&#xff1b; 递推方程为&#xff1a;dp[i][j](s1[i-1]s2[j-1])?d[i-1][j-1]1:max(dp[i-1][j],dp[i][j-1]); View Code 1 #include<…

mysql applier_MySQL推出Applier,可实时复制数据到Hadoop-阿里云开发者社区

http://labs.mysql.comMySQL复制操作可以将数据从一个MySQL服务器(主)复制到其他的一个或多个MySQL服务器(从)。试想一下&#xff0c;如果从服务器不再局限为一个MySQL服务器&#xff0c;而是其他任何数据库服务器或平台&#xff0c;并且复制事件要求实时进行&#xff0c;是否可…