1. 程式人生 > >基於tiny4412的Linux核心移植 --- 例項學習中斷背後的知識(1)

基於tiny4412的Linux核心移植 --- 例項學習中斷背後的知識(1)

 1 static const struct samsung_pin_ctrl *
 2 samsung_pinctrl_get_soc_data(struct samsung_pinctrl_drv_data *d,
 3                  struct platform_device *pdev)
 4 {
 5     int id;
 6     const struct of_device_id *match;
 7     struct device_node *node = pdev->dev.of_node;
 8     struct device_node *np;
9 const struct samsung_pin_bank_data *bdata; 10 const struct samsung_pin_ctrl *ctrl; 11 struct samsung_pin_bank *bank; 12 int i; 13 //這裡的id就是alias節點中pinctrl1 = "/[email protected]";中屬性名"pinctrl1"中的1 14 id = of_alias_get_id(node, "pinctrl"); 15 // node的compatiable的值是"samsung,exynos4x12-pinctrl",最終ctrl的指向的是exynos4x12_pin_ctrl[1]
16 /* 即: 17 { 18 .pin_banks = exynos4x12_pin_banks1, 19 .nr_banks = ARRAY_SIZE(exynos4x12_pin_banks1), 20 .eint_gpio_init = exynos_eint_gpio_init, // 其他普通的並且具備中斷功能的gpio 21 .eint_wkup_init = exynos_eint_wkup_init, // 這個pinctrl含有具備wakeup功能的gpio,其實就是XEINT0-31 22
.suspend = exynos_pinctrl_suspend, 23 .resume = exynos_pinctrl_resume, 24 }, 25 其中exynos4x12_pin_banks1的內容如下: 26 static const struct samsung_pin_bank_data exynos4x12_pin_banks1[] __initconst = { 27 EXYNOS_PIN_BANK_EINTG(7, 0x040, "gpk0", 0x08), 28 ... ... 29 EXYNOS_PIN_BANK_EINTG(8, 0x2E0, "gpm4", 0x34), 30 EXYNOS_PIN_BANK_EINTN(6, 0x120, "gpy0"), 31 ... ... 32 EXYNOS_PIN_BANK_EINTW(8, 0xC60, "gpx3", 0x0c), 33 }; 34 這個跟datasheet是對應的,可以自己看看 35 這裡關注這三個巨集: EXYNOS_PIN_BANK_EINTG 會將eint_type設定為EINT_TYPE_GPIO 36 EXYNOS_PIN_BANK_EINTN會將eint_type設定為EINT_TYPE_NONE 37 EXYNOS_PIN_BANK_EINTW會將eint_type設定為EINT_TYPE_WKUP 38 */ 39 match = of_match_node(samsung_pinctrl_dt_match, node); 40 ctrl = (struct samsung_pin_ctrl *)match->data + id; // id表示第幾個pinctrl 41 d->suspend = ctrl->suspend; 42 d->resume = ctrl->resume; 43 d->nr_banks = ctrl->nr_banks; // 含有幾組bank 44 d->pin_banks = devm_kcalloc(&pdev->dev, d->nr_banks, sizeof(*d->pin_banks), GFP_KERNEL); 45 bank = d->pin_banks; 46 bdata = ctrl->pin_banks; 47 for (i = 0; i < ctrl->nr_banks; ++i, ++bdata, ++bank) { 48 bank->type = bdata->type; 49 bank->pctl_offset = bdata->pctl_offset; 50 bank->nr_pins = bdata->nr_pins; // 這個bank含有的gpio的個數 51 bank->eint_func = bdata->eint_func; 52 bank->eint_type = bdata->eint_type; // 如 EINT_TYPE_GPIO、EINT_TYPE_NONE、EINT_TYPE_WKUP 53 bank->eint_mask = bdata->eint_mask; 54 bank->eint_offset = bdata->eint_offset; 55 bank->name = bdata->name; // 如"gpx3" 56 spin_lock_init(&bank->slock); 57 bank->drvdata = d; 58 bank->pin_base = d->nr_pins; // pin_base存放的是該bank中的第一個gpio的邏輯gpio號 59 d->nr_pins += bank->nr_pins; 60 } 61 for_each_child_of_node(node, np) { // 遍歷[email protected]的子節點,記錄含有"gpio-controller"屬性的節點 62 if (!of_find_property(np, "gpio-controller", NULL)) // 63 continue; 64 bank = d->pin_banks; 65 for (i = 0; i < d->nr_banks; ++i, ++bank) { 66 if (!strcmp(bank->name, np->name)) { 67 bank->of_node = np; // 獲得可以作為gpio控制器的子節點的device node 68 break; 69 } 70 } 71 } 72 d->pin_base = pin_base; // pin_base存放的是當前系統的gpio的總個數, d->pin_base存放的是當前pinctrl的第一個gpio的邏輯gpio號 73 pin_base += d->nr_pins; // d->nr_pins存放的是當前pinctrl含有的gpio的總個數 74 return ctrl; 75 }

相關推薦

基於tiny4412的Linux核心移植 --- 例項學習中斷背後知識(1)

1 static const struct samsung_pin_ctrl * 2 samsung_pinctrl_get_soc_data(struct samsung_pinctrl_drv_data *d, 3 struct platform_devic

web前端學習的基礎知識1

計算 當前位置 ons 前端開發 結果 軟件 ava pro pan Web前端是一個很新的職業,在國內乃至國際上真正開始受到重視的時間不超過5年。Web前端開發是從網頁制作演變而來的,名稱上有很明顯的時代特征。目前看來,這個一個就業前景很大的職業。 web前端的學習不能一

Tableau學習之基礎知識1

一、資料型別 1、字串(String) -字串通過單引號或者雙引號進行識別,例:“顛三倒四”。 -引號符號本身可以重複包含在字串中,例:“哈”心存僥倖”。 2、日期時間(DATE/DATETIME) -內容兩端放置#,例:#January 23,2018# 3、數值型 -

基於tiny4412的Linux核心移植(支援device tree)(三)

https://www.cnblogs.com/pengdonglin137/p/5146791.html 閱讀目錄(Content) 作者資訊 平臺簡介 注意 一、裝置樹反編譯 二、在u-boot列印資訊 三、開啟Linux核心啟動早期的log 四、在核心自解壓時dump記憶體 五、C

基於tiny4412的Linux核心移植(支援device tree)(二)

https://www.cnblogs.com/pengdonglin137/p/5143516.html 閱讀目錄(Content) 作者資訊 平臺簡介 步驟 回到頂部(go to top) 作者資訊 作者: 彭東林 郵箱:[email protected] QQ:4

基於tiny4412的Linux核心移植(支援device tree)(一)

https://www.cnblogs.com/pengdonglin137/p/5137941.html 閱讀目錄(Content) 作者資訊 平臺簡介 概述 步驟 回到頂部(go to top) 作者資訊 作者: 彭東林 郵箱:[email protected] Q

基於ARM7的ucLinux核心移植的proteus模擬

一、安裝proteus 從網站上下載Proteus-Pro-crack-ha-7.8sp2,然後進行安裝 二、嵌入式uClinux的實現 1.uClinux核心編譯 (1)安裝交叉編譯工具    安裝交叉編譯器arm-elf-tools-2003031

基於fl2440核心linux-3.0移植----新增adc驅動

三、配置核心 make menuconfig來配置核心,因為我用的核心是linux-3.0版本,其對ADC是預設選項的(不可選擇),   System Type  --->   -*- ADC common driver support  如果用的核心版本是不可選擇的,那個可以直接建立裝置

基於FS4412嵌入式系統移植(5) 核心移植

這一節中我們進行核心的移植,在課上同樣是按照實驗手冊進行試驗,同樣不知道是為什麼要那麼做,所以這裡就不細講了。實驗手冊中有一些錯誤,我自己改過來上傳共同學們參考。實驗手冊修正版下載地址:FS4412系統移植實驗手冊-核心移植 實驗中使用的核心版本是3.14.0,因為我的上傳

arm學習之linux核心移植分析

  linux核心可從 Kernel.org 上獲得,其中偶數版本為穩定版本。 linux核心程式碼結構:     kernel/   核心管理的核心程式碼(系統相關程式碼在arch/*/kernel中)     arch/     體系結構相關程式碼,每個目彔程式碼一個

爬蟲採集-基於webkit核心的客戶端Ghost.py [爬蟲例項]

http://rfyiamcool.blog.51cto.com/1030776/1287810 對與要時不時要抓取頁面的我們來說,是痛苦的~ 由於目前的Web開發中AJAX、Javascript、CSS的大量使用,一些網站上的重要資料是由Ajax或J

初識Socket通信:基於TCP和UDP協議學習網絡編程

auth bsp servers 客戶 name 本地 監聽 max ava 學習筆記: 1.基於TCP協議的Socket網絡編程:   (1)Socket類構造方法:在客戶端和服務器端建立連接     Socket s = new Socket(hostName,port

增強學習 | AlphaGo背後的秘密

cloud height uuid order 相對 ldm 開頭 dml pro “敢於嘗試,才有突破” 2017年5月27日,當今世界排名第一的中國棋手柯潔與AlphaGo 2.0的三局對戰落敗。該事件標誌著最新的人工智能技術在圍棋競技領域超越了人類智能,借此機

python核心編程學習過程中的一些記錄

ges 學習 核心編程 一些記錄 Python標準庫 NPU 保持 whereis .py 1P18.python標準庫位置(一般是string.py所在的位置,也可以whereis python找找)C:\Python27\Lib/usr/lib64/python2.6

例項學習ansible系列(3)Ansible執行命令常用Option

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

例項學習ansible系列(5)常用模組之copy

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

《python核心程式設計》學習筆記

第一本python基礎的書籍《python核心程式設計》,不管看不看得懂,都去看了,怕堅持不下來,沒做章節後面的題目,最多也只是對著章節裡的例子程式敲敲程式碼。把自己覺得重要的東西記下來。看完一遍可能也消化不了30%,看完一遍之後,我不大願意再重新去深究裡面看不懂的內容,希望再找幾本經典的pytho

基於Toppo滲透測試的學習筆記

基於Toppo滲透測試的學習筆記 靶機與kali均為NAT模式 kali ip為192.168.79.130 掃描 上nmap掃網段 發現靶機ip為192.168.79.147 掃埠發現22,80,111,42143 進80埠檢視,是一個部落格 沒有什麼完善的功

基於lampiao滲透測試的學習筆記

基於lampiao滲透測試的學習筆記 靶機lampiao與kali均為NAT模式 Kali IP為192.168.79.130 掃描網段,發現靶機ip為192.168.79.145 掃描埠,此處掃描1-65535所有,發現22,80和1898埠

stm32學習——中斷的優先順序設定

stm32的中斷具有不同的優先順序,可以使用NVIC(巢狀向量中斷控制器,Nested Vectored Interrupt Controller)來控制。 一、基本原理介紹 stm32的中斷優先順序分主副兩類(也稱為搶佔式優先順序和響應式優先順序),主優先順序是搶佔式的(為零表示最高)