Linux下的串口總線驅(qū)動(一)
PC機南橋的LPC總線(Low Pin Count并行總線,代替以前的ISA總線)上掛接了一個超級I/O模塊,而UART是這個超級模塊芯片組的一部分,這個UART通過RS232線程轉(zhuǎn)換與串行端口相連。與RS232不同,RS485并不是標(biāo)準(zhǔn)的PC接口,但在嵌入式領(lǐng)域,會為了可靠通信而使用RS485,RS485使用差分信號,因此其傳輸距離可以達到數(shù)百米,而RS232傳輸距離僅數(shù)幾米,在處理器一端,RS485接口是半雙工的UART操作。
本文引用地址:http://www.eepw.com.cn/article/201611/319918.htmLinux包含如下幾種終端設(shè)備:串行端口終端(/dev/ttySn)、偽終端(/dev/pty)、控制終端(/dev/tty)、控制臺終端(/dev/ttyn,/dev/conslole)。串行端口終端使用的設(shè)備名為/dev/ttyS0,/dev/ttyS1等,對應(yīng)的設(shè)備號為(4,0),(4,1)。通過查看/proc/tty/drivers文件可以知道什么類型的tty設(shè)備存在以及什么驅(qū)動被加載到內(nèi)核,這個文件包括一個當(dāng)前存在的不同tty驅(qū)動的列表,包括驅(qū)動名,缺省的節(jié)點名,驅(qū)動的主編號,驅(qū)動的次編號范圍,以及tty驅(qū)動的類型。
I/O系統(tǒng)調(diào)用是從帶有線路規(guī)程的TTY I/O核心開始,然后通過TTY層,最后到達UART驅(qū)動層。主要涉及串口內(nèi)核配置、UART層內(nèi)核代碼、TTY層內(nèi)核代碼、線路規(guī)程內(nèi)核代碼、串口測試代碼五個部分。
二.串口內(nèi)核配置
對于Mini2440串口驅(qū)動,我想從配置開始講起。在內(nèi)核中Kconfig必須完成一層層調(diào)用,如果沒有在上一個Kconfig中調(diào)用該層Kconfig,那么該層Kconfig中的內(nèi)容不會在此出現(xiàn)。這種情況下,只有當(dāng)該層的Kconfig被其他層調(diào)用,該層Kconfig中的內(nèi)容才會被顯示。所以我們找找drivers/serial/Kconfig在哪里被調(diào)用的呢?
在/drivers/char/kconfig中可以看到一行代碼source "drivers/serial/Kconfig",那我們就到drivers/serial/Kconfig下看看
Samsung SoC serial support對應(yīng)于samsung.o
config SERIAL_SAMSUNG
Support for console on Samsung SoC serial port對應(yīng)于控制臺驅(qū)動
Samsung S3C2440/S3C2442 Serial port support對應(yīng)于s3c2440.o
在/drivers/char/Makefile中可以看到
obj-y
我們知道tty_io.o
自此,我們知道關(guān)于串口驅(qū)動,我們內(nèi)核中被編譯了s3c2440.o
我們對此進行分類,屬于UART層的是s3c2440.o
好了,對于串口的地圖我們已經(jīng)分析好了,那我們就按照UART層,TTY層,線路規(guī)程一個個的逛逛吧。
三.UART層內(nèi)核代碼
我們先看看samsung.o的init代碼吧,這里面完成了uart_driver的注冊
static int __init s3c24xx_serial_modinit(void)
{
}
static struct uart_driver s3c24xx_uart_drv = {
};
我們關(guān)注下上面這個結(jié)構(gòu)體中一個成員S3C24XX_SERIAL_CONSOLE
#define S3C24XX_SERIAL_CONSOLE &s3c24xx_serial_console
static struct console s3c24xx_serial_console = {
};
上面是控制臺的結(jié)構(gòu)體成員。
對于UART驅(qū)動,我們除了需要注冊uart_driver外,還需要注冊端口,我們看看s3c2440.o。
這個文件里面注冊了一個平臺設(shè)備,其中平臺設(shè)備的探測函數(shù)最終調(diào)用了samsung.o中的s3c24xx_serial_probe函數(shù)。
int s3c24xx_serial_probe(struct platform_device *dev,
{
}
通過上面的函數(shù),我們發(fā)現(xiàn)在UART層,我們調(diào)用了uart_add_one_port函數(shù)完成端口的添加,我們來看看添加了什么端口呢?
static struct s3c24xx_uart_port s3c24xx_serial_ports[CONFIG_SERIAL_SAMSUNG_UARTS] = {
#if CONFIG_SERIAL_SAMSUNG_UARTS >2
#endif
#if CONFIG_SERIAL_SAMSUNG_UARTS >3
#endif
};
在端口的定義中,我們知道s3c24xx_uart_port中定義了一個uart_port結(jié)構(gòu)體,繼續(xù)跟蹤對UART的操作函數(shù)
static struct uart_ops s3c24xx_serial_ops = {
};
對于上述uart_ops函數(shù),我們需要自己去實現(xiàn)uart層的具體操作。
我們在UART層主要涉及uart_driver,uart_port,uart_ops三個結(jié)構(gòu)體,并調(diào)用tty層的uart_register_driver和uart_add_one_port完成驅(qū)動和端口的注冊,UART層具體操作函數(shù)需要用戶自己設(shè)計。
好了,總結(jié)下UART驅(qū)動層需要完成的任務(wù):
其一,定義uart_driver、uart_ops、uart_port等結(jié)構(gòu)體的實例并在適當(dāng)?shù)牡胤礁鶕?jù)具體硬件和驅(qū)動的情況初始化它們,當(dāng)然具體設(shè)備XXX的驅(qū)動可以將這些結(jié)構(gòu)套在新定義的XXX_uart_driver、XXX_uart_ops、XXX_uart_port之內(nèi)。
其二,在模塊初始化時調(diào)用uart_register_driver()和uart_add_one_port()以注冊UART驅(qū)動并添加端口,在模塊卸載時調(diào)用uart_unregister_driver()和uart_remove_one_port()以注銷UART驅(qū)動并移除端口。
其三,根據(jù)具體硬件的datasheet實現(xiàn)uart_ops中的成員函數(shù),這些函數(shù)的實現(xiàn)成為UART驅(qū)動的主體工作。
關(guān)鍵詞: Linux串口總線驅(qū)
您可能也感興趣:
今日熱點
為您推薦
8家險企股權(quán)被掛牌轉(zhuǎn)讓,為何險企股權(quán)不再被追捧?
深圳最低工資標(biāo)準(zhǔn)調(diào)整為2360元/月 失業(yè)保險金為2124元/月
遼寧實施失業(yè)保險省級統(tǒng)籌 對缺口核定等作出詳細規(guī)定
更多
- 蕪湖釋放創(chuàng)新“N次方”效應(yīng) 數(shù)字賦能驅(qū)動產(chǎn)業(yè)升級
- 重慶:激發(fā)人才創(chuàng)新活力,到2025年創(chuàng)新要素活躍度顯著增強
- 西寧加快知識產(chǎn)權(quán)強市建設(shè)步伐 去年兌現(xiàn)資助資金200萬元
- 無錫錫山區(qū)全面啟動實施“雙招雙引” 引進高端創(chuàng)新資源
- 重慶巴南區(qū)落實創(chuàng)新驅(qū)動發(fā)展戰(zhàn)略 以科技創(chuàng)新引領(lǐng)五大產(chǎn)業(yè)集...
- 朝陽北票經(jīng)開區(qū)加快推進數(shù)字經(jīng)濟發(fā)展 推動體制機制創(chuàng)新
- 湖北省先進低碳冶金產(chǎn)業(yè)技術(shù)創(chuàng)新聯(lián)合體組建 打造五千億級產(chǎn)...
- 重慶渝北將優(yōu)化創(chuàng)新生態(tài)環(huán)境 培育打造一批引領(lǐng)型的科創(chuàng)載體
更多
- 山東抓投資抓項目 新興領(lǐng)域投資規(guī)模持續(xù)擴大
- 2021年各地引資成績單亮眼 迸發(fā)出巨大經(jīng)濟活力
- 多地重大項目投資規(guī)模力度明顯加大 新基建項目成重要發(fā)力點
- 年內(nèi)湖北新開工城建項目160個 集中在道路交通等方面
- 去年我國對外投資合作平穩(wěn)發(fā)展 境外經(jīng)貿(mào)合作區(qū)建設(shè)成效顯著
- 荊州集中簽約39個項目 重點涵蓋高端裝備制造、電子信息等領(lǐng)域
- 廣東打出一系列穩(wěn)外貿(mào)政策“組合拳” 外貿(mào)逆勢創(chuàng)新高
- 蘭州新區(qū)再獲“最具投資吸引力新區(qū)” 去年新增市場主體5427戶
排行
最近更新
- 蕪湖釋放創(chuàng)新“N次方”效應(yīng) 數(shù)字賦能驅(qū)動產(chǎn)業(yè)升級
- 去年快遞服務(wù)全程時限水平有較大提升 干線運輸時限縮短
- 住建部:推動長江經(jīng)濟帶高質(zhì)量發(fā)展,打造區(qū)域協(xié)調(diào)發(fā)展新樣板
- 江蘇發(fā)布重大項目清單 增資擴產(chǎn)項目明顯增多
- 山東抓投資抓項目 新興領(lǐng)域投資規(guī)模持續(xù)擴大
- Gucci在2月將投放 10 個“SuperGucci”NFT
- 美國銀行:美國CBDC將保持美元作為世界儲備貨幣的地位
- 美股三大指數(shù)尾盤集體轉(zhuǎn)漲
- 光伏發(fā)電概念股有哪些?光伏發(fā)電概念龍頭股一覽
- The new iPad屏幕對比評測
- 電源接通延時器
- 汽車電子穩(wěn)定系統(tǒng)(ESP)詳解
- 聯(lián)想B520一體機拆解
- 焦炭相關(guān)股票有哪些?焦炭概念股票龍頭一覽
- 增強信號 3G無線上網(wǎng)卡改裝拆解全攻略
- 盤點全球五大智能手機生產(chǎn)商 華為聯(lián)想入圍
- 三星新平板 Galaxy Note 10.1全拆解
- 智能監(jiān)控防盜報警系統(tǒng)
- 格力電器未來三年股東回報規(guī)劃:每年累計分紅不低于當(dāng)年凈利潤50%
- 消息稱京東科技計劃2022年在港IPO,募資10億至20億美元
- 恒大集團:呼吁境外債權(quán)人不采取任何激進的法律行動
- 海航董事長劉璐因個人原因辭職,在海航已近28年
- 青青稞酒預(yù)計2021年營收增長30%-40%,四季度凈虧損超1500萬
- 2022年在港上市募資10億美元?京東科技:不予置評
- 財政部修訂出臺《財政行政處罰聽證實施辦法》
- 賣房子需要交什么稅?賣房子必須攜帶哪些證件?
- 醫(yī)保卡的使用范圍有哪些?補牙可以使用醫(yī)保報銷嗎?
- 小產(chǎn)權(quán)房能過戶嗎?購買小產(chǎn)權(quán)房有什么風(fēng)險?
- 奕東電子的實際控制人是誰?奕東電子股票上市了嗎?
- 百合股份是一家什么公司?百合股份的股票何時上市?
今日要聞
- 蕪湖釋放創(chuàng)新“N次方”效應(yīng) 數(shù)字賦能驅(qū)動產(chǎn)業(yè)升級
- 去年快遞服務(wù)全程時限水平有較大提升 干線運輸時限縮短
- 住建部:推動長江經(jīng)濟帶高質(zhì)量發(fā)展,打造區(qū)域協(xié)調(diào)發(fā)展新樣板
- 山東抓投資抓項目 新興領(lǐng)域投資規(guī)模持續(xù)擴大
- Gucci在2月將投放 10 個“SuperGucci”NFT
- 美國銀行:美國CBDC將保持美元作為世界儲備貨幣的地位
- 美股三大指數(shù)尾盤集體轉(zhuǎn)漲
- The new iPad屏幕對比評測
- 電源接通延時器
- 汽車電子穩(wěn)定系統(tǒng)(ESP)詳解