Hi3515 UART2和UART3驅動載入

2021-07-13 13:41:05 字數 862 閱讀 5331

這裡主要想講下海思hi3515的uart2和uart3是如何被載入到核心中的,因為正在做乙個專案需要使用四個串列埠,但海思提供的linux原始碼中只載入了兩個串列埠的驅動,找了一圈,發現原始碼中沒有現成的uart2和uart3的**可以使用,只能自己動手改啦啊。。。

好吧,我們進入正題,說說我做的過程:

hi3515的uart驅動位於drivers/serial/amba-pl011.c

我們沿著pl011_init——amba_driver_register——driver_register——bus_add_driver——driver_attach——bus_for_each_dev往下走,找到bus_for_each_dev函式:

int bus_for_each_dev(struct bus_type * bus, struct device * start,

void * data, int (*fn)(struct device *, void *))

注意其中的

while ((dev = next_device(&i)) && !error)

error = fn(dev, data);

就是這兩條語句依次載入了四個串列埠驅動,這裡的fn是外層的__driver_attach函式。。。

既然找到了載入的地方,那就printk吧,發現這個迴圈只進行了兩次,也就是說只載入了串列埠0和串列埠1,說明鍊錶裡面只有兩個串列埠的資訊,那到底在什麼地方把另外兩個串列埠的資訊新增進鍊表呢,google一番,終於找到啦,在arch/arm/mach-hi3515v100/core.c中我們將另外兩個串列埠的資訊加進去,編譯,燒寫,啟動,發現/dev目錄下已經有了ttyama2和ttyama3,興奮了一下,上應用程式,上示波器,悲劇鳥,仍然沒有資料出來,蛋疼啊。。。

Hi3515 UART2和UART3驅動載入

這裡主要想講下海思hi3515的uart2和uart3是如何被載入到核心中的,因為正在做乙個專案需要使用四個串列埠,但海思提供的linux原始碼中只載入了兩個串列埠的驅動,找了一圈,發現原始碼中沒有現成的uart2和uart3的 可以使用,只能自己動手改啦啊。好吧,我們進入正題,說說我做的過程 hi...

新路程 hi3516a開啟uart2

由於gps需要用到uart2串列埠,但是看了下dev目錄下沒有看到,只有 ttyama0 hi rtc ram3 tty27 ttyama1 hi tde ram4 tty28 沒有 ttyama2 根據網上別人的做法,到核心這個檔案下修改 a arch arm mach hi3516a core....

UART和波特率

什麼是 uart uart是一種通用序列資料匯流排,用於非同步通訊。該匯流排雙向通訊,可以實現全雙工傳輸和接收。在嵌入式設計中,uart用來與pc進行通訊,包括與監控偵錯程式和其它器件,如eeprom通訊。uart通訊 uart首先將接收到的並行資料轉換成序列資料來傳輸。訊息幀從乙個低位起始位開始,...