====== SDカードに root filesystem を作成する (Obsolete) ====== [[mae3xx_ope:bootloader_operation:start]] で、SD カードに作成した Debian を root filesystem として起動する方法を紹介しました。\\ ここでは、SD カードに root filesystem を作成する方法を紹介します。実機での作業例となります。 \\ ===== 準備 ===== 適当な容量の SD カードを用意します。\\ 開発に使う場合、市販の安価な製品 (MLC) ではなく、書換可能回数が多い **SLC** の製品を使用するほうが良い((ざっくり計算ですが、書換寿命が100倍(!)ほど違います。))と思います。 {{:mae3xx_ope:extend_by_sd:sdcard.jpg|産業用 SLC SDカード}} ※ SLC の SD カードは、弊社でも販売しております。お問い合わせは [[http://www.centurysys.co.jp/company/contact.html#init_tab2|こちら]] からお願い致します。 \\ ==== SD カードのフォーマット ==== fdisk, mkfs.ext4 コマンドにより、 * パーティションの作成 * ファイルシステムの作成 を行います。 \\ === パーティションの作成 === 新品の SD カードは、VFAT フォーマットになっており、パーティションの ID も "FAT" になっているため、\\ fdisk コマンドで パーティション ID を "Linux" に変更します。 user1@plum:~$ sudo fdisk /dev/mmcblk0 [sudo] password for user1: Command (m for help): t Selected partition 1 Hex code (type L to list codes): 83 Changed system type of partition 1 to 83 (Linux) Command (m for help): p Disk /dev/mmcblk0: 2002 MB, 2002780160 bytes 77 heads, 26 sectors/track, 1953 cylinders, total 3911680 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 Disk identifier: 0x00073ed7 Device Boot Start End Blocks Id System /dev/mmcblk0p1 * 2048 3908608 1953280+ 83 Linux Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: If you have created or modified any DOS 6.x partitions, please see the fdisk manual page for additional information. Syncing disks. user1@plum:~$ \\ === ファイルシステムの作成 === ext4 ファイルシステムを作成します。\\ inode の数が不足することがありますので、"-i 4096" オプションを付与しておきます。 user1@plum:~$ sudo mkfs.ext4 -m 0 /dev/mmcblk0p1 -i 4096 mke2fs 1.42.9 (4-Feb-2014) Discarding device blocks: done Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 488400 inodes, 488320 blocks 0 blocks (0.00%) reserved for the super user First data block=0 Maximum filesystem blocks=503316480 15 block groups 32768 blocks per group, 32768 fragments per group 32560 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912 Allocating group tables: done Writing inode tables: done Creating journal (8192 blocks): done Writing superblocks and filesystem accounting information: done user1@plum:~$ \\ ==== SD カードのマウント ==== フォーマットが完了しましたので、適当なディレクトリ (例: /mnt/sd) に mount しておきます。 user1@plum:~$ sudo mount /dev/mmcblk0p1 /mnt/sd/ user1@plum:~$ df /mnt/sd/ Filesystem 1K-blocks Used Available Use% Mounted on /dev/mmcblk0p1 1798244 2880 1778980 1% /mnt/sd user1@plum:~$ \\ ===== root filesystem の作成 ===== オンボードフラッシュメモリで採用しているのと同じ "Ubuntu Linux" の root filesystem を作成してみます。\\ Ubuntu を含む Debian 系のディストリビューションの場合、"debootstrap" コマンドで作成することができます。 \\ ==== debootstrap のインストール ==== まずは、debootstrap コマンドをインストールします。 user1@plum:~$ sudo apt-get update Ign http://ports.ubuntu.com trusty InRelease Ign http://ppa.launchpad.net trusty InRelease Ign http://ports.ubuntu.com trusty-updates InRelease Hit http://ppa.launchpad.net trusty Release.gpg Ign http://ports.ubuntu.com trusty-security InRelease Hit http://ppa.launchpad.net trusty Release Hit http://ports.ubuntu.com trusty Release.gpg Hit http://ppa.launchpad.net trusty/main armhf Packages Hit http://ports.ubuntu.com trusty-updates Release.gpg Hit http://ppa.launchpad.net trusty/main Translation-en Hit http://ports.ubuntu.com trusty-security Release.gpg Hit http://ports.ubuntu.com trusty Release Hit http://ports.ubuntu.com trusty-updates Release Hit http://ports.ubuntu.com trusty-security Release Hit http://ports.ubuntu.com trusty/main armhf Packages Hit http://ports.ubuntu.com trusty/restricted armhf Packages Hit http://ports.ubuntu.com trusty/universe armhf Packages Hit http://ports.ubuntu.com trusty/main Translation-en Hit http://ports.ubuntu.com trusty/restricted Translation-en Hit http://ports.ubuntu.com trusty/universe Translation-en Hit http://ports.ubuntu.com trusty-updates/main armhf Packages Hit http://ports.ubuntu.com trusty-updates/restricted armhf Packages Hit http://ports.ubuntu.com trusty-updates/universe armhf Packages Hit http://ports.ubuntu.com trusty-updates/main Translation-en Hit http://ports.ubuntu.com trusty-updates/restricted Translation-en Hit http://ports.ubuntu.com trusty-updates/universe Translation-en Hit http://ports.ubuntu.com trusty-security/main armhf Packages Hit http://ports.ubuntu.com trusty-security/restricted armhf Packages Hit http://ports.ubuntu.com trusty-security/universe armhf Packages Hit http://ports.ubuntu.com trusty-security/main Translation-en Hit http://ports.ubuntu.com trusty-security/restricted Translation-en Hit http://ports.ubuntu.com trusty-security/universe Translation-en Reading package lists... Done user1@plum:~$ user1@plum:~$ sudo apt-get install debootstrap Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: debootstrap 0 upgraded, 1 newly installed, 0 to remove and 2 not upgraded. Need to get 30.0 kB of archives. After this operation, 233 kB of additional disk space will be used. Get:1 http://ports.ubuntu.com/ubuntu-ports/ trusty-updates/main debootstrap all 1.0.59ubuntu0.2 [30.0 kB] Fetched 30.0 kB in 0s (34.3 kB/s) Selecting previously unselected package debootstrap. (Reading database ... 20175 files and directories currently installed.) Preparing to unpack .../debootstrap_1.0.59ubuntu0.2_all.deb ... Unpacking debootstrap (1.0.59ubuntu0.2) ... Setting up debootstrap (1.0.59ubuntu0.2) ... localepurge: Disk space freed in /usr/share/locale: 0 KiB localepurge: Disk space freed in /usr/share/man: 0 KiB Total disk space freed by localepurge: 0 KiB user1@plum:~$ \\ ==== root filesystem の作成 ==== debootstrap コマンドにより作成します。 user1@plum:~$ sudo debootstrap trusty /mnt/sd http://ports.ubuntu.com/ I: Retrieving Release I: Retrieving Release.gpg I: Checking Release signature I: Valid Release signature (key id 790BC7277767219C42C86F933B4FE6ACC0B21F32) 〜〜〜 中略 〜〜〜 I: Configuring eject... I: Configuring perl... I: Configuring libpod-latex-perl... I: Configuring init-system-helpers... I: Configuring liblog-message-simple-perl... I: Configuring libtext-soundex-perl... I: Configuring libarchive-extract-perl... I: Configuring libterm-ui-perl... I: Configuring libmodule-pluggable-perl... I: Configuring rsyslog... I: Configuring kbd... I: Configuring ubuntu-minimal... I: Configuring libc-bin... I: Configuring initramfs-tools... I: Base system installed successfully. user1@plum:~$ \\ /mnt/sd 以下に、下記のとおり root filesystem が作成されました。 user1@plum:~$ ls -l /mnt/sd/ total 88 drwxr-xr-x 2 root root 4096 Nov 13 17:01 bin drwxr-xr-x 2 root root 4096 Apr 11 2014 boot drwxr-xr-x 3 root root 4096 Nov 13 16:59 dev drwxr-xr-x 61 root root 4096 Nov 13 17:02 etc drwxr-xr-x 2 root root 4096 Apr 11 2014 home drwxr-xr-x 12 root root 4096 Nov 13 17:00 lib drwx------ 2 root root 16384 Nov 13 15:42 lost+found drwxr-xr-x 2 root root 4096 Nov 13 16:57 media drwxr-xr-x 2 root root 4096 Apr 11 2014 mnt drwxr-xr-x 2 root root 4096 Nov 13 16:57 opt drwxr-xr-x 2 root root 4096 Apr 11 2014 proc drwx------ 2 root root 4096 Nov 13 16:57 root drwxr-xr-x 7 root root 4096 Nov 13 17:00 run drwxr-xr-x 2 root root 4096 Nov 13 17:02 sbin drwxr-xr-x 2 root root 4096 Nov 13 16:57 srv drwxr-xr-x 2 root root 4096 Mar 13 2014 sys drwxrwxrwt 2 root root 4096 Nov 13 17:02 tmp drwxr-xr-x 10 root root 4096 Nov 13 16:57 usr drwxr-xr-x 11 root root 4096 Nov 13 16:57 var user1@plum:~$ \\ ===== root filesystem の設定 ===== root filesystem は作成されましたが、実際に使用するためには各種設定が必要となります。\\ 例として、下記設定が必要です。 * Kernel module のコピー * root のパスワード * fstab * console (getty) * apt source \\ ==== Kernel module のコピー ==== 今動作している Kernel 用の module 一式を、SD カードにコピーしておきます。\\ debootstrap で作成した root filesystem には、/lib/modules ディレクトリが作成されていないため、作成しておきます。 user1@plum:~$ sudo mkdir /mnt/sd/lib/modules user1@plum:~$ \\ その後、Kernel module のディレクトリ以下をコピーします。 user1@plum:~$ sudo cp -a /lib/modules/3.14.23+ /mnt/sd/lib/modules/ user1@plum:~$ \\ ==== root のパスワード設定 ==== root のパスワードを設定します。 user1@plum:~$ sudo chroot /mnt/sd/ root@plum:/# passwd Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully root@plum:/# exit exit user1@plum:~$ \\ ==== fstab の設定 ==== debootstrap 直後は、下記のとおり全く設定されていません。 user1@plum:~$ cat /mnt/sd/etc/fstab # UNCONFIGURED FSTAB FOR BASE SYSTEM user1@plum:~$ \\ 下記のようにエディタを起動し、設定しておきます。 user1@plum:~$ sudo nano -w /mnt/sd/etc/fstab {{:mae3xx_tips:create_rootfs_on_sd:sdroot_00.png|editing fstab}} \\ ==== console(getty) の設定 ==== シリアルコンソールでログインできるよう、getty の設定をしておきます。\\ /etc/init/ttyO0.conf をベースにして編集します。 user1@plum:~$ sudo cp /etc/init/ttyO0.conf /mnt/sd/etc/init/ user1@plum:~$ sudo nano -w /mnt/sd/etc/init/ttyO0.conf {{:mae3xx_tips:create_rootfs_on_sd:sdroot_01.png|editing ttyO0.conf}} ※ 上の例は、RJ-45 のポートをコンソールとして使用する場合です。DSUB-9 を使用する場合は、ttyO0 -> ttyO1 と読み替えてください。 \\ ==== apt source の設定 ==== apt-get でパッケージ追加・更新ができるように、apt source の設定をしておきます。\\ オンボード Flash の設定をそのままコピーで良いと思います。 user1@plum:~$ sudo cp /etc/apt/sources.list /mnt/sd/etc/apt/ user1@plum:~$ \\ ===== SD root filesystem からの起動 ===== Bootloader のシェルから、Kernel command line を設定して起動します。 UBI: user volume: 10, internal volumes: 1, max. volumes count: 128 UBI: max/mean erase counter: 2/0, WL threshold: 4096, image sequence number: 27632 UBI: available PEBs: 0, total reserved PEBs: 2040, PEBs reserved for bad PEB handling: 40 Hit m for menu or any other key to stop autoboot: 2 type exit to get to the menu barebox@plum-ma[512MiB]:/ global.linux.bootargs.dyn.root="root=/dev/mmcblk0p1 rootfstype=ext4 rootwait" barebox@plum-ma[512MiB]:/ bootm /dev/ubi0.kernel.0 -o /dev/spi.dtb.0 Image Name: Linux-3.14.23+ Created: 2014-11-11 4:54:32 UTC OS: Linux Architecture: ARM Type: Kernel Image Compression: uncompressed Data Size: 3468368 Bytes = 3.3 MiB Load Address: 80008000 Entry Point: 80008000 Loading OS U-Boot uImage '/dev/ubi0.kernel.0' 〜〜〜 \\ 起動しました。 {{:mae3xx_tips:create_rootfs_on_sd:sdroot_02.png|Ubuntu booted from SD root filesystem}} \\ この後は、 * Network の設定 (/etc/network/interfaces) * 一般ユーザアカウントの追加 * パッケージの追加・更新・削除 などを行って、好みの環境を作ることができます。 \\ ===== ダウンロード ===== 今回、v2.4.0 ファームウェアの環境で作成したサンプルを置いておきます。 ^ File ^ Stat ^ SHA1SUM ^ Info | |{{:mae3xx_tips:create_rootfs_on_sd:trusty_v2_4_0_sdroot.tar.xz|}}|2014/11/14 11:08 77.9 MB|66231a2cfec06ad61228e0e11339c3d2f3ac32c2|v2.4.0 用|