gpt4 book ai didi

c - 将 UART 寄存器地址映射到内核以编写设备驱动程序

转载 作者:太空宇宙 更新时间:2023-11-04 07:18:53 26 4
gpt4 key购买 nike

我如何将专门针对 UART 寄存器的寄存器地址映射到内核,以便为 UART 编写设备驱动程序?

我翻遍了omap-serial.c,但是没有找到里面定义的寄存器的映射。

它与独立UART驱动程序的映射有区别吗?

最佳答案

作为设备驱动程序编写者,阅读硬件文档是您的工作。串行端口文档将指定控制和状态寄存器中的位,并提供有关如何确定其地址的指导。通常该指南位于系统集成商的文档中。

假设您的研究确定 UART 的寄存器位于 0x31080220。您的代码将具有:

struct resource *uart_res;  // resource handle
uint *uart; // pointer to actual control/status registers
uart_res = request_mem_region (0x31080220, 4*4, "my_uart"); // map 16 bytes
if (!uart_res)
{
error ("unable to map memory region");
return -ENOMEM;
}
uart = ioremap (0x31080220, 4*4);
if (!uart)
{
release_mem_region (0x31080220, 4*4);
error ("unable to map");
return -ENOMEM;
}

然后就可以使用uart指针访问寄存器了。

status = ioread32 (uart + 0);   // read the status register
iowrite32 (0xf0f0, uart + 4); // foo foo to control register

为制造商、型号和选项提供精确的目标信息——就像汽车一样——有人会帮你找到细节。

关于c - 将 UART 寄存器地址映射到内核以编写设备驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22657700/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com