Linuxの最近の記事

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 などがビルドできる環境に構築しなおす必要がある。

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でのビルドの方が夢広がる?

CCACHE+DISTCCに設定

| コメント(0) | トラックバック(0)

DISTCCで分散コンパイルを試したが、KERNELのコンパイルは大半が同じコードをコンパイルしていると推定。CCACHEを追加することで無駄なコンパイル時間を短縮する。特に設定はしていないが

makeを

make -jXX CC="ccache distcc arm-slackware-linux-anueabi-gcc" CXX="ccache distcc arm-slackware-linux-gnueabi-g++"

でキャッシュの動作を確認した。

SlackwarearmのCurrentはarm v7以上しかリリースされていない。arm v6のRaspberry Pi Zeroは14.2までがリリースされている。distccでコンパイルを助けるにもgccのバージョンを合わせる必要がある。よって、Zeroの14.2の環境をcurrentにアップグレードが望まれる。現状、本家では望み薄なので、自分でビルドするしかない。最終的にslackware 15でRaspberry PI Zeroもサポートされることを夢見るがそれまでは、コツコツとCurrentをビルドする。まずは、開発環境から、Crossコンパイル環境はZeroにも構築しているが、ネーティブに以下をビルドしなおす。パッケージはここらに置いておく。

  • binutils-2.32
  • glibc-2.29
  • gcc-8.3.0
    • gccをコンパイルするにgnatのバージョンのみが古くうまくコンパイル出来なかった。古いバージョンにすべてを揃えることで問題は解決した。

このアーカイブについて

このページには、過去に書かれた記事のうちLinuxカテゴリに属しているものが含まれています。

前のカテゴリはVirtual Machineです。

次のカテゴリはPCです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

2019年11月

          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30