MCU

  linux banner 2017 v21 710 5 1
學程簡介 課程大綱 課程預覽 專題實績
 
課程大綱

了解Linux這套作業系統並熟悉Linux系統的操作環境。
  

   Linux系統使用的虛擬機器架設與安裝
   Linux標準檔案系統架構剖析
   學習Linux常用指令與套件安裝
   搜尋與管理檔案的方式

   重新編譯與安裝Linux的核心
   嵌入式開發環境Sever架設

 

 講師實務經驗分享

這門課是為了進入嵌入式Linux開發的預備課程,畢竟要在Linux作業系統開發,對Linux這套作業系統的操作環境需要有一定的熟悉度,包含Linux系統架構、檔案系統結構、指令操作、vim編輯器、網路設定、常用伺服器建置等,打好這些基礎很重要,對接下來的學習也大有幫助。

 

了解嵌入式Linux的開發流程,包含Flash Layout設計、 Root File system建立等。
U-boot編譯與Open Source 移植技巧。
熟捻GNU Toolchain,包含Makefile、函式庫建立等。
  
 

     嵌入式 Linux 系統簡介
     Raspberry Pi 開發平台
     嵌入式 Linux 開發套件 BSP :
  (1)     Cross compiler
  ■       Boot loader
  (2)     Kernel
  (3)     Root filesystem
     Linux 檔案系統:
  (1)     MTD
     Open source 軟體移植:
  (1)     GCC
  (2)     Make
  (3)     Autotools

     產品應用:
  (1)    Media Player
   -     Porting MP3 Player
  (2)    NAS
   -     Porting SAMBA
  (3)    Wi-Fi Router
   -     hostapd, dhcpd, bridge, ...
  (4)    IP Camera
   -     Porting Streaming server
  (5)    HTTP Server & CGI
   -     BusyBox

 

 講師實務經驗分享

嵌入式Linux開發初期,必須先建立好主機端的開發環境與GNU Toolchain (包含交叉編譯器版本的選擇),通常剛入行者,不是不會寫程式,而是被這個環境搞死。和MCU相比,由於MCU開發者多半只要按[下一步] 就能裝好開發工具,對嵌入式Linux開發者,那是一種奢求。
上這門課可以了解整個嵌入式Linux的架構觀念與開發流程(這對於剛切入領域甚為重要),包含boot loader、Linux核心交叉編譯、板子Flash空間配置、Root File system產生等。Linux有很多開源軟體(Open Source),你會想要了解如何移植這些Open Source,不論是應用程式、函式庫,還是驅動程式。這時你會開始要去懂Makefile、Shared Library與Static Library、 kernel module等。也一定會遇到gcc或ld error等,要去了解問題所在,你會發現善用GNU Toolchain對於Debug或分析問題很有幫助。
有一個系統架構後,我們帶你進入實際產品應用,包含Wi-Fi Driver移植、USB Camera整合應用等,讓你更能想像該如何快速整合出一個嵌入式軟體架構。

 

熟悉在Linux下如何開發應用程式,包含多執緒程式、同步處理、行程通訊、與網路Socket程式。
  
 

     Bash Shell Script
     Regular expression: sed/awk
     Linux Development Tools
   -    GCC , GNU Make, Source Code Control
     Linux I/O
   -    read, write, ioctl, select…
         Blocking I/O Nonblocking I/O
     Linux Process
         fork, exec, wait...
     Linux IPC
   -     Pipe, Share Memory, Message Queue, Semaphore
     Linux Signal
     POSIX Thread &Thread Synchronization
     Linux Socket (1)
     Linux Socket (2)
     實作: mini HTTPD server
     HTTPS with openssl (optional)

 

 講師實務經驗分享

一般情況,通常整個嵌入式Linux系統的功能會有你自己寫的程式(可能也會去連結GPL或LGPL函式庫)並整合一些來自Open Source的程式。雖然Linux已存在很多的Open Source,但不可能永遠運氣這麼好都可以找到100%符合需求或規格的原始碼,所以你必須懂得如何修改成你要的功能。
不論自己寫或移植Open Source,這些都是基於Linux核心,所以一定會用到Linux核心的能力,包含裝置I/O請求、多行程、同步處理、行程通訊等。若你的系統需要TCP/IP通訊,還得懂Socket網路程式設計。想自己寫並且能改得動Open Source的程式,其實要具備Linux系統程式設計的能力,你可以透過閱讀"Linux Programming Manual",但是篇幅之廣泛且多元,如果對作業系統沒有一定的認知,不懂對系統呼叫(System call)所產生Linux背後的運作行為,很難了解真諦。因此若有經驗的人帶你看並且提供範例程式演練,對於學習會相當有幫助。


linux driver step4

了解如何撰寫Linux硬體驅動程式,配合Raspberry Pi 硬體實戰 GPIO Driver、Linux中斷處理、UART Driver、SPI Driver、I2C Driver、ADC Driver等Driver。

教你如何於Linux 下開發USB設備的驅動程式,你會了解USB硬體架構以及Linux USB的軟體框架。課程從USB HID 類別到USB Mass Storage 類別,由淺入深一步步帶你從實作中,學會USB開發方法與除錯技巧。此外,課程使用立肯科技USB邏輯分析儀器,揭開你看不到的USB的神秘面紗

  

     字元裝置Driver
     Linux Misc Device
     Linux GPIO 驅動程式 for LED, Button,Relay
     Linux 中斷註冊 & 中斷控制器HAL層架構
     Bottom Halves (Tasklet & Work Queue)
     進階字元Driver:
         Non-blocking I/O : 使用Wait Queue & completion 機制
         kernel 對UserSpace通知: SIGIO 信號非同步通知,call_usermodehelper()
     Kernel Timer List (Jiffies, timer ticks) for LED 閃爍
     Linux Serial port 驅動程式 for Bluetooth 模組
   Linux Platform Device & Platform Driver 架構
   Linux Device Tree
   Linux SPI Client驅動程式 for ADC Driver (MCP3008) 
   Linux IIO Driver(Linux Industrial I/O Subsystem)
   Linux SPI Bus master 驅動程式 for BCM2835 SPI controller
   Linux I2C Client驅動程式 for EEPROM
   Linux I2C Bus master驅動程式 for BCM2835 I2C controller
   Linux User Space Driver - BCM2835 C I/O Library

  Part I Fundamentals of USB 
  (1)     Introduction to USB Architecture 
  (2)     USB Data Flow Type 
  (3)     USB Communication protocol 
  (4)     USB Device Enumeration 
  (5)     Linux USB Driver Software Framework 
            Linux USB Host Controller Driver 
            Linux USB Class driver 
            Linux USB Core and API 
            Linux Urbs 
  (6)    USB Debug using USB Protocol Analyzer (使用立肯科技USB分析儀) 
  Part II Linux USB Driver實作 (Writing a USB Driver) 
  (1)     Lab: 透過USB Mouse控制Raspberry Pi GPIO 
  (2)     Lab應用: 透過USB鍵盤向控制Raspberry Pi GPIO 
  (3)     USB HID雙向通訊應用 
  (4)     Lab應用: SCSI command讀寫Flash Drive

 講師實務經驗分享

嵌入式Linux系統的另外一個主要工作就是加入新硬體,此時我們要能了解硬體界面、控制原理與晶片功能,更重要的是為它撰寫一隻Linux驅動程式。
涉及底層Linux驅動程式架構,對於Linux核心程心的掌握是一定要具備的!如何學好它?先要有一個實驗平台搭配硬體裝置,試著學會同步與非同步I/O控制、硬體中斷、I/O通訊等實際裝置驅動才有真正的感覺在設計驅動程式。此外,Linux驅動程式開發也是要準備好相關開發環境,才能開始編譯,所以通常沒概念者也難以切入。
Linux驅動程式是嵌入式系統的核心技術之一,但台灣很少有大學能夠開這種課程,因此初入職場的工程師,即使程度好的也僅僅只具觀念上與架構上的認知而已,鮮少有人真正有驅動程式的開發經驗,然而產業界對於RD研發工程師,有較高的職能要求。

此外,在業界有兩個很難入手技術,一個是RF無線通訊,另一個就是USB,因為都很複雜。在USB-IF (http://www.usb.org)上有很多公開文件,光是USB核心架構 (700多頁),而不同的硬體類別也有不同標準,例如USB Mouse、Keyboard 有HID標準、USB隨身碟也有USB Mass Storage標準,這麼多標準意謂你就要再去看文件,你才知道USB資料到底怎麼送,內容是長怎樣? 要真能消化它,豈能不勞心不勞力?我以14年USB韌體設計與Linux USB驅動程式開發經驗,教你如何快速在Linux下開發USB設備的驅動程式,你會了解USB硬體架構以及Linux 在USB的軟體框架。帶你實作從USB HID 類別到USB Mass Storage 類別。另外我會用艾鍗採購的USB 3.0邏輯分析儀器(價值新台幣82萬元,我從沒想過教學機構會如此瘋狂),教你學習USB動作流程與除錯技巧。 USB的複雜度比I2C、SPI、UART還要高,由於在公司裡會的人很少,因此會的人的身價也完全不同!

Keep improving!無論你想做什麼、熱情在哪裡,

人生最值得投入的Project,就是精進自己。

 
進階課程
ARM Boot Loader

 

延伸學習

 

課程諮詢