tiny4412學習(四)之移植linux-裝置樹(1)裝置樹基礎知識及GPIO中斷
#include <linux/init.h> #include <linux/module.h> #include <linux/platform_device.h> #include <linux/gpio.h> #include <linux/of.h> #include <linux/of_gpio.h> #include <linux/interrupt.h> typedef struct { int gpio; int irq; char name[20]; }int_demo_data_t; static irqreturn_t int_demo_isr(int irq, void *dev_id) { int_demo_data_t *data = dev_id; printk("%s enter, %s: gpio:%d, irq: %d\n", __func__, data->name, data->gpio, data->irq); return IRQ_HANDLED; } static int int_demo_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; int irq_gpio = -1; int irq = -1; int ret = 0; int i = 0; int_demo_data_t *data = NULL; printk("%s enter.\n", __func__); if (!dev->of_node) { dev_err(dev, "no platform data.\n"); goto err1; } data = devm_kmalloc(dev, sizeof(*data)*4, GFP_KERNEL); if (!data) { dev_err(dev, "no memory.\n"); goto err0; } #if 1 for (i = 3; i >= 0; i--) { sprintf(data[i].name, "tiny4412,int_gpio%d", i+1); #else for (i = 0; i < 4; i++) { #endif irq_gpio = of_get_named_gpio(dev->of_node, data[i].name, 0);//通過名字獲取gpio if (irq_gpio < 0) { dev_err(dev, "Looking up %s property in node %s failed %d\n", data[i].name, dev->of_node->full_name, irq_gpio); goto err1; } data[i].gpio = irq_gpio; irq = gpio_to_irq(irq_gpio); //將gpio轉換成對應的中斷號 if (irq < 0) { dev_err(dev, "Unable to get irq number for GPIO %d, error %d\n", irq_gpio, irq); goto err1; } data[i].irq = irq; printk("%s: gpio: %d ---> irq (%d)\n", __func__, irq_gpio, irq); //註冊中斷 ret = devm_request_any_context_irq(dev, irq, int_demo_isr, IRQF_TRIGGER_FALLING, data[i].name, data+i); if (ret < 0) { dev_err(dev, "Unable to claim irq %d; error %d\n", irq, ret); goto err1; } } return 0; err1: devm_kfree(dev, data); err0: return -EINVAL; } static int int_demo_remove(struct platform_device *pdev) { printk("%s enter.\n", __func__); return 0; } static const struct of_device_id int_demo_dt_ids[] = { { .compatible = "tiny4412,interrupt_demo", }, {}, }; MODULE_DEVICE_TABLE(of, int_demo_dt_ids); static struct platform_driver int_demo_driver = { .driver = { .name = "interrupt_demo", .of_match_table = of_match_ptr(int_demo_dt_ids), }, .probe = int_demo_probe, .remove = int_demo_remove, }; static int __init int_demo_init(void) { int ret; ret = platform_driver_register(&int_demo_driver); if (ret) printk(KERN_ERR "int demo: probe failed: %d\n", ret); return ret; } module_init(int_demo_init); static void __exit int_demo_exit(void) { platform_driver_unregister(&int_demo_driver); } module_exit(int_demo_exit); MODULE_LICENSE("GPL");
編譯驅動
相關推薦
tiny4412學習(四)之移植linux-裝置樹(1)裝置樹基礎知識及GPIO中斷
#include <linux/init.h> #include <linux/module.h> #include <linux/platform_device.h> #include <linux/gpio.h> #include <linux/of.
tiny4412學習(三)之移植linux-4.x驅動(1)支援網絡卡驅動
一、思路 上一節我們通過DNW將核心、檔案系統、裝置樹檔案燒入到記憶體中,並使用bootm啟動核心:bootm0x40600000 0x41000000 0x42000000。因為此時核心並沒有S
React學習筆記之react進階篇(1)
ava 不能 success 字符 style 使用 -s 布爾 一次 1.組件的state(狀態) 1.選擇合適的state state所代表的一個組件UI呈現的完整狀態集又可以分成兩類數據:用作渲染組件時使用到的數據的來源以及用作組件UI展現形式的判斷依據。 示
Java學習筆記之抽象類基本概念(1)
1、基本概念 抽象類:包含一個抽象方法的類 抽象方法:用abstract關鍵字宣告,且只有方法名沒有方法體的方法。 1.1 抽象類的定義和使用規則 包含了一個抽象方法的類必須是抽象類 抽象類和抽象方法都要用abstract關鍵字宣告 抽象方法只需要宣告不用實現
Linux鞏固記錄(1) J2EE開發環境搭建及網絡配置
version 環境 com sco 由於 lin spa node 開發環境 由於要近期使用hadoop等進行相關任務執行,操作linux時候就多了 以前只在linux上配置J2EE項目執行環境,無非配置下jdk,部署tomcat,再通過docker或者jenkins自動
Spring AOP學習筆記(1):AOP基礎知識
一、 使用AOP前的經驗 在接觸AOP這種程式設計思想之前,我也有好多的編碼經歷,將業務邏輯和日誌、測試和驗證等其他需求放在一起的,這簡直是痛苦死了,每寫一個方法都得重複好多程式碼,而且這些程式碼有好多是類似的,但是不得不重寫,因為當時還是菜鳥(現在也是菜鳥),比如之前同組
Linux文件系統學習(二)之重要數據結構(1)
class targe html evel 系統結構 會有 集合 spec lan 轉載自:https://blog.csdn.net/wudongxu/article/details/6436894 《Linux內核設計與實現》 http://www.ibm.com/
關於linux的進階命令用法之來自noob的小結(1)
linux命令 寫的很雜,先這樣,下午再來細細排版與貼圖umask 查詢當前shell的mask值umask xxx 可以設置當前目錄的mask值vim .bashrc 可以編輯當前用戶shell的mask值並且永久保存,source 後生效-S 可以用rwx顯示出當前的去掉的
java基礎知識學習--------之枚舉類型(1)
blog 枚舉類型 csdn 相同 名稱 枚舉類 java string pac 枚舉類型的概念: 1 /** 2 * 目的:枚舉類型 3 * @author chenyanlong 4 * 日期:2017/10/22 5 * 網址:http://blo
機器學習--DIY筆記與感悟--②決策樹(1)
lis ... 編寫代碼 需要 總結 初始化 對數 三分 xtend 在完成了K臨近之後,今天我們開始下一個算法--->決策樹算法。 一、決策樹基礎知識 如果突然問你"有一個陌生人叫X,Ta今天需要帶傘嗎?", 你一定會覺得這個問題就像告訴你"兩千米外有一個超市,
《Linux學習並不難》用戶管理(1):Linux用戶賬戶分類
Linux 用戶 9.1 《Linux學習並不難》用戶管理(1):Linux用戶賬戶分類用戶賬戶在Linux系統中是分角色的,由於角色不同,每個用戶的權限和所能執行的工作任務也不同。在實際的管理中,用戶的角色是通過UID(用戶ID號)來標識的,每個用戶的UID都是不同的。 在Linux系統中有三大類
linux RedHat7LNMP構架搭建論壇之源碼安裝Nginx(1)
lldb config 14. 安裝nginx c-c red ase 更改 鏈接 首先掛載鏡像配置yum源 在使用源碼安裝服務之前,首先要讓主機具備源碼安裝的編譯程序源碼的環境。#yum install -y apr autoconf automake bison bzi
React學習筆記之react進階篇(2)
-s state ops category strong tro 服務 ive 周期 2.組件與服務器通信 組件的生命周期分為三個階段:掛載階段->更新階段->卸載階段,本文主要集中講述掛載和更新階段組件如何和服務器進行通信。 1.組件掛載階段通信
在Ubuntu上學習OpenStack之九:網絡(計算)節點上網絡補充配置
分享 ini onf stack -a ubunt con openstac bubuko (註意:前面已經為計算+網絡節點配置了兩塊網卡eth0和eth1) v 執行如下命令: sudo ovs-vsctl add-br br-eth1 sudo ovs-vsctl ad
mybatis學習筆記之——連線SQL server資料庫(IDEA)
我們新建一個普通的專案,File --> New --> Project -->Java --> Java EE。然後新建專案即可。 專案完成後我們新建一個conf資料夾,用來存放配置資訊,新建一個lib資料夾,用來存放jar包。 我們將mybatis的jar包,連線
linux系統管理(1)之 核心編譯選項檢視
三個方法 proc檔案系統 ubunut debain 紅帽等 proc檔案系統 /proc/config.gz This file shows you the compile-time configuration settings for the kernel (gzip compr
C++學習之迴圈和關係表示式(1)
在c語言中我這部分還算學習的挺好,所以這部分我只新增一些我不太懂的點: 1.通常,cout在顯示bool值之前將它們轉換為int,但是在前面使用cout.setf(ios:boolalpha)函式呼叫設定了一個標記,該標記命令cout顯示true和false,而不是1和0;
學習React之旅 初學入門篇 (一)
自身情況 我之前自己學過一些vue,由於現在公司的這個專案是安卓和react native混合開發的,然後我負責的部分也已經完成了,現在就想從react開始學起,把基礎打牢。我的學習計劃路程是:react ==》 react-router-dom ==》
訊號與系統學習難點之衝激響應h(t)=0對系統因果性的判定
當我們學習到訊號與系統的線性時不變系統這一章節時,發現對突然出現的單位衝激響應h(t) 有所疑惑,更疑惑的是“當滿足h(t)=0(t<0),系統就具有因果性”這句話,那麼接下我就 以我的經歷“從惑到明”來解釋它! “當滿足h(t)=0(t<0),系統
機器學習實戰——1.2決策樹(1)
宣告:參考書目《機器學習實戰》作者: Peter Harrington 出版社: 人民郵電出版社 譯者: 李銳 / 李鵬 / 曲亞東 / 王斌 宣告:參考書目《統計學習方法》作者: 李航 出版社: 清華大學出版社 ISBN: 9787302275954