--- tags: 研華, UNO-220, Raspberry Pi, 樹梅派, 伴伴學 --- # 研華 EI-U220P 試用筆記 # 系統準備 * SD Image V1.0.4 由研華工程師提供,非代表官方 https://drive.google.com/drive/folders/1-yX9FjP10eZBAlfNDr2bar1XqtleUN_k * 官方github https://github.com/Advantech-IIoT/UNO-220-POE- https://github.com/advantechralph/uno-220 * 官方網站 https://www.advantech.tw/search/?q=UNO-220&st=support&sst=Driver # 問題總結 * 目前可提供apt安裝的功能為: cputempmon、gpio、rtc與uart * 官方不提供系統映像檔下載,僅於產品中附贈一片micro SD 開放系統的環境下開發很容易搞壞,建議仍須提供一個穩定版本以供系統回復 * 建議目前鎖定核心在5.4.x版本,對應的pi os為2021年1月的版本 以apt-mark hold的方式鎖定核心再更新系統或直接拿新版再降核心到5.4.x * 對maker而言tpm使用環境不明,建議若不需要可直接在/boot/config.txt內關閉 # 細部分析 ## GPIO * TCA9554 * 外掛I2C IO擴展晶片而非直接使用RPi的GPIO * 可用uno220gpio直接操作 * 原廠做法是kernel module,但github中有[device tree]((https://github.com/advantechralph/uno-220/tree/master/srcs/dtbo/pca9554))設定 * Pi官方亦有內建[device tree](https://github.com/raspberrypi/firmware/blob/master/boot/overlays/README#:~:text=TCA9539%20(16%20bit)-,tca9554,-Select%20the%20TI)可測試 dtoverlay=pca953x,tca9554, addr=27 ## UART * 直接連接RS232或485即可使用 * 綁定在/dev/ttyS0,可用uno220uartsend與uno220uartrecv ## TPM * [SLB9670](https://www.infineon.com/cms/en/product/security-smart-card-solutions/optiga-embedded-security-solutions/optiga-tpm/slb-9670vq2.0/) * TPM驅動程式已內建在 [Linux Kernel](https://github.com/torvalds/linux/blob/master/drivers/char/tpm/tpm_tis_spi_main.c)中,並直接透過device tree的方式掛載 * 驅動程式掛載成功後應可找到/dev/tpm0 ### 內建軟體: eltt2 https://github.com/advantechralph/uno-220/tree/master/srcs/root/rootAdvantech/usr/Advantech/eltt2 * 不存在已編譯好的程式,須從github下載編譯 * eltt2操作需要root權限 * 做任何動作前要先啟動TPM模組: sudo ./eltt2 -u ### 第三方軟體: tpm2-tools * github上有人提到可安裝tpm2-tools,通用的tpm工具 https://github.com/Advantech-IIoT/UNO-220-POE-/issues/1 ### issue * 因為5.10.17核心有問題,導致無法關機 https://forums.raspberrypi.com/viewtopic.php?t=303564 https://github.com/raspberrypi/linux/issues/4228 現在的[5.10.y](https://github.com/raspberrypi/linux/blob/rpi-5.10.y/drivers/char/tpm/tpm-chip.c#:~:text=int-,tpm_chip_start,-(struct%20tpm_chip%20*chip) ) (5.10.63)尚未放入patch修改,手動重建? 核心回到5.4.83版本的核心應該是可用的,考慮降版? ## RTC * [RX8010SJ](https://www5.epsondevice.com/en/products/rtc/rx8010sj.html) * PI kernel有[支援](https://github.com/raspberrypi/linux/blob/rpi-5.10.y/drivers/rtc/rtc-rx8010.c)但未編入i2c-rtc的device tree中,故仍須以核心模組載入 * 或許可簡單寫個dtb掛入[(ref1)](https://blog.csdn.net/kris_fei/article/details/73744123) [(ref2)](https://www.aiwalls.com/android%E8%BB%9F%E9%AB%94%E9%96%8B%E7%99%BC%E6%95%99%E5%AD%B8/11/29355.html) ### BUG * pi os 2021年5月版本的內建核心版本有[BUG](https://github.com/raspberrypi/linux/commit/8fa40ea367d6638e364dc12909607e969b44f76b),目前雖已修正但release版本尚未收錄 * 考慮解法: * 降核心版本到5.10.17或更低 sudo rpi-update 78c1429cc1d5a200d824d2629c3ceba4ba4617fe :::spoiler https://github.com/Hexxeh/rpi-firmware/commits?after=1597995e94e7ba3cd8866d249e6df1cf9a790e49+69 2021/02/22 commit: kernel: Bump to 5.10.17 ::: * 升核心版本到最新的5.10.y開發版 sudo rpi-update # 拆解官方APT提供的軟體 1. 將系統的套件來源加入研華提供的來源 :::spoiler > sudo nano /etc/apt/sources.list ``` deb [trusted=yes] https://advantechralph.github.io/uno-220/dpkg/ / ``` > sudo apt update ::: 2. 強制apt只下載檔案 :::spoiler > cd /tmp > mkdir test > cd test > apt download uno220* ``` ├── uno220config_0.1-2_armhf.deb ├── uno220cputempmon_0.1-1_armhf.deb ├── uno220gpio_0.1-3_armhf.deb ├── uno220gpiopins_0.1-1_armhf.deb ├── uno220rtc_0.1-4_armhf.deb ├── uno220tpm_0.1-1_armhf.deb └── uno220uart_0.1-3_armhf.deb ``` ::: 3. 用dpkg將檔案解開 :::spoiler > for filename in *; do dpkg -x $filename ${filename%%_*}; done > sudo rm *.deb > tree ``` ├── uno220config ├── uno220cputempmon │   └── usr │   └── Advantech │   └── cputempmon │   ├── cputempmon │   ├── cputempmon.c │   └── python │   ├── configs │   │   ├── __class__.py │   │   ├── __init__.py │   │   └── main.py │   ├── cputempmon.py │   ├── fork │   │   ├── __class__.py │   │   └── __init__.py │   ├── led │   │   ├── __function__.py │   │   └── __init__.py │   ├── syslog │   │   ├── __class__.py │   │   ├── __function__.py │   │   └── __init__.py │   └── temperature │   ├── __function__.py │   └── __init__.py ├── uno220gpio │   ├── etc │   │   ├── modules-load.d │   │   │   └── gpio-i2c.conf │   │   └── udev │   │   └── rules.d │   │   └── 50-i2c_gpio.rules │   └── usr │   └── sbin │   └── uno220gpio ├── uno220gpiopins ├── uno220rtc │   ├── etc │   │   ├── modules-load.d │   │   │   └── rtc-i2c.conf │   │   └── udev │   │   └── rules.d │   │   └── 50-i2c_rtc.rules │   ├── lib │   │   └── modules │   │   ├── 4.19.118-v7l+ │   │   │   └── extra │   │   │   └── rtc-rx8010.ko │   │   ├── 4.19.75-v7l+ │   │   │   └── extra │   │   │   └── rtc-rx8010.ko │   │   ├── 4.19.93-v7l+ │   │   │   └── extra │   │   │   └── rtc-rx8010.ko │   │   ├── 4.19.97-v7l+ │   │   │   └── extra │   │   │   └── rtc-rx8010.ko │   │   ├── 5.4.0-1015-raspi │   │   │   └── extra │   │   │   └── rtc-rx8010.ko │   │   ├── 5.4.51-v7l+ │   │   │   └── extra │   │   │   └── rtc-rx8010.ko │   │   ├── 5.4.72-v7l+ │   │   │   └── extra │   │   │   └── rtc-rx8010.ko │   │   ├── 5.4.79-v7l+ │   │   │   └── extra │   │   │   └── rtc-rx8010.ko │   │   └── 5.4.83-v7l+ │   │   └── extra │   │   └── rtc-rx8010.ko │   └── usr │   └── Advantech │   └── rtc │   ├── Makefile │   └── rtc-rx8010.c ├── uno220tpm └── uno220uart └── usr └── sbin ├── uno220uart ├── uno220uartrecv └── uno220uartsend ``` :::