Install Ubuntu18 Bionic arm(zynq) and x86(PC) まとめ

Ubuntu 18が出たので、やりかたを確かめつつまとめ

とりあえずARMで動かすUbuntu18をセットアップするためにLinuxが必要.

Bash On Windows

もあると便利。

Ubuntu18をVMplayerにインストールする。

x86_64 Windows上のVMplayerに
Ubuntu18をインストールする
Ubuntu 18.04 LTS (Bionic Beaver)

VMplayer上のインストールはほとんど迷うことが無い。
インストールメディアにISOを指定すれば後はウィザードに従ってインストールされる。

Ubuntuの設定

日本語の設定が、前よりも簡単になっていた。
Ubuntuの設定から
f:id:katakanan:20180502111344p:plain

言語メニューを選択
f:id:katakanan:20180502111534p:plain

もう既に日本語化してしまったが、
「インストールされている言語の管理」→「言語のインストールと削除」
で日本語を追加する。

日本語を追加したら、
「メニューとウィンドウの言語」でそれを一番上に持ってくる。

あとは再起動すれば日本語になっている。

fishのインストール

shellにはzshよりもfishをおすすめしたい

sudo apt-add-repository ppa:fish-shell/release-2
sudo apt-get update
sudo apt-get install fish

u-bootのビルド

まずはu-bootをビルドするのに必要なものをインストールする。
fishなら以下をコピペするだけでOK

sudo apt-get -f install
sudo apt-get install fakeroot build-essential kexec-tools
sudo apt-get install kernel-wedge gcc-arm-linux-gnueabi
sudo apt-get install u-boot-tools libncurses5
sudo apt-get install libncurses5-dev libelf-dev
sudo apt-get install asciidoc binutils-dev git
sudo apt-get build-dep linux
sudo sudo apt-get install bc

まずarm gccがバージョン6以上であるかを確認する。

arm-linux-gnueabi-gcc -v

version 7.3.0であった。
ここでversion 6.x 以上出ないと、xilinxリポジトリの最新のubootのビルドに失敗する。

つぎにxilinxリポジトリからu-bootをクローンしてくる

git clone https://github.com/Xilinx/u-boot-xlnx

追加。

cd u-boot-xlnx
echo "CONFIG_OF_EMBED=y" >> configs/zynq_zybo_defconfig

これがないと
No valid device tree binary found
とエラーが出る。

ビルド

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- zynq_zybo_config
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-

でu-bootというのができている。
これをu-boot.elfとリネームしてどこかに置いておく。
(そうしないとNo Execution Address JTAG handoffと出る。
Solved: ZC706 QSPI Boot: FSBL does not hand off to U-Boot - Community Forums)

kernelのビルド

git clone https://github.com/Xilinx/linux-xlnx

いま時点でmasterはkernel 4.x (≧4.9)
(新しいgccではkernel 3.xはビルドできない。)

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- xilinx_zynq_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- UIMAGE_LOADADDR=0x8000 uImage

で\arch\arm\bootにuImageができている。

bitファイルをつくる

Zybo [Reference.Digilentinc]
の下の方にZybo Base Systemがある
f:id:katakanan:20180504000026p:plain
おそらく初代Zyboがもう作られてないからdeprecatedである。
この中の、\zybo_base_system\source\vivado\hw\zybo_bsd
をVivado 2017.3で新しく保存し直した。

(このままBitstreamを作ろうとしたところ
BTNs_4Bitなどで原因不明のエラーが出たので、
一度AXI-GPIOをすべて消してからIO Plannningで割り当て直したら直った。)

Bitstreamを出す。
File→Export で include bitstreamにチェックを入れてOK

devicetree

引き続きVivadoから
File→Launch SDKを行う。
HDFが自動で読み込まれる。

zybo 割り込み② SDK, devicetree編 - e-tipsmemo
と同じ。

Devicetree generatorを入れる

git clone https://github.com/Xilinx/device-tree-xlnx

SDKから
Xilinx→Repositoriesで
Newを押すとダイアログが出るので、クローンしたリポジトリを指定する。
f:id:katakanan:20180504003349p:plain:w400
OK

File→New→Board Support Packageで
Board Support Package OSから
device_treeを選択。
f:id:katakanan:20180504003555p:plain:w400

bootargsに

console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=1

を入れる。
f:id:katakanan:20180504003712p:plain:w400
zynq-7000.dtsの
gem0をokayにする。

gem0: ethernet@e000b000 {
	compatible = "cdns,zynq-gem", "cdns,gem";
	reg = <0xe000b000 0x1000>;
	status = "okay";
	interrupts = <0 22 4>;
	clocks = <&clkc 30>, <&clkc 30>, <&clkc 13>;
	clock-names = "pclk", "hclk", "tx_clk";
	#address-cells = <1>;
	#size-cells = <0>;
};

system-top.dtsに

mdio  {
	compatible= "cdns,macb-mdio";
	reg= <0xe000b000 0x1000>;
	clocks = <&clkc 30>, <&clkc 30>, <&clkc 13>;
	clock-names = "pclk", "hclk", "tx_clk";
	#address-cells = <1>;
	#size-cells = <0>;
	eth_phy0:phy@1 {
		compatible = "realtek,RTL8211E";
		device_type = "ethernet-phy";
		reg = <0x1>;
	};
};

を追加する。

ここと同じ。
zybo ethernet Ubuntu 17 ipv4 - e-tipsmemo

DTC入れる。

sudo apt-get install device-tree-compiler

コンパイル

dtc -I dts -O dtb -o devicetree.dtb system-top.dts
dtc -I dtb -O dts -o devicetree.dts devicetree.dtb

FSBL

SDK
File→New→Application Proejct
fsbl入れてNextでZynq FSBLを選択。
f:id:katakanan:20180504005818p:plain:w300f:id:katakanan:20180504005829p:plain:w300
Finish

\zybo_base_system\source\vivado\SDK\fsbl
のfsbl_hook.c全部をプロジェクトのfsblのsrc/fsbl_hook.cにコピペ。
(bitstreamを作るときにZynqからIICやethernetを出してないとここでエラーがでる。)
fsbl_debug.hに追加

#define FSBL_DEBUG_INFO

ビルドしてfsbl\debug\fsbl.elfがあればOK

BOOT.binを作る。

f:id:katakanan:20180504010420p:plain:w400
から下のAdd→Browse..でu-boot.elfを選択する。
OK

uEnv.txt

ZYBO用U-Bootを、ブート時にuEnv.txtを読むようにして、かつBOOT.binから起動できるようにする - Qiita

uenvcmd=fatload mmc 0 0x03000000 uImage && fatload mmc 0 0x02A00000 devicetree.dtb && bootm 0x03000000 - 0x02A00000

Ubuntu18のRoot File Systemのインストール

必要

sudo apt-get install debootstrap
sudo apt-get install qemu-user-static

sudo mount -o loop /dev/sdX2 /mnt/sd

これを行う
Ubuntu root file system for armhf - e-tipsmemo

起動後

SDカードをzyboに挿して
ピンヘッダーをSDにしておけば起動するはず。
最初は一般ユーザーでしかログインできない。
そのあとsuでrootになる。

その後の設定は
zybo ethernet Ubuntu 17 ipv4 - e-tipsmemo
の後半

echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf
sysctl -p
ip a

ipv4が降ってこない。

vi /etc/netplan/01-netcfg.yaml

network:
    version: 2
    renderer: networkd
    ethernets:
        eth0:
            dhcp4: yes

スペース4つでないと怒られる?

netplan --debug generate
netplan apply

Ubuntu systemd getty autologin via Serial Console - e-tipsmemo
ログイン周り。

systemctl edit --force serial-getty@ttyPS0

universeリポジトリの追加。

sudo apt-get install software-properties-common
sudo apt-get update
sudo add-apt-repository universe

でOKのはず。

apt-get install sl
sl

f:id:katakanan:20180504090820p:plain:w400