ジャンル不定の日記です。

クランプ固定式USBハブ

相変わらず古いディスプレイ(PC-DT3172)使ってるのは、
17インチスクエアでUSBハブ付きデジタルディスプレイが選択肢がまったくない。

わけなんだが、
中古のPC-DT3172探したり類似品探したりしてもやっぱなくて、
VESAマウントに固定できるUSBハブ探してもやっぱない。

だがこんなのみっけた。

ディスプレイ下にクランプ固定できるUSBハブ。
これのがUSBコネクタの位置的にはいいかもしれん。

また液晶壊れた

久しぶりになるが、また液晶(日立PC-DT3172)ぶっ壊れた。
夕方停電したんだが、さっき電源入れようとしたら入らなかった。
以前、電源ボタンを押して主電源切ったら入らなくなって、コンデンサ変えたら治ったことがあったけど同じかな?

とりあえず開けてみて、C810のコンデンサが上触ると若干膨らんでいるような気もしなくはなかった。
で、ブロアでホコリはらって試しに電源ケーブルつないでみたんだが、入った。
というわけなんで、閉めてから再度電源ケーブルつないだら、入らない・・・
が、抜き差ししたら入った。
定位置に戻して電源つないでも入らなかったが、抜き差ししまくったら入った。
意図的に主電源切ったりコードの抜き差ししなければ停電以外で再発しない症状ぽいね。

letsencryptでハマった

先日certbotを最新版にしてたんだが、renew でエラーになってた。
ワイルドカードなんでdns-01だが、
そもそも最初bindが起動してなかった。

certbotを最新版にしたときにkernel?が壊れてOSアップデートしてたんだが、それ以降起動してなかった模様・・・
/etc/apparmor.d/usr.sbin.named
# root hints from dns-data-root
/usr/share/dns/root.* r,
追加で起動した。

でipv4でDNS機能するようになったが、元々bindはAAAA返してないんでipv6を無効化してた。
certbotが
; Communication with ::1#53 failed: timed out
でエラーになる。
bindが起動してない状況だと127.0.0.1:53のエラーも出てた。

調べたがわかんなくて、bindを
listen-on-v6 { any; };
#listen-on-v6 { none; };
でipv6対応にしたら、
Error output from manual-auth-hook command dns-01-auth.sh:
update failed: REFUSED
にエラーが変わった。
この出力はdns-01-auth.shの中で実行してるnsupdateコマンドのエラー出力。

bindのallow-updateが元々127.0.0.1しか許可してなかったので::1を追加したら成功した。

Orange Pi Zeroのspidev

Orange Pi Zeroで制御する感じで3Dプリンタ作ろうといろいろ勉強中だが、
3Dプリンタのホットエンドにはサーミスタがついてて温度によってヒーターのON/OFFを制御しなきゃならない。
サーミスタで温度を取得するのにADコンバータが要るが、Orange Pi Zeroには付いてない。
Raspberry Piでサーミスタ使う情報だと外部のSPI接続のADコンバータを使ってた。

まあそんな感じでSPI接続のADコンバータ使うことになるのかなと思うが、手元のOrange Piではspidevが出てなかった。

Buildrootのパッチ参考に、
sun8i-h2-plus-orangepi-zero.dts
    aliases {
        serial0 = &uart0;
        /* ethernet0 is the H3 emac, defined in sun8i-h3.dtsi */
        ethernet0 = &emac;
        ethernet1 = &xr819;
        spi0 = &spi0;
        spi1 = &spi1;
    };

&spi1 {
    status = "okay";

    spidev@0 {
        compatible = "rohm,dh2228fv";
        reg = <0>;
        spi-max-frequency = <10000000>;
    };
};
dtsをいじってdtbを作り直した。
が、これでまだ出てこない。

menuconfigで、
Device Drivers  --->
  [*] SPI support  --->
    <*>   User mode SPI device driver support
↑ここチェックしないとダメみたい。

/dev/spidev1.0 が出てきた。
これでSPI使えるんだと思う。

LOOX U/C40でVIA VNT-6656認識した

LOOX U/C40のGMA500で動画支援が使えない感じだが、
LOOX U/C40に2つあるminiPCIeスロットの片方にBroadCom Crystal HDをつけるってのもちょい考え中。

ただ、LOOX U/C40の裏カバーすぐにある空きのminiPCIeスロットはUSBしか配線されてないとかで、Atherosかintelのカードしか認識しないとか。
そんなチェックが入ってるとは思えないんで、おそらく裏カバーのスロットがUSB専用で、元々AtherosのWifiがついてるのがPCIe専用なのを理解しないで装着して認識しなかった人が誤情報を発信して広まった感じでは?

というわけで、工人舎SXについてたwifiカード(VIA VNT-6656)をLOOX U/C40の裏カバーすぐのminiPCIeスロットに装着してみた。
工人舎SXでUSBデバイスと認識されてたんでVIA VNT-6656は間違いなくUSBデバイス。
で、普通に認識した。
アンテナのケーブル届かないがナシで接続できた。
工人舎SXではVIA VNT-6656が不安定で頻繁に切断したりして使い物にならなかったが、工人舎SXはかなり熱くなったんで熱が問題じゃないかと思ってるんで、LOOX Uで問題なければ元々ついてるAtherosを外せる。
そうすればこちらのスロットはPCIeなんでBroadCom Crystal HDが機能するんじゃないかと。

Orange Pi ZeroにUSB wifiつけた

ルーターがTKIPだからぽいんだが、Orange Pi ZeroのXR819が使い物にならんのでUSB wifi買ってたが昨日届いたんでつけてみた。

USBなんでとりあえず母艦に装着して、
$ lsusb
0bda:f179 Realtek Semiconductor Corp. 802.11n
出力省略してるけど、デバイス名わからんが 0bda:f179 のデバイスだった。
で、デバイスIDでググったら rtl8188fuぽかった。
なんか8188FU=8189FTVとか書いてある情報が出てくるけど、8189FTVはOrange Pi R1でお世話になったSDIOデバイスだからUSBデバイスじゃないよ。

linuxのmenuconfig確認すると8188xxはあるんだが8188FUはなさげ・・・
というわけで探したが、
https://github.com/kelebek333/rtl8188fu
↑のでビルドできた。
DKMSの説明しか無いが普通に
$ make ARCH=arm CROSS_COMPILE=arm-none-eabi- KSRC=../linux-5.8.3 modules
で rtl8188fu.ko が出来上がる。
Makefile はそのまま。
最初
https://github.com/ulli-kroll/rtl8188fu
↑のがDKMSじゃないんでこっちでmakeしたんだが、こっちは5.8.x非対応だった。
rtl8188fu.koを /lib/modules/5.8.3 に、
firmware/rtl8188fufw.bin を /lib/firmware/rtlwifi にコピー
で使える。

が、なんかカーネルメッセージがコンソールに出まくる。
sshなら出てこないけどシリアルコンソールだと出力が邪魔すぎ・・・

/etc/network/interfaces
auto wlan1
iface wlan1 inet dhcp
  pre-up start-stop-daemon -S -x wpa_supplicant -- -B -iwlan1 -c/etc/wpa_supplicant.conf
  pre-down start-stop-daemon -K -q -x wpa_supplicant
こんな感じで起動時に有効になった。
wifiを/etc/network/interfacesでDHCPは初だが、pre-upでwpa_supplicantしないとDHCPできない?

EMGDドライバ入れてみた

工人舎SXとLOOX U/CのGMA500だが、現行カーネルで標準では入るドライバだと動画再生支援が効いて無く、クローズドなIntel EMGDドライバだと効くとか。
だが、Xorg 1.9までにしか対応していなくArch Linuxで入れるのは難しい。
で、https://launchpad.net/~thopiekar/+archive/ubuntu/emgd にドライバとかXorg 1.9とかいろいろあるんでXubuntu 16.04入れてみた。
上記のドライバはubuntu 16.04までしかなさげ。

Xubuntu 16.04なんだが、最初16.04.6入れたらkernelが4.15だった。
で、linux 4.15でemgdドライバがビルドエラー出てた。
他のドライバだが、4.4.xxxのどっかで仕様が変わってダメになるみたいな情報を見たんで同じだと思った。
kernelをダウングレードしてみたんだが、4.4.143より古いのはaptでmodulesが見つからなくて4.4.143にしてみたがダメだった。
16.04に種類があるのは知らなかったが、16.04.1だとkernelバージョンが古いぽいんで入れてみたら4.4.31だった。これは通った。
だからインストールの際に16.04.1のISOを使ってインストール中にダウンロードしないようにしないとめんどいことになる。
http://ubuntutym2.u-toyama.ac.jp/xubuntu/16.04/release/
ISOは↑で拾ってきた。

emgdドライバは、
$ sudo add-apt-repository ppa:thopiekar/emgd
$ sudo apt update
$ sudo apt install emgd-driver
で入る。
Xも入れてくれてる感じだったが、
xorg-serverがなさげだったんで、
$ sudo apt install xserver-xorg-1.9
は別途入れる必要があるかも。

そのまま再起動すると画面表示されず操作不能になる。
事前に、
$ sudo Xorg :1 -configure
してホームディレクトリにxorg.conf.newを作っといたんで、
/etc/X11/xorg.conf にコピーして、Section "Device"の部分以外全部消して、Driver "emgd"
にして再起動した。
すると、画面は出るんだがなんか全然おかしいし、パスワード入れてもlightdmからxfceにログインできない。
というかそもそもオートログインにしてたんだが・・・
ってなことになったが、Alt+Ctrl+F1でlightdmを落として
$ sudo systemctl stop lightdm
$ sudo startxfce4
でXfceが起動した。
がやっぱ画面がおかしい。
上に表示されるべき部分が切れて下に表示されてたり、横幅もなんか変。

http://steadyassimilation.blogspot.com/2011/06/note-looxuc40ubuntu1104.html
↑11.04の情報だが、ちょうどLOOX U/C40の情報があった。
これ参考にxorg.confを修正したら正常に表示された。

なお、当初工人舎SXを使うつもりでそっちで作業してて、
ヒンジの角度?が悪いと画面消えたりして大変だったんだが、
最終的にwifiが何故かhardlockedになっちゃって解除できず、LOOXに代えた。
FANエラーがあるがLOOXのが小さいしいいわ。

これでXfceは起動したが、libvaは別途入れる必要があるみたい。
$ sudo apt install libva-1.0.16
$ sudo apt install vainfo-1.0.16
同じリポジトリにあるバージョンを入れた。
これでvainfoしたら動画支援効きそうな感じだった。
まだブラウザでは試してない。

mSATA to ZIF変換ボード届いた

mSATA to ZIF変換ボード届いた。
そして、今度のは写真の通りロック機構が後側のやつ。
ケーブルがゆるゆるでテープで厚み増やす必要があったが装着して認識した。

というわけで、SSDにArch Linux入れたんだが、
Xfce入れようとしたらlibxcryptってのとglibcが衝突した・・・
で、overwriteで入れたらなんかwifi-menuでネット繋がらなくなった・・・

C言語でGPIO触ってみた

C言語でHello World作ってOrange Piで実行できること確認した後pthread試してみて、あと必要なファイル書き込みやってみた。

#include <unistd.h>
#include <fcntl.h>

int main(void){
    char b;
    int fd=open("/sys/class/gpio/gpio12/value",O_WRONLY);
    b='1';
    write(fd,&b,1);
    sleep(5);
    b='0';
    write(fd,&b,1);
    sleep(5);
    b='1';
    write(fd,&b,1);
    return(0);
}
こんな感じで試してみた。
Orange Pi Zero準備するのめんどいんで、ヘッダーピンつけてないけどルーターとして常時起動してるOrange Pi R1で。GPIOはZeroとR1同じだしハード繋がない実験ならR1でやればいいね。

GPIO12を出力用にして実行してみた。
/sys/class/gpio/gpio12/value に'1'を書き込む。
5秒後に'0'を書き込む。
5秒後に'1'を書き込む。
って感じ。
最初は初回'1'を書き込んだところまでのコードで'1'に書き換わることを確認。
次に'0'を書き込んだとこまでのコードで確認したら'0'になってた。
最後のコードだと'1'だった。
ファイルは閉じずに1byteずつ書き込めば即時書き換わるぽい?
C言語のファイルアクセスはfopen使うのが普通みたいだが、バッファとか使われなそうと思ったんでシステムコール使ってみた。

ファイルはcloseするの忘れてたけどプロセス落ちれば勝手に閉じるよね?

Makefile自分で書いてみた

Orange Piを使ってGPIOを制御するプログラムを作る予定だが、C++はBuildroot標準でコンパイラがないようなので言語はCにする方向になった。
コンパイラを直接使ってOrange Piで動く"Hello World"はできたが、実際にはソースファイルが複数になってコンパイラの引数が多くなってわからなくなるのでmake使ってみることにした。

makeは同じディレクトリのMakefileに従ってコンパイルするマクロ的なもんだが、
ターゲット名:依存ファイル1 依存ファイル2
     コマンド
のような感じで、
:の左側にターゲット名、右側にスペース区切りで依存ファイルを書く。(依存ファイルは1つでもいいし多数でも。)
次の行に先頭からタブを空けてコマンドを書く。(コマンドは複数行書けると思う。)
参考にしたサイトだとどこも:の後にスペースがあったが必要ないみたい。
コマンド行のタブは必須。
単に
$ make
とした場合は最初に記載されたターゲットが処理されるらしい。

まあとりあえず、
CC=gcc

hello:main.o
    $(CC) -o $@ $^

.c.o:
    $(CC) -c $<

clean:
    $(RM) hello main.o
こんな感じで"Hello World"をmakeできるようにしてみた。

CCは変数みたいなものだがマクロと言うらしい。
gccを定義してあるが、ここ変えればクロスコンパイルできる。
定義の際はそのまま書いて使うときは$をつけるが、マクロ名が2文字以上の場合は$(CC)の様に()で囲む必要があるみたい。
$@ $^$<は内部マクロで、
$@=ターゲット名
$^=依存ファイルすべて
$<=依存ファイルの先頭1個
$(RM)は定義済みマクロで rm -f と同じ。

.c.oはサフィックスルールというもので、拡張子を2つ続けて書く感じでワイルドカード的に使える。

今回はソースファイルが main.c 1つなんで main.o は作る必要ないが今後のためにも main.o を作ってから hello コマンドを作る感じにした。
先頭のターゲットがhelloなんでmakeしたらhelloを作ろうとするが main.o がなければサフィックスルールに基づきmain.cからmain.oが作られ、main.oからhelloが作られる。
って感じかな。