0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MPFS-DISCO-KIT 向け Ubuntu 22.04 の構築(Linux Kernel linux4microchip+fpga-2024.09 編)

Last updated at Posted at 2024-12-19

はじめに

MPFS-DISCO-KIT(Microchip PolarFire SoC FPGA Discovery Kit) で動作する Ubuntu 22.04 を構築する方法をいくつかの記事に分けて説明します。

上記の記事で構築した MPFS-DISCO-KIT 向け Ubuntu 22.04 Root File System、Linux Kernel、Boot Loader は次の URL にて公開しています。なお、これらはオフシャルなものではなく、筆者の魔改造がはいっています。ご使用の際はこの点にご留意してください。

linux4microchip は Microchip Technology 社が提供する linux Kernel で、次の URL で公開されています。

その中でも、Microchip PolarFire SoC FPGA に対応した Linux Kernel は linux4microchip+fpga- で始まるタグがついています。この記事では、linux4microchip+fpga-2024.09 をビルドする方法を紹介します。

なお、この記事で紹介する Linux Kernel linux4microchip+fpga-2024.09 のビルド済みのファイルは以下の URL にあります。ビルドが面倒な方はどうぞ。

Linux Kernel の構築

必要な環境

  • riscv64-unknown-linux-gnu-

Linux Kernel 構築環境の準備

まずビルド用のディレクトリを用意します。ここでは develop-linux4microchip+fpga-2024.09 とします。以降はこのディレクトリで行います。

shell$ mkdir develop-linux4microchip+fpga-2024.09
shell$ cd    develop-linux4microchip+fpga-2024.09

ソースコードのダウンロード

https://github.com/linux4microchip/linux から linux4microchip+fpga-2024.09 をダウンロードします。

shell$ git clone --depth 1 --branch linux4microchip+fpga-2024.09 https://github.com/linux4microchip/linux linux4microchip+fpga-2024.09

構築の準備

環境変数を設定します。アーキテクチャ(ARCH)に riscv を指定します。ここでは、クロスコンパイルに使うツールチェーン(CROSS_COMPILE) に riscv64-unknown-linux-gnu- を指定します。この変数は構築する環境にあわせてください。その後、Microchip PolarFire SoC 用のコンフィギュレーション定義ファイルを使って構築の準備をします。

shell$ cd linux4microchip+fpga-2024.09
shell$ export ARCH=riscv
shell$ export CROSS_COMPILE=riscv64-unknown-linux-gnu-
shell$ make mpfs_defconfig

次のようなファイルを用意して .config にマージします。

mpfs_cmdline.cfg
CONFIG_CMDLINE_BOOL=y
CONFIG_CMDLINE="earlycon=sbi root=/dev/mmcblk0p3 rootwait uio_pdrv_genirq.of_id=generic-uio"
shell$ ./scripts/kconfig/merge_config.sh .config ../mpfs_cmdline.cfg 
Using .config as base
Merging ../mpfs_cmdline.cfg
Value of CONFIG_CMDLINE is redefined by fragment ../mpfs_cmdline.cfg:
Previous value: CONFIG_CMDLINE="earlycon uio_pdrv_genirq.of_id=generic-uio"
New value: CONFIG_CMDLINE="earlycon=sbi root=/dev/mmcblk0p3 rootwait uio_pdrv_genirq.of_id=generic-uio"

#
# configuration written to .config
#
Value requested for CONFIG_CMDLINE_BOOL not in final .config
Requested value:  CONFIG_CMDLINE_BOOL=y
Actual value:     

カーネルと Debian パッケージの構築

shell$ export DTC_FLAGS=--symbols
shell$ make deb-pkg

構築したカーネルのイメージとデバイスツリーを ビルド用のディレクトリにコピー

無事にカーネルのイメージ(arch/riscv/boot/Image.gz) と Microchip 用のデバイスツリー(arch/riscv/boot/dts/microchip/*) が出来たら、それを ビルド用のディレクトリにコピーします。その際、作ったカーネルのバージョン等をわかりやすくするため名前を変更しておきます。

shell$ cp arch/riscv/boot/Image.gz ../vmlinuz-linux4microchip+fpga-2024.09
shell$ install -d                  ../files
shell$ cp .config                  ../files/config-linux4microchip+fpga-2024.09
shell$ install -d                         ../devicetrees/linux4microchip+fpga-2024.09
shell$ cp arch/riscv/boot/dts/microchip/* ../devicetrees/linux4microchip+fpga-2024.09

fitImage のビルド

** 注意: fitImage は https://github.com/ikwzm/MPFS-FPGA-Linux-Kernel-6.6/tree/linux4microchip%2Bfpga-2024.09 には含まれていません。ここではあくまでも作りかただけを紹介しています。 **

カーネルのイメージとデバイスツリーを fitImage ビルド用のディレクトリにコピー

shell$ cd linux4microchip+fpga-2024.09
shell$ install -d                                          ../fitImage.files
shell$ cp arch/riscv/boot/Image.gz                         ../fitImage.files
shell$ cp arch/riscv/boot/dts/microchip/mpfs-disco-kit.dtb ../fitImage.files
shell$ cd ../fitImage.files

fit.its

fitImage を作るために fit.its を用意します。

shell$ cat > fit.its << EOT
/dts-v1/;

/ {
    description = "Kernel fitImage for linux4microchip+fpga-2024.09/mpfs-disco-kit";
    #address-cells = <1>;

    images {
        kernel-1 {
            description = "Linux Kernel";
            data = /incbin/("Image.gz");
            type = "kernel";
            arch = "riscv";
            os = "linux";
            compression = "gzip";
            load = <0x80200000>;
            entry = <0x80200000>;
        };

        fdt-microchip_mpfs-disco-kit.dtb {
            description = "Flattened Device Tree blob";
            data = /incbin/("mpfs-disco-kit.dtb");
            type = "flat_dt";
            arch = "riscv";
            compression = "none";
            load = <0x8a000000>;
        };
    };

    configurations {
        default = "conf-microchip_mpfs-disco-kit.dtb";

        conf-microchip_mpfs-disco-kit.dtb {
            description = "1 Linux kernel, FDT blob";
            kernel = "kernel-1";
            fdt = "fdt-microchip_mpfs-disco-kit.dtb";
        };
    };
};
EOT

fitImage のビルド

u-boot-tools の mkimage を使って fitImage を作ります。

shell$ mkimage -f fit.its ../fitImage
FIT description: Kernel fitImage for linux4microchip+fpga-2024.09/mpfs-disco-kit
Created:         Thu Dec 19 12:01:21 2024
 Image 0 (kernel-1)
  Description:  Linux Kernel
  Created:      Thu Dec 19 12:01:21 2024
  Type:         Kernel Image
  Compression:  gzip compressed
  Data Size:    5476497 Bytes = 5348.14 KiB = 5.22 MiB
  Architecture: RISC-V
  OS:           Linux
  Load Address: 0x80200000
  Entry Point:  0x80200000
 Image 1 (fdt-microchip_mpfs-disco-kit.dtb)
  Description:  Flattened Device Tree blob
  Created:      Thu Dec 19 12:01:21 2024
  Type:         Flat Device Tree
  Compression:  uncompressed
  Data Size:    20028 Bytes = 19.56 KiB = 0.02 MiB
  Architecture: RISC-V
  Load Address: 0x8a000000
 Default Configuration: 'conf-microchip_mpfs-disco-kit.dtb'
 Configuration 0 (conf-microchip_mpfs-disco-kit.dtb)
  Description:  1 Linux kernel, FDT blob
  Kernel:       kernel-1
  FDT:          fdt-microchip_mpfs-disco-kit.dtb

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?