====== SD Card を root filesystem として起動する ======
\\
SDCard にファームウェアと同じ root filesystem を使用して、LTE 接続などを利用できる環境で起動します。\\
※ 下記のような用途には向いていません。
* ファームウェア更新で **中身を一括で更新** したい
* どの時点のファームウェアが入っているか **管理** したい
\\
===== 手順 =====
==== SD Card の準備 ====
MA-X3xx の実機や PC など、ext4 ファイルシステムを扱うことができる機器に SD Card を挿入します。
[ 710.631902] mmc1: new ultra high speed SDR104 SDHC card at address 59b4
[ 710.632946] mmcblk1: mmc1:59b4 ABLG0 14.5 GiB
[ 710.635670] mmcblk1: p1
\\
=== パーティションの作成(し直し) ===
購入したばかりの SD Card など、パーティション構成が用途に合わない場合はパーティションの作成を行います。\\
2 番目のパーティションを root filesystem として使用するようになっているので、
* mmcblk1p0: 適当なサイズ(200MiB くらい)、ID: 適当(下記例では 0x0c)
* mmcblk1p1: 残り全部、もしくは使いたいサイズ、ID: 0x83(default)
としてパーティションを作成します。
root@metis:~# fdisk /dev/mmcblk1
Welcome to fdisk (util-linux 2.37.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): d
Selected partition 1
Partition 1 has been deleted.
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-30318591, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-30318591, default 30318591): +200M
Created a new partition 1 of type 'Linux' and of size 200 MiB.
Command (m for help): n
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 2
First sector (411648-30318591, default 411648):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (411648-30318591, default 30318591):
Created a new partition 2 of type 'Linux' and of size 14.3 GiB.
Command (m for help): t
Partition number (1,2, default 2): 1
Hex code or alias (type L to list all): 0c
Changed type of partition 'Linux' to 'W95 FAT32 (LBA)'.
Command (m for help): p
Disk /dev/mmcblk1: 14.46 GiB, 15523119104 bytes, 30318592 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000
Device Boot Start End Sectors Size Id Type
/dev/mmcblk1p1 2048 411647 409600 200M c W95 FAT32 (LBA)
/dev/mmcblk1p2 411648 30318591 29906944 14.3G 83 Linux
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
root@metis:~#
\\
=== ファイルシステム作成 ===
2番目のパーティションに、ext4 のファイルシステムを作成します。
root@metis:~# mkfs.ext4 -m 0 /dev/mmcblk1p2
mke2fs 1.46.5 (30-Dec-2021)
Discarding device blocks: done
Creating filesystem with 3738368 4k blocks and 934720 inodes
Filesystem UUID: f9aa2e47-df5c-4273-8e42-2bb2adf1fc34
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
root@metis:~#
※ **-m 0**(root 用予備領域作らない) のオプションは任意
\\
=== SD Card ファイルシステムの mount ===
適当なディレクトリに SD Card のファイルシステムを mount します。
root@metis:~# mount /dev/mmcblk1p2 /mnt/sd
root@metis:~#
\\
=== ファームウェア root filesystem アーカイブの展開 ===
USB Memory や SFTP などで持ってきて、mount した場所で展開します。
root@metis:~# cd /mnt/sd/
root@metis:/mnt/sd# tar axf /tmp/MAX3xx_rootfs_jammy_v6_1_1.tar.xz
root@metis:/mnt/sd#
root@metis:/mnt/sd# ls -l
total 76
lrwxrwxrwx 1 root root 7 Dec 15 2021 bin -> usr/bin
drwxr-xr-x 2 root root 4096 Dec 5 08:27 boot
drwxr-xr-x 4 root root 4096 Aug 21 08:40 dev
drwxr-xr-x 78 root root 4096 Dec 2 07:58 etc
drwxr-xr-x 3 root root 4096 Aug 21 08:40 home
lrwxrwxrwx 1 root root 7 Dec 15 2021 lib -> usr/lib
drwx------ 2 root root 16384 Dec 19 16:58 lost+found
drwxr-xr-x 2 root root 4096 Aug 21 08:40 media
drwxr-xr-x 5 root root 4096 Aug 21 08:40 mnt
drwxr-xr-x 3 root root 4096 Aug 21 08:40 opt
drwxr-xr-x 2 root root 4096 Aug 21 08:40 proc
drwx------ 4 root root 4096 Dec 2 07:58 root
drwxr-xr-x 12 root root 4096 Sep 13 10:34 run
lrwxrwxrwx 1 root root 8 Dec 15 2021 sbin -> usr/sbin
drwxr-xr-x 2 root root 4096 Aug 21 08:40 srv
drwxr-xr-x 2 root root 4096 Aug 21 08:40 sys
drwxrwxrwt 2 root root 4096 Dec 5 08:23 tmp
drwxr-xr-x 11 root root 4096 Aug 21 08:40 usr
drwxr-xr-x 12 root root 4096 Aug 21 08:40 var
root@metis:/mnt/sd#
\\
=== Kernel module のコピー ===
起動している Kernel の Kernel module を SD Card にコピーします。
これをコピーしておかないと、driver が組み込めず LTE など各種デバイスが使用できません。
本体のファームウェアが変更された場合もコピーし直しが必要です。
root@metis:/mnt/sd# cd lib/modules
root@metis:/mnt/sd/lib/modules# cp -af /lib/modules/6.1.46 .
root@metis:/mnt/sd/lib/modules# ls -l
total 4
drwxr-xr-x 3 root root 4096 Dec 2 08:00 6.1.46
root@metis:/mnt/sd/lib/modules#
\\
=== SD Card の umount ===
unmount しておきます。
root@metis:/mnt/sd/lib/modules# cd
root@metis:~# umount /mnt/sd
root@metis:~#
\\
==== 起動 ====
=== DIPSW の設定 ===
SD Card を root filesystem として起動するため、DIPSW-2 のみ ON(下側) に設定し、再起動します。
root@metis:~# reboot
Session terminated, killing shell... ...killed.
Terminated
user1@metis:~$
\\
=== 起動確認 ===
bootloader の出力から、SD Card を root filesystem として起動していることを確認できます。
WDT: Not found!
MMC: mmc@fa10000: 0, mmc@fa00000: 1
In: serial@2810000
Out: serial@2810000
Err: serial@2810000
PMIC: fixup registers
RTC: DD3225TS detected.
Net: eth0: ethernet@8000000port@1
Hit any key to stop autoboot: 0
SF: Detected xt25q64 with page size 256 Bytes, erase size 4 KiB, total 8 MiB
Reading 65536 byte(s) at offset 0x00000000
## Executing script at 80000000
off
* DIPSW: 02 <----- DIPSW 02 (2のみ ON なので、0010b -> 2)
* INITSW: off
* Alarm: 0
* Wakeup source:
* Has 5G module
Setting bus to 1
* Power-ON 5G module
Setting bus to 1
SF: Detected xt25q64 with page size 256 Bytes, erase size 4 KiB, total 8 MiB
* firmhist_offset: SPI flash: 8 MiB
selected to boot: 1
* rootfs: /dev/mmcblk1p2 (ext4) <----- SD Card ext4 を選択
* Board Option Code: 03
* Module code: 03
* XIO ID: 00
* SIM: 0
* Firmware Area to load Kernel: 1
* Mobile device: FM160
21284872 bytes read in 225 ms (90.2 MiB/s)
59369 bytes read in 3 ms (18.9 MiB/s)
* Load and Apply device-tree overlay: module_code:03
1143 bytes read in 2 ms (557.6 KiB/s)
Setting bus to 1
## Flattened Device Tree blob at 88000000
Booting using the fdt blob at 0x88000000
Loading Device Tree to 000000008febd000, end 000000008fffffff ... OK
[ OK ] Started Getty on tty1.
[ OK ] Started Serial Getty on ttyS3.
[ OK ] Reached target Login Prompts.
[ OK ] Started OpenBSD Secure Shell server.
Ubuntu 22.04.3 LTS metis ttyS3
metis login:
\\
以降、通常のファームウェアと同じく、LTE 接続なども機能していることが確認できます。
metis login: root
Password:
Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 6.1.46 aarch64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
root@metis:~# ifconfig
eth0: flags=4163 mtu 1500
inet 192.168.253.253 netmask 255.255.255.0 broadcast 192.168.253.255
inet6 fe80::280:6dff:fe9c:7a prefixlen 64 scopeid 0x20
ether 00:80:6d:9c:00:7a txqueuelen 1000 (Ethernet)
RX packets 192 bytes 12576 (12.5 KB)
RX errors 0 dropped 158 overruns 0 frame 0
TX packets 11 bytes 866 (866.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth1: flags=4163 mtu 1500
inet 192.168.254.254 netmask 255.255.255.0 broadcast 192.168.254.255
inet6 fe80::280:6dff:fe9c:7b prefixlen 64 scopeid 0x20
ether 00:80:6d:9c:00:7b txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 11 bytes 866 (866.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 108 bytes 8000 (8.0 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 108 bytes 8000 (8.0 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
root@metis:~# mobile_info
--- Name: FM160 ---
Revision(GMR): 89618.1000.00.01.06.11
ICCID: 89423xxxxxxxxxxxxxx
IMEI: 86093xxxxxxxxxx
IMSI: 44120xxxxxxxxxx
Tel Number: +81200100xxxxxxx
Antenna:
- Level: 3
- RSSI: -63.0 dBm
- RSRP: -93.0 dBm
- RSRQ: -8.5 dB
PDP Context:
- PDPTYPE: IP
- APN: soracom.io
Network:
- PLMN: 44051
- Name: KDDI
Attached: true
PPP carrier: false
Module:
- Temperature: 32.00 degC
- Clock: Synchronized (2023/12/19 17:07:31, 1 seconds ago)
root@metis:~# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/root 14612256 317404 14278468 3% / <----- SD Card を root filesystem として使用している
tmpfs 969884 0 969884 0% /dev/shm
tmpfs 387956 864 387092 1% /run
tmpfs 5120 0 5120 0% /run/lock
tmpfs 193976 0 193976 0% /run/user/0
root@metis:~#