How to use Angstrom - kinneko/BBBB GitHub Wiki

Angstromを使ってみる

 BeagleBone Blackには、AngstromというLinux環境がプリインストールされています。

 この章ではコマンドラインで使ってみましょう。sshやシリアルポートからの操作を行います。

 GUI環境でのAngstromの使い方は、別の章で行います。


Angstromとは

 Angstrom (オングストローム)は、PDA・ハンドヘルドデバイスなどのリソースの少ない機器に特化した組込みLinuxディストリビューションです。
 SHARP Zaurusシリーズ用のLinuxディストリビューションとして開発されたOpenZaurusプロジェクトや、シーメンスのSIMpad用のOpenSimpadプロジェクト、組み込みLinux用のOpenEmbeddedプロジェクトから派生しました。

 現在は、OpenEmbeddedをビルドフレームワークとして採用し、Yoctoプロジェクトの、OpenEmbeddedビルドシステム、bitbake、各種アプリケーション、BSPレイヤを使用しています。
 しかし、AngstromとOpenEmbeddedは、まったく別のプロジェクトとして運用されています。


配布形式

 ディストリビューションの配布形式は、ターゲットハードウエアによってやや異なり、基本的にはコンソールで動作するものと、Xorgを含んだGUI環境を含んだものがあります。

 組み込み向けのシステムなので、システムは一般的に構成の度にフルビルドされます。
 プロジェクトでサポートされているターゲットハードウエアであれば、「Angstromオンインビルダー」でターゲットボードを選んで、オンラインビルドを行い、出来上がったイメージをダウンロードしてインストールできます。
 しかし、いまのところ、選択肢にはBeagleBone Blackはサポートされていないので、Angstromオンラインビルダーを使ってインストールイメージをビルドし、ダウンロードすることはできません。

 BeagleBone BlackにプリインストールされているAngstromは、"Angstrom-Cloud9-IDE-GNOME-eglibc-ipk-v2012.12-beaglebone-2013.06.20.img.xz"ですので、Xorg/GNOMEが入ったGUI環境になっています。GUI環境での使い方は別の章で解説します。


パッケージ管理

 パッケージ管理システムは、ipkg(Itsy Packaging system)を使っていましたが、プロジェクトが終了したため、現在はOpenedHand Ltd.が開発したopkg形式を採用しています。

 パッケージのアーカイブ方式は、ipkです。パッケージの拡張子も.ipkになります。


各種設定

シェル

 デフォルトシェルはbashです。

root@beaglebone:~# echo $SHELL
/bin/sh

root@beaglebone:~# ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Mar 18  2013 /bin/sh -> bash

root@beaglebone:~# ls -l /bin/bash
-rwxr-xr-x 1 root root 777868 May 20  2013 /bin/bash

root@beaglebone:~# /bin/bash --version
GNU bash, version 4.2.10(1)-release (arm-angstrom-linux-gnueabi)
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

 組み込み用だからといって、busyboxのsh,ashなどの機能制限されたシェルは使っているわけではありません。

バージョン確認

 インストールされているバージョンは、angstrom-versionファイルで確認できます。

root@beaglebone:~# cat /etc/angstrom-version
Angstrom v2012.12 (Core edition)
Built from branch: angstrom-staging-yocto1.3
Revision: 93f9f674059d8003a84ef1caad39339c2d940d4d
Target system: arm-angstrom-linux-gnueabi

 "beaglebone-2013.06.20"などの細かなリビジョンは、含まれていないようです。

kernelバージョンと起動オプション

 kernelのバージョンは、3.8.13です。

root@beaglebone:/# uname -a
Linux beaglebone 3.8.13 #1 SMP Tue Jun 18 02:11:09 EDT 2013 armv7l GNU/Linux

 このkernelは、USB Hotplugのkernelイベントにバグがあるため、USBデバイスの自動認識ができません。

 事前に、USB機器を接続した状態で電源をいれないと、USBデバイスが認識されません。

 設定された起動オプションは以下でわかります。

root@beaglebone:/# cat /proc/cmdline
console=ttyO0,115200n8 quiet drm.debug=7 root=/dev/mmcblk0p2 ro rootfstype=ext4 rootwait

CPU情報

 CPUの情報から、NEONが有効なことがわかります。Linuxアーキテクチャとしては、armhfになります。

root@beaglebone:/# cat /proc/cpuinfo
processor	: 0
model name	: ARMv7 Processor rev 2 (v7l)
BogoMIPS	: 297.40
Features	: swp half thumb fastmult vfp edsp thumbee neon vfpv3 tls
CPU implementer	: 0x41
CPU architecture: 7
CPU variant	: 0x3
CPU part	: 0xc08
CPU revision	: 2

Hardware	: Generic AM33XX (Flattened Device Tree)
Revision	: 0000
Serial		: 0000000000000000

メモリ情報

 搭載メモリは512MBで、起動した状態では6割近くが空いていることがわかります。

root@beaglebone:/# cat /proc/meminfo
MemTotal:         510820 kB
MemFree:          292620 kB
Buffers:           24696 kB
Cached:           100596 kB
SwapCached:            0 kB
Active:           100288 kB
Inactive:          88736 kB
Active(anon):      63888 kB
Inactive(anon):     1368 kB
Active(file):      36400 kB
Inactive(file):    87368 kB
Unevictable:           0 kB
Mlocked:               0 kB
HighTotal:             0 kB
HighFree:              0 kB
LowTotal:         510820 kB
LowFree:          292620 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:               120 kB
Writeback:             0 kB
AnonPages:         63740 kB
Mapped:            37608 kB
Shmem:              1528 kB
Slab:              18724 kB
SReclaimable:      12352 kB
SUnreclaim:         6372 kB
KernelStack:        1448 kB
PageTables:         2584 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      255408 kB
Committed_AS:     347812 kB
VmallocTotal:     499712 kB
VmallocUsed:       30756 kB
VmallocChunk:     389116 kB

ファイルシステムと使用状況

root@beaglebone:/# cat /proc/mounts
rootfs / rootfs rw 0 0
/dev/root / ext4 rw,relatime,data=ordered 0 0
devtmpfs /dev devtmpfs rw,relatime,size=255280k,nr_inodes=63820,mode=755 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0
tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0
devpts /dev/pts devpts rw,relatime,gid=5,mode=620 0 0
tmpfs /run tmpfs rw,nosuid,nodev,mode=755 0 0
tmpfs /sys/fs/cgroup tmpfs rw,nosuid,nodev,noexec,mode=755 0 0
cgroup /sys/fs/cgroup/systemd cgroup rw,nosuid,nodev,noexec,relatime,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd 0 0
cgroup /sys/fs/cgroup/cpu,cpuacct cgroup rw,nosuid,nodev,noexec,relatime,cpuacct,cpu 0 0
cgroup /sys/fs/cgroup/memory cgroup rw,nosuid,nodev,noexec,relatime,memory 0 0
cgroup /sys/fs/cgroup/blkio cgroup rw,nosuid,nodev,noexec,relatime,blkio 0 0
systemd-1 /proc/sys/fs/binfmt_misc autofs rw,relatime,fd=23,pgrp=1,timeout=300,minproto=5,maxproto=5,direct 0 0
mqueue /dev/mqueue mqueue rw,relatime 0 0
debugfs /sys/kernel/debug debugfs rw,relatime 0 0
tmpfs /tmp tmpfs rw,relatime 0 0
gvfs-fuse-daemon /home/root/.gvfs fuse.gvfs-fuse-daemon rw,nosuid,nodev,relatime,user_id=0,group_id=0 0 0
fusectl /sys/fs/fuse/connections fusectl rw,relatime 0 0
/dev/mmcblk0p1 /media/BEAGLEBONE vfat rw,nosuid,nodev,relatime,fmask=0022,dmask=0077,codepage=437,iocharset=iso8859-1,shortname=mixed,showexec,utf8,flush,errors=remount-ro 0 0
root@beaglebone:/# cat /etc/fstab
rootfs               /                    auto       defaults              1  1
proc                 /proc                proc       defaults              0  0
devpts               /dev/pts             devpts     mode=0620,gid=5       0  0
tmpfs                /tmp                 tmpfs      defaults              0  0
root@beaglebone:/# df -h
Filesystem      Size  Used Avail Use% Mounted on
rootfs          1.7G  1.1G  540M  67% /
/dev/root       1.7G  1.1G  540M  67% /
devtmpfs        250M     0  250M   0% /dev
tmpfs           250M  4.0K  250M   1% /dev/shm
tmpfs           250M  272K  250M   1% /run
tmpfs           250M     0  250M   0% /sys/fs/cgroup
tmpfs           250M   12K  250M   1% /tmp
/dev/mmcblk0p1   70M   56M   15M  80% /media/BEAGLEBONE

ディレクトリ構造

 組み込みをターゲットにしているため、最近のPC向けディストリビューションに較べて、単純な構成になっています。PC向けディストリビューションが内部構造の標準化のために採用している、Linux Standard Base (LSB) には従っていません。そのため、/rootが/home/rootだったり、違和感があるかもしれません。構成としては、古いBSD UNIXシステムに近いものです。

root@beaglebone:/# ls
bin   dev  home  lost+found  mnt   run	 sys  usr
boot  etc  lib	 media	     proc  sbin  tmp  var
/
+bin: 一般ユーザーが利用可能なプログラムの置き場所
+dev: デバイスを使うためのファイルの置き場所
+home/ : ユーザーのホームディレクトリの置き場所
|    +root: rootユーザーのホームディレクトリ
+lost+found: ファイルシステムの破損などで管理が不明になったファイル置き場
+mnt: 外部メディアなどを後から一時的にマウントするための場所
+run: udev,systemdなどが利用するtmpfs(RAM上に作られた仮想ディスク)
+sys: sysfsが利用しているkernelメモリ空間を可視化したもの
+usr: ユーザーが共有するファイルの置き場
+boot: 起動に使用したinitramfs領域をマウントしている場所
+etc: 設定ファイルの置き場所
+lib: 実行ファイル用の共有ライブラリの置き場所
+media: CDやDVDなどを自動的に接続するマウントポイント
+proc: procfsが利用しているkernelメモリ空間を可視化したもの
+sbin: 管理者が使用するコマンド置き場
+tmp: 一時的に使用するファイルの置き場
+var: ログファイルや作業ファイルの置き場

コマンド

 /bin, /sbin, /usr/bin, /usr/sbinなどに入っているコマンド群は、一般的なPC向けのLinuxディストリビューションで採用されているようなコマンドではなく、組み込み用途で機能制限を行って小さく作られているものです。オプションがなかったり、出力結果が異なったりすることがありますので、注意が必要です。

 1つのバイナリに複数のコマンドを詰め込み、オプションでそれぞれの機能を呼び出すbuxybox, tinyloginの他、coreutils, util-linuxもパッケージに含まれる全てのコマンドをサポートせずに、最小限の必要なものだけを厳選した専用の小型版が使われています。grep、gzip、hdparm、iproute2、procps、shadow、kmod、systemctl、sysvinit、procps、debianutils、sed、tar、udisksなども複数の機能を統合した独自のものが採用されています。

デフォルト設定のユーザー

 ユーザーは以下が設定されています。

root@beaglebone:~# cat /etc/passwd
root:x:0:0:root:/home/root:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
messagebus:x:999:998::/var/lib/dbus:/bin/false
xuser:x:1000:1000::/home/xuser:/bin/sh
avahi:x:998:996::/var/run/avahi-daemon:/bin/false
mpd:x:997:995::/var/lib/mpd:/bin/sh
gdm:x:42:1002:gdm:/var/lib/gdm:/bin/sh

 パスワードは、shadowパスワードで管理されています。

rootアカウントでのパスワードの追加

 rootアカウントにパスワードが設定されていないので、設定しておきます。

root@beaglebone:~# passwd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

ユーザーの追加

 root権限で作業を行うのは、危険を伴いますので、一般ユーザーを作っておきましょう。

 adduserも、useraddも使用できます。

root@beaglebone:~# adduser [username]
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

 adduserコマンドは、tinyloginが使われています。

root@beaglebone:~# which adduser
/bin/adduser
root@beaglebone:~# ls -l /bin/adduser
lrwxrwxrwx 1 root root 14 Mar 18  2013 /bin/adduser -> /bin/tinylogin
root@beaglebone:~# useradd [username]
root@beaglebone:~# passwd [username]
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

 一方、useraddは単体のプログラムです。

root@beaglebone:~# which useradd
/usr/sbin/useradd
root@beaglebone:~# ls -l /usr/sbin/useradd
-rwxr-xr-x 1 root root 68780 May 20  2013 /usr/sbin/useradd

rootユーザーへの昇格

 suコマンドが使えます。

root@beaglebone:/# su kinneko
kinneko@beaglebone:/$ su
Password:
root@beaglebone:/#

 しかし、これもまた危険を伴うので、sudoを入れておいたほうがいいかもしれません。

root@beaglebone:/# opkg install sudo

root@beaglebone:/# vi /etc/sudoers
##
## User privilege specification
##
root ALL=(ALL) ALL
[username] ALL=(ALL) ALL

sshでrootログインの禁止

 SSHの設定ファイルは以下にあります。rootでログインできないようにしておきましょう。
 ExecStartのdropbear起動オプションに"-w"を追記して再起動します。

root@beaglebone:/# vi /lib/systemd/system/[email protected]

ExecStart=-/usr/sbin/dropbear -i -r /etc/dropbear/dropbear_rsa_host_key -w -p 22

root@beaglebone:/# /etc/init.d/dropbear restart

ホスト名の変更

 デフォルトでは、"beaglebone"に設定されています。複数の端末を扱う場合などでは、ホスト名を変更しておくとよいでしょう。

root@beaglebone:/# cat /etc/hosts
127.0.0.1	localhost.localdomain		localhost

127.0.0.1 beaglebone

シャットダウンと再起動

 システムを終了する場合は、必ずシャットダウンを行ってください。

 いきなり電源を切ったりすると、ファイルシステムが破損して起動できなくなることもありますので、注意が必要です。

root@beaglebone:/# shutdown –h now

 リブートもできます。

root@beaglebone:/# shutdown –r now

 rebootコマンドも使えます。

ネットワーク設定

 ネットワーク設定は、ConnMan (Connection Manager)で管理されています。

 ConnManは、IntelとNokiaの支援でオープンソース開発されている、組み込みのLinuxシステム向けに開発されたインターネットコネクションの管理デーモンです。なるべく少ないリソースで動作するように設計されており、モジュールシステムによって機能を拡張でき、プラグインを介して有線または無線を問わずにすべての通信をサポートしています。

 現在のインターフェイスの設定は/var/lib/connman/以下で見ることができます。

root@beaglebone:/# cat /var/lib/connman/ethernet_9059af4a6608_cable/settings
[ethernet_9059af4a6608_cable]
Name=Wired
AutoConnect=true
Modified=2000-01-01T00:00:17.236506Z
IPv4.method=dhcp
IPv4.DHCP.LastAddress=192.168.0.9
IPv6.method=auto
IPv6.privacy=disabled

 設定はD-BUSを経由して行いますが、制御用のコマンドは/usr/lib/connman/test/以下に置かれています。

root@beaglebone:/# ls /usr/lib/connman/test/
backtrace		monitor-connman		simple-agent
connect-vpn		monitor-services	test-clock
disable-tethering	service-move-before	test-compat
disconnect-vpn		set-domains		test-connman
enable-tethering	set-global-timeservers	test-counter
get-global-timeservers	set-ipv4-method		test-manager
get-proxy-autoconfig	set-ipv6-method		test-new-supplicant
get-services		set-nameservers		test-session
get-state		set-proxy		test-supplicant
list-services		show-introspection

 現在の状態を取得するには、get-servicesコマンドを使います。

root@beaglebone:/# /usr/lib/connman/test/get-services
[ /net/connman/service/ethernet_9059af4a6608_cable ]
    IPv6.Configuration = { Method=auto Privacy=disabled }
    AutoConnect = true
    Name = Wired
    Nameservers = [ 192.168.0.1 ]
    Provider = { }
    Favorite = true
    Domains.Configuration = [ ]
    Timeservers.Configuration = dbus.Array([], signature=dbus.Signature('s'), variant_level=1)
    State = online
    Proxy = { Method=direct }
    Nameservers.Configuration = [ ]
    IPv4 = { Netmask=255.255.255.0 Gateway=192.168.0.1 Method=dhcp Address=192.168.0.9 }
    Timeservers = dbus.Array([dbus.String(u'192.168.0.1')], signature=dbus.Signature('s'), variant_level=1)
    IPv6 = { }
    Domains = [  ]
    Ethernet = { Interface=eth0 MTU=1500 Method=auto Address=90:59:AF:4A:66:08 }
    Security = [ ]
    Proxy.Configuration = { }
    Type = ethernet
    Immutable = false
    IPv4.Configuration = { Method=dhcp }

 DNSの設定をやってみます。"ethernet_9059af4a6608_cable"の部分は、デバイス毎に異なります。

root@beaglebone:/# /usr/lib/connman/test/set-nameservers
Usage: /usr/lib/connman/test/set-nameservers <service> [nameserver*]

root@beaglebone:/# /usr/lib/connman/test/set-nameservers ethernet_9059af4a6608_cable 8.8.8.8 8.8.4.4
Setting nameserver to ['8.8.8.8', '8.8.4.4']

 固定IPアドレスの設定には、set-ipv4-methodコマンドを使います。

root@beaglebone:/# /usr/lib/connman/test/set-ipv4-method
Usage: /usr/lib/connman/test/set-ipv4-method <service> [off|dhcp|manual <address> [netmask] [gateway]]

root@beaglebone:/# /usr/lib/connman/test/set-ipv4-method ethernet_9059af4a6608_cable manual 192.168.1.100 255.255.255.0 192.168.1.1
Setting method manual for ethernet_9059af4a6608_cable

 あまり直感的ではないですね。

タイムゾーンの設定

 タイムゾーン用のファイルは、パッケージとしてインストールされているようです。

root@beaglebone:/# opkg list | grep tzdata
tzdata - 2012d-r3.0

 東京に設定します。

root@beaglebone:/# rm /etc/localtime
root@beaglebone:/# ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

 再起動後に反映されます。

時刻同期

 BeagleBone BlackのカレンダーICは、電池でバックアップされていないので、起動するとタイマーは2000年01月01日の零時からカウントされます。そのため、ネットワークを使った時刻同期が必要です。

 cronでは、ntpdate-syncを使った時刻同期が設定されています。

root@beaglebone:/# crontab -l
30 * * * *    /usr/bin/ntpdate-sync silent

 ntpdate-syncは、"/etc/default/ntpdate"を参照して、時刻同期サーバーを決めていますが、設定ファイルには、何も書かれていません。

root@beaglebone:/# cat /etc/default/ntpdate
# Configuration script used by ntpdate-sync script

NTPSERVERS=""

# Set to "yes" to write time to hardware clock on success
UPDATE_HWCLOCK="no"

 pool.ntp.orgなど、使用可能なNTPサーバーを指定しておきます。

root@beaglebone:/# date
Sat Jan  1 02:59:41 JST 2000

root@beaglebone:/# /usr/bin/ntpdate-sync

root@beaglebone:/# date
Wed Oct 30 15:45:46 JST 2013

 時刻同期が実行されました。


⚠️ **GitHub.com Fallback** ⚠️