簡體   English   中英

將UART寄存器地址映射到內核以編寫設備驅動程序

[英]Mapping UART register address to kernel for writing device drivers

如何將寄存器地址(特別是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

就像汽車一樣,為制造商,型號和選件提供精確的目標信息,然后有人會幫助您找到具體信息。

在內核中映射uart可能會在以下位置定義為uart設備(而不是驅動程序):kernel / arch / arm /'machine'/(devices | serial或其他)。

通常,沒有映射需要。 當uart驅動程序探測時,它將連接到設備並創建tty字符驅動程序。 要從內核操作tty,可以在tty中添加自己的行規。 然后,用戶空間程序可以打開所需的ttySX端口並將其附加到您的線路規則中。 然后,您內核中的代碼將通過uart端口(tty->驅動程序)進行通信。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM