Design Consulting services

Accept embedded system design now.

include MCU/Embedded Linux/Android/Windows Embedded Compact services.

please visit www.uwingstech.com if you have any request

And seeking an offer, online resume

廣告

Note: Mulitple github account on Linux with ssh

1. Generation account key-pair by ssh-keygen
$ssh-keygen -t rsa -b 4096 -C "test1@test.com" -f test1
$ssh-keygen -t rsa -b 4096 -C "test2@test.com" -f test2
Will got test1/test1.pub and test2/test2.pub, total 4 files for two key-pair

test1.pub & test2.pub are public key for repositories setting on github.com
test1 & test2 are your private key, copy into~/.ssh/ folder
and run ssh-add ~/.ssh/test1 and ssh-add ~/.ssh/test2

2. create configfile under ~/.ssh
vim ~/.ssh/config, then add the below
Host github-test1
HostName github.com
User git
IdentityFile /home/your_account/.ssh/test1

Host github-test2
HostName github.com
User git
IdentityFile /home/your_account/.ssh/test2

3. git clone your repositories
git clone git@github.com:test1/test1.git
git clone git@github.com:test2/test2.git

then to change url of repository under work folder
git remote set-url origin git@github-test1:test1/test1.git
and
git remote set-url origin git@github-test2:test2/test2.git

below my backup settings
github_m

Note: Android x86 Bootloader

qummiboot 是一個EFI 的 Bootloader, 當初發展出來是因為Microsoft 主導了Windows 8/UEFI SecureBoot的需要, 透過 UEFI Shim 方法去做自我簽證

而Intel 在力推Android on Intel(ia32/amd64)時期, 就根據原本的gummboot 改寫了一個版本去吻合Android 的需要,它內部除了Shim, 還做了BCB(Boot Control Block) 傳遞替後面的Recovery/Bootloader 交換資料,並且也做了一個BIOS Update 的機制,實際上根據他的內容它可以作到更新Radio Firmware 也可以作到更新EC(embedded controller) 等其他需要更新的內容, 不由得想到之前工作被交代的任務是在Kernel 增加一個interface 跟EC配合的更新版本

不過後來Intel 重新做了一個叫做 KernelFlinger,實作了後來需要的A/B Update, DM-Verify , TEE-OS Access與幫助生產的Blobstore 等新增功能.

gummiboot 目前在Freedesktop 的版本已經被放棄,因為被改稱systemd-boot了, 但是Redhat 仍然有一個自己的版本

不過gummiboot 對我來說仍然是一個極具參考價值得版本, 因為在許多嵌入的x86系統上不見得只有上面提的的OS,  gummiboot 相對簡單的程式碼, 方便用來當做開發其他OS用的Bootloader 基礎

ref.
https://en.altlinux.org/UEFI_SecureBoot_mini-HOWTO
https://github.com/rhboot/shim
https://github.com/android-ia/platform_external_gummiboot
https://github.com/intel/kernelflinger
https://cgit.freedesktop.org/gummiboot/
https://github.com/todorez/tummiboot
https://github.com/android-ia/hardware_intel_efi_kernelflinger
https://www.phoronix.com/scan.php?page=news_item&px=Gummiboot-Is-Dead

 

Note: Android IA – Apollo lake/Up Board

currently Android-IA team provide Android BSP
ref. https://github.com/android-ia/manifest/wiki
see https://github.com/android-ia/manifest/commit/b1df5863dcc65cbb0de78453e1e124f5f10f78fb

<?xml version="1.0" encoding="UTF-8"?>
<manifest>

  <remote  name="aosp"
           fetch="https://android.googlesource.com" />
  <default revision="refs/tags/android-8.1.0_r7"
           remote="aosp"
           sync-j="4" />

  <remote  name="github"
           fetch="https://github.com/android-ia/" />

  <remote name="kernelorg" fetch="https://git.kernel.org/" />

  <remote  name="graphics"
           fetch="https://github.com/01org/" />

  <remote  name="intel"
           fetch="https://github.com/intel" />

  <remote  name="trusty-ia"
           fetch="https://github.com/trusty-ia" />

  <include name="include/aosp_vanilla.xml" />
  <include name="include/remove-android_ia.xml" />
  <include name="include/bsp-android_ia.xml" />

</manifest>

可以看到 graphics driver 用的是 01org上的mesa,
verify boot 用的是trusty-ia
然後透過嵌套讓 remove-android_ia.xml 移掉 aosp 上面不需要的 repositories , 透過bsp-android_ia.xml 加進去需要的

ref. Intel 官方 Demo video https://software.intel.com/en-us/videos/up-squared-bring-up-bkm-with-android-omr1 , the Demo video from Intel SSG OTC and the BSPs need NDA
SSG OTC (Intel Software and Services Group Open Source Technology Center)

Note: Use an xHCI debug port for Kernel debugging on Windows/Linux

xHCI 在Intel 平台已經是標準內建的功能,Intel 早期在EHCI 就有加入一個Debug Port 功能,但是基於 EHCI 的Host<->Client半雙工模式設計,它必須透過外部一個USB Device 去做Host/Target的資料交換,又EHCI Controller 上只有 Port 0 可以提供這個功能,變成硬體設計與使用設定上都相對複雜,所以只有相對少數的工程師會去使用這個功能,通常是開發Windows Kernel Driver 的才會需要。

而Intel 在發展XHCI 時,因為USB3 已經是TX/RX分離,所以這次規格變成可以直接兩個Host Port 對接, 一條USB 3 的Debug Cable 實際上就是把 USB 2.0 的 D+/D- 跟Power(VBUS) 斷掉, 然後把USB 3的SS TX/SS RX 交換而已
enter image description here

所以現在開發UEFI/Windows/Linux Kernel mode driver 都支援透過xHCI 的這個內建功能去做,不過有些外接的xHCI Host Controller 並沒有實作這個 DbC (Debug Capability Class)

Microsoft 關於Kernel Debug 的設定
Intel 關於Linux 的Kernel mode 設定 — 這已經併入Vanilla Kernel stream 的文件目錄了,可以看到Linux 下就是把它當tty用

Note: Vendor ACPI Driver on Windows

之前寫了一些 ACPI Driver 相關的紀錄, 最近看到USB Type C connector for Windows 10 如果不做PD State Machine,下面也需要ACPI Driver 去協調 MCU/EC 所以整理一下手上有的資料 順便重新整理一下網路上很多消失的檔案

ACPIDriver Vista — 這個是Microsoft 最早提供的文件,不過根據實際經驗應該Windows XP 就支援這些功能
ACPI in Vista — 這是早期 WinHEC 2006 的 Presatations
BIOS implement of UCSI — Intel 這是Intel 講如何實作USB Type C Connector System Interface

older WDM/DDK Sample from Windows 2000

這邊提供實際原始碼的實作內容

Older WDM driver implement – 實作了Customer GPIO Button/Indicator LED, 應該是 Intel 用來Demo MID (Mobile Internal Device)做的
Current WDF Driver implement for UCSI - 這就是Microsoft 實作UCSI 的參考Driver了 可以搭配Intel 文件跟 Microsoft 網站資料一起看

下面是想更了解UCSI可以參考的資料
https://www.usb.org/developers/presentations/  — 2017 USB Developer Days  in Taipei

Update:
Linux 下的實作也有 Intel 提交的標準
https://github.com/torvalds/linux/tree/master/drivers/usb/typec/ucsi
所以盡可能透過在使用ACPI/ASL implement 去做這個功能,這樣Windows/Linux 下都有inbox driver 不用另外提供特殊的 customization driver
不過要透過標準UCSI 有一個地方考慮的是成本, 標準UCSI 界面是由 ACPI + EC + PD Controller 構成的,需要付出比較多的成本,目前已經有一個新的方式透過提供軟體的TCPM 取代PD Controller 如下圖 這個架構仍然需要一個MCU 去控制Type C 的界面行為, 系統透過I2C之類的下PD Policy 的行為給MCU

TCPCx

ref. https://www.mail-archive.com/linux-usb@vger.kernel.org/msg92179.html

Note: Treble

從Android Oreo, Google 透過Treble 機制去解耦合HAL 跟Framework的相依性,希望借此機制去解決Android 碎片化跟安全性的問題。雖然目前還看不出有達成他想要的目的,但是真的有達成更進一步緊縮Android 裝置的控制權,不過最主要的原因實際是控制了GMS,跟Microsoft 藉由Office 控制桌面作業系統一個道理,是終端使用者離不開這些軟體與服務進而綁住供應商。
下圖是Android 的HAL 跟Framework的連結方式從1的傳統Legacy HAL 到2,3和4的Treble 實作方式,2 and 3的方法是為了提供舊的裝置單純升級到Android Oreo 提供的方法,如果裝置一開始就是Android Oreo 必須使用4 的方法

HIDL 是透過IPC 解藕合HAL與Framework 等於可以動態升級,不再是編譯時期繫結(Bind)。

而除了上述透過HIDL去分離界面外,再Kernel跟Disk Paratitions也做了規範,強制引入了/vendor or /odm paratitions 從/system or /boot 去分離HAL實作 而且也透過Kernel 4.4 and Later 去加入device tree overlays功能,讓廠商達成同一個 /boot and /system 去適應不同裝置的可能性

Update:
而Treble 的這種解藕合方式實際上有很大可能是為了新的Fuchsia OS (Kernel : Zircon)鋪路,透過IPC溝通系統內的所有組件,是micro kernel 的一個基本特徵, 而且透過這種方式後很可能Android P 之後會實現透過OTA切換 Linux/Zircon kernel