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"
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_configLinuxの設定を行います。
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 ----Linuxの設定はXFree86 4.1.0のマネージャを切ったことです。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 ---- -----
独自に設定を格納するためのディレクトリを作成します。
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