SSブログ

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

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。