Soramichi's blog

Some seek complex solutions to simple problems; it is better to find simple solutions to complex problems

USB Type-C の Linux での扱い

前回の記事で PCIe に刺すタイプの USB Type-C 拡張ボード(玄人志向 USB3.2C-P2-PCIE3)が Linux でいまいちうまく動かないということを書いた。 具体的にはデータ転送はうまくいっているようだが電源周りが怪しかったので、そのあたりを解決すべくいろいろ調べた結果をメモしておく。 なお残念ながら完璧に動かして 3 A を流すには至っていない。

前回の記事の冒頭で USB PD (Power Delivery) なしであっても Type-C の方が Type-A より流せる電流が大きいらしいと書いたが、これは USB Type-C Connector System Software Interface (UCSI) というもので定められている。 Intel の仕様によると、UCSI に SET_POWER_LEVEL というコマンドがあり USB Type-C Current というフィールドを 1 に設定すると 3 A、2 に設定すると 1.5 A となるようだ(引用: 56 ページの Table 4-48)。

f:id:sorami_chi:20210117115306p:plain

Linux では UCSI 関連のドライバは drivers/usb/typec/ucsi にあり、ucsi.h にある以下の定数定義が 3 A のモード等を表すと思われる(前述の仕様にある値と違いかつ仕様より値の種類が多いのが気持ち悪いが...)。

#define UCSI_CONSTAT_PWR_OPMODE(_f_)            ((_f_) & GENMASK(2, 0))
#define   UCSI_CONSTAT_PWR_OPMODE_NONE          0
#define   UCSI_CONSTAT_PWR_OPMODE_DEFAULT       1
#define   UCSI_CONSTAT_PWR_OPMODE_BC            2
#define   UCSI_CONSTAT_PWR_OPMODE_PD            3
#define   UCSI_CONSTAT_PWR_OPMODE_TYPEC1_5      4
#define   UCSI_CONSTAT_PWR_OPMODE_TYPEC3_0      5

つまり Type-C で 3 A や 1.5 A を流すためにはここにある typec_ucsi のようなドライバを使わなければならないが、現状ではこのボードに対して xhci_pci しか使われている様子がない(なおカーネルの設定で CONFIG_TYPEC は y、 CONFIG_TYPEC_UCSI は m にしている)。 前回の記事で動いているケースでも電流が少ないと書いているが、その原因はたぶんここにある気がする。

ここからはかなり推測だが、おそらく PCIe に刺さったボード自体には xhci_pci ドライバを使い、さらにそこに生えている Type-C ポートを独立のデバイスとして認識し各ポートに typec_ucsi ドライバを使うのが正しい動作ではないだろうか。 カーネルの Type-C に関するドキュメントには "Every port will be presented as its own device under /sys/class/typec/""port drivers will describe every Type-C port they control ..." とあるのでポートごとにデバイスドライバが必要という認識で正しそうだ。

本ボードの動作に話を戻すと、なんとなく動いてはいるが /sys/class/typec/ には何も存在しない、つまり Type-C のポートが独立したデバイスとして認識されていない。 実は ASM3142 チップは Type-C と Type-A のどちらも扱えるようになっていて、例えば同じ玄人志向からは ASM3142 搭載で Type-A ポートを増設するボードも売られている。 このあたりが Type-C ポートが独立したデバイスとして認識されず typec_ucsi ドライバも使われていないことの原因になっている気はする。

さらに言うと、Type-C がいろいろな機能を持ちすぎていてポートやケーブル自体をデバイスドライバで制御しないといけないことが遠因と言えそうだ。 元々 USB ポート・ケーブルは電気的に決まった動作をするただの結線であり、ソフトウェアからは意識する必要がなかったはずである。 例えば Type-A ポートを制御する PCI ボードがあればソフトウェアはそのボードさえ制御していればよく、ボードについている Type-A ポートはボードに載ったコントローラチップがよろしくやっておいてくれればよい。 しかし Type-C で流す電流・電圧を変えるとかどちらがソース・シンクか動的に変わるとかを実現せねばならないため、意識しなくてよい単なる物理層であったポートをソフトウェアから制御する必要が出てきた(つまりある抽象化レイヤにあったものが高機能化のために一つ上のレイヤに移動してしまった)、 その結果今回のような不一致が出てくる原因になった、と考えている。

ASMedia ASM 3142 と OPPO Reno3 A の相性問題?

あらすじ

  • PC にスマホを繋いでいる時の充電が遅いので 5V 3A が流せると謳う PCIe USB-C 拡張ボードを購入
  • Linux マシンに装着し OPPO Reno3 A を繋いでみたがうまく動かない
  • どうやら相性問題っぽい??

買ったもの

購入したのは玄人志向USB3.2C-P2-PCIE3 というボード。 PC への接続は PCIe v3 x4(以上)で、USB 3.2 Gen2 の Type C ポートが 2 個ついている。 1 ポートのみ使用のときは最大で 5V 3A、2 ポート同時に使用した時は 5V 4A まで流せるらしい。 ただし USB PD (Power Delivery) には対応していない。 USB PD 非対応で 5V 3A 程度ならわざわざボードを買うほどなのか?という気もするが、ここによると Type A だと 5V 1.5A までしか流せないらしく、今は PC の Type A ポートに接続しているので意味があると思った。

f:id:sorami_chi:20210105112534j:plain

f:id:sorami_chi:20210105112540j:plain

f:id:sorami_chi:20210105112544j:plain

ボードの外観と接続した様子。SATA電源ケーブルから補助電源を取る仕組みになっている。ただ最大 5V x 4A == 20 W に対し PCIe x4 で供給できる電力は 25 W らしいので補助電源がいるのかは謎である。

なおこのボードは玄人志向が販売しているが実際はどこかの OEM なのか、この StarTech のボードと全く同じである。値段は玄人志向の方がかなり安い。 なお玄人志向のページには USB 3.2 Gen 2 とあり StarTech のページには USB 3.1 Gen 2 とあるが、これらは同じものらしい。 また BEYIMEI というベンダーのこのボードは周辺回路の配置が微妙に違うが使われているチップ(ASMedia ASM 3142)や SATA の電源をつなぐあたりが同じなので機能的にはほぼ同じものと思われる。

Linux での動作

本ボードのメインチップは ASMedia の ASM 3142 である。 玄人志向のページでは対応 OS 欄に Windows しか書いていないが、 まったく同じボードだと思われる StarTech のページでは Linux 対応が謳われている。 またASMedia のページでも Linux に対応していると書いてあるので、Linux でも問題なく動くだろうと判断した。

実際に接続してみると、このページにあるように ASM 3142 ではなく ASM 2142 として認識された。 ドライバは専用のものではなく汎用の xhci_hcd というものが使われている。 カーネルの configuration 一覧(例えば make menuconfig)で ASM とか 2142 とかを検索しても何も出てこないので専用のドライバはない(不要?)ようである。

$ lspci -v
...
03:00.0 USB controller: ASMedia Technology Inc. ASM2142 USB 3.1 Host Controller (prog-if 30 [XHCI])
    Subsystem: ASMedia Technology Inc. ASM2142 USB 3.1 Host Controller
    Flags: bus master, fast devsel, latency 0, IRQ 16
    Memory at df200000 (64-bit, non-prefetchable) [size=32K]
    Capabilities: <access denied>
    Kernel driver in use: xhci_hcd
    Kernel modules: xhci_pci
...

2021/01/06 追記xhci ドライバのコードは明示的に ASM 2142 と ASM 3142 を同じものだと思って書かれている。つまり 2142 として認識されるのは全く想定通りの動作である。このコミットログ"The ASM2142/ASM3142 (same PCI IDs) ..." とあり、ASM 2142 と ASM 3142 向けの修正が pdev->device == 0x2142 という条件のみで書かれている。

相性問題?

PC に接続ができたので早速 OPPO Reno3 A を Anker の PowerLine III 経由でつないでみたところ、充電されないどころかスマホ側で PC に接続されたことを認識しない(認識されればスマホ側に PC とデータ転送するかどうかをたずねる通知が出るはずだが、それがでない)。しかし逆に PC 側ではスマホが接続されたことをきちんと認識しており、dmesg や lsusb にはちゃんと OPPO の機器が繋がっていることが表示される。手元にあった別の Type C - Type C ケーブルで繋いでみても全く同じ結果だった。

$ sudo dmesg
...
[60965.205189] usb 5-1: new high-speed USB device number 14 using xhci_hcd
[60965.437758] usb 5-1: New USB device found, idVendor=22d9, idProduct=2764, bcdDevice= 4.14
[60965.437761] usb 5-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[60965.437762] usb 5-1: Product: SM6125-IDP _SN:895ABEB8
[60965.437763] usb 5-1: Manufacturer: OPPO
[60965.437764] usb 5-1: SerialNumber: 895abeb8
$ lsusb
...
Bus 005 Device 014: ID 22d9:2764 OPPO Electronics Corp. SM6125-IDP _SN:895ABEB8
...

ボード自体がちゃんと動いていることを確認するために、(1) Type C - Type A アダプタ + USB メモリ と (2) Type C - Type C ケーブル + タブレット を接続してみたところ、(1) ではちゃんとデータ転送ができ、(2) ではちゃんと充電されかつタブレット側で PC に接続されたことを認識した。 ただし (2) の充電はかなり遅く、明らかに 3A も流れていないと思われる。 さらに不可解なことに、Type C - Type A アダプタ経由で OPPO Reno3 A を接続すると充電もスマホ側で認識もされるという結果になった。

まとめると以下のような状態である。

機器 接続方法 結果
OPPO Reno 3A Type C - Type C ケーブル 充電せず、スマホ側で PC を認識せず、PC 側ではスマホを認識
USB メモリ Type C - Type A アダプタ 問題なし
タブレット Type C - Type C ケーブル 充電、タブレット側での PC 認識ともにするが、充電は遅い
OPPO Reno3 A Type C - Type A アダプタ + Type A - Type C ケーブル 充電、スマホ側での PC 認識ともにするが、充電は遅い

これ以上のことは現状よく分からないが、どうも OPPO Reno3 A は相性問題が起きやすい?らしく、こちらのブログにいろいろまとまっている。 その記事に「本来は、USB PDにしろQuick Chargeにしろ、最初はUSB標準の給電動作をした上で、機器間の通信で対応を確認して設定を変更する手順を踏みますから、全く給電されないということは起こらないはず」とあるように、 たとえお互いに対応した仕様がない場合でも一番 basic なUSB給電としては動くはずなので、今回の結果はかなりおかしな状態と思われる。 ボードからの電力がそもそも足りていないのであればまだ分かるが、Type C - Type A アダプタをかませるとちゃんと動くのも謎である。https://www.kernel.org/doc/html/v5.10/driver-api/usb/typec.html

異文化コミュニケーションについて

みなさんこんばんは。Microsoft Research Internship アルムナイ Advent Calendar 2020 の19日目です。最近ネット界隈から離れているので世間の様子が分からないのですが皆さんいかがお過ごしでしょうか?

こういう真面目なカレンダーに参加する度に同じようなことを書いている気がしますが、今回もまた異文化コミュニケーションについて書きたいと思います。研究の話はすでにいろんな人が書いているのでそちらに譲りましょう(これも毎回言っている気がする)。MSR には直接関係ない話になってしまいますがご了承ください。まぁ特定の会社の宣伝をするのもあまり良くない気がするのでこれでいいでしょう。あ、ちなみに4年前に ACM Ditital Library で研究機関ごとの平均被引用数を調べたときは MSR の論文は平均 34.2 回引用されていたようです。

今回(も)伝えたい内容ですが、いつもと同じで「せっかく留学するなら研究・勉強だけじゃなく現地で積極的に異文化コミュニケーションをしよう!頑張ってするといいことがあるよ!」です。 メッセージはいつもと同じなのでなんだつまらんなという感じなのですが、今回のポイントは自分以外の体験談を集めてきたことです。

集めた体験談を紹介する前に、過去に自分が同じようなことを書いたエントリたち(これらは自分の体験談のみ)を貼っておきます。

それでは本題の異文化コミュニケーションについての体験談を紹介していきます。

体験談 1:博士課程でアメリカに留学した某氏

英語を上手に話せる必要はないことを学んだ。様々な国から人が集まるアメリカでは正しく完璧な英語を話せない人が多い。なので英語が下手な人と会話することにほとんどの人が慣れている。周りのほとんどが日本人で上手な日本語を話せることが当たり前の環境で育ったことが,下手な言語を話すことへの抵抗感を大きくしていたことに気づく。抵抗感を取り除いて,思うままに話すようにすれば仲良くなれるし上達するし一石二鳥

体験談 2:修士課程でオンライン国際会議の student volunteer に参加した某氏

I joined a 'Meet The Speakers' session where students can talk with professors or other students. During the session, I met a professor who happened to be a colleague with someone who mentored me when I was an undergraduate student. After we found that we know some mutual friends, this professor gave me a lot of advice about working in the academic community and PhD application. The impression is that the academic community is a quite small but tight community. And people are friendly and willing to give advice to others. And you can learn a lot from someone who has totally different background with you.

体験談 3:博士課程でイギリスに留学した某氏

イギリスのヨーク大学に滞在中、お世話になった研究室でよく一緒に居たのはベルギー人とメキシコ人でした。最初はお昼ご飯を一緒に食べましたが、その時間は1時過ぎ。その後も何度かご飯を食べたのですが、そもそもお昼を食べないこともなかなか多かったです。不思議そうにしてるとメキシコ人の方から「メキシコではそもそもお昼ご飯の時間が15時とか16時で、そこでめいっぱい食べるんだ。だからこの時間にはあまり食べないんだよ」と教えてもらいました。国が違えば朝昼晩の感覚も違う。自分の常識は他人の非常識と再認識した瞬間でした。

いかがでしょうか?体験談 1 と 2 は異文化コミュニケーションは怖くない、有益だという内容で、体験談 3 は異文化コミュニケーションで視野が広がったと内容で、どれも本当にその通りだと思います。 また体験談 2 はオンライン国際会議の中での話ということで、なかなか実際に海外留学することが難しい中でも異文化コミュニケーションを取ることはできるんだといういい例だと思います。

完全に MSR とは全く関係ない話になってしまいましたが、海外留学つながりということでこれでご容赦ください。それではまた。

Contribute to be contributed

前置き

研究留学 Advent Calendar 2019 - Adventar の21日目の記事を1か月遅れで投稿します。

今回はスイスの ETH Zurich にちょうど半年間(2019年4月6日〜2019年10月6日)滞在しました。 最初にスイス行く際に入国書類で詰みかけた話、物価がやたら高くてびびった話、スイスのドイツ語が普通のドイツ語とかなり違う話は下の3記事に書いてあります。

sorami-chi.hateblo.jp

sorami-chi.hateblo.jp

sorami-chi.hateblo.jp

本題

今回の記事で伝えたいのは、 "Contribute to be contributed" ということです。分かりやすく言うと、滞在先で積極的に contribute するとその後自分に返ってきて嬉しいぞ、ということです。別な言い方をすると、短い滞在期間で目先の成果を出す以外にも将来に繋がるコネクションづくりをすべきではないか?ということです。積極的に contribute していれば多くの人と議論する機会が増え、帰国後に特定の research topic について議論や共同研究をしたり、論文を書く際にコメントを貰うことがとてもやりやすくなります。すると例えば半年間の滞在でその後何年も役立つ(かもしれない)協力関係を築くことができます。せっかく行ったのにチームの他の人が何をしていたかよく知らない、自分が何をしていたかも知られていない、ではもったいないです。

「コネクションを作る」というと苦手意識がある人もいるかもしれませんが、お互いに研究者なので普段の研究活動で contribute していれば自然とコネクションはできます。具体的には以下のようなことです。

  • seminar や reading group で積極的に質問する。最初は気恥ずかしいかもしれませんが3回目くらいで慣れます。
  • seminar で積極的に発表する。滞在最後の発表はだいたい要求されるかと思いますが、滞在の最初にもチャンスがあれば今までどんなことをしてきたかを発表させてもらいましょう。
  • 1 vs. 1 の議論を積極的に行う。特に「滞在最初で自分が何をやるかまだ具体的に決まっていない時」と「自分より後に新しく来たメンバーが何をやるかまだ決まっていない時」がチャンスです。滞在先のボスだけでなくなるべく多くのメンバーと議論しましょう。
  • Slack などで議論があれば思ったことを積極的に発言する。例えば "why?" とか "which paper?" などの簡単なものでも、そこから議論に発展した場合に中に入りやすくなる効果があっていいと思います。

前回の記事

今回はどうやって contribute して将来に活かすかを書きましたが、前回(海外留学を楽しくするコツ - Soramichi's blog)は「海外留学でどうやって友達を作るか」を書いています。興味があれば参照してください。

ドイツ語の壁について

壁 Advent Calendar 2019 - Adventar20日目です。

今年の4月から10月までスイスのチューリッヒに滞在していたので、そこで話されているドイツ語の壁について書きます。スイス入国時に直面したやばい壁については下記の記事をご覧ください(ヨーロッパに長期滞在する人には役立つ内容かと思います)。

sorami-chi.hateblo.jp

ドイツ語の壁とは

チューリッヒではドイツ語が話されていることになっていますが、実は Swiss German というやつで普通のドイツ語とはかなり違うところがあります。この記事では Swiss German と普通のドイツ語の違い(壁)について書きます。

半年間の観測では、Swiss German の単語で普通のドイツ語と異なるものには3つのパターンがあるようです。

  • パターン1:フランス語の影響
  • パターン2:特定の文字が変わる
  • パターン3:完全に独自の用語

パターン1:フランス語の影響

スイスではドイツ語の他にフランス語圏、イタリア語圏、あとほんの一部ロマンシュ語が話される地域があります。ロマンシュ語以外の3つは公用語になっており、スーパーで物を買ってもだいたいドイツ語、フランス語、イタリア語で成分などが書いてあります。

この影響かは裏をとってないのですが、Swiss German にはたくさんのフランス語の単語が溶け込んでいます。例えば次のようなものがあります。

  • Poulet - チキンです。スーパーにおいてあります。完全にフランス語の単語です。google translate で chicken と入れると Hähnchen と出ますが、チューリッヒでは見たことがありません。
  • Coifeur - 美容院です。Herren とか Damen とか書いてあります。これも完全にフランス語のようです。
  • Excüsé - Excuse me です。発音はエクスキューゼーなのでフランス語の Excusé moi に近いです。ただし entschuldigung も普通に通じます。

また Swiss German ではエスツェット(ß)を使いません。例えば駅前通りは Bahnhofstrasse となり、Bahnhofstraße ではありません。これもフランス語とかイタリア語にないアルファベットは使わないから、ということでフランス語の影響という説がありますが実際のところはよくわかりません。

パターン2:特定の文字が変わる

普通のドイツ語と比べて特定の文字が変わることがあります。よくあるのは au が üu になるパターンです。例えば Haus が Hüus になって、スーパーで Hüus Tea というのが売っています。

パターン3:完全に独自の用語

上のどちらのパターンにもあてはまらない、完全に独自の単語やどう変化したのか分からない単語もたくさんあります。

  • Grüezi - 軽い挨拶で、Hi みたいなものです。どこでも何時でも使いまくります。たまにとてもカッチリしたところ(空港とか)に行くと Guten Tag とか言われるのでびっくりします。
  • En guete - have a nice meal 的な意味です。例えばレストランで食事を出すときなどに言います。発音は エン グワッテ です。
  • Schoggi - チョコレートです。普通のドイツ語では Schokolade なので似てはいますが、かなり形が違うのでどう変遷してきたのかよくわかりません。

City of Berkeley will use gender neutral languages

According to an article in San Fransisco Chronicle, the city of Berkeley, CA, USA, will "replace gendered language in the city’s municipal code with neutral terms" as "an effort to be more inclusive". The article provides a link to what seems like the official document of the city, where the new municipal code with the edit history begins from page 4.

This is truly a big step for real inclusion, because they do not say anything like that they will include both men and women, but they say they will go "gender neutral". From page 6 of the document, the list of words / phrases to be placed and how to place them are shown, among which there are a couple of outstanding ones:

  • "Fireman", "Firewoman", "Foremen" and "Firewomen" to be replaced by "Firefighter" or "Firefighters"
  • "Male and female" to be replaced by "People of different genders"
  • "Men and women" to be replaced by "People"
  • "The masculine pronoun includes the feminine" to be replaced by "Words referring to a specific gender may be extended to any other gender"

These policies prove that they really try to be neutral, with non-majority people truly taken into account.

In contrast, in many so-called "equality" or "diversity" acts, they assume that there are only "he" and "she", or "male" and "female", and the association between biological sex and cultural gender is always the same as what they assume.

This is not only wrong and doesn't help minority people, but it also sometimes amplifies existing discrimination. For example, many people believe that adding a women into a men-only team (or the other way around, adding a man into a women-only team) is THE best thing for diversity. However, this relies on an assumption that the added woman (or man) has different way of thinking than the existing members, which stems from another assumption that the existing men (or women) have similar ways of thinking just because they have same biological sex. This is nothing but discrimination!

Another example might be these "women in XX" or "XX for girls" events, where the organizers often associate the biological sex of the participants and cultural biases generated by discrimination. For example they often say like "different way of thinking that women have", or they use pink color which they never use in any of their other events. Although these things might comfortably be accepted by "normal" people who were born as women and are happy to be "female", they are perfect discrimination which never achieve true inclusion (please carefully note, that I'm not saying that supporting discriminated people is bad, but what I'm saying is that these "supports" sometimes amplify discrimination if they are not well-considered).

"Inclusion" should be "we don't care whoever you are or whatever way of thinking / characteristics you have", but should not be "we only accept those who we are comfortable with".

Anyway, the step taken by the city of Berkeley is a very big deal, and I hope other cities, states, and countries will follow it soon.

How to Install Acroread into 64 bit Debian

I like Evince because it works very well in most of the cases and it's very lightweight, but there are some cases where I still need a pdf reader from Adobe, for example when I have to check a pdf with annotations.

Although Adobe does not provide Acroread (a.k.a. Acrobat Reader) for Linux anymore, it somehow still hosts .deb files of old versions and you can install them into modern distributions as well.

Download an old version

$ wget http://ardownload.adobe.com/pub/adobe/reader/unix/9.x/9.5.5/enu/AdbeRdr9.5.5-1_i386linux_enu.deb

Allow 32 bit debs to be installed

In the default configurations, a 64 bit version of Debian does not accept 32 bit deb files. Enable multiarch support to install 32 bit debs.

$ sudo dpkg --add-architecture i386
$ sudo apt-get update
...
$ sudo apt-get upgrade

Install Acroread deb and dependencies

Install the .deb file downloaded from the adobe website. Execute apt-get install -f after that to automatically install dependencies.

$ sudo dpkg -i AdbeRdr9.5.5-1_i386linux_enu.deb
$ sudo apt-get install -f

You can now run it with the acroread command. In some case, it may yield an error due to lack of some libraries. You should install the 32 bit version of the required library by adding :i386 suffix to the package name.

$ acroread
# an error may happen requiring libxml2 (or whatever other libraries)
$ sudo apt-get install libxml2:i386     # don't forget to add ':i386'!
...
$ acroread
# should work