Linux kernel ioremap()中的第二个参数是否给出寄存器的大小(以位数表示)?Linux?

Linux kernel ioremap()中的第二个参数是否给出寄存器的大小(以位数表示)?Linux?,linux-kernel,linux-device-driver,microcontroller,kernel-module,ioremap,Linux Kernel,Linux Device Driver,Microcontroller,Kernel Module,Ioremap,我的NEC微控制器有一个定时器控制器寄存器8位- 我需要在ioremap的第二个参数中通过8吗 在阅读了规范之后,我了解了它的以下特性 Address |Function Register Name |Symbol |R/W Manipulatable Bits |Default Val FFFFF590H |TMP0 control register 0 |TP0CTL0 |R/W √ √ |00H 因此,我认为计时器寄存器TP0C

我的NEC微控制器有一个定时器控制器寄存器8位- 我需要在ioremap的第二个参数中通过8吗

在阅读了规范之后,我了解了它的以下特性

Address    |Function Register Name   |Symbol   |R/W Manipulatable Bits   |Default Val

FFFFF590H  |TMP0 control register 0  |TP0CTL0  |R/W √ √                  |00H
因此,我认为计时器寄存器TP0CTL0映射的物理地址是0xFFFFF590

现在,我重新映射这个寄存器,如下所示。在阅读了更多的描述之后,我知道寄存器的大小是8位的

该规范称“TPnCTL0寄存器是一个8位寄存器,用于控制TMPn的操作。”

是这样吗?我使用的基址是0xFFFFF590,这个寄存器的大小是8位。因此,我给出了8位的大小。对吗?ioremap_nocache的第二个参数是否为位大小?我的以下API是否正确?我是否在函数-ioremap_nocache中正确使用了参数

void*tp0ctl0=ioremap_nocache(0xFFFFF590,8)

接下来,我将做以下工作-

unsigned int val =  ioread8(tp0ctl0);
val = 2;
iowrite8(val, tp0ctl0);

请在这里纠正我。请让我知道,根据我掌握的微控制器信息,我是否正确使用了API。

给ioremap_*的大小是字节而不是位。此函数的目的是将物理地址空间映射到内核虚拟地址,因此任何大于零且小于或等于系统页面大小的内容都是等效的

根据您上面提供的信息,
ioremap\u nocache(0xFFFFF590,1)
实际上是正确的。但是“1”和“8”的效果是相同的,因为系统页面大小(毫无疑问)大于两者