Печать
Категория: AR.Drone
Просмотров: 4722

В процессе ковыряния содержимого AR.Drone понял, что родной линукс это хорошо, но мало. Однако, в этом самом линуксе обнаружилось присутствие утилит chroot и возможность монтирования файлов с ext3 файловой системой, что позволяет сделать много интересных вещей, разместив chroot окружение на флешке.


В процессе подготовки такого окружения использовался уже существующий компьютер с Ubuntu 12.04
Действия следующие.
1) Создаём образ нашей файловой системы:
desktop$ dd if=/dev/zero of=./ar.drone.ubuntu.fs bs=1M count=800
2) Создаём в нём файловую систему:
desktop$ mkfs.ext3 ./ar.drone.ubuntu.fs
Теоретически, это можно сделать и на самом дроне, но в родном линуксе дрона нет утилиты mkfs.ext3
3) Монтируем файл:
desktop$ mkdir drone.fs
desktop$ mount -o loop ar.drone.ubuntu.fs ./drone.fs
3) Устанавливаем убунту. Часть 1:
desktop$ debootstrap --arch=armel --verbose --foreign precise ./drone.fs/
Часть 2.
Можно пойти двумя способами. Уже можно скопировать файл на флешку и доставить нужное на самом дроне (я первый раз делал именно так), но можно завершить установку и на рабочей машине. Это потребует установки qemu-kvm-extras-static (в более новых версиях - qemu-user-static):
desktop$ apt-get install qemu-kvm-extras-static
и копирования файла в образ:
desktop$ cp /usr/bin/qemu-arm-static ./drone.fs/usr/bin
Сhrootимся в каталог и наблюдаем колдунство:
desktop$ chroot ./drone.fs/ /bin/bash
/usr/bin/groups: cannot find name for group ID 0
I have no name!@desktop:/#
Мы, фактически, находимся на той же машине, в том же терминале, но уже можем запускать приложения, скомпилированные для ARM процессора. Чем и воспользуемся для второго этапа установки:
I have no name!@desktop:/# /debootstrap/debootstrap --second-stage

и дожидаемся окончания установки:
I: Base system installed successfully.
Размонтируем:
I have no name!@desktop:/# exit
desktop$ umount ./drone.fs

4) Копируем образ ar.drone.ubuntu.fs на флешку (если Вы дочитали до сюда - Вы знаете как это сделать).
5) Втыкаем флешку в дрона, ждём загрузки, подключаемся к ТД дрона и заходим на него телнетом:
desktop$ telnet 192.168.1.1
6) Создаём каталог для монтирования, монтируем туда образ.
drone# mkdir /mnt/ubuntu
drone# mount -o loop /data/video/usb/ar.drone.ubuntu.fs /mnt/ubuntu
Выполняем следующие команды для монтирования важных каталогов. Их желательно сохранить в какой-нибудь скрипт для удобства дальнейшего выполнения.
drone# mount -o bind /dev /mnt/ubuntu/dev
drone# mount -t proc proc /mnt/ubuntu/proc
drone# mount -t sysfs sys /mnt/ubuntu/sys
и chrootимся в образ.
drone# chroot /mnt/ubuntu/ /bin/bash

Имеет смысл примонтировать devpts:

mount -t devpts devpts /dev/pts

без этого не будет работать ssh сервер


Таким образом у нас получился дрон, в котором мы можем смело устанавливать что хотим. Хотим - поддержку wpa2. Хотим - node.js с nginx.

В процессе написания выявилось забавное. В дроне памяти МАЛО. Но! мы можем в чруте сделать своп (ну и фраза!).
Расшифровываю - мы можем подключить виртуальную память в этом изолированном окружении.
drone_chrooted# mkdir /mnt/usb
drone_chrooted# mount /dev/sda1 /mnt/usb
drone_chrooted# cd /mnt/usb
drone_chrooted# dd if=/dev/zero of=./ar.drone.swap bs=1024 count=524288
drone_chrooted# mkswap ./ar.drone.swap

В принципе, можно поставить положенные права, но не забывайте - мы говорим о устройстве, доступном по telnet с рутовыми правами. О безопасности говорить смешно.
drone_chrooted# chown root:root ./ar.drone.swap
drone_chrooted# chmod 0600 ./ar.drone.swap
drone_chrooted# swapon ./ar.drone.swap

Стоит также сгенерировать локаль, в противном случае будет выдаваться ошибка "perl: warning: Please check that your locale settings:"

drone_chrooted# locale-gen en_US.UTF-8


Как оказалось, с hostapd есть проблема. Оно устанавливается легко и непринуждённо, однако собрано без поддержки madwifi драйверов, которые дрон и использует. Видимо не обойтись без пересборки.