default: compile upgrade-all: upgrade-chef upgrade-arduino upgrade-fpga upgrade-filesystem # CONSTANTES # Périphérique bloc à utiliser pour flasher SDCARD=/dev/mmcblk0 CON_MODE=wifi ETH_IFACE=enp3s0 # Debug TARGET_DIR=$(PWD)/buildroot/output/target/ EXECDIR=/opt/chef/ EXECPATH=bin/premier GDBPORT=2346 # SYSTÈME D'EXPLOITATION # Configuration buildroot/.config: configs/cdfprincipal_defconfig make -C buildroot BR2_EXTERNAL=.. cdfprincipal_defconfig configure: buildroot/.config # Compile l'OS (ça prend quelques heures) compile: configure make -C buildroot target-finalize # Crée l'image à flasher image: make -C buildroot # Supprime tous les fichiers de l'OS clean: make -C buildroot clean # Dernier recours en cas de compilation d'OS foireuse # (faut être patient) recompile: clean compile # Flashe l'image sur la carte SD flash: image $(SDCARD) sudo dd status=progress if=buildroot/output/images/sdcard.img of=$(SDCARD) bs=1M sync echo -e "resizepart 2\n100%\nquit" | sudo parted $(SDCARD) sync sudo resize2fs $(SDCARD)*2 sync # Graphiques (parce que c'est rigolo) graphs: make -C buildroot graph-{size,build,depends{,-requirements}} # CONNEXION AU ROBOT # Il vous faudra pour ces actions le fichier principalconf.sh # Crée un fichier de conf utilisable pour s'y connecter sshconf: principalconf.sh ifeq ($(CON_MODE), eth) source $$PWD/$<; echo -e "Host principal p\n User root\n Hostname $$ETHADDRESS\n PreferredAuthentications publickey\n PubkeyAuthentication yes\n IdentityFile \"$$PWD/sshkey\"" > "$@" source $$PWD/$<; sudo ip address add dev $(ETH_IFACE) $${ETHPEER}/20 peer $${ETHADDRESS} else source $$PWD/$<; echo -e "Host principal p\n User root\n Hostname $$ADDRESS\n PreferredAuthentications publickey\n PubkeyAuthentication yes\n IdentityFile \"$$PWD/sshkey\"" > "$@" endif source $$PWD/$<; echo -e "$$SSHCPRV" > sshkey chmod 600 sshkey # Lance une connexion SSH, tout bêtement ssh: sshconf ssh -F sshconf principal # Redémarre le robot reboot: sshconf ssh -F sshconf principal /sbin/reboot # Met le robot à l'heure (jusqu'au prochain redémarrage) # (ce qui est une mauvaise idée parce que du coup rsync # n'écrase pas les fichiers modifiés directement sur le Pi) #date: sshconf # ssh -F sshconf principal "date -s $(date +%Y%m%d%H%M.%S)" # Met à jour le Raspberry Pi (par rapport à ce dépôt) upgrade-filesystem: sshconf configure make -C buildroot target-finalize @# TODO Récupérer les ACL plutot que de mettre tous les fichiers en root ssh -F sshconf principal true rsync --rsh 'ssh -F sshconf' --archive --chown root:root buildroot/output/target/ principal:/ # Met jour les overlays (une partie des fichiers) upgrade-overlays: sshconf ssh -F sshconf principal true chmod 700 board/robotech/cdfprincipal/rootfs_overlay/root rsync --rsh 'ssh -F sshconf' --archive --chown root:root board/robotech/cdfprincipal/rootfs_overlay/ principal:/ # ARDUINO upgrade-arduino: make -C ../arduino/ scp -F sshconf -q "../arduino/build/main.hex" principal:/tmp/principal.hex ssh -F sshconf principal "avrdude -p atmega2560 -P /dev/ttyACM0 -c stk500 -D -U flash:w:/tmp/principal.hex" # FPGA upgrade-fpga: make -C ../fpga/ scp -F sshconf -q "../fpga/build/Principal.bit" principal:/tmp/Principal.bit ssh -F sshconf principal "mercpcl /tmp/Principal.bit" # CHEF chef: ../simu/mat2h.sh make -C buildroot chef-rebuild upload-chef: ssh -F sshconf principal true rsync --rsh 'ssh -F sshconf' --archive --chown root:root buildroot/output/target/opt/chef principal:/opt/ upgrade-chef: chef upload-chef run: ssh -F sshconf principal true ssh -F sshconf principal /etc/init.d/S50chef stop ssh -F sshconf principal 'cd /opt/chef; bin/premier; /opt/chef/lcdOff.sh' restart: ssh -F sshconf principal true ssh -F sshconf principal /etc/init.d/S50chef restart getlogs: ssh -F sshconf principal true rsync --rsh 'ssh -F sshconf' --archive principal:/opt/chef/log/* ../log/ rm -f ../log/last.csv; ln -s $$(ls ../log/ | tail -1) ../log/last.csv gdbcommands: echo "set sysroot $(TARGET_DIR)" > "$@" echo "exec-file $(TARGET_DIR)$(EXECDIR)$(EXECPATH)" >> "$@" echo "symbol-file $(TARGET_DIR)$(EXECDIR)$(EXECPATH).debug" >> "$@" echo "target remote :$(GDBPORT)" >> "$@" echo "continue" >> "$@" debug: gdbcommands ssh -F sshconf principal true ssh -F sshconf principal /etc/init.d/S50chef stop ssh -F sshconf principal killall gdbserver; true ssh -F sshconf principal -L $(GDBPORT):127.0.0.1:$(GDBPORT) 'cd $(EXECDIR); gdbserver 127.0.0.1:$(GDBPORT) $(EXECPATH)' & sleep 1 buildroot/output/host/usr/bin/arm-linux-gnueabihf-gdb -x gdbcommands; \ ssh -F sshconf principal /opt/chef/lcdOff.sh; \ ssh -F sshconf principal killall gdbserver; true .PHONY: gdbcommands