国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

嵌入式內(nèi)核及驅(qū)動開發(fā)高級

這篇具有很好參考價值的文章主要介紹了嵌入式內(nèi)核及驅(qū)動開發(fā)高級。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、起源

僅devfs,導(dǎo)致開發(fā)不方便以及一些功能難以支持:

  1. 熱插拔

  2. 不支持一些針對所有設(shè)備的統(tǒng)一操作(如電源管理)

  3. 不能自動mknod

  4. 用戶查看不了設(shè)備信息

  5. 設(shè)備信息硬編碼,導(dǎo)致驅(qū)動代碼通用性差,即沒有分離設(shè)備和驅(qū)動

二、新方案

uevent機(jī)制:sysfs + uevent + udevd(上層app)

2.1 sysfs: 一種用內(nèi)存模擬的文件系統(tǒng),系統(tǒng)啟動時mount到/sys目錄

sysfs用途:(類似于windows的設(shè)備管理器)

  1. 建立系統(tǒng)中總線、驅(qū)動、設(shè)備三者之間的橋梁

  2. 向用戶空間展示內(nèi)核中各種設(shè)備的拓?fù)鋱D

  3. 提供給用戶空間對設(shè)備獲取信息和操作的接口,部分取代ioctl功能

sysfs在內(nèi)核中的組成要素 在用戶空間/sys下的顯示
內(nèi)核對象(kobject) 目錄
對象屬性(attribute) 文件
對象關(guān)系(relationship) 鏈接(Symbolic Link)

四個基本結(jié)構(gòu)

類型 所包含的內(nèi)容 內(nèi)核數(shù)據(jù)結(jié)構(gòu) 對應(yīng)/sys項(xiàng)
設(shè)備(Devices) 設(shè)備是此模型中最基本的類型,以設(shè)備本身的連接按層次組織 struct device /sys/devices/?/?/.../
驅(qū)動(Drivers) 在一個系統(tǒng)中安裝多個相同設(shè)備,只需要一份驅(qū)動程序的支持 struct device_driver /sys/bus/pci/drivers/?/
總線(Bus) 在整個總線級別對此總線上連接的所有設(shè)備進(jìn)行管理 struct bus_type /sys/bus/?/
類別(Classes) 這是按照功能進(jìn)行分類組織的設(shè)備層次樹;如 USB 接口和 PS/2 接口的鼠標(biāo)都是輸入設(shè)備,都會出現(xiàn)在/sys/class/input/下 struct class /sys/class/?/

目錄組織結(jié)構(gòu):

/sys下的子目錄 所包含的內(nèi)容
/sys/devices 這是內(nèi)核對系統(tǒng)中所有設(shè)備的分層次表達(dá)模型,也是/sys文件系統(tǒng)管理設(shè)備的最重要的目錄結(jié)構(gòu);
/sys/dev 這個目錄下維護(hù)一個按字符設(shè)備和塊設(shè)備的主次號碼(major:minor)鏈接到真實(shí)的設(shè)備(/sys/devices下)的符號鏈接文件;
/sys/bus 這是內(nèi)核設(shè)備按總線類型分層放置的目錄結(jié)構(gòu), devices 中的所有設(shè)備都是連接于某種總線之下,在這里的每一種具體總線之下可以找到每一個具體設(shè)備的符號鏈接,它也是構(gòu)成 Linux 統(tǒng)一設(shè)備模型的一部分;
/sys/class 這是按照設(shè)備功能分類的設(shè)備模型,如系統(tǒng)所有輸入設(shè)備都會出現(xiàn)在/sys/class/input 之下,而不論它們是以何種總線連接到系統(tǒng)。它也是構(gòu)成 Linux 統(tǒng)一設(shè)備模型的一部分;
/sys/kernel 這里是內(nèi)核所有可調(diào)整參數(shù)的位置,目前只有 uevent_helper, kexec_loaded, mm, 和新式的slab 分配器等幾項(xiàng)較新的設(shè)計(jì)在使用它,其它內(nèi)核可調(diào)整參數(shù)仍然位于sysctl(/proc/sys/kernel) 接口中;
/sys/module 這里有系統(tǒng)中所有模塊的信息,不論這些模塊是以內(nèi)聯(lián)(inlined)方式編譯到內(nèi)核映像文件(vmlinuz)中還是編譯為外部模塊(ko文件),都可能會出現(xiàn)在/sys/module 中
/sys/power 這里是系統(tǒng)中電源選項(xiàng),這個目錄下有幾個屬性文件可以用于控制整個機(jī)器的電源狀態(tài),如可以向其中寫入控制命令讓機(jī)器關(guān)機(jī)、重啟等。

2.2 uevent

嵌入式內(nèi)核及驅(qū)動開發(fā)高級,驅(qū)動開發(fā)文章來源地址http://www.zghlxwxcb.cn/news/detail-560820.html

三、代碼中自動mknod

struct class *class_create(struct module *owner, const char *name);
/*
 * 功能:在/sys/class生成一個目錄,目錄名由name指定
 * 參數(shù):
    struct module *owner - THIS_MODULE
    const char *name - 目錄名
 * 返回值  成功:class指針 ? 失?。篘ULL
*/
/*
輔助接口:可以定義一個struct class 的指針變量cls來接受返回值,然后通過IS_ERR(cls)判斷是否失?。?IS_ERR(cls);成功----------------->0
IS_ERR(cls);失敗----------------->非0
PTR_ERR(cls);來獲得失敗的返回錯誤碼;
*/
void class_destroy(struct class *cls)
/*
* 功能:刪除class_create生成目錄
* 參數(shù):
    struct class *cls - class指針
* 返回值
*/
struct device *device_create(struct class *class, struct device *parent,
             ? ? dev_t devt, void *drvdata, const char *fmt, ...)
/*
 * 功能:在/sys/class目錄下class_create生成目錄再生成一個子目錄與該設(shè)備相對應(yīng),發(fā)uevent讓應(yīng)用程序udevd創(chuàng)建設(shè)備文件
 * 參數(shù):
    struct class *class - class指針
    struct device *parent - 父對象,一般NULL
    dev_t devt - 設(shè)備號
    void *drvdata - 驅(qū)動私有數(shù)據(jù),一般NULL
    const char *fmt - 字符串的格式
     ... - 不定參數(shù)
 * 返回值
    成功:device指針
    失?。篘ULL
 */
void device_destroy(struct class *class, dev_t devt)
/*
 * 功能:刪除device_create生成目錄
 * 參數(shù):
    struct class *class - class指針
    dev_t devt - 設(shè)備號
 * 返回值
*/

到了這里,關(guān)于嵌入式內(nèi)核及驅(qū)動開發(fā)高級的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【嵌入式Linux內(nèi)核驅(qū)動】SPI子系統(tǒng) | 硬件原理 | 應(yīng)用編程 | 內(nèi)核驅(qū)動 | 總體框架

    【嵌入式Linux內(nèi)核驅(qū)動】SPI子系統(tǒng) | 硬件原理 | 應(yīng)用編程 | 內(nèi)核驅(qū)動 | 總體框架

    1.1 SPI通信協(xié)議 SPI(Serial Peripheral Interface)是由Motorola公司開發(fā)的一種通用數(shù)據(jù)總線 四根通信線:SCK(Serial Clock)、MOSI(Master Output Slave Input)、MISO(Master Input Slave Output)、SS(Slave Select) 同步,全雙工 支持總線掛載多設(shè)備(一主多從) 1.2 硬件連接 多NSS獨(dú)立片選方式 菊花

    2024年02月16日
    瀏覽(28)
  • 【嵌入式環(huán)境下linux內(nèi)核及驅(qū)動學(xué)習(xí)筆記-(5-驅(qū)動的并發(fā)控制機(jī)制)】

    【嵌入式環(huán)境下linux內(nèi)核及驅(qū)動學(xué)習(xí)筆記-(5-驅(qū)動的并發(fā)控制機(jī)制)】

    在討論并發(fā)前,先要了解以下幾個概念:執(zhí)行流,上下文,共享與臨界等。 什么叫執(zhí)行流: 【執(zhí)行流】:有開始有結(jié)束總體順序執(zhí)行的一段代碼 又稱 上下文 。 上下文分類: 【任務(wù)上下文】:普通的,具有五種狀態(tài)(就緒態(tài)、運(yùn)行態(tài)、睡眠態(tài)、暫停態(tài)、僵死態(tài)),可被阻塞

    2023年04月21日
    瀏覽(30)
  • 【嵌入式Linux內(nèi)核驅(qū)動】05_IIC子系統(tǒng) | 硬件原理與常見面試問題 | 應(yīng)用編程 | 內(nèi)核驅(qū)動 | 總體框架

    【嵌入式Linux內(nèi)核驅(qū)動】05_IIC子系統(tǒng) | 硬件原理與常見面試問題 | 應(yīng)用編程 | 內(nèi)核驅(qū)動 | 總體框架

    1.1 IIC 基礎(chǔ) IIC協(xié)議簡介—學(xué)習(xí)筆記_iic標(biāo)準(zhǔn)協(xié)議_越吃越胖的黃的博客-CSDN博客 I2C(Inter-Integrated Circuit)是一種串行通信協(xié)議,用于連接微控制器、傳感器、存儲器和其他外設(shè)。 I2C使用兩條線(SDA和SCL)進(jìn)行通信,可以連接多個設(shè)備,每個設(shè)備都有一個唯一的地址。I2C總線上的

    2024年02月09日
    瀏覽(93)
  • 嵌入式開發(fā)之linux內(nèi)核移植

    嵌入式開發(fā)之linux內(nèi)核移植

    目錄 ?前言 一、下載內(nèi)核源碼 1.1 下載linux-3.0.1 1.2 解壓源碼文件 二、 內(nèi)核添加yaffs2文件系統(tǒng)支持 2.1 下載yaffs2 2.2 內(nèi)核添加yaffs2文件補(bǔ)丁 三、配置開發(fā)板 3.1 修改機(jī)器ID 3.2 添加開發(fā)板初始化文件 3.3 配置NandFalsh 3.3.1 添加NandFlash設(shè)備 3.3.2 添加NandFlash驅(qū)動 3.3 修改Kconfig(支持

    2024年02月07日
    瀏覽(103)
  • 嵌入式Linux底層系統(tǒng)開發(fā) +系統(tǒng)移植+內(nèi)核文件系統(tǒng)(基礎(chǔ))

    嵌入式Linux底層系統(tǒng)開發(fā) +系統(tǒng)移植+內(nèi)核文件系統(tǒng)(基礎(chǔ))

    搭建交叉編譯開發(fā)環(huán)境 bootloader的選擇和移植 kernel的配置、編譯、移植和調(diào)試 根文件系統(tǒng)的制作 前兩個要點(diǎn)通常芯片廠家提供。后邊兩個要點(diǎn)是公司的工作重點(diǎn)。 學(xué)習(xí)方法:先整體后局部,層層推進(jìn) 如何編譯—如何添加命令和功能—如何定義自己的開發(fā)板。 移植的基本步

    2024年02月03日
    瀏覽(101)
  • 驅(qū)動開發(fā)——嵌入式(驅(qū)動)軟開基礎(chǔ)(十)

    1. 64位的計(jì)算機(jī)有哪些優(yōu)點(diǎn)? (1)可以進(jìn)行更大范圍的整數(shù)計(jì)算。 (2)可以支持更大的內(nèi)存,虛擬內(nèi)存空間大小一般為2^48(256TB)。64位的Linux一般使用48位表示虛擬內(nèi)存空間地址,40位表示物理內(nèi)存地址。 2. 中斷分為哪兩種? (1) 異步中斷 :也叫 外部中斷 ,由CPU外設(shè)產(chǎn)

    2024年02月06日
    瀏覽(25)
  • 驅(qū)動開發(fā)——嵌入式(驅(qū)動)軟開基礎(chǔ)(七)

    1 Linux驅(qū)動程序的功能是什么? (1)對設(shè)備初始化和釋放。 (2)進(jìn)行內(nèi)核與硬件的數(shù)據(jù)交互。 (3)檢測和處理設(shè)備出現(xiàn)的錯誤。 2. 內(nèi)核程序中申請內(nèi)存使用什么函數(shù)? 答案:kmalloc()、kzalloc()、vmalloc()。 解讀: (1)void *kmalloc(size_t size, gfp_t flags); ①申請連續(xù)的物理內(nèi)存,

    2024年02月06日
    瀏覽(22)
  • 嵌入式LinuxLED驅(qū)動開發(fā)實(shí)驗(yàn)

    嵌入式LinuxLED驅(qū)動開發(fā)實(shí)驗(yàn)

    我們在裸機(jī)實(shí)驗(yàn)的時候,都是通過配置底層的寄存器來進(jìn)行點(diǎn)亮LED燈的操作的。我們現(xiàn)在還沒有學(xué)習(xí)到設(shè)備樹的相關(guān)知識,所以,我們也是通過在字符設(shè)備驅(qū)動框架的基礎(chǔ)上來配置底層寄存器來實(shí)現(xiàn)LED燈的點(diǎn)亮,但是,與之前不同的是,在Linux系統(tǒng)中會存在地址映射的方式,

    2024年02月15日
    瀏覽(24)
  • 使用VSCode clangd插件進(jìn)行l(wèi)inux內(nèi)核代碼閱讀和嵌入式開發(fā)

    使用VSCode clangd插件進(jìn)行l(wèi)inux內(nèi)核代碼閱讀和嵌入式開發(fā)

    在進(jìn)行 Linux 內(nèi)核代碼閱讀和嵌入式開發(fā)時,選擇合適的開發(fā)工具至關(guān)重要。VSCode 是一個流行的跨平臺編輯器,并且它的擴(kuò)展生態(tài)系統(tǒng)非常強(qiáng)大。在這篇博客中,我們將介紹如何使用 VSCode Clangd 插件來提高 Linux 內(nèi)核代碼的閱讀和嵌入式開發(fā)效率。 Clangd 是一個基于 Clang 的語言

    2024年02月09日
    瀏覽(29)
  • 全志V3S嵌入式驅(qū)動開發(fā)(驅(qū)動開發(fā)準(zhǔn)備)

    全志V3S嵌入式驅(qū)動開發(fā)(驅(qū)動開發(fā)準(zhǔn)備)

    【 聲明:版權(quán)所有,歡迎轉(zhuǎn)載,請勿用于商業(yè)用途。 聯(lián)系信箱:feixiaoxing @163.com】 ? ? ? ? 之前的文章都是教大家怎么搭建環(huán)境、看原理圖、編譯內(nèi)核和根文件系統(tǒng)、做鏡像,直到現(xiàn)在才進(jìn)入驅(qū)動開發(fā)的主題。 畢竟整個專欄的目的,還是希望大家能夠?qū)W會驅(qū)動外部硬件。

    2024年02月13日
    瀏覽(37)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包