2019年1月9日 星期三

i.mx6 aplay ssi timeout issue.

Situation: when play a wav file using aplay, got this message:
--
fsl-ssi-dai 202c000.ssi: Timeout waiting TX FIFO filling
aplay: pcm_write:2011: write error: Input/output error
--
In the i.mx6 platform, SSI not work may cause from codec clock not exist (not init.), or dts description not correct, or other, in my case, it cause from SDMA firmware, if SDMA firmware too old, SSI does not work, and HDMI audio not work too.

Ccause from: SDMA firmware version not match or not exist.
#dmesg|grep sdma
[    3.595490] imx-sdma 20ec000.sdma: no iram assigned, using external mem
[    3.596311] imx-sdma 20ec000.sdma: loaded firmware 1.1

SDMA firmware ver 1.1 work in kernel 4.1.15 and early, but not work fine in 4.9.88 and later (4.14.78)

Solution: copy firmware file from kernel 4.9.88
#dmesg|grep sdma
[    3.595611] imx-sdma 20ec000.sdma: no iram assigned, using external mem
[    3.596440] imx-sdma 20ec000.sdma: loaded firmware 3.3

nxp's i.mx6 bsp kernel 4.14.87 (L4.14.87_1.0.0_ga, yocto 2.5.1) does not had firmware file, so i copied from 4.9.88 (L4.9.88_2.0.0_ga, yocto 2.4.2) :

# git clone git://source.codeaurora.org/external/imx/linux-imx.git linux-4.9.88-2.0.0-ga -b imx_4.9.88_2.0.0_ga
# cd linux-4.9.88-2.0.0-ga
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf imx_v6_v7_defconfig
#mkdir rootfs
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf INSTALL_MOD_PATH=rootfs firmware_install
# ls rootfs/lib/firmware/imx/sdma/sdma-imx*


2018年12月11日 星期二

RHEL initrd 裡加 driver

例如 USB storage, AHCI, NVMe 這些東西..
dracut -v -f --add-drivers "ahci libahci libata usb_storage uas nvme nvme_core" -f /boot/initramfs-$(uname -r).img $(uname -r)

不過我真的很不想再碰 RHEL, 不管是 distro 本身還是用它的人.

2018年11月14日 星期三

TPM2 on rhel 7

after install TPM2 software package ( tpm2-abrmd, tpm2-tss, tpm2-tools, tpm2-tss-devel ), added one file "20-tss.rules" into /etc/udev/rules.d/
/etc/udev/rules.d/20-tss.rules :
---
KERNEL=="tpm*", MODE=="0600", OWNER=="tss", GROUP=="tss"
---

then trigger the udev daemon:
udevadm control --reload-rules;udevadm trigger

enable tpm2-abrmd
systemctl enable tpm2-abrmd;systemctl start tpm2-abrmd

ps. CentOS 7 does not need to added 20-tss.rules.

2018年11月7日 星期三

DKMS for it87

這個 it87.c 我已經忘記是哪裡拿的, 我猜是從比 4.16 更後面的 kernel source 裡拆出來用, 個別編譯的. 首先的, 先安裝 dkms, 而且建議版本為 2.3-3ubuntu4, 2.3-3ubuntu3 這版確定有 mkdeb 的 bug. 而 2.3-3ubuntu4 的 .deb 我是直接拿 ubuntu 18.04 裡的直接裝在 16.04 用. 檔案下載找這裡:
http://launchpadlibrarian.net/349013047/dkms_2.3-3ubuntu4_all.deb
還有安裝一個必要套件 "debhelper"

在這列一下研究出來的 dkms.conf
---
MAKE="make -C src/ KERNELDIR=/lib/modules/${kernelver}/build"
DEST_MODULE_LOCATION="/kernel/drivers/hwmon"
CLEAN="make -C src/ clean"
BUILT_MODULE_NAME=it87
BUILT_MODULE_LOCATION=src/
PACKAGE_NAME=it87
PACKAGE_VERSION=1.0
REMAKE_INITRD=no
---

src/ 裡的檔案:
compat.h  it87.c  Makefile

Makefile內容:
---
TARGET          := $(shell uname -r)
KERNEL_MODULES  := /lib/modules/$(TARGET)
KERNEL_BUILD    := /usr/src/linux-headers-$(TARGET)
SYSTEM_MAP      := /boot/System.map-$(TARGET)
DRIVER := it87
MOD_SUBDIR = drivers/hwmon
obj-m   := $(patsubst %,%.o,$(DRIVER))
obj-ko  := $(patsubst %,%.ko,$(DRIVER))
MAKEFLAGS += --no-print-directory
.PHONY: all install modules modules_install clean
all: modules
modules clean:
        @$(MAKE) -C $(KERNEL_BUILD) M=$(CURDIR) $@
install: modules_install
modules_install:
        cp $(DRIVER).ko $(KERNEL_MODULES)/kernel/$(MOD_SUBDIR)
        depmod -a -F $(SYSTEM_MAP) $(TARGET)
---

檔案一定要丟到 /usr/src/ 裡, 以下是我的內容, 版本為 1.0, 必需要有版本號. 以上沒提的檔案通通都可以忽略不用丟進去:
/usr/src/it87-1.0/
├── dkms.conf
├── ITE_Register_map.csv
├── ITE_Register_map.pdf
├── README
├── src
│   ├── compat.h
│   ├── it87.c
│   └── Makefile
└── TODO

這是 DKMS 一般的安裝手冊. 但是按照這個手冊跑, 它只是會編譯 .ko 檔跟安裝而已, 而我要的是每一次 upgrade kernel 時都要自己去編自己安裝...
https://help.ubuntu.com/community/DKMS
於是我簡化一下製作流程:
dkms add -m it87 -v 1.0
dkms build -m it87 -v 1.0
dkms mkdeb -m it87 -v 1.0

然後, 安裝已產生好的 deb:
dpkg -i /var/lib/dkms/it87/1.0/deb/it87-dkms_1.0_amd64.deb

這樣就可以確保每次更改 kernel 時外加的 kernel driver 也一起跟著被編譯, 被加入 initrd 裡.

sandisk extreme A2 microSD

很白爛的測試, 測試開機花掉的時間. OS: ubuntu xfce4 16.04.5(LTS) kernel 4.15.0-38, rootfs 為 btrfs, zlib:3 壓縮, no swap, 硬體為 iBASE IB897, atom E3845 1.91Ghz, 2+2GiB DDR3L-1600.
transcend class-10 8G: 64.62秒
sandisk exterme A2 64G: 59.90秒.

2018年8月19日 星期日

Windows 10 傳統注音輸入法

這裡要講的不是加 registry 把隱藏的純注音輸入法叫出來, 那種方法會僅只能在桌面 app 使用, 像 win10 專用的 app 如 LINE 就無法使用 (至於僅只能在桌面 app 使用的輸入法有沒有關係呢....? 對我來講僅只有 LINE 受影響而已, 關係不大), 而我自己是用 yahoo 輸入法, 這個輸入法很好用, 但再也沒人維護的情況下, 終就不是長久的解決之道, 也就是說, 一直沒有我滿意的解決方案.

而這個問題直到我發現 PIME 輸入法可以切換輸入法碼表 (也就是選字順序) 開始有了點改變..

PIME 怎麼樣就不是本篇重點不再介紹 (安裝時預設沒有傳統注音, 要自己勾選), 這裡我只寫出個人的設定筆記, 以下沒列的就是我沒改.
一般設定 -> 打字行為:
預設狀態 -> 預設以英文模式啟動
行為設定 -> 使用 Shift 快速切換中英文
候選清單 -> 使用空白鍵作為候選清單換頁鍵
候選清單 -> 優先以聯想字詞排序候選清單 (X) (勾掉不要)
輸出設定 ->
輸出設定 -> 允許內建符號輸入方式連續輸入
其它設定 -> 隱藏不必要的提示訊息

界面外觀 -> 界面設定:
每列顯示候選字個數: 10
每頁顯示候選字個數: 10

碼表設定 -> 輸入法碼表:
輸入法碼表: 傳統注音


最後一個對我很重要, 因為預設是泰瑞注音, 選字順序有很多都跟傳統注音不同, 對一個傳統注音用的很習慣, 早就把選字表背的牢牢的我來說, 改選字順序跟叫我換一個輸入法幾乎沒有差別,

PIME 這個輸入法有個好處, 你的主要語系如果是英文, 也不受影響.

2018年7月7日 星期六

mount --bind in fstab

ex:
/dev/shm /tmp none defaults,bind 0 0

ubuntu 底下加速蠻多的, 也不需要另外多加上 systemd 的 service.