Значение чтения ввода-вывода с сопоставлением портов не совпадает со значением записи - PullRequest
0 голосов
/ 27 апреля 2019

Я пытаюсь понять, как подключен к памяти IO и Port Mapped IO.Я обнаружил приведенный ниже код в сети, который пытается записать и прочитать свободный адрес памяти в сопоставленном с портом IO.

#define IOSTART  0x200
#define IOEXTEND 0x40

#include <linux/module.h>
#include <linux/ioport.h>
#include <linux/io.h>
#include <linux/init.h>

static unsigned long iostart = IOSTART, ioextend = IOEXTEND, ioend;
module_param(iostart, ulong, S_IRUGO);
module_param(ioextend, ulong, S_IRUGO);

static int __init my_init(void)
{
    unsigned long ultest = (unsigned long)100;
    ioend = iostart + ioextend;

    pr_info(" requesting the IO region from 0x%lx to 0x%lx\n",
        iostart, ioend);

    if (!request_region(iostart, ioextend, "my_ioport")) {
        pr_info("the IO REGION is busy, quitting\n");
        return -EBUSY;
    }

    pr_info(" writing a long=%ld\n", ultest);
    outl(ultest, iostart);

    ultest = inl(iostart);
    pr_info(" reading a long=%ld\n", ultest);

    return 0;
}

static void __exit my_exit(void)
{
    pr_info(" releasing  the IO region from 0x%lx to 0x%lx\n",
        iostart, ioend);
    release_region(iostart, ioextend);
}

module_init(my_init);
module_exit(my_exit);

MODULE_AUTHOR("Jerry Cooperstein");
MODULE_LICENSE("GPL v2");

Почему данные чтения не совпадают с данными записи.Можете ли вы помочь мне понять.

[12336.695852]  requesting the IO region from 0x200 to 0x240
[12336.695854]  writing a long=100
[12336.695869]  reading a long=4294967295
...