【前言】
首先感謝深圳市米爾科技有限公司舉辦的此次活動並予以本人蔘加此次活動的機會,以往接觸過嵌入式,但那都是皮毛,最多刷個系統之類的,能夠說對於嵌入式系統開發這件事情是至關很是陌生的,此次活動爲我提供了一個很是好的入門和學習嵌入式的機會,同時在社區及技術羣內也獲得了很大的幫助和鼓勵,這也是我不斷前行和進步的動力,在這裏一併致謝了。下面我附上本次學習心得及過程。
米爾MYS-6ULX單板機介紹:
MYS-6ULX是一款以NXP i.MX6UL/i.MX6ULL處理器,Cortex-A7內核爲核心的嵌入式單板機,主頻爲528MHz。配備了256MB高速DDR三、256M NAND Flash,集成了以太網、WIFI、LCD接口、USB OTG、USB Host、TF Card、用戶按鍵、用戶LED、IO擴展接口等功能。
詳細介紹:[http://www.myir-tech.com/product/mys_6ulx.htm]
收到米爾的板子,先上圖:
【概述】
計劃經過本次項目實現一些家庭電器設備控制,進現實現遠程監控;
1,實現計時控制插排包括,計時,延時,定時,倒計時,週期開通和關閉功能;
2,實現PWM調控燈光或者風扇調速;
3,實現紅外遙控控制空調。node
【初步解析example之GPIO】linux
我作的項目是直接經過開發板的gpio控制插排,從而控制用電設備,有兩種狀態,一個是開關狀態,另一個是pwm控制燈光和風扇轉速等, 網上查閱了不少資料,終於明白了嵌入式linux的初始化開發板的資源的方式,經過Device Tree來驅動和加載設備的,至關於咱們mcu設備初始化的時鐘,io,uart等。下面咱們經過簡單的幾步來理解是如何實現的我作的項目是直接經過開發板的gpio控制插排,從而控制用電設備,有兩種狀態,一個是開關狀態,另一個是pwm控制燈光和風扇轉速等, 網上查閱了不少資料,終於明白了嵌入式linux的初始化開發板的資源的方式,經過Device Tree來驅動和加載設備的,至關於咱們mcu設備初始化的時鐘,io,uart等。下面咱們經過簡單的幾步來理解是如何實現的
ios
1. 開始以前,先打開一個上傳到開發板的可執行命令 gpio_led ,以下圖所示web
咱們看到帶參數的,再看看源代碼是怎麼處理參數的
websocket
到這裏咱們大概明白了,就是經過參數來控制gpio的,那麼咱們是否是隨標敲一個參數就能控制任意gpio了?顯然是不可能的(也有湊巧的機率)
那麼是怎麼實現這個參數的呢?簡單說就是這些cpu,gpio,uart等資源都放在了dts文件裏,最後編譯成dtb,由uboot引導程序初始化並以參數方式提交給kernel,這就是爲什麼經過uart(usb-ttl)能夠看到系統啓動加載的一些信息。socket
二、系統經過dts文件來維護device tree的,咱們經過米爾提供的開發手冊找到該文件,以下圖所示函數
咱們只需找到相應的dts文件,打開看到學習
include 文件指向另一個dts文件,找到該文件並打開ui
閱覽打開的文件發現了,gpio_leds,gpio_key和本次相關的資源,其餘資源略。
下圖的節點及定義,簡單的說一下結構
a) leds表示節點名稱
b) compatible屬性用於of_find_node_compatible函數獲取設備節點用的,這個函數的經過」gpio-leds「字符串去遍歷device tree,查找匹配的設備節點
c) pinctrl-0 = <&pinctrl_leds>主要用於說明設備硬件資源在哪裏獲取,好比這裏就是到iomuxc裏面去獲取IO資源
還有gpios這個很容易看懂了。
3d
iomuxc設備節點裏面定義了CPU全部的IO資源,包括每一個IO口的初始化狀態都定義好了,好比leds,key
5通過3,4兩步建立所需功能的節點,而後交叉編譯dts=》dtb,下載到開發板,這些步驟參考開發手冊。
通過以上的操做,基本完成了設備的驅動的開發。下一步開始本次項目,智能插排,按照上述辦法先完成驅動。而後是控制命令,最後是gui(這部分對我來講比較難,我不會qt,可能會使用webserver,基於websocket控制,前一陣子參加雙核大賽研究了一陣子websocket)。
後續繼續更新博客,敬請關注,有同道者歡迎提出建議。
聲明:本文首發在與非網社區 NXP論壇›競技場›恩智浦/米爾i.MX6ULL競賽專區.›做者論壇ID:leo121_3006061