加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • sysfs文件系統(tǒng)
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

飛凌嵌入式ElfBoard ELF 1板卡-應(yīng)用編程示例控制LED燈之sysfs文件系統(tǒng)

10/18 09:23
255
閱讀需 5 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

之前玩過單片機(jī)的同學(xué)都知道,搞嵌入式都是從點(diǎn)燈開始的。ELF1開發(fā)板左下角有紅、綠、黃三個LED燈,核心板有一個LED心跳燈??刂埔粋€LED燈亮滅的方法有很多,可以給燈的兩端施加電壓差,通過改變上下拉即可。也可以通過Linux中的pinctrl子系統(tǒng)和GPIO子系統(tǒng),通過配置引腳和系統(tǒng)提供的API進(jìn)行控制。

而Linux系統(tǒng)通過sysfs,將設(shè)備和驅(qū)動層的設(shè)備屬性等信息以文件的形式開放到應(yīng)用層,供用戶使用。在《01-0 ELF1、ELF1S開發(fā)板_快速啟動手冊_V1》中有“echo 1 > /sys/class/leds/led1/brightness”,這個brightness代表的就是sysfs將led1輸出來的亮度。??本篇先簡單介紹sysfs文件系統(tǒng),下一篇結(jié)合前面介紹過的文件I/O方式寫一個點(diǎn)燈的C程序。

板卡的三個LED燈如圖:

sysfs文件系統(tǒng)

sysfs文件系統(tǒng)概念

sysfs是Linux2.6以上的內(nèi)核在發(fā)展迭代過程中衍生出來的一個功能,它的作用是通過一個內(nèi)存文件系統(tǒng)將信息導(dǎo)出到用戶進(jìn)程空間。文件系統(tǒng)的目錄層次結(jié)構(gòu)組織嚴(yán)格,并且是基于內(nèi)核數(shù)據(jù)結(jié)構(gòu)的內(nèi)部組織。文件系統(tǒng)中創(chuàng)建的文件主要是ASCII文件(每個文件通常只有一個值)。這些特點(diǎn)保證了信息導(dǎo)出的準(zhǔn)確性和方便性,方便用戶在應(yīng)用層對設(shè)備進(jìn)行操作。

在Linux系統(tǒng)下一切皆文件,sysfs是一個基于內(nèi)存的文件系統(tǒng),被稱為虛擬文件系統(tǒng)。它對系統(tǒng)設(shè)備進(jìn)行管理,產(chǎn)生一個包含所有系統(tǒng)硬件層次的視圖,同時將內(nèi)核信息以文件的方式提供給應(yīng)用層使用。

sysfs文件系統(tǒng)把連接在系統(tǒng)上的設(shè)備和總線組織成為一個分級的文件,展示設(shè)備驅(qū)動模型中各組件的層次關(guān)系。sysfs提供了一種機(jī)制,可以顯式的描述內(nèi)核對象、對象屬性及對象間關(guān)系,用來導(dǎo)出內(nèi)核對象(kernel object,譬如一個硬件設(shè)備)的數(shù)據(jù)、屬性到用戶空間,以文件目錄結(jié)構(gòu)的形式為用戶空間提供對這些數(shù)據(jù)、屬性的訪問支持。下表描述了內(nèi)核對象、對象屬性及對象間關(guān)系在用戶空間sysfs中的的表現(xiàn)。

sysfs的存在如同一棟規(guī)模宏大的建筑,為了構(gòu)造它,除了基本的建筑材料外,尚需要一種機(jī)制,來向建筑外面的世界(用戶空間程序)展示內(nèi)部的構(gòu)造,并且通過文件接口的方式實(shí)現(xiàn)與外界的溝通與互動。sysfs文件系統(tǒng)就充當(dāng)了這種角色。

如圖一個USB的鼠標(biāo)設(shè)備Mouse 1,其設(shè)備類型Classes為輸入設(shè)備,同時USB總線Buses類型中有歸屬于usb-hid,在devices一個驅(qū)動設(shè)備中其屬于usb 2中的port 1端口設(shè)備dev1:1-0,采用類似于一個矩陣管理形式。

/sys/目錄結(jié)構(gòu)解釋如下:

sysfs文件系統(tǒng)中控制LED狀態(tài)

給ELF1開發(fā)板上電,進(jìn)入Linux系統(tǒng)后,進(jìn)入到/sys目錄下查看:

進(jìn)入class目錄,找到led設(shè)備,進(jìn)入led1里:

常用的三個屬性是brightness,max_brightness,trigger。

查看LED1觸發(fā)狀態(tài),當(dāng)前狀態(tài)為none:

將LED1的觸發(fā)狀態(tài)改為插入TF卡閃爍,即mmc:

此時插入TF卡后led1紅燈閃爍三次,拔出后閃爍一次。

相關(guān)推薦

電子產(chǎn)業(yè)圖譜