Я пытаюсь понять, как подключен к памяти 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