Character devices --- > [*] /dev/mem virtual device support Linux應(yīng)用層操作寄存器 除了直接使用devmem,我們也可以在Linux應(yīng)用層自己實(shí)現(xiàn)一個(gè)devmem。 devmem的實(shí)現(xiàn)原理,就是打開(kāi)/dev/mem,然后通過(guò)mmap映射物理地址,從而實(shí)現(xiàn)讀寫(xiě)寄存器。因此,我們只要實(shí)現(xiàn)這些操作,就可以自己實(shí)現(xiàn)類(lèi)似devmem的功能。 例如,在Linux應(yīng)用層讀取物理地址為0x40000000的值: # include # include" />

欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux應(yīng)用層操作寄存器

麥辣雞腿堡 ? 來(lái)源:嵌入式Linux充電站 ? 作者:Vincent ? 2023-10-08 15:16 ? 次閱讀

內(nèi)核配置devmem

devmem命令依賴于/dev/mem設(shè)備節(jié)點(diǎn),需要在Linux內(nèi)核中打開(kāi)/dev/mem的配置:

Device Drivers  --- >
   Character devices  --- >
      [*] /dev/mem virtual device support

圖片

Linux應(yīng)用層操作寄存器

除了直接使用devmem,我們也可以在Linux應(yīng)用層自己實(shí)現(xiàn)一個(gè)devmem。

devmem的實(shí)現(xiàn)原理,就是打開(kāi)/dev/mem,然后通過(guò)mmap映射物理地址,從而實(shí)現(xiàn)讀寫(xiě)寄存器。因此,我們只要實(shí)現(xiàn)這些操作,就可以自己實(shí)現(xiàn)類(lèi)似devmem的功能。

例如,在Linux應(yīng)用層讀取物理地址為0x40000000的值:

#include < stdio.h >
#include < stdlib.h >
#include < time.h >
#include < unistd.h >
#include < fcntl.h >
#include < unistd.h >
#include < sys/mman.h >

#define MAP_SIZE 0x80000
#define base 0x40000000

int main(int argc, char **argv)
{
 int fd = open("/dev/mem",O_RDWR|O_NDELAY);
    
    if (fd < 0)
    {
        printf("open /dev/mem error!n");
        return -1;
 }
    
    void *map_base = mmap(NULL,MAP_SIZE,PROT_READ|PROT_WRITE,MAP_SHARED,fd,base);
    if (map_base == MAP_FAILED)
    return -1;
    
    printf("%x n",*(volatile unsigned int*)(map_base));

    close(fd);
    munmap(map_base,MAP_SIZE);
    
 return 0;
}

總結(jié)

devmem是一個(gè)很常用的工具,主要給驅(qū)動(dòng)開(kāi)發(fā)人員在Linux應(yīng)用層調(diào)試使用。devmem不僅僅是訪問(wèn)寄存器,只要有權(quán)限訪問(wèn)某個(gè)物理地址,就可以使用devmem,方便我們調(diào)試。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5368

    瀏覽量

    121241
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    3

    文章

    1383

    瀏覽量

    40438
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11350

    瀏覽量

    210476
  • RISC
    +關(guān)注

    關(guān)注

    6

    文章

    467

    瀏覽量

    83899
  • 應(yīng)用層
    +關(guān)注

    關(guān)注

    0

    文章

    46

    瀏覽量

    11547
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    寄存器是什么?怎么操作寄存器點(diǎn)亮LED燈?

    寄存器,是集成電路中非常重要的一種存儲(chǔ)單元,通常由觸發(fā)組成。在集成電路設(shè)計(jì)中,寄存器可分為電路內(nèi)部使用的寄存器和充當(dāng)內(nèi)外部接口的寄存器這兩
    的頭像 發(fā)表于 07-21 16:59 ?4133次閱讀
    <b class='flag-5'>寄存器</b>是什么?怎么<b class='flag-5'>操作</b><b class='flag-5'>寄存器</b>點(diǎn)亮LED燈?

    嵌入式linux驅(qū)動(dòng)對(duì)gpio的基本操作

    ;amp;amp;gt;&amp;amp;gt;&amp;amp;gt;應(yīng)用編寫(xiě)(閃爍燈)。目標(biāo)板是iTOP4412。CPU為 Exynos4412。代碼代碼部分包括 驅(qū)動(dòng)代碼對(duì)GPIO寄存器的直接操作。然后是
    發(fā)表于 11-05 07:59

    如何在嵌入式linux應(yīng)用層操作gpio口

    嵌入式linux文件io方式操作gpio口示例在嵌入式linux應(yīng)用層操作gpio口,如果懶得寫(xiě)驅(qū)動(dòng)或者懶得翻
    發(fā)表于 12-16 06:19

    寄存器,寄存器是什么意思

    寄存器,寄存器是什么意思 寄存器定義  寄存器是中央處理內(nèi)的組成部分。寄存器是有限存貯容量
    發(fā)表于 03-08 14:26 ?2.2w次閱讀

    寄存器操作方法_對(duì)寄存器操作的通用方法總結(jié)

    本文主要詳解寄存器操作方法以及對(duì)寄存器操作的通用方法總結(jié),具體的跟隨小編來(lái)了解一下。
    的頭像 發(fā)表于 05-22 15:53 ?2.3w次閱讀

    寄存器變量

    C語(yǔ)言中使用關(guān)鍵字register來(lái)聲明局部變量為寄存器變量。寄存器變量的值會(huì)被存放在CPU的寄存器中,每當(dāng)需要使用它們時(shí),CPU就可以直接使用,而無(wú)須再通過(guò)控制從內(nèi)存中獲取。由于
    發(fā)表于 06-03 10:13 ?2423次閱讀

    嵌入式Linux驅(qū)動(dòng) GPIO操作 包括驅(qū)動(dòng)和應(yīng)用層程序?qū)︱?qū)動(dòng)進(jìn)行測(cè)試

    ;amp;amp;amp;amp;gt;&amp;amp;amp;gt;&amp;amp;amp;gt;應(yīng)用編寫(xiě)(閃爍燈)。目標(biāo)板是iTOP4412。CPU為 Exynos4412。代碼代碼部分包括 驅(qū)動(dòng)代碼對(duì)GPIO寄存器的直接
    發(fā)表于 11-02 14:36 ?10次下載
    嵌入式<b class='flag-5'>Linux</b>驅(qū)動(dòng) GPIO<b class='flag-5'>操作</b> 包括驅(qū)動(dòng)和<b class='flag-5'>應(yīng)用層</b>程序?qū)︱?qū)動(dòng)進(jìn)行測(cè)試

    C語(yǔ)言:寄存器操作

    C語(yǔ)言:寄存器操作
    發(fā)表于 01-13 12:56 ?6次下載
    C語(yǔ)言:<b class='flag-5'>寄存器</b><b class='flag-5'>操作</b>

    STM32的寄存器操作

    STM32的寄存器操作在使用STM32單片機(jī)編程時(shí)一般都用ST給的庫(kù)函數(shù)編程,庫(kù)函數(shù)編程的底層就是對(duì)單片機(jī)寄存器操作,庫(kù)函數(shù)就是一系列寄存器
    發(fā)表于 01-13 15:43 ?19次下載
    STM32的<b class='flag-5'>寄存器</b><b class='flag-5'>操作</b>

    簡(jiǎn)述RAL寄存器模型基礎(chǔ)

    RAL(Register Abstract Layer,寄存器抽象),通常也叫寄存器模型,顧名思義就是對(duì)寄存器這個(gè)部件的建模。本文要介紹的內(nèi)容,包括對(duì)UVM
    的頭像 發(fā)表于 02-14 16:55 ?2841次閱讀
    簡(jiǎn)述RAL<b class='flag-5'>寄存器</b>模型基礎(chǔ)

    RAL寄存器模型操作圖鑒

    寄存器模型操作,指的是通過(guò)寄存器模型對(duì)RTL中寄存器進(jìn)行讀寫(xiě)訪問(wèn),或者同步寄存器模型與RTL中寄存器
    的頭像 發(fā)表于 05-17 09:01 ?1051次閱讀
    RAL<b class='flag-5'>寄存器</b>模型<b class='flag-5'>操作</b>圖鑒

    RAL寄存器模型操作指南

    寄存器模型操作,指的是通過(guò)寄存器模型對(duì)RTL中寄存器進(jìn)行讀寫(xiě)訪問(wèn),或者同步寄存器模型與RTL中寄存器
    的頭像 發(fā)表于 07-12 09:37 ?1147次閱讀
    RAL<b class='flag-5'>寄存器</b>模型<b class='flag-5'>操作</b>指南

    Linux驅(qū)動(dòng)操作寄存器

    ,第四個(gè)參數(shù)是映射的大小。 驅(qū)動(dòng)中操作: #define?OFFSET??0x60?//某個(gè)寄存器的偏移地址 static?int?my_probe(struct?platform_device
    的頭像 發(fā)表于 09-26 16:34 ?890次閱讀

    Linux應(yīng)用層操作寄存器

    應(yīng)用層操作寄存器 驅(qū)動(dòng)中操作寄存器,需要先進(jìn)行映射將物理地址轉(zhuǎn)為虛擬地址。 但如果想在應(yīng)用層
    的頭像 發(fā)表于 09-26 16:37 ?1021次閱讀

    如何在shell中操作寄存器

    shell 中操作寄存器可以使用 devmem 命令. devmem 命令其實(shí)就是上述應(yīng)用層操作寄存器生成的可執(zhí)行文件,只不過(guò)busybox
    的頭像 發(fā)表于 09-26 16:39 ?1165次閱讀