LoginSignup
29
21

More than 1 year has passed since last update.

秋月のSoC基板 (白い箱) にDebianを入れる

Last updated at Posted at 2023-04-02

秋月で1,000円で販売されていた「無線モジュール付きSoC基板+白色プラスチックケース」でDebian "bullseye" を起動することができたのでメモとして残しておきます。

戦略としては以下の通りです。

  1. honeylabさん の設定を使い、BuildrootでLinuxが起動するSDカードイメージを作成する
  2. 作成されたSDカードイメージのrootfsをdebootstrapで作成したDebianのファイル群と置き換える

BuidrootでLinuxが起動するSDカードイメージを作成する

ほとんど honeylabさんの記事 で紹介されている通りです。
github.com/bakueikozo/buildroot_am3352_aki を利用します。

作業はamd64のUbuntu22.04で実施しています。

cd ~/
sudo apt -y install build-essential bc libssl-dev unzip ncurses-dev
git clone git@github.com:bakueikozo/buildroot_am3352_aki.git
cd buildroot_am3352_aki
make akiduki_am3352_defconfig
make menuconfig

menuconfig では、rootfsのファイルシステムサイズを大きくします。

Filesystem images -> exact size -> 1200M

これだけではSDカードのイメージサイズが小さいので、 board/akiduki_am3352/genimage.cfg を編集し、sizeを 512MB から 1536MB ぐらいに変更しておきます。

vi board/akiduki_am3352/genimage.cfg

もし Debian を利用せずに、Buildroot でできたイメージを使い続けるなら元の記事の説明等を見つつパスワードを設定したりSSHサーバを起動したり、DHCPの設定をするなどしておくと便利です。

もしLinuxカーネルのオプションを変更したい場合は

make linux-menuconfig

を利用してください。

ここまでできたら make を実行します。

make

完成すると output/images/sdcard.img にSDカードイメージが作成されます。

Debian に置き換える

debootstrap で rootfs を作成する

debootstrapコマンドをqemuと一緒にインストールし、実行します。

cd ~/
sudo apt-get install debootstrap qemu-user-static
sudo qemu-debootstrap --verbose --arch=armhf --variant=buildd bullseye rootfs-debian-armhf http://ftp.jp.debian.org/debian/

できたディレクトリに chroot してさらにパッケージのインストールなどを進めます。

sudo chroot ./rootfs-debian-armhf /bin/bash
apt update
apt upgrade -y
apt install -y ifupdown iproute2 iputils-ping net-tools dnsutils sudo vim screen tcpdump ca-certificates locales locales-all avahi-daemon kmod fdisk e2fsprogs curl wget openssh-server udev
echo "Asia/Tokyo" > /etc/timezone
cp /usr/share/zoneinfo/Japan /etc/localtime
locale-gen en_US.UTF-8
locale-gen ja_JP.UTF-8
ln -s /lib/systemd/system/getty@.service /etc/systemd/system/getty.target.wants/getty@ttyS0.service
apt clean

SSHでログインするためのユーザを作成します。

adduser debian
usermod -aG sudo debian

/etc/fstab などを作成します。

# fstabの作成
cat - << EOS > /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/vda2 during curtin installation
/dev/mmcblk0p2 / ext4 defaults 0 1
EOS


# ネットワークインターフェースの設定
cat - << EOS > /etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
EOS


# ホスト名の設定
echo "akiduki" > /etc/hostname


# hostsファイルの作成
cat - << EOS > /etc/hosts
127.0.0.1 localhost
127.0.1.1 akiduki

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
EOS


# aptのsourceを追加
cat - << EOS > /etc/apt/sources.list
deb http://ftp.jp.debian.org/debian bullseye main

deb http://security.debian.org/ bullseye-security main
deb-src http://security.debian.org/ bullseye-security main
EOS


# leds-gpio カーネルモジュールをロード
echo "leds-gpio" > /etc/modules-load.d/leds-gpio.conf


# Wi-SUNモジュールの安定動作対応
cat - << EOS > /etc/rc.local
#!/bin/sh

echo 0 > /sys/class/leds/wisun_reset/brightness
echo 7 > /sys/class/gpio/export
echo high > /sys/class/gpio/gpio7/direction
echo 1 > /sys/class/leds/wisun_reset/brightness

exit 0
EOS

chmod a+x /etc/rc.local

作業が終わったら chroot を抜けます。

exit

カーネルモジュールを Buildroot から持ってくる

/sys/class/leds/wisun_reset を利用したいので、カーネルモジュール一式を持ってきます。

sudo rsync -av ~/buildroot_am3352_aki/output/target/lib/modules/ ~/rootfs-debian-armhf/lib/modules/

SDカードイメージのrootfsを差し替える

ここからの操作は chroot から抜けた状態で行います。

losetup コマンドで作成されるループバックデバイスは /dev/loop0 とは限らないので、異なる場合は実際に作成されたループバックデバイスファイル名で読み替えてください。

cp ~/buildroot_am3352_aki/output/images/sdcard.img ~/debian.img
sudo losetup -f ~/debian.img -P --show
sudo mkfs.ext4 -L rootfs -F /dev/loop0p2
sudo mkdir /mnt/rootfs
sudo mount /dev/loop0p2 /mnt/rootfs
sudo rsync -av ~/rootfs-debian-armhf/ /mnt/rootfs/
sudo umount /mnt/rootfs
sync; sync; sync;
sudo losetup -d /dev/loop0

これで ~/debian.img の rootfs がDebianに置き換えられました。

あとはSDに焼いて起動すればOKです。
DHCPでIPが取得されるのでSSHでログインできます。

avahi-daemonをインストールしてあるので、同一ネットワーク上からホスト名で名前解決可能です。

ssh debian@akiduki.local

SDカードのパーティションサイズ拡大

パーティションサイズを拡大します。

sudo fdisk /dev/mmcblk0 <<EOF
p
d
2
n
p
2
32769

p
w
EOF

ファイルシステムも拡大します。

sudo /sbin/resize2fs /dev/mmcblk0p2

Wi-SUN を使ってみる

まずWi-SUNモジュールをリセットします。

echo "0" | sudo tee /sys/class/leds/wisun_reset/brightness
sleep 1
echo "1" | sudo tee /sys/class/leds/wisun_reset/brightness

/dev/ttyS1 が Wi-SUN モジュールに接続されているシリアルポートなのでボーレート115200で接続します。

sudo screen /dev/ttyS1 115200

動作確認のために SKINFO コマンドを実行してみると応答が返ってくるはずです。

SKINFO
EINFO FE80:0000:0000:0000:1207:XXXX:FEA8:XXXX 1007XXXXFEA8XXXX 21 FFFF 0 
OK
29
21
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
21