2018年4月29日日曜日

Linux kernel 4.16.5でRealtekのUSB SD/MMC card readerを使う

以前は普通に使えていた気がするのだが、いつの間にやらSD cardを挿入しても認識しなくなっていた (`/dev/mmcblk0p1`のようなdevice fileが作られない)ので、原因を調べてみた。

結論から言うと、必要なdevice driversが組み込まれていなかったのが原因だった。

環境


* ASUS X200LA
* Debian GNU/Linux (amd64, sid)
* Linux kernel 4.16.5
* Realtek RTS5129 card reader controller


実際の手順


何を探せばいい?


`lsusb`を使うと実際に使えるかどうかは別として接続されている (認識している?)devicesを表示してくれるので、それを元にしてkernelに組み込むべきdevice driver(s)を探せばいい。

今回の場合は:

% lsusb
...
Realtek Semiconductor Corp. RTS5129 Card Reader Controller
...

RealtekのRTS5129というdeviceに対するdriverを探す。

対応しているdriverやmoduleは?


kernelを自前でbuildしているので、取り敢えず`make menuconfig`を使い、それっぽいoptionがないかを探してみる。"realtek"で検索してみたところ、それっぽいoptionが見付かった:

`MMC_REALTEK_USB` ("Device Drivers" → "MMC/SD/SDIO card support" → "Realtek USB SD/MMC Card Interface Driver") = `rtsx_usb_sdmmc`

そのまんまな名前だ。helpにもそれっぽいことが書かれているので試してみる価値はあると思ったのだが、なぜかmenuに表示されておらず、故にy/mで選択もできない。その原因は依存関係が満たされていないためだった:

`MISC_RTSX_USB` ("Device Drivers" → "Misc devices" → "Realtek USB card reader") = `rtsx_usb`

このoptionをy/m何れかに設定すると、`MMC_REALTEK_USB`を選択する項目が表示されこちらもy/m何れか選択できるようになる。

動作確認


Kernelをrebuildしてinstall、rebootした後に、SD cardを差し込んで認識されることを確認。`lsmod`でも見てみる:

% lsmod | rg mmc
mmc_block
rtsx_usb_sdmmc
mmc_core
rtsx_usb

2018年4月21日土曜日

fontconfigの設定が腐っていたので修正

最近、何かにつけて

Fontconfig error: failed reading config file

というerror messageが目に付いたので、何が原因なのかを探って解決するまで。

概要


症状


* 様々なapplication softawreを立ち上げ時に"Fontconfig error: failed reading config file"というerror messageが複数回 (4回)出る


推測


* fontconfigに関する設定の間違い
* これまで出ていた記憶がない(最近になって見掛けるようになった)ので、updateによる書式やoptionの変更があった?

原因


* fontconfigの設定directory `/etc/fonts/conf.avail/`にある一部のfilesがおかしなことになっていた
* 具体的には`65-0-fonts-beng-extra.conf`など、設定filesと同じdirectoriesが複数存在しており、そのdirectoriesの中にそれぞれ更に同名のfileが存在していた
* `/etc/fonts/conf.d/`以下から貼られているsymlinksは当然切れている → 読み込めないerrorの原因
* なぜ`65-0-fonts-beng-extra.conf`などと言ったdirectoriesが作られたのかは分からないが、過去のinstallerのbugとか野良packagesの仕業とか何かのworkaroundで忘れていたものかも知れない?

対処


* 当該directoriesを削除し、.dpkg-new suffixのついたfilesをmv


2018年4月13日金曜日

Shuttle SZ170R8のBIOS (UEFI) v2.10がreleaseされていたのでupdate

3/27にShuttle SZ170R8のBIOS (UEFI)のv2.10がreleaseされていたのでupdateした。

Intel CPUのspeculative executionに関するvulnerabilities (いわゆる"Meltdown"と"Spectre")に対応したmicrocodeを含む。

BIOS v2.10 cf. [Shuttle Global - SZ170R8](http://global.shuttle.com/main/productsDownload?productId=1995)

update手順の概要


Boot mediaの準備


Rufus (cf. [Rufus - Create bootable USB drives the easy way](https://rufus.akeo.ie/))でbootable USB memoryを作り、そこにdownloadしてきたzip archiveの中身を展開して書き込む。

* Rufusで、vfat (FreeDOS)なbootable USB memoryを作製
* BIOS (UEFI)のzip archiveをdownloadして展開
* DOS/の中にあるflash.batとBIOS/をflash memoryのtop directoryにcp

SZ170R8の準備


* 何度も電源が切れたり入ったりを繰り返すので、予めHDDとか周辺機器は外しておく

Update process


* USB memoryからbootしてcommand promptが出たらflash.batを実行
* 画面に進捗状況が表示されるので暫く待つ
* 更新が終わるまで何度かrebootを繰り返す

BIOS設定の確認


* DEL keyを何度か押すとBIOS画面に入るので、設定を戻すなり確認するなりして保存
* 適当にmenu画面か何かで止めておいてスイッチで電源断
* この辺りでHDDや周辺機器を戻す

Bootの確認


* 電源を投入し正常にOSがbootすることを確かめる


2018年3月26日月曜日

SwissMicros DM42 及び DM15Lのfirmwareがupdateされた

SwissMicros DM42とDM15Lのfirmwareがそれぞれupdateされた。

DM42はv3.5が、DM15Lはv26がそれぞれ最新のfirmware。詳しくはlink先を参照のこと:

cf. [SwissMicros | Firmware](https://www.swissmicros.com/firmware.php)

また、firmware updateの方法については以前書いているので参照されたい:

* https://typeinf-memo.blogspot.com/2017/12/swissmicros-dm42firmware-update.html ※DM42のfirmware updateについて
* https://typeinf-memo.blogspot.com/2016/07/swissmicros-dm-15lfirmware-upgrade.html ※DM15Lのfirmware updateについて

2018年3月17日土曜日

Raspberry Pi 3 Model B+が発表された

先日、Raspberry Pi財団よりRaspberry Pi 3 Model B+ (3B+)が発表された。

cf. [Raspberry Pi 3 Model B+ on sale now at $35 - Raspberry Pi](https://www.raspberrypi.org/blog/raspberry-pi-3-model-bplus-sale-now-35/)

Raspberry Pi 3 Model Bからの主な改良点は:

* SoCがBCM2837B0へupgrade (1.4GHz)
* SoCが金属ヒートシンクに覆われた → 放熱性up
* GbEへの対応 (3までは100BASE-Tだった) ※USB2.0 (up to 480MB/s)での接続
* PoEへの対応 ※HATによる対応
* Wi-Fiのupgrade (802.11ac対応、特に5GHz帯の改善)
* 電源の強化

など、Network関連の強化 (connectivity)に主眼が置かれている。

なお、価格は据え置かれて$35のまま。例として、RSコンポーネンツでは「発売開始時期未定」となっているが、日本では電源を除いて4500円ぐらいで購入できるだろう (2018-03-17現在入手可能な3Bは税込み4320円)。

2018年3月16日金曜日

SwissMicros DM42のfirmware 3.4aが公開された (3/7)

DM42のfirmware 3.4aが3/7に公開されていたのでupgrade。

3.4ではoccasionally lockupなどの不具合に対する修正が行われているので、所有者はfirmware updateを検討されたい。

cf. [Firmware History](https://www.swissmicros.com/dm42/firmware/history.html)


2018年3月12日月曜日

SwissMicros DM42で簡単なprogramを組んでみる

SwissMicros DM42 (HP-42Sの互換機)で、有名な「ユークリッドの互除法」(Euclidean algorithm)を実装してみる。


ユークリッドの互除法について


ユークリッドの互除法は2つの自然数xとyがあった時に、その最大公約数 (xとyに共通する最も大きな約数、割り切る数)を求める手順だ。面倒なので、最大公約数を以後GCD (greatest common divisor)と書く。

古代ギリシアの数学者ユークリッド (Euclid)によって記された『原論』(Elements)の中に書かれており、紀元前300年ごろには存在していたというから凄い。

このアルゴリズムでは、以下のように計算を進める:

1. xをyで割った余りをrとする
2. rが0でなければ、x←y、y←rとして1.に戻る
3. rが0ならば、その時のyが元々のxおよびyのGCDである


電卓を叩いて確かめてみる


例として、DM42を使い手動で1785と374のGCDを求めてみる。

使うDM42の機能について:

* MOD → y÷xの余りを計算してxに積む
* LASTX → 直前までxに入っていた内容を保持するL-registerの内容をxに積む
* x≶y → X-registerとY-registerの内容を交換する


1. 1785
2. ENTER
3. 374
4. MOD ⇒ 289 ※余りは0ではない
5. LASTX ⇒ 374 ※直前のxの内容を呼び出した
6. x≶y ⇒ 289 ※xとyの内容を交換
7. MOD ⇒ 85 ※余りは0ではない
8. LASTX ⇒ 289
9. x≶y ⇒ 85
10. MOD ⇒ 34 ※余りは0ではない
11. LASTX ⇒ 85
12. x≶y ⇒ 34
13. MOD ⇒ 17 ※余りは0ではない
14. LASTX ⇒ 34
15. x≶y ⇒ 17
16. MOD ⇒ 0 ※余りが0になった!
17. LASTX ⇒ 17 ※これが1785と374のGCD

MODの結果が0になるまで、ひたすらLASTXしてx≶yしてMODする、を繰り返すだけでGCDが計算できるとわかる。このような単純作業はもちろん機械にやらせるべきだ。


DM42でprogramming


DM42 (HP-42S)に限らず、RPN方式の関数電卓では基本的にキー入力の羅列がそのままprogramになる。ただし、practicalなprogramを記述するには、LBLや条件分岐やjump命令などが必要になる。

DM42のprogramの構造は:

LBL "LABEL"
...
END (或いはRTN)

のようになっている。LBL (label)はprogram (或いはsubroutine)の名前で、様々な手順が続き、最後はRTN (return)或いはENDである。


PRGM (□+R/S)でprogram modeに入る。

先頭の行番号はDM42が勝手につけてくれるので無視すると、こんな感じに書ける:

LBL "GCD"
LBL 02
MOD
X=0?
GTO 01
LASTX
X<>Y
GTO 02
LBL 01
LASTX
RTN

EXITでprogram modeを抜ける。

programを実行するにはXEQを押す。すると、software menuにprogramで指定したlabel (LBL)が表示されるので、GCDを選ぶ。ただし、今回のprogramはとにかく手順をそのまま書いただけなので、予めY-registerに大きい方の自然数を、X-registerに小さい方の自然数をそれぞれ積んでおく必要がある。

1. 1785 [ENTER]
2. 374
3. XEQ → GCD ⇒ 17

X-registerには17が残っているはずだ。


そして最小公倍数へ


ちなみに、GCDとくればLCM (least common multiple)——最小公倍数も忘れてはならない。2つの正の整数について:

GCD(x,y) LCM(x,y) = xy

という関係が成り立つと知られているので、GCDが分かっていればLCMも計算できる。

LCM(x,y) = xy / GCD(x,y)

1785と374の場合は39270である。