---
tags: LINUX KERNEL, LKI
---
# Linux 在工業控制的應用
淺談即時系統的設計與實作
Copyright (C) 2016 [宅色夫](https://wiki.csie.ncku.edu.tw/User/jserv)

* 投影片: [Making Linux do Hard Real-time](https://www.slideshare.net/jserv/making-linux-do-hard-realtime)
* [直播錄影](https://www.youtube.com/watch?v=3XvnrHKTGgk) (含字幕)
搭配的影片
* https://www.youtube.com/watch?v=vA0k8i9VPNA
* https://www.youtube.com/watch?v=IfP6J9Bxt2w
## NOTE
* RPi 拿來做機械手臂是綽綽有餘的,不管是電腦視覺、通訊(內建無線網路晶片)或是運算,是有可能在其上建構出低成本機械手臂的,這也是我們今年預計執行的計畫,之後會有募款,歡迎有興趣的人共襄盛舉。
* 機械手臂之間需要相互通訊,Linux 在通訊方面及低耗方面都可以和商用的作業系統競爭。
* 我們要建構的是一個 Hard Real-Time System,一個小小的失誤很可能就會造成整個系統出錯,甚至是出人命的公共安全危機都有可能。
* 這也是為什麼這些機械設備要賣這麼貴的原因,因為很有可能要拿來打官司。
* Soft Real-Time 的例子:聲音和影像。沒寫好可能頂多造成品質不佳。
* Hard Real-Time 還應用在交通系統, Google 自走車。
* 去年 Linux Foundation 宣佈 Advance Real-Time Linux Project,目的在加強 Linux 在 Real-Time 方面的處理能力。
* 裡面出現 Altera, ARM, Intel , IBM, TI 等公司,但有趣的是連 Google 都出現在這個計畫中,顯示這個時代很大部份是由軟體公司去參與甚至主導工業控制相關設備的製造。
* Linux 要做到 Hard Real-Time 要想辦法降低 Latency,而不是只是讓速度變快而已。
* Real-Time Linux 在追求的目標是能做到一般 Linux 做的事,並且能夠有效降低 Latency。(反應時間小於 10 微秒)
* Real-Time 可以接受慢,但必須要可預測,不可忽快忽慢。
* 即便是商用的 Real-Time OS 也無法保證在每個實作議題都 Deterministic
* 以 printf() 來說,如果今天要印的是一個超級長,長達一百萬個字元的字串,假設印一個 "Hello World" 的時間是一個單位時間,要印出超長的字串有可能需要 20 萬倍的單位時間,也有可能只要一個單位時間。
* File I/O 的部份是 non-deterministic 的典型例子。
* buffering
* Linux kernel 開發過程主要透過 mailing-list 交流討論,基本上很少繪製示意圖,而是用文字去分析、提案,並往返討論下一個階段的 Linux 要做哪些功能,所以要參與開發 Linux 的話,要培養自己對英文文字的敏感度。
* Interrupt Handling & Context Switch
* Context Switch 基本上就是講狀態的轉換。
* Nested Interrupt
* Interrupt 都涉及了 Context 的保存
* 發生 Context Switch 的時候,我們要做很多事
* 很多的排程演算法都是需要 Clock 去做切割的
* Latency in Kernel
* 在 Real-Time 中,我們在意的是能不能在指定的時間內完成
* 而 Real-Time 中的 Latency 指的是 Interrupt 開始後,到重要的 task 可以被執行的這段時間
* 你對著你的智慧型手機螢幕用手往上滑就是觸發了一個 interrupt,到畫面真正動的這段時間就是 Latency
* Interrupt Handler
* Preemption 的重點就是讓 Priority 高的 Task 能夠優先被執行
* Full Preemptive
* 為了要達到 Full Preemptive,Spin Lock 在這裡是可以被打斷的。
* PREEMPT_RT
* Spin Lock 在此被當作 Mutex Lock
* Threading Interrupt
* 沒有改過的 Kernel 就叫 Vanilla Kernel (就像你買冰淇淋沒特殊想法時,就買到香草口味)
## Keywords
* [Linux CNC](https://www.youtube.com/watch?v=vA0k8i9VPNA), http://linuxcnc.org
* 3D Printer ([mails on LinuxCNC talking about the expired patent](https://sourceforge.net/p/emc/mailman/emc-users/?viewmonth=201207&viewday=26))
* [ROS](http://www.ros.org/), Movie: [Trajectory planning for 6 DOF Manipulator, using ROS (HUBO Arm)](https://www.youtube.com/watch?v=IfP6J9Bxt2w)
* ROS.Taipei FB [<台北社群連結>](https://www.facebook.com/groups/122728288090359/)
* ROS 2016年 八歲 [紀念影片](https://www.youtube.com/watch?v=Z70_3wMFO24)
* [Xenomai](https://xenomai.org/)
* real-time linux, 馬達轉動補償, 消除抖動
* Real Time
* Determinism
* 行為可預測
* Hard real-time
* missing deadline = system failure
* Soft real-time
* values degrade after deadline
* Linux 內建
* Linux已支援Soft real-time
* 例:影、音同步。
* Real-Time Linux Workshops
* [Programmable Logic Controller-PLC](https://zh.wikipedia.org/wiki/%E5%8F%AF%E7%BC%96%E7%A8%8B%E9%80%BB%E8%BE%91%E6%8E%A7%E5%88%B6%E5%99%A8)
* [Modbus](https://en.wikipedia.org/wiki/Modbus)
* OSADL
* Kernel Latency延遲
* Preemption
* Interrupt Handling
* Context Switch
* ISR ( Interrupt service routine )
* tickless
* [what is a tickless OS?](http://stackoverflow.com/questions/1265020/what-is-a-tickless-os)
* it's an OS that is immune to tickling.
* Preemptive Kernel
* SGI IRIX
* [It's a Unix System, I know This!](https://www.youtube.com/watch?v=dFUlAQZB9Ng)
* XFS
* OpenGL
* CFS
* https://en.wikipedia.org/wiki/Completely_Fair_Scheduler
* POSIX (The Portable Operating System Interface)
* https://en.wikipedia.org/wiki/POSIX
* posix 1003.1b - realtime extensions
* rcu preempt
* [Real-Time Preemption and RCU](https://lwn.net/Articles/128228/)
* [眾數](https://zh.wikipedia.org/zh-tw/%E4%BC%97%E6%95%B0_(%E6%95%B0%E5%AD%A6))
* PDF - probability density function
* [Muen Separation Kernel](https://muen.sk/): 數學上證明是可靠、開放原始碼的 microkernel 實作