這段話摘於《裝置驅動開發詳解》
在使用串列埠核心層這個通用串列埠tty驅動層的介面後,乙個串列埠驅動要完成的主要工作:
(1)、定義uart_driver、uart_ops、uart_port等結構體的例項並在適當的地方根據具體硬體和驅動的情況初始化它們,當然具體裝置的驅動可以將這些結構體在新定義的***_uart_driver、***_uart_ops、***_uart_port之內。
(2)、在模組初始化是呼叫uart_register_driver和uart_add_one_port註冊uart驅動並新增埠,在模組解除安裝時呼叫uart_unregister_driver和uart_remove_one_port以登出uart驅動並移除埠。
(3)、根據具體硬體的datasheet實現uart_ops中的成員函式,這些函式的實現成為uart驅動的主體工作。
2、s3c6410的串列埠驅動:
這些與上面的
(1)相對應。
(1)、serial_core.c檔案的作用:主要有如下結構體和實現其中的函式,供上層函式呼叫:
static const struct tty_operations uart_ops = ;
並提供uart_register_driver、uart_unregister_driver、uart_add_one_port、uart_remove_one_port函式供底層函式註冊。
(2)、在samsung.c檔案中有如下:
static struct
uart_opss3c24xx_serial_ops = ;
static struct
uart_drivers3c24xx_uart_drv = ;
原始結構為
struct uart_driver ;
static struct
s3c24xx_uart_ports3c24xx_serial_ports[config_serial_samsung_uarts] =
},[1] =
},#if config_serial_samsung_uarts > 2
[2] =
},#endif
#if config_serial_samsung_uarts > 3
[3] =
}#endif};
這個陣列中的內容其實就是對下面struct uart_port結構成員的初始化。
其中: 結構體s3c24xx_uart_port原始碼如下:
structs3c24xx_uart_port;
其中:struct uart_port原始碼如下:
struct uart_port ;
s3c6410儲存器對映
1.引導映象區 0x0000 0000 0x07ff ffff 2.內部儲存區 1 內部rom 0x0800 0000 0x0bff ffff 2 內部sram 0x0c00 0000 0x0fff ffff 3.靜態儲存區 0x1000 0000 0x3fff ffff 4.動態儲存區 0x400...
S3C6410啟動模式介紹
目前的arm處理器都支援多種啟動模式,s3c6410和以前的samsung的arm處理器一樣,通過外部管腳om 4 0 的拉高拉低來決定是從哪個儲存裝置上啟動。我認為s3c6410的user manual並沒有說的很清楚,所以我在最開始使用的時候,也對其啟動模式有一些誤解,下面就我個人的理解,介紹一...
S3C6410啟動模式介紹
from 目前的arm處理器都支援多種啟動模式,s3c6410和以前的samsung的arm處理器一樣,通過外部管腳om 4 0 的拉高拉低來決定是從哪個儲存裝置上啟動。我認為s3c6410的user manual並沒有說的很清楚,所以我在最開始使用的時候,也對其啟動模式有一些誤解,下面就我個人的理...