当前位置:网站首页>[21天学习挑战赛——内核笔记](五)——devmem读写寄存器调试
[21天学习挑战赛——内核笔记](五)——devmem读写寄存器调试
2022-08-10 23:40:00 【光追雨】
活动地址:CSDN21天学习挑战赛
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您:
想系统/深入学习某技术知识点…
一个人摸索学习很难坚持,想组团高效学习…
想写博客但无从下手,急需写作干货注入能量…
热爱写作,愿意让自己成为更好的人…
一、用途介绍
读写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模式):
[email protected]:~/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
参考文章:
RK3399平台开发系列讲解(内核调试篇)2.6、devmem直接读写寄存器进行调试
边栏推荐
猜你喜欢
随机推荐
高性能MySQL核心整理强势来袭
有哪些可以投稿软件工程/系统软件/程序设计语言类外文期刊、会议?
ROS Experiment Notes - Validation of UZH-FPV Dataset
C语言篇,操作符之 移位运算符(>>、<<)详解
【ORACLE】什么时候ROWNUM等于0和ROWNUM小于0,两个条件不等价?
C language, operators of shift operators (> >, < <) explanation
Kioptrix Level 1 靶机wp
IEEE的论文哪里可以下载?
Google Chrome73~81版本浏览器的跨域问题解决方案
[C language] First understanding of pointers
11. 自定义转换器
服务器小常识
[C] the C language program design, dynamic address book (order)
开源一夏|OpenHarmony如何选择图片在Image组件上显示(eTS)
如何做专利挖掘,关键是寻找专利点,其实并不太难
如果纯做业务测试的话,在测试行业有出路吗?
逮到一个阿里 10 年老 测试开发,聊过之后收益良多...
三栏布局实现
英文文献阅读时,如何做笔记?
Call activity of Activiti7 sub-process



![[C] the C language program design, dynamic address book (order)](/img/bb/b44066e91219a57b653e330198e4a0.png)




![[C language] Detailed explanation of data storage](/img/3f/3799a3ba0f2642272e15bd7a3e511f.png)
