内核笔记](五)——devmem读写寄存器调试

简介: 内核笔记](五)——devmem读写寄存器调试

一、用途介绍


读写soc相关寄存器的值,就是应用程序通过mmap函数对/dev/mem驱动中的mmap方法的使用,映射了设备的内存到用户空间,实现对这些物理地址的读写操作


二、配置



内核中对devmem的支持,进行如下配置
读取soc相关寄存器的值,某些寄存器的值是不可以进行读取的,因此在读取时会发生错误
Symbol: DEVMEM [=y]                                                                      │
  │ Type  : bool                                                                             │
  │ Prompt: /dev/mem virtual device support                                                  │
  │   Location:                                                                              │
  │     -> Device Drivers                                                                    │
  │ (1)   -> Character devices                                                               │
  │   Defined at drivers/char/Kconfig:10


备注: 内核进行配置该选项:CONFIG_DEVMEM=y,验证是否配置成功会生成/dev/mem节点


busybox中对devmem的支持,进行如下配置:
Symbol: DEVMEM [=y]                                                                      │
  │ Prompt: devmem (2.5 kb)                                                                  │
  │   Defined at miscutils/Config.in:326                                                     │
  │   Location:                                                                              │
  │     -> Miscellaneous Utilities


备注: busybox中配置该选项CONFIG_DEVMEM=y,验证是否配置成功会生成应用程序devmem


三、读和写


读取:在地址0x97000000读取32bit值(WIDTH默认等于32, 可选值为[8, 16, 32, 64])

/dev # devmem 0x97000000

0x11111111

读取:在地址0x97000000读取16bit值

/dev # devmem 0x97000000 16

0x1111

写入:在地址0x97000000写入32bit值0x7777ABCD

/dev # devmem 0x97000000 32 0x7777ABCD

/dev # devmem 0x97000000

0x7777ABCD

注意:如果/dev下没有mem这个node,会出现错误:

/dev # devmem 0x97000000

devmem: can’t open ‘/dev/mem’: No such file or directory

这时可以在Host系统中手动创建一个(例如在NFS root filesystem模式):

host@host-laptop:~/embedded/tftpboot/nfsroot/dev$ sudo mknod mem -m666 c 1 1

注意这里的权限是666,允许任何人任意读写,可以很好的配合程序debug。

devmem的使用方式
语法: devmem ADDRESS [WIDTH [VALUE]]
●ADDRESS :要直接读写的地址
●WIDTH :指定读写资料的位数(8/16/32...
●VALUE :要写入的资料
●读32位: devmem 0x98000000
●读16位: devmem 0x98000000 16
●读8位: devmem 0x98000000 8
●写32位: devmem 0x98000000 32 0x12345678
●写16位: devmem 0x98000000 16 0x1234
●写8位: devmem 0x98000000 8 0x12
相关文章
|
3月前
|
Linux
DMA寄存器与代码结合文档笔记
DMA寄存器与代码结合文档笔记
38 0
|
4月前
|
存储 安全 数据安全/隐私保护
3.2 Windows驱动开发:内核CR3切换读写内存
CR3是一种控制寄存器,它是CPU中的一个专用寄存器,用于存储当前进程的页目录表的物理地址。在x86体系结构中,虚拟地址的翻译过程需要借助页表来完成。页表是由页目录表和页表组成的,页目录表存储了页表的物理地址,而页表存储了实际的物理页框地址。因此,页目录表的物理地址是虚拟地址翻译的关键之一。在操作系统中,每个进程都有自己的地址空间,地址空间中包含了进程的代码、数据和堆栈等信息。为了实现进程间的隔离和保护,操作系统会为每个进程分配独立的地址空间。在这个过程中,操作系统会将每个进程的页目录表的物理地址存储在它自己的CR3寄存器中。当进程切换时,操作系统会修改CR3寄存器的值,从而让CPU使用新的页
50 0
3.2 Windows驱动开发:内核CR3切换读写内存
|
7月前
|
Linux Shell
内核调试之devmem直接读写寄存器
内核调试之devmem直接读写寄存器
|
9月前
|
Linux
Linux驱动操作地址(寄存器)的一些方式
Linux驱动操作地址(寄存器)的一些方式
111 0
|
缓存 测试技术 芯片
内核笔记](二)——设备树基础
内核笔记](二)——设备树基础
377 0
|
Linux 编译器 SoC
内核笔记](一)——设备树的概述(硬件、目标、效果、文件类型)
内核笔记](一)——设备树的概述(硬件、目标、效果、文件类型)
195 0
内核笔记](一)——设备树的概述(硬件、目标、效果、文件类型)
|
C语言 芯片
复习单片机:中断系统(内含1.中断概念+2 中断结构及相关寄存器)(注:相关寄存器是重点)
复习单片机:中断系统(内含1.中断概念+2 中断结构及相关寄存器)(注:相关寄存器是重点)
206 0
复习单片机:中断系统(内含1.中断概念+2 中断结构及相关寄存器)(注:相关寄存器是重点)
|
网络协议 Unix Linux
嵌入式 uboot以及kernel添加看门狗临时记录(个人记录未整理乱)
Uboot_Kernerl_Add_Watch_Dog:   U-Boot 2010.06 (Nov 01 2013 - 15:28:44) DRAM:  128 MiBCheck spi flash controller v350.
5024 0

热门文章

最新文章