2020年3月25日 星期三

Ducky 87 鍵盤改 Teensy 2.0 控制器

動機

幾個月中,改了3把鍵盤加裝 TrackPoint 模組,有一些心得。第一把的 Ducky 87 鍵盤是向網友買的,不知怎的,使用一個 USB HUB 連接鍵盤和 TrackPoint 模組,滑鼠的移動就會不順。測了好久,確定無法使用 HUB 來合併兩者的訊號。不得已只好再鑽一個洞,另外接出 TrackPoint 模組的信號。

在計劃改鍵盤時,因為看到網路有人用 Teensy 2.0 來連接 TrackPoint 模組,所以同時也買了 Teensy 2.0 板子。但後來使用 PS/2 to USB converter 可以順利連接,而且便宜很多,體積又很小,Teensy 2.0 就擱在一邊。改了3把鍵盤之後,平常工作有鍵盤可以使用,就回過頭來把那支無法內藏 HUB 的 Ducky 87 鍵盤的控制器改成 Teensy 2.0。


參考網頁

 kira3628800 的介紹文章: 使用QMK來搞一把鍵盤吧!QMK加上小紅點吧!
QMK 的說明: QMK FirmwareKeyboards with AVR Processors
要連接 TrackPoint 模組,需要再參考: PS/2 Mouse SupportPS/2 Mouse - QMK

MCU 控制板的選擇,可參考
Pro Micro vs. Teensy 2.0 review

實作參考
Connecting thinkpad trackpoint mouse+buttons to teensy 2

鍵盤矩陣

首先把原來的控制 IC 整個拆掉,因為解焊太麻煩,也沒這技術,就直接用鋸子破壞掉。參見下面的相片,左邊 DIP 開關上方的 IC 整個被挖掉。

因為只有 87 鍵,電路稍做修改,可以少用一支 pin,不然 Teensy 2.0 的接腳不夠用。配合 qmk 程式的設定,接腳編號由 0 開始。


鍵盤矩陣總共需要的控制信號數為 8+12=20,另外想用1個信號控制 Caps Lock 以及 2個信號連接 Trackpoint 的 dat 和 clk,所以總共要 23個控制接腳。所以必須使用有 25個IO的 Teensy 2.0,無法使用 Arduino Pro Micro,Pro Micro 標準是 18 個 IO,就算可以把 RX/TX 改成 IO,也只有 20pin。雖然 Pro Micro 便宜多了,有更多人在賣,但也只好放棄。

在下面這個連結有一些相關的討論串,看來只能選擇較貴的 Teensy 2.0。

Arduino vs Teensy? - Geekhack
Most open firmware is written for the Teensy (2.0 mainly), but the Arduino / Pro Micro (cheap clone - quality may vary) has exactly the same chip (ATMega32u4 - worth checking on Arduino/Pro Micro boards). Its pretty easy to make a keyboard with the Arduino software, as its one of the examples.

關於連接 Trackpoint 的說明需參見 PS/2 Mouse - QMK,最好是使用 USART mode。

另外,Caps Lock LED 的控制: LED Control

Teensy 2.0 開發板的接腳。


Teensy 與 Trackpoint module 之間的接線。使用 USART mode
CLK: PD5 (XCK1)
DAT: PD2 (下圖的 PD4,經測試之後,好像是不能正常工作的。)另外,因為使用相同的工作電壓,不一定需要 4.7K 的 pull high 電阻即可運作。

PIN I/O 對應

鍵盤矩陣的 PIN 對應
ROW
PIN

ROW
PIN

COL
PIN

COL
PIN

COL
PIN
0
B0

4
D1

0
E6

4
F5

8
B5
1
B1

5
D3

1
F0

5
F6

9
B4
2
B2

6
C6

2
F1

6
F7

10
D7
3
B3

7
C7

3
F4

7
B6

11
D4

其他的 PIN 對應
PIN
說明
D6
Caps Lock,Teensy 2.0 開發板的 LED 指示燈
D5
TrackPoint 控制模組 PS2 界面的 CLK
D2
TrackPoint 控制模組 PS2 界面的 DAT

總共使用 23 個 PIN IO

直接把 Teensy 2.0 的板子用雙面膠黏在鍵盤的 PCB 上,旁邊黑色膠帶包著的是接 Trackpoint 模組的電容電阻。


電路板黏貼的位置和線路整理,要配合原來鍵盤的空間,才能將鍵盤密合的組裝。

上網找了一個適用的手托,嵌入滑鼠的按鍵,看起來稍有整體感。

Firmware 編譯環境

docker-compose.yml
# Teensy development environment
qmk_dev:
  build: .
  working_dir: /work
  volumes:
    - "./work:/work"
    - "./work:/home/ajax"
  stdin_open: true
  tty: true
  user: 1000:1000
  entrypoint: /bin/bash

Dockerfile

# ref: https://docs.qmk.fm/#/newbs_getting_started
FROM ubuntu:18.04
#FROM ubuntu:16.04

RUN apt-get -y update

RUN apt-get -y install build-essential gcc-avr binutils-avr avr-libc && \
    apt-get -y install git python3 python3-pip

RUN python3 -m pip install --upgrade pip && \
    python3 -m pip install qmk

# RUN yes | qmk setup

RUN groupadd ajax -g 1000 && \
    useradd -g 1000 -u 1000 ajax

CMD ["/bin/bash"]

docker run shell

echo "set prompt command: "
echo "export PS1='\[\033]0;\u@\h:\w\007\]\[\033[01;31m\]qmk_dev@docker\[\033[01;34m\] \w \$\[\033[00m\] '"

docker-compose -f docker-compose.yml run --rm qmk_dev


編譯
qmk config user.keyboard=Teensy_tst
qmk config user.keymap=default qmk compile

編譯好,再在 windows 下用 loader 將產生的 firmware 下載到開發板上。

2020年3月19日 星期四

ikbc Table E401 鍵盤 + 小紅點 (Trackpoint) 指標 -- 完成

機械鍵盤的手感遠勝於 Thinkpad 的薄膜鍵盤,而 trackpoint 卻是寫程式的利器,若能在機械鍵盤上加裝 trackpoint (Mechanical keyboard with Trackpoint) 就能結合這兩者的優點,這一直是我的夢想啊。這次是要把小紅點 (Trackpoint) 指標控制器加裝到 ikbc Table E401 鍵盤,因為它附有手一體式托,頗類似外接的 Thinkpad 鍵盤。

好不容易完成了,把小紅點 (Trackpoint) 指標控制器加裝到 ikbc Table E401 鍵盤。搭配這個鍵盤的一體式手托,改裝後,從正面看完整度比較高。不過它的加大按壓面積鍵帽,在剛開始使用時,常常會按到旁邊的鍵。適應一兩天後,也就習慣了。不過,用久了還是覺得它有塑膠外殼的噪音,頗為擾人,最後還是回去用 Ducky 的機械鍵盤。

關於 iKbc 鍵盤使用時的噪音,原本以為是在裡面塞入線路,造成組裝不密實而產生噪音。但拿另一個未改裝的鍵盤來比較,發現只要把鍵盤拿起來,晃一晃,整個外殼就會略微變型,產生噪音。相較而言,Ducky 的外殼比較堅實,不會有異音。iKbc 則只要壓一下,就會有擾人的異音。


但是看背面,就挖了一個大洞,露出小紅點的固定板,而且有點突出,必需將前面或後面墊高一點,固定板才不會碰到桌面。因為手托有點向下傾鈄,若墊高後面,例如將腳架扳起一段,在使用上,手腕會不舒服。在前面的下面用2支30公分直尺墊高一點,用起來就比較舒服點,高度大約 4mm。

正面看,GHB三個鍵要切掉一些,可以讓小紅點有移動的空間。在空白鍵下,切出可讓指標按鍵露出來的方孔。為了儘量完美,這個裝指標按鍵的孔,花了一整個下午才完成。


GHB鍵之間的孔。

用軟性油土翻的模,有點歪,堪用而已。材料是比較稀,長時間凝固的AB膠。下面是模型用的防鬆脫螺帽,可以固定在延長指標的螺絲上,不會鬆脫,也不會晃。


這個鍵盤是使用 type C 的 USB 接頭,SMD 的接頭,無法自己焊接。確定它是 USB 2.0 的界面,只用到 4條線,就把它改成 micro USB 的座,自己另外挖孔和固定。這個鍵盤可能是要出藍牙版本,留有很大的空間,用來放電池,因此在裡面塞一個 USB 2.0 的 HUB 和 PS2 轉 USB 的小電路板,空間非常夠。

改裝的過程,等以後有空再慢慢補齊了。

2020年3月4日 星期三

2020年2月27日 星期四

華碩伺服器的磁碟控制器無法建立 RAID 5/6 及硬碟失敗處理

無法建立 RAID 5/6

參考華為的網站

Personality Mode设置为JBOD-Mode导致RAID卡部分功能不可以用

正常應該可以建立 RAID 6 的磁碟陣列,但是設成 JBOD 就只有 RAID 0, 1, 00, 10 可以選。

開機後,按“Ctrl+R”進入 RAID 管理界面。再按“Ctrl+P”或“Ctrl+P”切换到“Ctrl Mgmt”頁簽。

再選擇“Next”並按“Enter”,進入下一頁設定,將“Personality Mode”設置為「RAID-Mode」。


設置完成的 Disk Array 如下。



在 Properties 頁,分別顯示如下




開機時的相片

硬碟失敗處理

建立了由 6顆 6TB HD 組成的 RAID 6,覺得可以放心了。但有一天,卻回報 3顆 HD 亮紅燈,真慘。

把伺服器關掉重開,硬碟抽出再重新插入,看看重新開機會不會就好了。但很不幸,還是一樣 3顆 HD 亮紅燈。只好冷靜下來,看有沒有機會救回來。

使用 megacli 指令觀察硬碟狀態,有一顆 Failed,2顆 OffLine,Failed 和 OffLine 有什麼差別呢。

[root@get-182 ~]# ]# megacli -PDList -aALL -Nolog|grep '^Firm'
Firmware state: JBOD
Firmware state: Failed
Firmware state: Online, Spun Up
Firmware state: Offline
Firmware state: Offline
Firmware state: Online, Spun Up
Firmware state: Online, Spun Up

看看 disk array 的資訊,因為有 2 個 disk array,所以這個是 Virtual Drive: 1。

[root@get-182 ~]# ]# megacli -ldinfo -lALL -aALL
                                    
Virtual Drive: 1 (Target Id: 1)
Name                :VD_24TB
RAID Level          : Primary-6, Secondary-0, RAID Level Qualifier-3
Size                : 21.830 TB
Sector Size         : 512
Is VD emulated      : Yes
Parity Size         : 10.915 TB
State               : Offline
Strip Size          : 256 KB
Number Of Drives    : 6
Span Depth          : 1
Default Cache Policy: WriteBack, ReadAhead, Direct, No Write Cache if Bad BBU
Current Cache Policy: WriteThrough, ReadAhead, Direct, No Write Cache if Bad BBU
Default Access Policy: Read/Write
Current Access Policy: Read/Write
Disk Cache Policy   : Disk's Default
Encryption Type     : None
Bad Blocks Exist: No
PI type: No PI

Is VD Cached: No

上面的 State 顯示為 OffLine。

既然有2顆硬碟是 OffLine,是不是可能是好的呢? 只是因為一些原因被設為 OffLine。若把它設為 OnLine,會如何呢? 就死馬當活馬醫吧,來試試看吧。

為了保險起見,先將其中一顆設為 OnLine 就好,若成功再設另一顆。但事後證明這想法實在錯了,應該同時將兩顆都設為 OnLine。因為後來上線後,硬碟內容就改變了,另一顆再加進來就整個死了。後來花了不少時間 rebuild,而且為了加快 rebuild 的速度,還不能 mount,整個伺服器不能運作。但事情很難講,也許將兩顆同時設為 OnLine 也不能成功。總之,磁碟陣列恢復運作,很高興,就等另一顆硬碟送回裝上吧。

將其中一顆設為 OnLine,磁碟陣列的 State 顯示為 Degraded,等到另一顆加上,rebuild 完成後,磁碟陣列的 State 顯示為 Partially Degraded。全部硬碟都加入,rebuild 完成後,State 則為 Optimal。

將硬碟設為 OnLine 的方式,可以用下指令的,但太不保險了。直接重新開機,按 Ctrl-R 進入磁碟陣列的管理界面,在 [PD Mgmt] 的功能下,移到 OffLine 的硬碟,將其設為 OnLine 即可。會跳出警告的畫面,提醒磁碟陣列可能無法運作。這提醒是有意義的,第一次的結果是恢復運作,但第二次就不能運作了,只好將其再次設為 OffLine。

最後要將另一顆 OffLine 的硬碟加回去,就費了一些功夫。因為只要插回去,它就會被認為是原來的一個硬碟。只好把它拔下來,用另個 Linux 系統,使用 cfdisk 把原來的資訊都清掉。cfdisk 會提醒磁碟含有 disk array 的資訊,就不管了。然後再將硬碟插回去,它就直接 rebuild 了。

2020年2月26日 星期三

Gentoo Linux -- 建立自己用的 overlay


在此,將自用的 overlay 放在 ~/overlays/mybox 的目錄下。在此目錄下,必須包含下面 2個檔。

(1) ~/overlays/mybox/profiles/repo_name,內容只有一行,如下,

localrepo

(2) ~/overlays/mybox/metadata/layout.conf ,內容如下,

masters = gentoo
sign-commits = false
sign-manifests = false

然後在 /etc/portage 的目錄下,建立目錄 repos.conf (假如此目錄不存在的話)。再在該目錄下建立 my-overlay.conf 檔案,內容如下,

[localrepo]
location = /home/ajax/overlays/mybox
priority = 100

注意,repo_name 要互相對應。

另外,要記得把自己加入 portage 的 group。

ebuild 測試步驟摘要

  • 修改後,執行 ebuild gcin-2.8.5.ebuild digest,重新建立 Manifest
  • ebuild gcin-2.8.5.ebuild clean,清除暫存檔
  • ebuild gcin-2.8.5.ebuild prepare,執行 src_prepare() 的部分
  • ebuild gcin-2.8.5.ebuild configure,執行 src_configure() 的部分
  • ebuild gcin-2.8.5.ebuild compile,執行 src_compile() 的部分
  • ebuild gcin-2.8.5.ebuild install,執行 src_install() 的部分
  • ebuild gcin-2.8.5.ebuild qmerge,移除舊版本,安裝新的版本

參考 ArchLinux 的安裝檔

環境隨時都在改變,常常某個地方改變,程式就安裝失敗。以個人之力,不可能找出各種問題。出錯時,或要更新至新版時,ArchLinux 的安裝檔,就是非常好的參考。

2020年1月20日 星期一

ikbc Table E401 拆解

ikbc Table E401 是 87鍵發光機械式鍵盤,使用 Cherry 軸。也是難得可以買到搭配一體式手托的87鍵機械鍵盤。適合用來加裝 Trackpoint 小紅點指標,因為要在空白鍵的下方加裝按鍵,有一體式手托會比較好固定。

既然是要改裝,第一個最關心的是好拆裝嗎? 挖孔固定 Trackpoint 電路後,會影響到多少電路,好復原嗎? 所以一拿到鍵盤,第一步當然是要把它拆開。

因為網路上找不到別人拆解的紀錄,只好自己慢慢拆。翻過來,從背面完全看不到螺絲。在網路上有找到別人拆其他型號的 ikbc 鍵盤的說明,說只有卡筍,沒有螺絲。

就開始用保特瓶的自製翹片開始挖,挖開兩邊的卡筍之後,發現還是很緊,拔不開來,懷疑有螺絲固定。

先把止滑墊拔開一些,果然找到後面有兩顆,前面外側各有一顆。把這4顆卸下之後,幾乎可以分開了,但還是拔不開。


果然在標籤貼紙下有一顆,反正已經破保,就直接把貼紙戳破吧,下次要拆時,才不要再猜一次那裡有螺絲。

卸下標籤下的螺絲後,還是拆不開,只好再拔止滑墊,看那裡還有螺絲,在靠手這邊又找到兩顆。所以總共有7顆螺絲。


拆下背板後,鍵盤和面板仍然不太好分離,耐心找了好久,稍用力把它扳開,發現它是用卡扣卡住。扳開時,把其中一個卡扣給弄壞一些,應該不致於影響日後使用。

拆開後

螺絲位置標示

音量控制旋扭

鍵盤矩陣圖

拆鍵盤是為了要加裝 Thinkpad 的 Trackpoint (小紅點指標控制器) ,難免會破壞到電路,因此要儘可能的把電路做個整理,以便復原。下面是此鍵盤的按鍵矩陣圖。LED 的矩陣圖就沒有整理了,不亮也不影響功能,就省一些事吧。

7x15的矩陣,可以組合控制 105 鍵。

2020年1月17日 星期五

排氣管防燙布


目前的排氣管前段,看起來有點出來,加個防燙裝置會比較安心些。若有適合的防蓋是最好的,但好像不容易找到。只好用防燙布,雖然防燙布會影響散熱。

看到那個突出的排氣管前段,不曉得為何總有衝動想摸摸它。

在路邊看到的野狼,照個相參考一下,估算要多長的防燙布。

至少要20圈,前段周長約 13公分多,那就要 3公尺左右了。

在露天拍賣找到的拍賣,一次買5公尺,算4公尺的價格,再送2條束帶和橡膠手套。規格是 25mm 寬,顏色鈦合金。鈦金色,材質為鈦合金,隔熱溫度較高,可達900~1200度。收到的東西如下面的照片。


原以為5公尺會蠻大包的,沒想到只有小小的一包。用名片來當個比例,5公尺的防燙布就這麼一小卷。橡膠手套則是薄薄的一次性手套,要小心使用。束帶也是一次性的,用了就無法拆下,必須想辦法把它剪斷。

1月中就買了,但是天寒地凍,手不小心碰一下就痛得不得了。又常下雨,就等好天氣吧。另外,那個束帶只能裝上,很難拆下,就很猶豫要不要另外買用螺絲鎖的束帶。

最後,還是去買了兩個螺絲鎖的束帶。在實際纏繞時,發現可以拆裝的束帶還是比較方便。

一直等到 5月,疫情過得差不多,終於等到大好的天氣,可以動手纏了。拆排氣管,對非專業人士來講,是個大工程,就直接纏吧。住台北的公寓,只能找個空地來工作。先把機車停在路邊的人行道,有個高低差,不用蹲得辛苦。蹲累了,用安全帽當板凳。

防燙帶有玻璃纖維材料,要帶手套施工,不然細細的玻璃纖維刺入皮膚,會癢得不得了,嚴重還會紅腫,也會拖很久才好。按賣場說明,在纏繞之前,先把防燙布泡水,比較好施工。

由於它的編織方式,不注意就會一直脫落

把它打個結,避免一直脫落。脫線散開的部分,用工作剪剪掉。可能含有金屬成分和玻璃纖維,還蠻難剪的。

有自己纏過羽球拍的握把布,防燙布的纏法大概差不多吧。

注意施力方向,先把防燙帶鬆鬆的繞在排氣管上。然後從頭開始繞,纏一小段後,就可以把開始的部分鎖上束帶。5米的防燙帶,不曉得能纏多長的排氣管。我的想法主要是纏前面比較容易碰到那一段,所以就讓一圈與另一圈之間,重疊多一點。纏到一半,想休息一下,就把另一個束環鎖上,伸伸懶腰,再繼續工作。

完成了,只纏到煞車踏板前面。和我的原先的構想一致。

纏好後,出去試騎,布中的雜質在高溫下燃燒,真的是青煙裊裊,冒著陣陣的濃濃的白煙。

水分蒸乾後,恢復本色。

網誌存檔