livaの雑記帳

HiKey960でDebianを起動する。

この記事の続き。

raphine.hatenablog.com

 

 

DebianをSDカードにインストールする。

ちなみに、USBメモリにインストールしようとしたが、UEFIUSBメモリを認識しないので、断念。

 

 参考:

Hikey960作業メモ5 - はまあさんはブログを使っています。

この記事だけでなく、周辺の記事も参考になる。

あとはこの記事が参照しているこれとか

HiKey960 - Xen

 

 

 

まず、クロスコンパイル環境が必要なので、aptで構築する。

# apt install g++-aarch64-linux-gnu

 

SDカード(sdXは適宜変更)をパーティショニングする。当然中身は全て消える

# sgdisk -g -o -n 1::100M -t 1:EF00 -n 2:: -t 2:8300 /dev/sdX 

# mkfs.vfat -F32 /dev/sdX1

# mkfs.ext4 -L rootfs /dev/sdX2

先頭100MをUEFIパーティション、残りをext4で初期化。 

 

マウントする。

# mkdir /mnt/linux /mnt/efi

mount /dev/sdX1 /mnt/efi

# mount /dev/sdX2 /mnt/linux

 

Linaro Releasesからlinaro-stretch-installer-XXX-XX.tar.gzをダウンロードしてくる。

 

sudo tar -xzf linaro-stretch-installer-XXX-XX.tar.gz

sudo mv binary rootfs

cd rootfs

 

 

ディスクにコピーする

$ tar -cf - * | (cd /mnt/linux;sudo tar -xf - ) 

$ cd ..

 

/mnt/linux/boot/grub/grub.cfgを作成

set default="0"
set timeout=30

menuentry 'Debian GNU/Linux' {
  search.fs_label rootfs root
  set root=($root)
  echo 'Loading Linux 4.14-arm64 ...'
  linux /boot/Image console=tty0 console=ttyAMA6,115200n8 root=/dev/mmcblk0p2 rootwait rw efi=noruntime
  echo 'Loading devicetree ...'
  devicetree /boot/hi3660-hikey960.dtb
}

  

最新版のlinuxカーネルコンパイルする。

 

linuxカーネルのソースをダウンロード

git clone --depth=1 https://github.com/96boards-hikey/linux.git --branch working-hikey960-v4.14-rc7-2017-11-03 --single-branch linux-hikey960

コンパイルする

$ cd linux-hikey960

$ export CROSS_COMPILE=aarch64-linux-gnu-
$ export ARCH=arm64
$ make defconfig
$ sudo -E make -j8

 

ディスクイメージにコピーする。

$ sudo cp -f arch/$ARCH/boot/Image /mnt/linux/boot

$ sudo cp -f arch/$ARCH/boot/dts/hisilicon/hi3660-hikey960.dtb /mnt/linux/boot/

$ sudo -E make INSTALL_MOD_PATH=/mnt/linux modules_install

 

 

hi3660-hikey960.dtbは作業ディレクトリにもコピーしておく

$ cp  -f arch/$ARCH/boot/dts/hisilicon/hi3660-hikey960.dtb ..

$ cd ..

 

 

grubもビルドする

$ git clone --depth=1 https://git.savannah.gnu.org/git/grub.git

$ cd grub

export CROSS_COMPILE=aarch64-linux-gnu-

export ARCH=arm64

./autogen.sh

$ ./configure --prefix=/usr --target=aarch64-linux-gnu --with-platform=efi

$ make -j8

$ mkdir ../grub-install

$ make DESTDIR=`pwd`/../grub-install install

$ cd ..

 

grub.configを作る

search.fs_label rootfs root
set prefix=($root)/boot/grub
configfile $prefix/grub.cfg

grub UEFIアプリを作成

$ GRUB_MODULES="boot chain configfile echo efinet eval ext2 fat font gettext gfxterm gzio help linux loadenv lsefi normal part_gpt part_msdos read regexp search search_fs_file search_fs_uuid search_label terminal terminfo test tftp time"

grub-install/usr/bin/grub-mkimage --config grub.config --dtb hi3660-hikey960.dtb --directory=`pwd`/grub-install/usr/lib/grub/arm64-efi --output=grubaa64.efi --format=arm64-efi --prefix="/boot/grub

 

# mkdir /mnt/efi/EFI

# mkdir /mnt/efi/EFI/BOOT

mv grubaa64.efi /mnt/efi/EFI/BOOT/

// ownershipがどうこうとか怒られるけど気にしない

 

 

アンマウントして、SDカードは完成

# umount /mnt/efi /mnt/linux

 

SDカードを挿して起動するが、このままだと起動しないので、UEFIにエントリを追加する。

 

まず、EscキーでUEFIの設定に入る。

Boot Maintenance Manager -> Boot Options -> Add Boot Optionと進み、

SDカードと思しき方を選択。EFI/BOOT/grubaa64.efiを選んで、適当に名前を付ける。

Boot Managerから、この新しく作成したエントリの優先順位を最高にしたいのだが、上下移動ができないので断念。でもなぜか勝手に起動するようになった。

 

とりあえず起動はするはず。apt updateした方がいいよ。

 

続き

raphine.hatenablog.com