1

私はインテルシステムを持っていEthernet controller: Intel Corporation 82579LM Gigabit Network Connection (Lewisville) (rev 04)ます。のデータシートのようなデータシートをダウンロードしましたIntel ® 82579 Gigabit Ethernet PHY

今、私は次のようなpciイーサネットデバイスのresource0を読んでいます

    if((fd = open("/sys/bus/pci/devices/0000:00:19.0/resource1", O_RDWR | O_SYNC)) == -1) {
        perror("Error: open error");
    }

    int map_size = 4096UL;
    ...
    map_base = mmap(0,4096UL , PROT_READ, MAP_SHARED, fd, Register_Values_From_Datasheet);

x86-64 ビット システムを使用しています。カリ Linux 5.7。だから私は Register_Values_From_Datasheet上記のようにデータシートからのレジスタオフセット値で置き換えています0x00008for STATUS:Device Status Register=from datasheet

しかし、mmap() の errno は、22:EINVALmmap 呼び出し後に値を持っています。無効な引数を意味します。データシートから読み取っているオフセット値は、別の方法で解釈する必要があるかもしれません。

イーサネットデバイスの sys/bus/pci/devices/0000:00:19.0 にある私のリソースファイルは次のようなものです

        0x00000000fe400000 0x00000000fe41ffff 0x0000000000040200
        0x00000000fe427000 0x00000000fe427fff 0x0000000000040200
        0x000000000000f060 0x000000000000f07f 0x0000000000040101
        0x0000000000000000 0x0000000000000000 0x0000000000000000
        0x0000000000000000 0x0000000000000000 0x0000000000000000
        0x0000000000000000 0x0000000000000000 0x0000000000000000
        0x0000000000000000 0x0000000000000000 0x0000000000000000
        0x0000000000000000 0x0000000000000000 0x0000000000000000
        0x0000000000000000 0x0000000000000000 0x0000000000000000
        0x0000000000000000 0x0000000000000000 0x0000000000000000
        0x0000000000000000 0x0000000000000000 0x0000000000000000
        0x0000000000000000 0x0000000000000000 0x0000000000000000
        0x0000000000000000 0x0000000000000000 0x0000000000000000

上記のリソース テキスト ファイル (resource0) のダンプから、メモリ マップド IO が 0x00000000fe400000 から始まることがわかります。だから私は mmap (return (void*)=&0x00000000fe400000)= の戻りアドレスであるべきだと思いますが、私は次のようなものを取得してい0xffffffffます.errnoは22です。オフセットをどのように解釈する必要があるかについて、正しい方向に私を導くことができますかデータシートから。また、pci イーサネット デバイスのパケットを取得するために、通常どのレジスタにアクセスする必要がありますか。私はデバイスプログラミングが初めてなので。

4

1 に答える 1