<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 嵌入式Linux設備驅動(dòng)開(kāi)發(fā)之:設備驅動(dòng)概述

嵌入式Linux設備驅動(dòng)開(kāi)發(fā)之:設備驅動(dòng)概述

作者: 時(shí)間:2013-09-13 來(lái)源:網(wǎng)絡(luò ) 收藏

本文引用地址:http://dyxdggzs.com/article/257112.htm

11.1概述

11.1.1簡(jiǎn)介及驅動(dòng)模塊

是通過(guò)各種驅動(dòng)程序來(lái)駕馭硬件設備的,它為用戶(hù)屏蔽了各種各樣的設備,驅動(dòng)硬件是最基本的功能,并且提供統一的操作方式。程序是內核的一部分,硬件驅動(dòng)程序是最基本的組成部分,在Linux內核源程序中也占有60%以上。因此,熟悉驅動(dòng)的編寫(xiě)是很重要的。

在第2章中已經(jīng)提到過(guò),Linux內核中采用可加載的模塊化設計(LKMs,LoadableKernelModules),一般情況下編譯的Linux內核是支持可插入式模塊的,也就是將最基本的核心代碼編譯在內核中,其他的代碼可以編譯到內核中,或者編譯為內核的模塊文件(在需要時(shí)動(dòng)態(tài)加載)。

常見(jiàn)的驅動(dòng)程序是作為內核模塊動(dòng)態(tài)加載的,比如聲卡驅動(dòng)和網(wǎng)卡驅動(dòng)等,而Linux最基礎的驅動(dòng),如CPU、PCI總線(xiàn)、TCP/IP協(xié)議、APM(高級電源管理)、VFS等驅動(dòng)程序則直接編譯在內核文件中。有時(shí)也把內核模塊叫做驅動(dòng)程序,只不過(guò)驅動(dòng)的內容不一定是硬件罷了,比如ext3文件系統的驅動(dòng)。因此,加載驅動(dòng)就是加載內核模塊。

這里,首先列舉一些模塊相關(guān)的命令。

n lsmod列出當前系統中加載的模塊,其中左邊第一列是模塊名,第二列是該模塊大小,第三列則是使用該模塊的對象數目。如下所示:

$lsmod

ModuleSizeUsedby

Autofs120680(autoclean)(unused)

eepro100181281

iptable_nat 192520(autoclean)(unused)

ip_conntrack185401(autoclean)[iptable_nat]

iptable_mangle22720(autoclean)(unused)

iptable_filter22720(autoclean)(unused)

ip_tables119365[iptable_natiptable_mangleiptable_filter]

usb-ohci193280(unused)

usbcore545281[usb-ohci]

ext3677282

jbd444802[ext3]

aic7xxx1147043

sd_mod115843

scsi_mod985122[aic7xxxsd_mod]

n rmmod是用于將當前模塊卸載。

n insmod和modprobe是用于加載當前模塊,但insmod不會(huì )自動(dòng)解決依存關(guān)系,即如果要加載的模塊引用了當前內核符號表中不存在的符號,則無(wú)法加載,也不會(huì )去查在其他尚未加載的模塊中是否定義了該符號;modprobe可以根據模塊間依存關(guān)系以及/etc/modules.conf文件中的內容自動(dòng)加載其他有依賴(lài)關(guān)系的模塊。

11.1.2設備分類(lèi)

本書(shū)在前面也提到過(guò),Linux的一個(gè)重要特點(diǎn)就是將所有的設備都當做文件進(jìn)行處理,這一類(lèi)特殊文件就是設備文件,它們可以使用前面提到的文件、I/O相關(guān)函數進(jìn)行操作,這樣就大大方便了對設備的處理。它通常在/dev下面存在一個(gè)對應的邏輯設備節點(diǎn),這個(gè)節點(diǎn)以文件的形式存在。

Linux系統的設備分為3類(lèi):字符設備、塊設備和網(wǎng)絡(luò )設備。

n 字符設備通常指像普通文件或字節流一樣,以字節為單位順序讀寫(xiě)的設備,如并口設備、虛擬控制臺等。字符設備可以通過(guò)設備文件節點(diǎn)訪(fǎng)問(wèn),它與普通文件之間的區別在于普通文件可以被隨機訪(fǎng)問(wèn)(可以前后移動(dòng)訪(fǎng)問(wèn)指針),而大多數字符設備只能提供順序訪(fǎng)問(wèn),因為對它們的訪(fǎng)問(wèn)不會(huì )被系統所緩存。但也有例外,例如幀緩存(framebuffer)是一個(gè)可以被隨機訪(fǎng)問(wèn)的字符設備。

n 塊設備通常指一些需要以塊為單位隨機讀寫(xiě)的設備,如IDE硬盤(pán)、SCSI硬盤(pán)、光驅等。塊設備也是通過(guò)文件節點(diǎn)來(lái)訪(fǎng)問(wèn),它不僅可以提供隨機訪(fǎng)問(wèn),而且可以容納文件系統(例如硬盤(pán)、閃存等)。Linux可以使用戶(hù)態(tài)程序像訪(fǎng)問(wèn)字符設備一樣每次進(jìn)行任意字節的操作,只是在內核態(tài)內部中的管理方式和內核提供的驅動(dòng)接口上不同。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

linux相關(guān)文章:linux教程



上一頁(yè) 1 2 3 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>