Linux kernel 为什么printk在使用_va时打印不同的值

Linux kernel 为什么printk在使用_va时打印不同的值,linux-kernel,linux-device-driver,kernel-module,Linux Kernel,Linux Device Driver,Kernel Module,我遇到了一个Linux模块,它映射寄存器并为此使用\uu va()。我在映射的末尾添加了三个printk,以检查\uu va()宏除了转换到void*之外还能做什么。我还试着自己铸造它,模仿\uu va() printk(内核调试“reg\u val-0x%llx\n”,regVal); printk(KERN_DEBUG“reg_val manual casting%p\n”,((void*)((unsigned long)(regVal '))); printk(KERN_DEBUG“reg

我遇到了一个Linux模块,它映射寄存器并为此使用
\uu va()
。我在映射的末尾添加了三个printk,以检查
\uu va()
宏除了转换到
void*
之外还能做什么。我还试着自己铸造它,模仿
\uu va()

printk(内核调试“reg\u val-0x%llx\n”,regVal);
printk(KERN_DEBUG“reg_val manual casting%p\n”,((void*)((unsigned long)(regVal ')));
printk(KERN_DEBUG“reg_val u va%p\n”,u va(regval));
这就是我得到的

[  435.136161] reg_val - 0x26dd1a000
[  435.136162] reg_val manual casting 000000005249cc54
[  435.136164] reg_val __va 00000000c000348a

我的问题是为什么每一行给我不同的输出?特别是最后两行应该是相同的。

%p
不打印内核地址,请看这是否回答了您的问题<代码>%p不打印内核地址,请参阅这是否回答了您的问题?