MENU

Zynq上でLinuxをブートするためのSDカード作成方法

Petalinux等をZynq上でSDカードブートするためには、事前にSDカードのフォーマットやファイルシステムを作成しておく必要があります。

設定方法がややこしく毎回忘れるので、こちらの記事に残しておくことにします。

目次

環境構築

SDカードのフォーマットやパーティションの作成時にext4のファイルシステムを扱う必要があるため、Windows PCのみでは作業を進めるのが難しいです。

Windowsからext4を扱うためのフリーソフトも存在するようですが、私の場合は手持ちのUSB-HDD上に「Ubuntu Live USB」を作成し、そこで起動したUbuntuからSDカードを扱うようにしました。

Ubuntu Live USBの作成方法についてはこちらのページを参考にしました。

何らかの方法でext4を扱える環境が準備できればOKです。

SDカードの設定

Linuxが起動したらPCにSDカードを差し込み、lsblkコマンド等でSDカードが認識されているかを確認します。もしSDカードがマウントされているようであれば、予め全てアンマウントしておきます。

$ sudo umount /dev/sdX1 # Xには「a」や「b」などのアルファベットが入ります
$ sudo umount /dev/sdX2
...

パーティションの作成

fdiskコマンドを使ってSDカード上にパーティションを作成していきます。

$ sudo fdisk /dev/sdX # Xには「a」や「b」などのアルファベットが入ります
STEP
パーティションの初期化
  1. 「d」でパーティションをすべて削除
  2. 「p」で正しく初期化されたかディスクの状態を確認しておく
STEP
パーティション1の設定
  1. 「n」でパーティションを作成
  2. 「p」で「基本パーティション」を選択
  3. パーティション番号を「1」に設定
  4. First Sectorの設定は「Enter」で既定値のまま
  5. Last sectorの設定は「+512M」でパーティション1を512MiBに設定
STEP
パーティション2の設定
  1. 「n」でパーティションを作成
  2. 「p」で「基本パーティション」を選択
  3. パーティション番号を「2」に設定
  4. First Sectorの設定は「Enter」で既定値のまま
  5. Last sectorの設定は「Enter」で残りの領域すべてをパーティション2に設定
STEP
パーティションタイプの設定
  1. 「t」でパーティションのタイプを変更
  2. 「1」でパーティション1を選択
  3. 「c」でパーティションタイプをW95 FAT32 (LBA)に変更
  4. 「a」で起動フラグを設定
  5. 「1」でパーティション1にブートフラグを設定
  6. 「p」で正しく設定できたかディスクの状態を確認
  7. 「w」で保存して終了

パーティション2のタイプはデフォルトで「Linux」に設定されているはずなので、特に変更の必要はありません

16GBのSDカードを設定した場合、最終的なディスクの状態は以下のようになりました。

ファイルシステムの作成

mkfsコマンドでファイルシステムを作成します。

$ sudo mkfs.vfat -n boot /dev/sdX1 # Xには「a」や「b」などのアルファベットが入ります
$ sudo mkfs.ext4 -L root /dev/sdX2

SDカードの先頭512MBをFAT32で「boot」というラベルを付けてフォーマットし、残りの全領域をext4で「root」というラベルを付けてフォーマットしました。これで、SDカードの準備としては完了です。

SDカードを使用する際には、ブート関連のバイナリやスクリプトはFAT32領域へコピーし、Linuxのルートファイルシステムはext4領域へコピーするようにします。

$ cp images/linux/BOOT.bin <path_to_fat32>
$ cp images/linux/boot.scr <path_to_fat32>
$ cp images/linux/image.ub <path_to_fat32>
$ cp images/linux/rootfs.tar.gz <path_to_ext4>
  • URLをコピーしました!

この記事を書いた人

映像処理ハードウェアの研究開発をしています。ASIC, FPGA, 機械学習などの話題に興味があります。このブログでは、自分が最近勉強したことなどを中心にマイペースに発信していきます。

目次