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

【嵌入式Linux學(xué)習(xí)筆記】platform設(shè)備驅(qū)動和input子系統(tǒng)

這篇具有很好參考價值的文章主要介紹了【嵌入式Linux學(xué)習(xí)筆記】platform設(shè)備驅(qū)動和input子系統(tǒng)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

linux,default-trigger,linux,學(xué)習(xí),單片機,arm,arm開發(fā)

對于Linux這種龐大的操作系統(tǒng),代碼重用性非常重要,所以需要有相關(guān)的機制來提升效率,去除重復(fù)無意義的代碼,尤其是對于驅(qū)動程序,所以就有了platform和INPUT子系統(tǒng)這兩種工作機制。

學(xué)習(xí)視頻地址:【正點原子】STM32MP157開發(fā)板

platform子系統(tǒng)

platform 驅(qū)動框架分為總線、設(shè)備和驅(qū)動??偩€在Linux內(nèi)核提供,不需要我們進(jìn)行考慮,所以只需考慮設(shè)備和驅(qū)動。
因為目前的Linux內(nèi)核都支持設(shè)備樹了,所以platform_device設(shè)備信息都通過設(shè)備樹進(jìn)行描述了,因此只需要在代碼中編寫platform_driver驅(qū)動代碼

Linux驅(qū)動的分離與分層示意圖

linux,default-trigger,linux,學(xué)習(xí),單片機,arm,arm開發(fā)

GPIO電氣屬性配置

采用的是設(shè)備樹中的pinctrl控制器,在STM32MP1中,pinctrl配置只在platform平臺上被引用。

創(chuàng)建設(shè)備的pinctrl節(jié)點

led_pins_a: gpioled-0 {
	pins {
		pinmux = <STM32_PINMUX('I', 0, GPIO)>;	# 設(shè)置 PI0 復(fù)用為 GPIO 功能。
		drive-push-pull;						# 設(shè)置 PI0 為推挽輸出。
		bias-pull-up;							# 設(shè)置 PI0 內(nèi)部上拉。
		output-high;							# 設(shè)置 PI0 默認(rèn)輸出高電平。
		slew-rate = <0>;						# 設(shè)置 PI0 的速度為0檔,也就是最慢。
	};
};

在設(shè)備樹中創(chuàng)建設(shè)備節(jié)點

gpioled {
	compatible = "alientek,led";
	pinctrl-names = "default";
	status = "okay";
	pinctrl-0 = <&led_pins_a>;
	led-gpio = <&gpioi 0 GPIO_ACTIVE_LOW>;
};

兼容屬性

 // 定義兼容屬性表
 static const struct of_device_id led_of_match[] = {
	 { .compatible = "alientek,led" }, /* 兼容屬性 */
	 { /* Sentinel */ }
 };

// 聲明設(shè)備匹配表
 MODULE_DEVICE_TABLE(of, led_of_match);

// 定義platform驅(qū)動
 static struct platform_driver led_platform_driver = {
	 .driver = {
		 .name = "stm32mp1-led",
		 .of_match_table = led_of_match,
	 },
	 .probe = led_probe,
	 .remove = led_remove,
};

檢查引腳復(fù)用配置

STM32MP1 的一個引腳可以復(fù)用為多種功能,但是在配置設(shè)備樹時,一個引腳只能復(fù)用為一個功能。

檢查GPIO占用

盡管引腳配置上只復(fù)用為了一個功能,但是可能存在該引腳被多個設(shè)備使用的情況,所以需要檢查設(shè)備樹,確保只有一個設(shè)備在使用該GPIO引腳。

linux,default-trigger屬性設(shè)置

這個屬性可以將LED配置為某個特定模式。

backlight:LED 燈作為背光。
default-on:LED 燈打開。
heartbeat:LED 燈作為心跳指示燈,可以作為系統(tǒng)運行提示燈。
disk-activity:LED 燈作為磁盤活動指示燈。
ide-disk:LED 燈作為硬盤活動指示燈。
timer:LED 燈周期性閃爍,由定時器驅(qū)動,閃爍頻率可以修改。

MISC驅(qū)動系統(tǒng)

定位:當(dāng)某些外設(shè)無法進(jìn)行分類的時候就可以使用MISC驅(qū)動。MISC驅(qū)動其實就是最簡單的字符設(shè)備驅(qū)動,通常嵌套在 platform 總線驅(qū)動中,實現(xiàn)復(fù)雜的驅(qū)動。

設(shè)備定義

所有的MISC設(shè)備驅(qū)動的主設(shè)備號都為 10,不同的設(shè)備使用不同的從設(shè)備號。定義一個 MISC 設(shè)備(miscdevice 類型)以后需要設(shè)置 minor、name 和 fops 這三個成員變量。
linux,default-trigger,linux,學(xué)習(xí),單片機,arm,arm開發(fā)

設(shè)備注冊

int misc_register(struct miscdevice * misc)

設(shè)備注銷

int misc_deregister(struct miscdevice *misc)

input子系統(tǒng)

系統(tǒng)架構(gòu)
linux,default-trigger,linux,學(xué)習(xí),單片機,arm,arm開發(fā)

input子系統(tǒng)的所有設(shè)備主設(shè)備號都為13,我們在使用 input 子系統(tǒng)處理輸入設(shè)備的時候就不需要去注冊字符設(shè)備,只需要向系統(tǒng)注冊一個input_device即可。

驅(qū)動編寫流程

API函數(shù)

// 申請input_dev結(jié)構(gòu)體變量
struct input_dev* input_allocate_device(void)
// 釋放input_dev結(jié)構(gòu)體變量
void input_free_device(struct input_dev* dev)
// 注冊input_dev
int input_register_device(struct input_dev* dev)
// 注銷input_dev
void input_unregister_device(struct input_dev* dev)

事件類型
linux,default-trigger,linux,學(xué)習(xí),單片機,arm,arm開發(fā)

初始化(以按鍵為例)

/* 申請設(shè)備內(nèi)存 */
inputdev = input_allocate_device();
inputdev->name = "test_inputdev";

/* 設(shè)置事件和事件值 */
keyinputdev.inputdev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP);
input_set_capability(keyinputdev.inputdev, EV_KEY, KEY_0);

/* 注冊設(shè)備 */
input_register_device(inputdev);

上報事件文章來源地址http://www.zghlxwxcb.cn/news/detail-723987.html

/* 通用的事件上報函數(shù) */
void input_event(struct input_dev *dev, unsigned int type, 
 					unsigned int code,  int value)

/* 衍生所得的上報函數(shù) */
void input_report_rel(struct input_dev *dev, unsigned int code, int value)
void input_report_abs(struct input_dev *dev, unsigned int code, int value)
void input_report_ff_status(struct input_dev *dev, unsigned int code, int value)
void input_report_switch(struct input_dev *dev, unsigned int code, int value)
void input_mt_sync(struct input_dev *dev)

/* 事件上報完成后,需要用該函數(shù)上報一個同步事件 */
void input_sync(struct input_dev *dev)

到了這里,關(guān)于【嵌入式Linux學(xué)習(xí)筆記】platform設(shè)備驅(qū)動和input子系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 嵌入式linux驅(qū)動開發(fā)篇之設(shè)備樹

    嵌入式linux驅(qū)動開發(fā)篇之設(shè)備樹

    設(shè)備樹(Device Tree)是一種用于描述嵌入式系統(tǒng)硬件組件及其連接關(guān)系的數(shù)據(jù)結(jié)構(gòu)。它被廣泛用于嵌入式 Linux 系統(tǒng),尤其是針對使用多種不同架構(gòu)和平臺的嵌入式系統(tǒng)。它是一種與硬件描述相關(guān)的中間表示形式,將硬件信息抽象成一種可移植的格式,使得操作系統(tǒng)和引導(dǎo)加載

    2024年02月22日
    瀏覽(25)
  • 嵌入式Linux驅(qū)動開發(fā) 04:基于設(shè)備樹的驅(qū)動開發(fā)

    嵌入式Linux驅(qū)動開發(fā) 04:基于設(shè)備樹的驅(qū)動開發(fā)

    前面文章 《嵌入式Linux驅(qū)動開發(fā) 03:平臺(platform)總線驅(qū)動模型》 引入了資源和驅(qū)動分離的概念,這篇文章將在前面基礎(chǔ)上更進(jìn)一步,引入設(shè)備樹的概念。 在平臺總線驅(qū)動模型中資源和驅(qū)動已經(jīng)從邏輯上和代碼組織上進(jìn)行了分離,但每次調(diào)整資源還是會涉及到內(nèi)核,所以現(xiàn)

    2024年02月16日
    瀏覽(27)
  • 嵌入式Linux系統(tǒng)中的設(shè)備驅(qū)動開發(fā):從設(shè)備樹到驅(qū)動實現(xiàn)

    嵌入式Linux系統(tǒng)中的設(shè)備驅(qū)動開發(fā):從設(shè)備樹到驅(qū)動實現(xiàn)

    大家好,今天給大家介紹 嵌入式Linux系統(tǒng)中的設(shè)備驅(qū)動開發(fā):從設(shè)備樹到驅(qū)動實現(xiàn) ,文章末尾附有分享大家一個資料包,差不多150多G。里面學(xué)習(xí)內(nèi)容、面經(jīng)、項目都比較新也比較全! 可進(jìn)群免費領(lǐng)取。 在嵌入式Linux系統(tǒng)中,設(shè)備驅(qū)動是連接硬件設(shè)備和操作系統(tǒng)之間的橋梁。

    2024年02月19日
    瀏覽(25)
  • 嵌入式Linux驅(qū)動開發(fā)——解決/sys/bus/spi/devices下沒有對應(yīng)的spi設(shè)備文件

    嵌入式Linux驅(qū)動開發(fā)——解決/sys/bus/spi/devices下沒有對應(yīng)的spi設(shè)備文件

    最近在學(xué)習(xí)Linux驅(qū)動開發(fā)中SPI總線的驅(qū)動框架,但在修改完設(shè)備樹添加完對應(yīng)的spi設(shè)備節(jié)點后,理應(yīng)在/sys/bus/spi下會有對應(yīng)的spi設(shè)備,我的目錄下面沒有。 無spi設(shè)備 然后我查看了/proc/device-tree,發(fā)現(xiàn)有對應(yīng)的spi設(shè)備節(jié)點,我就先沒有過多理會這個問題。 /proc/device-tree下有對應(yīng)

    2024年02月16日
    瀏覽(23)
  • 【嵌入式Linux內(nèi)核驅(qū)動】04_Jetson nano GPIO應(yīng)用 | 驅(qū)動開發(fā) | 官方gpiolib、設(shè)備樹與chip_driver

    【嵌入式Linux內(nèi)核驅(qū)動】04_Jetson nano GPIO應(yīng)用 | 驅(qū)動開發(fā) | 官方gpiolib、設(shè)備樹與chip_driver

    0.暴露給應(yīng)用層 應(yīng)用 解決調(diào)試目錄為空的問題 調(diào)試信息 1.最簡讀寫文件(在/SYS下) 設(shè)備樹 驗證測試 編譯文件 驅(qū)動 of_get_named_gpio_flags //獲取設(shè)備樹節(jié)點的屬性 gpio_is_valid //判斷是否合法 devm_gpio_request //申請使用gpio,并調(diào)用設(shè)置pinctrl device_create_file //根據(jù)設(shè)備樹節(jié)點屬性,創(chuàng)建

    2024年02月07日
    瀏覽(54)
  • 嵌入式Linux 開發(fā)經(jīng)驗:platform_driver_register 的使用方法

    嵌入式Linux 開發(fā)經(jīng)驗:platform_driver_register 的使用方法

    嵌入式Linux 設(shè)備驅(qū)動開發(fā)時,經(jīng)常遇到平臺驅(qū)動 platform_driver_register 的注冊,最近深入了看了驅(qū)動開發(fā)為何使用平臺驅(qū)動 開發(fā)一個設(shè)備驅(qū)動時,為了實現(xiàn) 設(shè)備的 打開、關(guān)閉、控制等操作,可以注冊為 Linux misc 設(shè)備,不過在這之前,可以先使用 platform_driver_register 注冊平臺驅(qū)動

    2024年01月15日
    瀏覽(22)
  • 【嵌入式環(huán)境下linux內(nèi)核及驅(qū)動學(xué)習(xí)筆記-(10-內(nèi)核內(nèi)存管理)】

    【嵌入式環(huán)境下linux內(nèi)核及驅(qū)動學(xué)習(xí)筆記-(10-內(nèi)核內(nèi)存管理)】

    對于包含MMU(內(nèi)存管理單元)的處理器而言,linux系統(tǒng)以虛擬內(nèi)存的方式為每個進(jìn)程分配最大4GB的內(nèi)存。這真的4GB的內(nèi)存空間被分為兩個部分–用戶空間 與 內(nèi)核空間。用戶空間地地址分布為0~3GB,剩下的3 ~ 4GB 為內(nèi)核空間。如下圖。 用戶進(jìn)程通常只能訪問用戶空間的虛擬地址

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

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

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

    2023年04月21日
    瀏覽(31)
  • 韋東山嵌入式Liunx入門驅(qū)動開發(fā)一(Hello 驅(qū)動編程、GPIO基礎(chǔ)知識、LED驅(qū)動、總線設(shè)備驅(qū)動模型)

    韋東山嵌入式Liunx入門驅(qū)動開發(fā)一(Hello 驅(qū)動編程、GPIO基礎(chǔ)知識、LED驅(qū)動、總線設(shè)備驅(qū)動模型)

    本人學(xué)習(xí)完韋老師的視頻,因此來復(fù)習(xí)鞏固,寫以筆記記之。 韋老師的課比較難,第一遍不知道在說什么,但是堅持看完一遍,再來復(fù)習(xí),基本上就水到渠成了。 看完視頻復(fù)習(xí)的同學(xué)觀看最佳! 基于 IMX6ULL-PRO 參考視頻 Linux快速入門到精通視頻 參考資料 :01_嵌入式Linux應(yīng)用

    2024年04月25日
    瀏覽(96)
  • 【嵌入式學(xué)習(xí)筆記】嵌入式入門2——中斷(外部中斷)

    【嵌入式學(xué)習(xí)筆記】嵌入式入門2——中斷(外部中斷)

    打斷CPU執(zhí)行正常的程序,轉(zhuǎn)而處理緊急程序,然后返回原暫停的程序繼續(xù)運行,就叫中斷 作用1: 實時控制在確定時間內(nèi)對相應(yīng)事件作出響應(yīng) ——定時器中斷 作用2: 故障處理檢測到故障,需要第一時間處理 ——外部中斷 作用3: 數(shù)據(jù)傳輸不確定數(shù)據(jù)何時會來 ——串口中斷

    2024年02月08日
    瀏覽(66)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包