« 仕事納め | トップページ | ZYNQのLinuxでWiFiを使う方法 »

2017.12.29

ZYNQ LinuxのUbuntuを入れた後の作業

ZynqBerryまたはGigaZeeにUbuntu Linux 12.11を入れて、リッチなLinux環境の構築をする方法を説明します。

XILINXのWikiにある「RAMDISKで作るLinux」はシンプルすぎます。パッケージも管理できないし、名前解決にnmbdも使えません。この章ではLinaro Ubunuを使用してリッチなLinuxを作る方法を説明します。

なお、ZynqBerryについてはこちらのページをご覧ください。

新しいSDカードの準備

まず、新しいSDカードを用意します。

開発用のホストPC(Linux。仮想マシンで可)でgpartedを実行し、第一パーティションを64MB程度のfat32で、第二パーティションを5GB程度のext4で作成します。

Linaro Ubuntuのダウンロード

次に、下記のURLからLinaro Ubuntuをダウンロードします。

https://releases.linaro.org/archive/12.11/ubuntu/precise-images/

12.11というと少し古いように感じますが、このバージョンが安定しています。Ubuntu-desktopの中のlinaro-precise-ubuntu-desktop-20121124-560.tar.gzをダウンロードします。

第1パーティションに入れるもの

下記のファイルをWindows上でコピーします。

  • BOOT.bin (ZynqBerryの場合は不要)
  • uImage
  • devicetree.dtb
  • uEnv.txt
  • u-boot.rgba  (起動画面を出すための画像ファイル)

第2パーティションに入れるもの

第2パーティションには、ルートファイルシステムを入れます。具体的には、ubuntu-desktopのlinaro-precise-ubuntu-desktop-20121124-560.tar.gzをダウンロードして解凍したものを入れますが、単純にgunzipとtarで解凍するのではなく、下記のようにします。

sudo tar --strip-components=3 -C /(マウント先) -xzpvf linaro-precise-ubuntu-desktop-20121124-560.tar.gz binary/boot/filesystem.dir

インストール後の作業

SDカードが出来上がったら、ZynqBerryを起動します。デフォルトでは基本的に何もないので、いろいろと必要なものをインストールします。

時刻の設定

ただし、その前にZynqBerryを起動したら、ntpdate ntp.nict.jpでネットワーク経由で時刻を合わせるか、date -s “2017-12-29 23:45:00″のようにして時刻を設定します。そうしないと、今後の作業で作るファイルの日付が1970になってしまい、わからなくなってしまいます。

パッケージ情報を最新に

最初に、

apt-get update
apt-get upgrade
apt-get dist-upgrade

を行って、apt-getやパッケージを最新の状態にします。

タイムゾーンの設定

デフォルトではUTCになっているので、

ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

とやって、日本時刻が適用されるようにします。

各種ツールのインストール

人によって好みはあると思いますが、

apt-get install ssh
apt-get install emacs
apt-get install httpd
apt-get install samba

などを入れておくとよいでしょう。sambaを入れると、nmbdが一緒に入り、Windowsから容易に名前解決できるようになります。

emacsの設定

また、emacsを入れた直後はバックスペースが効きません。バックスペースが使えるようにするには、.emacsファイルを作成し、

(keyboard-translate ?\C-h ?\C-?)
(global-set-key (kbd "C-h") 'delete-backward-char)

と記述しておきます。

ホスト名の設定

vi /etc/hosts
vi /etc/hostname

でホスト名を設定しておきます。

avahi-daemonのアンインストール

avahi-daemonというパッケージがデフォルトで有効になっています。これはLinux等で使われる名前解決のしくみなのですが、Windowsはこのプロトコルに応答しないため、TeraTermなどでSSH接続する際にとても応答が遅くなってしまいます。

apt-get remove avahi-daemon

module.depの作成

以下のコマンドでmodule.depを作成しておきます。

mkdir /lib/modules/4.9.0-xilinx-00051-gb450e90/
touch /lib/modules/4.9.0-xilinx-00051-gb450e90/modules.dep

apt-keyのインストール

作業をしていると、どこかで

W: There is no public key available for the following key IDs:

というエラーが出ることがあります。以下のコマンド

apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32

を入力し、鍵をインストールします。

起動の高速化

Ubuntuは起動する際にネットワークがつながっていなかったりすると、

Waiting for network configuration
Waiting up to 60more seconds for network configuration

というメッセージが出て、最初に60秒、そしてまた60秒間、待たされます。

これは/etc/init/failsafe.confというファイルで

    # The point here is to wait for 2 minutes before forcibly booting
    # the system. Anything that is in an "or" condition with 'started
    # failsafe' in rc-sysinit deserves consideration for mentioning in
    # these messages. currently only static-network-up counts for that.

        sleep 20

    # Plymouth errors should not stop the script because we *must* reach
    # the end of this script to avoid letting the system spin forever
    # waiting on it to start.
        $PLYMOUTH message --text="Waiting for network configuration..." || :
        sleep 40

        $PLYMOUTH message --text="Waiting up to 60 more seconds for network configuration..." || :
        sleep 59
        $PLYMOUTH message --text="Booting system without full network configuration..." || :

などと、sleepが記述されていることが原因です。

つまり、/etc/init/failsafe.confの中にあるsleep60を短くしてしまえば起動が早くなります。

しかし、このsleepが実行される原因は、/etc/udev/rules.d/70-persistent-net.rulesというファイルにあります。

root@zynqberry:~# cat  /etc/udev/rules.d/70-persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.

# USB device 0x2019:0xab2a (usb)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="**:**:**:**:**:**", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="wlan*", NAME="wlan0"

のようになっているので、、# USB device以降の部分を消してしまうというのも手です。

Ubuntu 14.04へのアップグレード

Ubuntu12では物足りない、という人はUbuntu14にアップグレードしてください。

上記の作業を行ったのち、

do-release-upgrade

でアップグレードできます。

その後、

apt-get update
apt-get upgrade

を行いますが、依存関係が壊れているので、

apt-get -f install

で修復します。

ここまでの作業でアップグレードは完了です。

Ubuntu14にすると、自動的にいろいろなパッケージがアップグレードされていて、特にPython3がインストールされているなど、好印象です。

しかし、Ubuntu14.04にするとGUI画面でのログインができなくなるため、GUIが重要なアプリケーションを作る場合は避けたほうが良いでしょう。

|

« 仕事納め | トップページ | ZYNQのLinuxでWiFiを使う方法 »

コメント

コメントを書く



(ウェブ上には掲載しません)




« 仕事納め | トップページ | ZYNQのLinuxでWiFiを使う方法 »