93564


下記のリンク先にあるようにqemuで自分でビルドしたカーネルでBusyBoxを動かしてみたくてDockerコンテナ内でLinuxカーネルをクロスビルドしているのですが、ビルドが終了しても`arch/arm64/boot`にkernel
imageがありません。  
なぜでしょうか?

Dockerコンテナはarchlinux:base-develを使用しています。

ビルドは

[code]

    export ARCH=arm64
    export CROSS_COMPILE=aarch64-linux-gnu-
    
[/code]

とした状態で

[code]

    make defconfig
    make Image dtbs -j8
    
[/code]

Linux 6.1.8をビルドしようとしています。

参考リンク先  
<https://www.honamium.net/post/run_linux_arm64/>

* * *

リンク先の通りに実行してみましたがうまく行きませんでした  
Imageは存在しませんでした。

[code]

    $ make ARCH=arm64 defconfig
    $ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image dtbs -j`nproc`
    
[/code]


CC BY-SA 4.0
2023-01-24T10:00:46.483
93546
2023-01-26T04:53:35.073
2023-01-26T04:53:35.073
3060
5246
question
linux build kernel
ARM64 向け Linux Kernel をビルドしたが arch/arm64/boot に Image が生成されない


### 短い回答:

  * [archlinux:base-devel](https://hub.docker.com/layers/library/archlinux/base-devel/images/sha256-e690019ae204ea3d59906824d1a2e91c958c54240002a4749c3f86f9cdb9b643?context=explore) のコンテナイメージだけでは、コンパイルに必要なパッケージがいくつか不足しています。
  * 参照している記事は `apt` を使っているので Debian/Ubuntu かと思われますが、「Arm64向けLiuxの準備」の部分をよく読むべきです。
  * コマンドの実行結果 (エラーメッセージ) にも重要なヒントとなる情報が含まれています。  
自分自身で確認したり、質問時にも提示すべきです。

* * *

### 試した手順:

カーネル ソースコードのダウンロードと、`make ARCH=arm64 defconfig` までは大きな問題はありません。(実際には `git` や
`ssh` コマンドも不足しているので、参照している記事そのままのコマンドでのクローンはできませんでした)

以下のコマンドを実行すると、クロスコンパイラの "aarch64-linux-gnu-gcc が見つからない" とエラーになります。

[code]

    # make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image dtbs -j`nproc`
    arch/arm64/Makefile:36: Detected assembler with broken .inst; disassembly will be unreliable 
      SYNC    include/config/auto.conf 
    scripts/Kconfig.include:39: C compiler 'aarch64-linux-gnu-gcc' not found 
    make[2]: *** [scripts/kconfig/Makefile:77: syncconfig] Error 1 
    make[1]: *** [Makefile:708: syncconfig] Error 2 
    make: *** [Makefile:809: include/config/auto.conf] Error 2 
    make: *** [include/config/auto.conf] Deleting file 'include/generated/rustc_cfg' 
    make: *** [include/config/auto.conf] Deleting file 'include/generated/autoconf.h'
    
[/code]

パッケージを追加インストールします。

[code]

    # pacman -S aarch64-linux-gnu-gcc
    
[/code]

再度 make を実行すると、一見エラーは出ませんが、`ls ./arch/arm64/boot/` で確認すると `dtbs`
はあるものの、`Image` は確かに生成されていません。

今度は make 実行時にターゲット指定を "Image" のみにして実行してみると、"bc コマンドが見つからない" とエラーが出ていました。

[code]

    # make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image -j`nproc` 
      CC      kernel/bounds.s 
    /bin/sh: line 1: bc: command not found 
    /bin/sh: line 1: echo: write error: Broken pipe 
      CHKSHA1 include/linux/atomic/atomic-arch-fallback.h 
    make[1]: *** [Kbuild:24: include/generated/timeconst.h] Error 127 
    make[1]: *** Waiting for unfinished jobs.... 
      CHKSHA1 include/linux/atomic/atomic-instrumented.h 
    make: *** [Makefile:1298: prepare0] Error 2 
    
[/code]

パッケージを再度追加インストールします。

[code]

    $ pacman -S bc
    
[/code]

パッケージ追加後に改めて make を実行することで、Image も生成されることを確認しました。

[code]

    # make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image -j`nproc`
    
[/code]


CC BY-SA 4.0
2023-01-26T04:37:28.083
93564
2023-01-26T04:37:28.083
3060
93546
answer