So-net無料ブログ作成

Linuxのコンパイル3 [電子工作]

rootfs-overlayにコンパイルしてイメージに格納するファイルを上書きするものを格納します。
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 $INTERFACE
rootfs-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
esac
S90toolsファイルはコピーした実行ファイルを実行します。/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
esac
S96ympdファイルは、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:
S90mount
S90mountは、自宅の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
esac
mpd.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"

SDカードのマウント [電子工作]

SDカードをマウントします。起動時にいろいろな設定ファイルをSDカードからコピーすれば、いちいちコンパイルする必要がなくなります。
# mount -t vfat /dev/mmcblk0p1 /mnt
アンマウントは、
# umount /mnt
です。

Linuxのコンパイル2 [電子工作]

前回、Linuxをコンパイルしたのですが、DACのドライバが認識しなくて悩んでいたのですが、 buildrootの新しいのを使って再度コンパイルしてみました。
root@kuro:~/work# wget https://buildroot.uclibc.org/downloads/buildroot-2017.05.tar.gz
root@kuro:~/work# tar xvf buildroot-2017.05.tar.gz
root@kuro:~/work# cd buildroot-2017.05
設定の準備をします。
root@kuro:~/work/buildroot-2017.05# cp configs/raspberrypi_defconfig configs/raspberrypi1_defconfig
root@kuro:~/work/buildroot-2017.05# cp -r board/raspberrypi board/raspberrypi1
root@kuro:~/work/buildroot-2017.02.2$ vi configs/raspberrypi1_defconfig
-----
BR2_ROOTFS_POST_BUILD_SCRIPT="board/raspberrypi1/post-build.sh"
BR2_ROOTFS_POST_IMAGE_SCRIPT="board/raspberrypi1/post-image.sh"
-----
root@kuro:~/work/buildroot-2017.05# cp board/raspberrypi1/genimage-raspberrypi.cfg board/raspberrypi1/genimage-raspberrypi1.cfg

root@kuro:~/work/buildroot-2017.05# vi board/raspberrypi1/genimage-raspberrypi1.cfg

-----
image boot.vfat {
  vfat {
    files = {
      "bcm2708-rpi-b.dtb",
      "bcm2708-rpi-b-plus.dtb",
      "bcm2708-rpi-cm.dtb",
      "rpi-firmware/bootcode.bin",
      "rpi-firmware/cmdline.txt",
      "rpi-firmware/config.txt",
      "rpi-firmware/fixup.dat",
      "rpi-firmware/start.elf",
      "zImage"
    }
  }
  size = 256M
}

image sdcard.img {
  hdimage {
  }

  partition boot {
    partition-type = 0xC
    bootable = "true"
    image = "boot.vfat"
  }

  partition rootfs {
    partition-type = 0x83
    image = "rootfs.ext4"
  }
}
-----
設定を行います。
root@kuro:~/work/buildroot-2017.05# make raspberrypi1_defconfig
root@kuro:~/work/buildroot-2017.05# make menuconfig
------
-----
Toolchain  --->
 custom toolchain vendor name
  kuro
 Custom kernel headers series (4.11.x)  --->
  (X) 4.10.x
 [*] Enable WCHAR support
System configuration  --->
 System hostname
  kuro
 System banner
  Welcome to Kuro
  /dev management (Dynamic using devtmpfs only)  --->
   (X) Dynamic using devtmpfs + mdev
 Root password
  root123
 Run a getty (login prompt) after boot  --->
  (console) TTY port
   ttyAMA0
  Baudrate (keep kernel default)  --->
   115200
 ()  Root filesystem overlay directories
  rootfs-overlay
Kernel  --->
 Kernel version (Custom Git repository)  --->
  (X) Custom Git repository
 (rpi-4.10.y) Custom repository version
  rpi-4.10.y
 Linux Kernel Tools  --->
  [*] gpio
Target packages  --->
 Audio and video applications  --->
 [*] alsa-utils  --->
  [*]   alsactl (NEW)
  [*]   alsamixer (NEW)
  [*]   aplay/arecord
 [*] ffmpeg  --->
  [*]   Enable GPL code
  [*]   Build ffmpeg (the command line application) (NEW)
  [*]   Enable input devices (NEW)
  [*]   Enable output devices (NEW)
  [*]   Build libavresample
 [*] flac
 [*] lame
 [*] mpd  --->
  [*]   libsamplerate
  [*]   libsoxr
  [*]   dsd
  [*]   ffmpeg
  [*]   flac
  [*]   lame
 [*] mpd-mpc
 [*] mplayer
 [*] Build and install mplayer (NEW)
Filesystem and flash utilities  --->
 [*] nfs-utils
  [*]   rpc.lockd
Interpreter languages and scripting  --->
 [*] python
Networking applications  --->
 [*] bluez-utils
  [*]   audio support
  [*]   USB support
  [*]   GATT support
 [*] dropbear
 [*] openssh
Filesystem images  --->
 [*] initial RAM filesystem linked into linux kernel
 [*] romfs root filesystem
-----
root@kuro:~/work/buildroot-2017.05# vi .config
-----
BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTB_OVERLAYS=y
BR2_TARGET_ROOTFS_EXT2_BLOCKS=250000
------
今回の変更点は、カーネルを4.9から4.10へ、/devのマネジメントをmdevにしたところです。
設定を取っておきます。
root@kuro:~/work/buildroot-2017.05# cp .config build_config
Linuxの設定を行います。
root@kuro:~/work/buildroot-2017.05# make linux-menuconfig
-----
General setup  --->
 Default hostname
  kuro
 [ ] Support for paging of anonymous memory (swap)
 [*]   Support initial ramdisks compressed using gzip
 [ ]   Support initial ramdisks compressed using bzip2
 [ ]   Support initial ramdisks compressed using LZMA
 [ ]   Support initial ramdisks compressed using XZ
 [ ]   Support initial ramdisks compressed using LZO
 [ ]   Support initial ramdisks compressed using LZ4
Boot options  --->
 ()  Default kernel command string
   console=ttyAMA0,115200
[*] Networking support  --->
 Networking options  --->
  [ ] Network packet filtering framework (Netfilter)  ----
  < > Asynchronous Transfer Mode (ATM)
  < > Layer Two Tunneling Protocol (L2TP)  ----
  < > 802.1d Ethernet Bridging
  < > 802.1Q/802.1ad VLAN Support
  < > Appletalk protocol support
  < > Open vSwitch
  [ ] MultiProtocol Label Switching  ----
 [ ]   Amateur Radio support  ----
 < >   CAN bus subsystem support  ----
 < >   WiMAX Wireless Broadband support  ----
 < >   RF switch subsystem support  ----
 < >   Plan 9 Resource Sharing Support (9P2000)  ----
 < >   NFC subsystem support  ----
Device Drivers  --->
 [ ] Multiple devices driver support (RAID and LVM)  ----
 [*] Network device support  --->
  < >     Bonding driver support
  < >     Dummy net driver support
  < >     MAC-VLAN support
  < >     IP-VLAN support
  < >     Virtual eXtensible Local Area Network (VXLAN)
  < >     Universal TUN/TAP device driver support
  < >     Virtual ethernet pair device
  < >   PPP (point-to-point protocol) support
  < >   SLIP (serial line) support
  < >   IEEE 802.15.4 drivers  ----
  Multimedia support  --->
  [ ]   Analog TV support
  [ ]   Digital TV support
  [ ]   AM/FM radio receivers/transmitters support
Graphics support  --->
 [ ] Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)  ----
 [ ] Bootup logo  ----
 [*] USB support  --->
  < >     Synopsis DWC host support
  < >     USB Printer support
  < >       Realtek Card Reader support
  < >       Datafab Compact Flash Reader support
  < >       Freecom USB/ATAPI Bridge support
  < >       ISD-200 USB/ATA Bridge support
  < >       USBAT/USBAT02-based storage support
  < >       SanDisk SDDR-09 (and other SmartMedia, including DPCM) support
  < >       SanDisk SDDR-55 SmartMedia support
  < >       Lexar Jumpshot Compact Flash Reader
  < >       Olympus MAUSB-10/Fuji DPC-R1 support
  < >       Support OneTouch Button on Maxtor Hard Drives
  < >       Support for Rio Karma music player
  < >       SAT emulation on Cypress USB/ATA Bridge with ATACB
  < >       USB ENE card reader support
  < >     USB Mustek MDC800 Digital Camera support
  < >     Microtek X6USB scanner support
  < >   DesignWare USB2 DRD Core Support
  < >   ADU devices from Ontrak Control Systems
  < >   USB 7-Segment LED Display
  < >   USB Diamond Rio500 support
  < >   USB Lego Infrared Tower support
  < >   USB LCD driver support
  < >   USB LED driver support
  < >   Cypress CY7C63xxx USB driver support
  < >   Cypress USB thermometer driver support
  < >   Siemens ID USB Mouse Fingerprint sensor support
  < >   Elan PCMCIA CardBus Adapter USB Client
  < >   Apple Cinema Display support
  < >   USB LD driver
  < >   PlayStation 2 Trance Vibrator driver support
  < >   IO Warrior driver support
  < >   USB testing driver
  < >   iSight firmware loading support
  < >   USB YUREX driver support
  < >   USB Gadget Support  ----
 < > Industrial I/O support  ----
-----
Linuxの設定はXFree86 4.1.0のマネージャを切ったことです。
独自に設定を格納するためのディレクトリを作成します。
root@kuro:~/work/buildroot-2017.05# mkdir -p rootfs-overlay/etc
root@kuro:~/work/buildroot-2017.05# mkdir -p rootfs-overlay/var/lib/mpd
root@kuro:~/work/buildroot-2017.05# vi rootfs-overlay/etc/asound.conf
------
pcm.!default  {
 type hw card 0
}
ctl.!default {
 type hw card 0
}
------
コンパイルします。
root@kuro:~/work/buildroot-2017.05# make -j40
コンパイルできた後、一旦できたファイルを削除します。
rm output/build/linux-rpi-4.10.y/arch/arm/boot/zImage
rm output/images/rootfs.*
rm output/images/sdcard.img
rm output/images/boot.vfat
rm output/images/zImage
設定ファイルをコピーします。
root@kuro:~/work/buildroot-2017.05# cp output/target/etc/mdev.conf ootfs-overlay/etc
以下を追加します。
#network interface 
(eth.*)         root:netdev 660 >net/%1 @/sbin/ifup $INTERFACE
再度コンパイルします。
root@kuro:~/work/buildroot-2017.05# make
コンパイルしたものをWindowsへもっていく準備をします。
root@kuro:~/work$ mkdir image
root@kuro:~/work$ mkdir config
root@kuro:~/work$ cd config
root@kuro:~/work/config# vi cmdline.txt
-----
console=ttyAMA0,115200
-----
root@kuro:~/work/config# vi config.txt
-----
kernel=zImage
#initramfs rootfs.cpio.gz
disable_overscan=1
# gpu_mem_256=100
# gpu_mem_512=100
# gpu_mem_1024=100
dtparam=i2c_arm=on
dtparam=i2s=on
dtparam=spi=on
dtoverlay=hifiberry-dac
-----
root@kuro:~/work/config# cd ../image
イメージを持ってきます。
cp ../buildroot-2017.05/output/images/zImage .
cp ../buildroot-2017.05/output/images/bcm2708-rpi-b-plus.dtb .
cp -r ../buildroot-2017.05/output/images/rpi-firmware/* .
cp ../buildroot-2017.05/output/images/rootfs.romfs .
cp ../config/* .
Windowsへもっていき、FATでフォーマットしたSDカードにコピーして出来上がりです。
root@kuro:~/work/image# ls
bcm2708-rpi-b-plus.dtb  cmdline.txt  fixup.dat  rootfs.romfs  zImage
bootcode.bin            config.txt   overlays   start.elf