Linuxのコンパイル3 [電子工作]
rootfs-overlayにコンパイルしてイメージに格納するファイルを上書きするものを格納します。
S11setupは以下の通りです。SDカードをマウントしてファイルをコピーしてアンマウントしているだけです。
S96ympdで必要なinit-functionsファイルを作成します。このファイルもchmod 755で実行権を付けます。
つぎにSDカードに格納するファイルを作成します。
root@kuro:~/work/buildroot-2017.05# ls -R rootfs-overlay/ rootfs-overlay/: etc lib var rootfs-overlay/etc: asound.conf default init.d mdev.conf rootfs-overlay/etc/default: rootfs-overlay/etc/init.d: S11setup S90tools S96ympd rootfs-overlay/lib: lsb rootfs-overlay/lib/lsb: init-functions rootfs-overlay/var: lib rootfs-overlay/var/lib: mpd rootfs-overlay/var/lib/mpd: music state rootfs-overlay/var/lib/mpd/music:前にも出てきましたがasound.confファイルです。
pcm.!default { type hw card 0 } ctl.!default { type hw card 0 }mdev.confはoutput/target/etcにあるコピーしてきてethernetの設定を追加します。
(eth.*) root:netdev 660 >net/%1 @/sbin/ifup $INTERFACErootfs-overlay/etc/init.dディレクトリには、起動時に実行してほしい実行ファイルを格納します。 S11setupは、SDカードからファイルをコピーします。S90toolsはコピーした実行ファイルを起動させます。S96ympdはympdをコンパイル対象にした場合に使います。それぞれchmod 755で実行権を付けます。
S11setupは以下の通りです。SDカードをマウントしてファイルをコピーしてアンマウントしているだけです。
#!/bin/sh start() { printf "Starting setup tool" mount -t vfat /dev/mmcblk0p1 /mnt cp -r /mnt/root/* / umount /mnt } stop() { printf "Stopping setup tool" } case "$1" in start) start ;; stop) stop ;; restart|reload) stop sleep 1 start ;; *) echo "Usage $0 {start|stop|restart}" exit 1 esacS90toolsファイルはコピーした実行ファイルを実行します。/etc/init.dに直接コピーしてもinit.dが起動した後のため、実行されません。そこで、実行ファイルを/root/binディレクトリにコピーしてそのファイルを実行するS90toolsを準備します。
#!/bin/sh start() { printf "Starting tools" chmod 755 /root/bin/S* list=`ls /root/bin/S*` for i in $list do eval $i start done } stop() { printf "Stopping tools" list=`ls -r /root/bin/S*` for i in $list do eval $i stop done } case "$1" in start) start ;; stop) stop ;; restart|reload) stop sleep 1 start ;; *) echo "Usage $0 {start|stop|restart}" exit 1 esacS96ympdファイルは、output/build/ympd-v1.2.3/contrib/init.debianをコピーして作成します。
S96ympdで必要なinit-functionsファイルを作成します。このファイルもchmod 755で実行権を付けます。
#!/bin/sh log_daemon_msg() { logger "$@"; } log_end_msg() { [ $1 -eq 0 ] && RES=OK; logger ${RES:=FAIL}; }stateファイルは、touchコマンドで作成し、chmod 666で読み書き権限を付与します。
つぎにSDカードに格納するファイルを作成します。
root@kuro:~/work/config# ls -R root/ root/: etc root root/etc: init.d mpd.conf root/etc/init.d: root/root: bin root/root/bin: S90mountS90mountは、自宅のsambaサーバのフォルダをマウントするのに用意しました。root/binフォルダに置かれるファイルは先ほどの/etc/init.d/S90toolsファイルから起動されます。NASの/shareを/mntにマウントします。
#!/bin/sh start() { printf "Starting mount smb" mount -t cifs //[NASのIPアドレス]/share /mnt -o username=[ユーザ名],password=[パスワード],iocharset=utf8 } stop() { printf "Stopping mount smb" umount /mnt } case "$1" in start) start ;; stop) stop ;; restart|reload) stop sleep 1 start ;; *) echo "Usage $0 {start|stop|restart}" exit 1 esacmpd.confファイルはマウントしたNASにある音楽ファイルを指定するようにします。必要に応じてNAS上にファイルやディレクトリを作成してください。
music_directory "/mnt/Music" playlist_directory "/mnt/mpd/var/lib/mpd" db_file "/mnt/mpd/var/lib/mpd/database" log_file "/mnt/mpd/var/log/mpd.log" pid_file "/var/run/mpd.pid" state_file "/var/lib/mpd/state" #user "nobody" bind_to_address "any" bind_to_address "/var/lib/mpd/socket"