Oct 10, 2019

apu2d4でTiny CorePure64 10.1を動かす

今回はオーディオの話は出てこない。
何でオーディオのカテゴリにアップするのかといえば、オーディオに使うハードの話だから。
ここらはちょっと迷うとこだ。

うちではTiny Core Linux 7.2(x86-64)でapu2c4を動かし、音楽サーバーとして運用しているんだけど、なぜか上位バージョンのTiny Coreは使えずに来ていた。なんとか使えるようにしたんだけど、その辺りの顛末について備忘録として書いておく。
ちなみに一連の試行錯誤はサブ機として入手したapu2d4で行った。

使えない、とはどういうことかというと、Compaq 6730bを使って、SDカードに「TinyCorePure64-10.1」をインストールして(手法は過去のエントリー「apu2c4で768kHzへのアップサンプリングに取り組む」のとおり)、それをapu2に刺し起動させてsshでログインして操作したいのに、ipアドレスが割り振られないので、できない、という意味だ。
v7.2は問題なく使える。
それ以上のバージョンでは使えない。x86、x86-64両方とものようだ。
Compaq 6730b、Dell Inspiron11で動かす分には問題ないSDカードであるにも関わらず、apu2に刺して起動したときにはipアドレスが振られない。ということはsshでログインできないしpingすら打ちようがなく、どういう状態なのかも全く分からない。
LEDが光っているので、通電はしているようだけど。

では、問題がなく動いているv7.2の「vmlinuz」と「core.gz」を、v10.1のものに置き換えてみるのはどうか。簡単なバージョンアップの手法としてTiny Core Linuxのサイトにも挙げられている手法だ。
Compaq 6730b、Dell Inspiron11は、これで動く。
しかしapu2で起動したら、やはりipアドレスが振られない。

あれこれ試して、もう仕方がないので、シリアル接続を試みることにした。
シリアル接続って何?という感じなんですが。
シリアルケーブルというものを使ってapu2を他のコンピューターに直接継いで操作する、ということだ。
使うケーブルはこんな感じ(これはamazonの写真)。

https://www.amazon.co.jp/gp/product/B01N0F91GH/

シリアルケーブル

片方はusb端子。もう片方はRS-232Cという規格の端子。
usbの方を、操作に使うマシンに刺す。
RS-232Cの方をapu2に接続する。
シリアル通信ソフトを起動したら、データやコマンドの送受信が可能になる。
おおざっぱに言うと、こんな感じ。

参考にしたサイトは下記。他にもあちこち見たけど忘れた。
http://flac.aki.gs/bony/?p=3155
https://netwiz.jp/linux-usb-serial/
http://enotyama.hatenablog.com/entry/2014/03/03/232305
https://qiita.com/miyabisun/items/73bb2e0b75c30fba9f3c

まず、ケーブルの入手。USBシリアルケーブルでネットショップ上を検索して入手。USB-RS232C変換ケーブルというらしい。「RS232」と「RS232C」があって何が違うのか迷ったりしたが、どうやら基本的に同じと思っていいらしい。クロスケーブルかどうかの表記かと思ったら、そうではない、らしい。
apu2に使えるのはクロスケーブルで「null-modem cable」と言われる物。なかなか分かりにくいんだけど。

https://pcengines.ch/howto.htm#serialconsole

The most common mistake people make is not using a null-modem cable: If you have a multimeter, check that the pins 2 and 3 are crossed. Do NOT use gender changers!
The default baud rate for alix boards is 38400,8n1 and for apu boards 115200,8n1.

なんか、シリアルケーブルの規格は複数あって、実際のところ、継いでみて使えるかどうかはやってみないと分からないことがあるらしい。詳しくはwikipediaあたりを読んで欲しい。読んで僕はちょっと驚いた。

SDカードにインストールしたTiny Core10.1に設定変更書き込み。

sudo vi /etc/securetty

# For people with serial port consoles
ttyS0
sudo vi /sbin/autologin

exec /sbin/getty 115200 ttyS0
#exec /sbin/getty 38400 tty1
sudo vi /etc/inittab

ttyS0::respawn:/sbin/getty -nl /sbin/autologin 115200 ttyS0
#tty1::respawn:/sbin/getty -nl /sbin/autologin 38400 tty1
sudo vi /opt/bootsync.sh

echo “booting” > /etc/sysconfig/noautologin

これでヘッドレス化。シリアル通信できるはず。

操作に使うPCを準備する。うちでは6730bノートPC、OSはFedora。
シリアル通信に使うソフトは、とりあえず参考にしたサイトに倣い「cu」にした。
最初からは入ってないので「dnf」でインストール。
シリアルケーブルのusb端子を刺す。
ここで「dmesg」コマンドを打つと、仕組みはよく分からないけど、シリアルケーブルがFedoraに認識されていると表示されるので確認。かなり大量の行数が表示されて、下の方にちょこっと表示されるので分かりにくいが。

[1864782.993734] usb 6-1: pl2303 converter now attached to ttyUSB0

こんな感じ。スタンバイできてるということかな。

RS-232Cの方をapu2に接続し、apu2の電源を入れる。
「cu -s 115200 -l /dev/ttyUSB0」とコマンドを打つが「cu: ttyUSB0: Line in use」というエラー表示で繋がらない。
誰が使ってるんだ?

これは最初は良く分からなかったんだけど、結局、表示されてないけど「Permission denied」で蹴られているということらしい。
「sudo chmod 666 /dev/ttyUSB0」と打ってパーミッションを変更。
改めて「cu -s 115200 -l /dev/ttyUSB0」。
これで接続成功した。

なんだか大雑把な流れの記述なんだけど、シリアルケーブルというのはapu2が起動していようがいまいが関係なく何時に刺してもよくて、刺して「cu」コマンドを打った時点でやり取りされているデータを字面に表示するようだ。
ある意味、緊急時には融通が利いてありがたい通信手段なのだろう。

v10.1でapu2を起動し、シリアル接続したら下記のような字面が表示された。

[ab@fedora2 ~]$ cu -s 115200 -l /dev/ttyUSB0
Connected.

「Connected.」が表示されて止まるので、enterキーを叩く。
すると「box login:」が表示される。
「tc」でログイン。

Core Linux
box login: tc
Password: 
   ( '>')
  /) TC (\   Core is distributed with ABSOLUTELY NO WARRANTY.
 (/-_--_-\)           www.tinycorelinux.net

tc@box:~$ 

ちゃんとTiny Core 10.1は起動していることがわかった。
「ifconfig」と打つと下記の表示。

tc@box:~$ ifconfig
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

「eth0」がない、、、
apu2にはイーサネットポートが3つあるので、eth0、eth1、eth2が表示されるはず。それらが表示されない。つまり有線LANが機能しない状態で起動している。「ping 127.0.0.1」と打つと応答が帰ってくる。ということは、TCP/IP自体は機能している。
なるほどだ、、、

ハードは認識できてるのか?
lspciを使えば分かるみたいだがインストールされていない。
「pciutils」というパッケージをインストールしたら使えるらしい。
6730bにSDカードを刺し替えて、家庭内LANからネットに継がる環境でインストールする。
インストールできたら、apu2に刺し直して起動して、シリアル接続から「lspci」と打ち込む。

tc@box:~$ lspci
00:00.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Device 1566
00:02.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Device 156b
( 略 )
01:00.0 Ethernet controller: Intel Corporation I210 Gigabit Network Connection (rev 03)
02:00.0 Ethernet controller: Intel Corporation I210 Gigabit Network Connection (rev 03)
03:00.0 Ethernet controller: Intel Corporation I210 Gigabit Network Connection (rev 03)

「Ethernet controller: Intel Corporation I210 Gigabit Network Connection」と表示。
これは問題なく動いているTiny CorePure64-7.2と同じ結果だ。
つまり、イーサネットのデバイスは10.1でも認識されている。

ドライバはどうなっているのかな、、、

tc@box:~$ ls /lib/modules/4.2.9-tinycore64/kernel/drivers/net/ethernet
3com/          cadence/       fealnx.ko.gz   natsemi/       sis/
8390/          cavium/        fujitsu/       neterion/      smsc/
adaptec/       chelsio/       hp/            nvidia/        stmicro/
agere/         cisco/         icplus/        packetengines/ sun/
alteon/        dec/           intel/         qlogic/        tehuti/
altera/        dlink/         jme.ko.gz      rdc/           ti/
amd/           dnet.ko.gz     marvell/       realtek/       via/
atheros/       ec_bhf.ko.gz   mellanox/      samsung/       wiznet/
broadcom/      emulex/        micrel/        sfc/           xircom/
brocade/       ethoc.ko.gz    myricom/       silan/
tc@box:~$
tc@box:/$ ls /lib/modules/4.19.10-tinycore64/kernel/drivers/net/ethernet
3com/          broadcom/      fealnx.ko.gz   netronome/     stmicro/
8390/          brocade/       fujitsu/       nvidia/        sun/
adaptec/       cadence/       hp/            packetengines/ synopsys/
agere/         cavium/        huawei/        qlogic/        tehuti/
alacritech/    chelsio/       intel/         qualcomm/      ti/
alteon/        cisco/         jme.ko.gz      rdc/           via/
altera/        dec/           marvell/       realtek/       wiznet/
amazon/        dlink/         mellanox/      samsung/       xircom/
amd/           dnet.ko.gz     micrel/        sfc/
aquantia/      ec_bhf.ko.gz   myricom/       silan/
atheros/       emulex/        natsemi/       sis/
aurora/        ethoc.ko.gz    neterion/      smsc/
tc@box:/$

7.2と10.1、「intel」は両方に入っている。

もう少し奥に。

tc@box:~$ ls /lib/modules/4.2.9-tinycore64/kernel/drivers/net/ethernet/intel
e100.ko.gz  e1000e/     i40e/       igb/        ixgb/       ixgbevf/
e1000/      fm10k/      i40evf/     igbvf/      ixgbe/
tc@box:~$
tc@box:/$ ls /lib/modules/4.19.10-tinycore64/kernel/drivers/net/ethernet/intel
e100.ko.gz  e1000e/     i40e/       ice/        igbvf/      ixgbe/
e1000/      fm10k/      i40evf/     igb/        ixgb/       ixgbevf/
tc@box:/$

もう少し調べて、、、

tc@box:~$ lspci -vvv
( 略 )
01:00.0 Ethernet controller: Intel Corporation I210 Gigabit Network Connection (rev 03)
	Subsystem: Intel Corporation Device 0000
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- SERR- 
	Kernel driver in use: igb
( 略 )
tc@box:~$ lspci -vvv
( 略 )
01:00.0 Ethernet controller: Intel Corporation I210 Gigabit Network Connection (rev 03)
	Subsystem: Intel Corporation Device 0000
	Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- SERR- 
( 略 )

7.2では「Kernel driver in use: igb」と表示される。
10.1では表示されない。「Control: BusMaster-」とはどういうことか?
ともあれ、igbが機能してないらしいのは分かった。

tc@box:~$ modinfo igb
( 略 )
depends:        ptp,i2c-algo-bit
vermagic:       4.2.9-tinycore64 SMP mod_unload 
tc@box:/$ modinfo igb
( 略 )
depends:        i2c-algo-bit
intree:         Y
vermagic:       4.19.10-tinycore64 SMP mod_unload 

10.1はmodinfo igbの「depends」に「ptp」が表示されない。どうなんかね、これは。
vermagicには、カーネルバージョンと主要なConfigオプションが記載されるという。
SMP mod_unloadってどういうことかな、、、

「igb」でtiny coreのフォーラムを検索してみる。

Topic: modprobe: can't load module igb (kernel/drivers/net/ethernet/intel/igb/igb.ko.gz
http://forum.tinycorelinux.net/index.php/topic,22744.msg142319.html

Is the i2c-KERNEL extension loaded?

$ tce-load -i i2c-KERNEL

Topic: Network Ports are not detected - IntelR I210IT GbE LAN
http://forum.tinycorelinux.net/index.php/topic,18469.0.html

I took a shot in the dark and appended the file name to the URL like this: http://tinycorelinux.net/6.x/x86/tcz/i2c-3.16.6-tinycore.tcz and pasted it into my browser; it worked!
I put the file in /mnt/sda1/tce/optional.
I edited onboot.lst and put i2c-3.16.6-tinycore.tcz right after glib2.tcz (about 1/3 of the way down the file).
Now it works!

なんかいきなり参考になりそうな事が書いてあるじゃないの。

6730bにSDカードを刺し替えて起動、「tce」でi2cを検索。
「i2c-4.19.10-tinycore64.tcz」があるので、これをインストール。
SDカードをapu2に戻して起動。
「ifconfig」を打つ。

tc@box:~$ ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0D:B9:50:86:58  
          inet addr:192.168.1.89  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:88 errors:0 dropped:4 overruns:0 frame:0
          TX packets:43 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:35816 (34.9 KiB)  TX bytes:3813 (3.7 KiB)
          Memory:fe600000-fe61ffff 

eth1      Link encap:Ethernet  HWaddr 00:0D:B9:50:86:59  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Memory:fe700000-fe71ffff 

eth2      Link encap:Ethernet  HWaddr 00:0D:B9:50:86:5A  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Memory:fe800000-fe81ffff 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:2 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:140 (140.0 B)  TX bytes:140 (140.0 B)

tc@box:~$ 

行けました! ipアドレスが振られている!
いやー、長かったなあ、、、sshで接続して操作するのも可能です。
これで多分、将来的なalsaやmpdのバージョンアップにも対応できます。

このエントリー書き上げてから気付く。 「serial experiments Lain」のserialって、これのことだったのね、多分。

シリアル接続からのログアウトの方法を書き忘れていた。

tc@box:~$ exit

Core Linux
box login: ~[fedora2].
Disconnected.
[ab@fedora2 ~]$ 

tcでログインしている状態から「exit」。
「box login:」が表示された状態になるので「~」、[fedora2]が表示されるので「.」を打つ。これで、Disconnected.

下記は、シリアル接続しているpcにsshで他からログインして操作している場合(ややこしい)。

tc@box:~$ exit

Core Linux
box login: Connection to 192.168.1.64 closed.
[ab@fedora1 ~]$ 

tcでログインしている状態から「exit」。
「box login:」が表示された状態になるので、「~」続いて「.」と打つ。
これで、Connection to 192.168.1.64 closed.
つまり、ssh接続もログアウトする。

ここらは環境によって表示が違うかも。

Edit this entry...

wikieditish message: Ready to edit this entry.
















A quick preview will be rendered here when you click "Preview" button.