Raspberry piでのパッケージビルド、ストレージのアクセスが頻繁な為、SDの寿命が問題となる(かも)。安価なFlashドライブをビルド領域としていたが、古いノートPCのHDDがあるので、ストレージをSDからHDDへ変更する。

Raspberry Pi 3B+以前の場合OTPに設定を書き込むことで設定を変更する。

config.txtに以下を書き込んでリブートすると設定完了

program_usb_boot_mode=1
progrum_usb_boot_timeout=1

TimeアウトはHDDの場合に必要とのこと。

Raspberry Pi 4からはEEPROMに変更になったので、この方法ではない模様。USBブートの情報は検索中。

現状、ARMのアーキテクチャのarmv5te, armv6zkでSlackwareをビルド出来ていないパッケージは以下。

  • dシリーズでrust
  • xapシリーズでmozilla-firefox, mozilla-thanderbrid

最近解決したパッケージはlinuxdoc-tools。これで、gtkdocが使えるようになり、glib2にdtkdocを梱包できる様に変わった。

rustはprebuildのパッケージをダウンロードして、パッケージを作製したが、armv7lの環境でarm-uknown-linux-gnueabihfなターゲットのcompileが解決できない?のmozila系のビルドが今のところできていない。メモリーのアロケーションの問題の様で、 Raspberry Pi 4の4GBのメモリーで力づくの解決方法を試している。が

Webブラウザは本家のslackwarearm-1.42も同胞されていない。armv5/v6でメモリーが限定されている環境で、Firefoxなどパフォーマンスとしても無理がある。これ以上ビルドを目指すかは考えもの。

新デバイスのRaspberry pi 4B ネットワークが不調? デバイス自身が不良品かは不明なので、調査開始。

  • 優先LANだが、bcmgenet fd580000.genet eth0: Link is Downが頻発。
  • WiFiのwlan0が立ち上がってこない。

まずは、WiFiだが、ここの情報によるとfiremwareの情報を変更する必要がある。

とりあえず。/lib/firmware/brcm/brcmfmac43455-sdio.txtのなかの、bootflags3を書き換える。

boardflags=0x00480201
boardflags2=0x40800000
boardflags3=0x48200100

boardflags=0x00480201
boardflags2=0x40800000
boardflags3=0x44200100

と変更してリーブート。

[    3.723549] brcmfmac: F1 signature read @0x18000000=0x15264345
[    3.735312] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43455-sdio for chip BCM4345/6
[    3.739270] usbcore: registered new interface driver brcmfmac
[    3.910731] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43455-sdio for chip BCM4345/6
[    3.926395] brcmfmac: brcmf_c_preinit_dcmds: Firmware: BCM4345/6 wl0: Mar  1 2015 07:29:38 version 7.45.18 (r538002) FWID 01-6a2c8ad4
[    4.261144] device-mapper: ioctl: 4.39.0-ioctl (2018-04-03) initialised: dm-devel@redhat.com
[    4.564032] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
[    4.908895] uart-pl011 fe201000.serial: no DMA platform data
[    4.973945] FAT-fs (mmcblk0p1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
[    5.036284] Bluetooth: Core ver 2.22
[    5.036355] NET: Registered protocol family 31
[    5.036363] Bluetooth: HCI device and connection manager initialized
[    5.036979] Bluetooth: HCI socket layer initialized
[    5.036992] Bluetooth: L2CAP socket layer initialized
[    5.037035] Bluetooth: SCO socket layer initialized
[    5.059674] Bluetooth: HCI UART driver ver 2.3
[    5.062450] Bluetooth: HCI UART protocol H4 registered
[    5.065547] Bluetooth: HCI UART protocol Three-wire (H5) registered
[    5.068103] Bluetooth: HCI UART protocol Broadcom registered
[    5.205920] Bluetooth: hci0: BCM: chip id 107
[    5.210287] Bluetooth: hci0: BCM: features 0x2f
[    5.235511] Bluetooth: hci0: BCM4345C0
[    5.237722] Bluetooth: hci0: BCM4345C0 (003.001.025) build 0000

と言うことでWiFiとBluetoothが動いているか?これから動作確認する。

最近amazonでRaspberry Pi 4が販売(出品)されている。一部、技適がまだとの告知がついていたが。9/4に認証されていることが分かった(感謝)。USBの設計に問題があり改善が必要との報告があるが、今のところハードのバージョンの更新はなさそうなので。購入してみた。

従来から3B+で64Bit環境まで確認しているが、Pi4ではブートの為のファームウェアが追加されている様だ。とりあえず、slackwarearm/slarm64向けにファームウェアのbootパッケージも作成した。

Raspberry 4では32bitはkernel7l.img, 64bitはkernel8.imgでブートできる。3B+までは、64bitはkernel8.imgがあるとブートしていたが、4Bのファームウェアでは64bitでブートするにはconfig.txtに

arm_64bit=1

の追加が必要。

armv5te環境にABIがarm-slackware-linux-gnueabiの開発環境を構築している。しばらくllvmなclangのビルドに失敗していた。もとのslackware-14.2の環境は古くて、最新の8.01のビルドには使えない。GNUのgcc/g++で構築をする必要があるが、Projectの構築がうまく行かない。仕方ないのでProjectを省略した形でビルドしてきた。エラーの原因はGNU gccなlibc++でATOMICなエラーが発生。LDFLAGSに-latomicを書くと良いと言う検索結果から、試しにスクリプトを修正して構築しなおしたら。うまくいった。ここにファイルは置いておく。

ビルドのコツは、debianからパッチを持ってきた。(必要かどうかはわからない)

以前のものはbinutilsのリンカーが動作しなかった。

   -DLLVM_HOST_TRIPLE=$SLK_ARCH_BUILDTARGET \
    -DCMAKE_C_COMPILER_TARGET=$SLK_ARCHBUILDTARGET \
    -DLLVM_DEFAULT_TARGET_TRIPLE=$SLK_ARCH_BUILDTARGET \
    -DCMAKE_ASM_COMPILER_TARGET=$SLK_ARCH_BUILDTARGET \

あたりで、arm-slackware-linux-gnueabiを強制してgccでコンパイル。出来たパッケージでprojectを含んでコンパイルしなおす手順で成功。最初からLDFLAGS=-latomicを試して入ればよかったかもしれない。

Slackwareのビルド環境がgcc-9.2に以降した。x86_64のMultibuildとarmの環境はまだ9.1のままだが、クロスコンパイルの環境を9.2へ以降する。今までの環境はARCH毎にコンパイルしてたままのバイナリーを用いている。通常のSlackwareはstrip --strip-unneededで不要な領域を削除したバリナリーを準備している。クロクコンパイルの環境も同様にstripした環境を準備する。stripコマンドはbinutilsパッケージに搭載されている標準のパッケージでは、対象環境が限定している為に、クロスビルドの環境(glibc)によってはstripが認識できないためにビルドが停止する。そのためbinutilsのターゲットはarm-elf, aarch-elf, i386-elf, x86_64-elf などがビルドできる環境に構築しなおす必要がある。

Raspberry Pi 4が発表されてしばらく経つ、早く日本でも使用できることを夢みて、方向性について検討。いつの間にか、Slarm64なる64ビットなSlackwarearmな環境もUnofficialに提供されている。Slamd64の同様にOfficialな動きに繋がることを機体する。

そこで、以前に検討していた64ビット化も方向の一つとして、動作環境を導入した。OfficalのSlackwarearm-currentと同じハードウェア(Raspberry Pi 3B+)にUSBに挿入したSDを作製し、ブート時rootドライブを/dev/mmcblk0pXか/dev/sdaXをcmdline.txtを書き換えることでブートできるように設定した。実は、Raspbery Pi 3B+は2台有しているので、もう一台を、ABIが-gunueabiな-march=armv5teのビルド環境と、ABIが-gnueabihfな-march=armv6zk環境な選択ブートなマシーンも準備した。

構築したパッケージは各々slackwarearmv5, slackwarearmv6, slackwarearmv8として置いておくこととする。パッケージの内容については保証されていない。

armv6アーキテクチャの確認としてQEMUの環境を再整備した。Slackwarearmのネイティブなarmv7-a(slackwarearm-current)とarmv6で独自にビルドした。mini-rootfsを準備。armv6(arm1176)はraspberry pi 1もしくはzero相当のkernelをビルド。

armv6(arm1176)の設定で、ビルドしたmini-rootfsがブートできることを確認した。Raspberry PI zeroが無いので実環境でブートの確認はできていない。

Slackwarearm-14.2のCPUアーキテクチャはarmv5teとしてコンパイルしてきたが。

  • Slackwarearm-currentを"-march=armv6zk -mtune=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard"でビルドしなおすとzeroで夢(Slackware-15)になるだろうか?

とにかく、実証機(Raspberry PI zero)がダメなので、QEMUで環境作るか。でも実機がないなら夢でおわるか。そのそもZeroの目的はWiFiルータではなかったかな。専用機を購入した方が安い。

次の夢は、Raspberry PI 4でaarm64でのビルドの方が夢広がる?

Raspberry Pi 4が発表されている。最新のアーキテクチャで期待している。

古いアーキテクチャでRaspberry Pi Zeo (WH)で夢をみる為にパッケージのビルドを始めたが、悲しいことに、ハードウェアを壊してしまった様だ。OTGでUSBからネットワーク接続していたが、GPIOでシリアル接続を弄っていて、配線を間違えたか、OTG接続が故障、USBとしては動作している。接続をWiFiに変更して接続していたが、気が付くと、発熱していているのに気づく。電源を一旦OFFして再度投入したが、LEDは点灯しない。

暫く、パッケージのビルドは停止する。Raspbery Pi 4を購入することがあれば、再度 Zeroもついでに購入するかもしれない。その時のために記録。

  • パッケージのビルドの方針を決める必要あり。
  • ZeroはSlackware 14.2のABIはarm-slackware-linux-gnueabiでCFLAGを-march="armv5te -mfloat-abi=Soft"で新な-currentを参考にパッケージをビルドしてきた。hard-floatの部分でビルドできていない環境がある。
  • パッケージraspbianはzeroのABIも-linux-gnueabihfで多分、CFLAG="-mfloat-abi=hard -mfpu=vfp -mcpu=arm1176jzf-s"とか?でビルドするとarmv6環境で疑似ハードフロートで構築できるかも?試しに、Currentをこのオプションでビルドしてminirootfsのパッケージを置き換えてブートしてみたが、3B+では動くものの、Zeroではinitのところでパニックしている。ここで、故障により検証が止まってしまった。もともと、armv7-aに最適化してヒビルドされているので、aaa_elflibあたりの古いライブラリーも作りなおす必要があるのかな?