proc及读写内存

本文介绍了Linux系统中与内存交互的相关文件,如/proc/modules列出当前装入的内核模块,/proc/devices提供设备信息,以及/proc/dma、/proc/fb等其他文件的内容。此外,还展示了一个C程序示例,演示如何打开/dev/mem并读写物理内存的前10个字节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/proc/modules
当前装入内核的所有模块名称列表,可以由lsmod命令使用,也可以直接查看;如下所示,其中第一列表示模块名,第二列表示此模块占用内存空间大小,
第三列表示此模块有多少实例被装入,第四列表示此模块依赖于其它哪些模块,第五列表示此模块的装载状态(Live:已经装入;Loading:正在装入;
Unloading:正在卸载),第六列表示此模块在内核内存(kernel memory)中的偏移量;
/proc/devices
系统已经加载的所有块设备和字符设备的信息,包含主设备号和设备组(与主设备号对应的设备类型)名;
/proc/diskstats
每块磁盘设备的磁盘I/O统计信息列表;(内核2.5.69以后的版本支持此功能)
/proc/dma
每个正在使用且注册的ISA DMA通道的信息列表;
/proc/fb
帧缓冲设备列表文件,包含帧缓冲设备的设备号和相关驱动信息;
/proc/filesystems
当前被内核支持的文件系统类型列表文件,被标示为nodev的文件系统表示不需要块设备的支持;通常mount一个设备时,
如果没有指定文件系统类型将通过此文件来决定其所需文件系统的类型;
/proc/interrupts
X86或X86_64体系架构系统上每个IRQ相关的中断号列表;多路处理器平台上每个CPU对于每个I/O设备均有自己的中断号;
/proc/iomem
每个物理设备上的记忆体(RAM或者ROM)在系统内存中的映射信息;
/proc/oports
当前正在使用且已经注册过的与物理设备进行通讯的输入-输出端口范围信息列表;如下面所示,第一列表示注册的I/O端口范围,其后表示相关的设备;


#include <stdio.h>
#include <unistd.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main (int args, char* arg[])
{
    int i;
    int fd;
    char* mem;
    char *buff = "HELLO";
    //open /dev/mem with read and write mode
    if((fd = open ("/dev/mem", O_RDWR)) < 0)
    {
        perror ("open error");
        return -1;
    }

    //map physical memory 0-10 bytes
    mem = mmap (0, 10, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
    if (mem == MAP_FAILED)
    {
        perror ("mmap error:");
        return 1;
    }

    //Read old value
    for (i = 0; i < 5; i++)
    {
        printf("\nold mem[%d]:%d", i, mem[i]);
    }

    printf(The value is 0x%x\n, *((int *)mem));

    //write memory
    memcpy(mem, buff, 5);
    //Read new value
    for (i = 0; i<5 ; i++)
    {
        printf("\nnew mem[%d]:%c", i, mem[i]);
    }

    printf("\n");
    munmap (mem, 10); //destroy map memory
    close (fd);   //close file
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值