前回、backportsのドキュメントを軽く読み、ソースコードをダウンロードしてみた。今回、BD-SABRE-LITEの標準カーネル3.14向けにbackportsをビルドしてみようと思う。

【関連記事】
【組込ボードで無線LAN】②(無線LANカードN-6300を組込ボードに接続するには?)
【組込ボードで無線LAN】⑧(iwのビルド:後編-1)【組込ボードで無線LAN】⑰(QCA9377-5を挿してみた)
【組込ボードで無線LAN】㉓(backportをビルドしてみる‐2)
  • まずはbackportsをPCでビルド
パッケージリリースモードの説明を改めて読んでみる。PCでビルドするにはこんな感じらしい。

Building backports follows the same build mechanism as building the Linux kernel.

# as a user
make menuconfig
make -j4
# as root
make install
# reboot and enjoy
実際にやってみる。
$ cd ~/backports/backports-5.2.8-1
$ make menuconfig

開いた。とりあえずcfg80211とnl80211 testmode commandはビルドしておくか...。
1

変更前
<> cfg80211 - wireless configuration API
     *** CFG80211 needs to be enabled for MAC80211 ***

変更後
 <M> cfg80211 - wireless configuration API
[ * ]     nl80211 testmode command
[   ]     enable developer warnings (NEW)
[   ]     cfg80211 certification onus (NEW)
[ * ]     enable powersave by default (NEW)
[   ]     cfg80211 DebugFS entriesonus (NEW)
[ * ]     support CRDA (NEW)
[   ]     cfg80211 wireless extension compatibility (NEW)

1

メイクする。compat.koとcfg80211.koが生成された。これならARM版も作れそうな感じ。
$ make -j4
cc -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer   -c -o conf.o conf.c
cc   conf.o zconf.tab.o   -o conf
#
# configuration written to .config
#
Building backport-include/backport/autoconf.h ... done.
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/compat/backport-4.5.o…
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/compat/main.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/net/wireless/core.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/compat/backport-4.6.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/compat/backport-4.7.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/net/wireless/sysfs.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/net/wireless/radiotap.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/compat/backport-4.8.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/compat/backport-4.10.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/compat/backport-4.18.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/compat/backport-5.2.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/net/wireless/util.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/net/wireless/reg.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/net/wireless/scan.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/compat/backport-genetlink.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/compat/verification/verify.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/compat/verification/pkcs7.asn1.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/compat/verification/pkcs7_verify.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/compat/verification/pkcs7_parser.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/net/wireless/nl80211.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/net/wireless/mlme.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/compat/verification/x509.asn1.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/net/wireless/ibss.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/compat/verification/x509_akid.asn1.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/compat/verification/x509_cert_parser.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/compat/verification/x509_public_key.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/compat/verification/pkcs7_trust.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/compat/verification/key.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/compat/verification/public_key.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/net/wireless/sme.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/net/wireless/chan.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/compat/verification/rsa.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/compat/verification/bignum.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/compat/verification/md_wrap.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/compat/verification/md.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/compat/verification/sha256.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/net/wireless/ethtool.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/net/wireless/mesh.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/compat/verification/oid.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/compat/verification/asn1parse.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/compat/verification/rsapubkey.asn1.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/compat/lib-asn1_decoder.o
  GEN     /home/pavement1234/backports/backports-5.2.8-1/compat/oid_registry_data.c
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/net/wireless/ap.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/net/wireless/trace.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/compat/lib-refcount.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/compat/lib-oid_registry.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/net/wireless/ocb.o
  LD [M]  /home/pavement1234/backports/backports-5.2.8-1/compat/compat.o
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/net/wireless/pmsr.o
  GEN     /home/pavement1234/backports/backports-5.2.8-1/net/wireless/shipped-certs.c
  CC [M]  /home/pavement1234/backports/backports-5.2.8-1/net/wireless/shipped-certs.o
  LD [M]  /home/pavement1234/backports/backports-5.2.8-1/net/wireless/cfg80211.o
  Building modules, stage 2.
  MODPOST 2 modules
  CC      /home/pavement1234/backports/backports-5.2.8-1/compat/compat.mod.o
  CC      /home/pavement1234/backports/backports-5.2.8-1/net/wireless/cfg80211.mod.o
  LD [M]  /home/pavement1234/backports/backports-5.2.8-1/compat/compat.ko
  LD [M]  /home/pavement1234/backports/backports-5.2.8-1/net/wireless/cfg80211.ko

  • 次にbackportsをBD-SABRE-LITE向けにビルド
とはいえ、まずPC向けビルドをクリーンしとく。
$ make clean
さて、クロスコンパイル向けのビルドはこんな感じ。

To cross compile:

set -a
CROSS_COMPILE=${CROSS_COMPILE}
ARCH=${TARGET_CPU}
KLIB_BUILD=${DEV_PATH}/${LINUX_DIR}
KLIB=${TARGET_ROOT_ON_HOST}
set +a
make oldconfig  # menuconfig worked here too
make
make install
何はともあれ、やってみる。WEBサイトの例ではCROSS_COMPILEなどを個別指定しているが私はYoctoの環境設定スクリプトで代替した。で、make oldconfigを実行したらエラー発生。Yoctoのスクリプトがいけないのか?WEBサイトの方法に忠実にやってみるか...。
$ . /opt/poky/1.8.2/environment-setup-cortexa9hf-vfp-neon-poky-linux-gnueabi
$ make oldconfig
arm-poky-linux-gnueabi-gcc  -march=armv7-a -marm  -mthumb-interwork -mfloat-abi=hard -mfpu=neon -mtune=cortex-a9 --sysroot=/opt/poky/1.8.2/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer   -c -o conf.o conf.c
arm-poky-linux-gnueabi-gcc  -march=armv7-a -marm  -mthumb-interwork -mfloat-abi=hard -mfpu=neon -mtune=cortex-a9 --sysroot=/opt/poky/1.8.2/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer   -c -o zconf.tab.o zconf.tab.c
arm-poky-linux-gnueabi-gcc  -march=armv7-a -marm  -mthumb-interwork -mfloat-abi=hard -mfpu=neon -mtune=cortex-a9 --sysroot=/opt/poky/1.8.2/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed  conf.o zconf.tab.o   -o conf
./kconf/conf: 1: ./kconf/conf: Syntax error: word unexpected (expecting ")")
Makefile.real:27: ターゲット 'oldconfig' のレシピで失敗しました
make[1]: *** [oldconfig] エラー 2
Makefile:40: ターゲット 'oldconfig' のレシピで失敗しました
make: *** [oldconfig] エラー 2

というわけで、こいつらを解決する必要がある。
CROSS_COMPILE=${CROSS_COMPILE}
ARCH=${TARGET_CPU}
KLIB_BUILD=${DEV_PATH}/${LINUX_DIR}
KLIB=${TARGET_ROOT_ON_HOST}
Yocto環境設定スクリプトとかYoctoのディレクトリを見ながら設定してみた...がKLIB、KLIB‗BUILDがいまいちわからん。テキトーに設定してmake oldconfigしたが、やはりエラー発生。迷走し始めているので、Yocto環境変数を設定してビルドしたときのエラー解析を進めてみる。
$ set -a
$ CROSS_COMPILE=/opt/poky/1.8.2/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi-
$ ARCH=arm
$ KLIB_BUILD=/opt/poky/1.8.2/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi/lib/modules/3.14.28-1.0.0_ga+yocto+g7ff62b2
$ KLIB=/opt/poky/1.8.2/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi
$ set +a
$ make oldconfig
/--------------
| Your kernel headers are incomplete/not installed.
| Please install kernel headers, including a .config
| file or use the KLIB/KLIB_BUILD make variables to
| set the kernel to build against, e.g.
|   make KLIB=/lib/modules/3.1.7/
| to compile/install for the installed kernel 3.1.7
| (that isn't currently running.)
\--
Makefile:40: ターゲット 'oldconfig' のレシピで失敗しました
make: *** [oldconfig] エラー 1
./kconf/conf: 1: ./kconf/conf: Syntax error: word unexpected (expecting ")")で検索してみたら、いくつかヒットした。そのうちの1つがコレ
このエラーの内容と、chmod +x が必要なことから推測すると、lineFollow2 は、g++ でコンパイルしてできた実行ファイル(いわゆるバイナリー)ではなくて、何かのテキストファイルのようです。(C++のプログラムが、実行時に syntax error になるとは考えられないです。コンパイル時になるはずですよね)
ターミナルから head lineFollow2 とタイプしてファイルの内容の先頭部分を表示することで、そのファイルが何者なのか、なぜそこに作られているのか、といったことを調べてみてください。
って書いてから思いましたが、これは、もしかして、Pythonスクリプトですかね。いずれにせよ、そのファイルの1行目に文法エラーがあるそうなので、head コマンドで、内容を確認してみてください。
なんかわかってきた。confという実行ファイルに問題がありそう。

PCでmake oldconfigすると~/backports/backports-5.2.8-1/kconf/confという実行ファイルができる。PCでビルドしたので当然だがx86_64アーキテクチャである。
(一旦ログアウト)
$ cd ~/backports/backports-5.2.8-1/
$ make clean
$ make oldconfig
c -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer   -c -o conf.o conf.c
cc   conf.o zconf.tab.o   -o conf
#
# configuration written to .config
#
$ objdump -f ~/backports/backports-5.2.8-1/kconf/conf
/home/pavement1234/backports/backports-5.2.8-1/kconf/conf:     ファイル形式 elf64-x86-64
アーキテクチャ: i386:x86-64, フラグ 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
開始アドレス 0x00000000004021c0
次にYoctoでmake oldconfig。objdumpしてみるとelf32-little(ARMまでは判別できず)だがビルド環境のCPU(x86_64)では実行できない形式であることが判明。
(一旦ログアウト)
$ cd ~/backports/backports-5.2.8-1/
$ make clean
$ . /opt/poky/1.8.2/environment-setup-cortexa9hf-vfp-neon-poky-linux-gnueabi
$ make oldconfg
arm-poky-linux-gnueabi-gcc  -march=armv7-a -marm  -mthumb-interwork -mfloat-abi=hard -mfpu=neon -mtune=cortex-a9 --sysroot=/opt/poky/1.8.2/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer   -c -o conf.o conf.c
arm-poky-linux-gnueabi-gcc  -march=armv7-a -marm  -mthumb-interwork -mfloat-abi=hard -mfpu=neon -mtune=cortex-a9 --sysroot=/opt/poky/1.8.2/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer   -c -o zconf.tab.o zconf.tab.c
arm-poky-linux-gnueabi-gcc  -march=armv7-a -marm  -mthumb-interwork -mfloat-abi=hard -mfpu=neon -mtune=cortex-a9 --sysroot=/opt/poky/1.8.2/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed  conf.o zconf.tab.o   -o conf
./kconf/conf: 1: ./kconf/conf: Syntax error: word unexpected (expecting ")")
Makefile.real:27: ターゲット 'oldconfig' のレシピで失敗しました
make[1]: *** [oldconfig] エラー 2
Makefile:40: ターゲット 'oldconfig' のレシピで失敗しました
make: *** [oldconfig] エラー 2
$ objdump -f ~/backports/backports-5.2.8-1/kconf/conf
/home/pavement1234/backports/backports-5.2.8-1/kconf/conf:     ファイル形式 elf32-little
アーキテクチャ: UNKNOWN!, フラグ 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
開始アドレス 0x00009b48

寄り道したが、KLIB、KLIB_BUILDの指定方法がいまいちわからないので、ひとまず休憩。

続く
IMG_6303




スポンサードリンク