Установка Mono 3 На Soc Семейства Allwinner A10/A20 На Примере Cubieboard2

Привет, В данной статье собрана информация из различных источников о переводе досок семейства Cubieboard из разряда бесполезных игрушек.

Платформа отладки для продвинутого разработчика C#.

Это Linux, это хардкор, ребята Нам нужна SD-карта объемом не менее 2 ГБ.

И собственно само перепрофилированное устройство, в моем случае это Cubieboard2 Для начала вам нужна уже установленная на Nand и работающая система.

В моем случае это было lubuntu-сервер-13.08-v1.06 .

Так как оттуда вам понадобится один небольшой, но очень важный файл.

Эта система больше не используется.

Если вы хотите написать что-то вроде «Hello C# world в Linux», то вам этого достаточно, так как в данную систему входит пакет на базе mono версии 2.10.8.1. К сожалению, в этой версии есть несколько неприятных ошибок, которые не позволяют сделать что-то более серьезное.

А кто сказал, что будет легко, это.

Собственно, я уже повторяюсь.

Итак, продолжим.

Здесь: https://romanrm.net/a10/debian загрузите установщик для вашего SoC. Почему этот? Потому что это один из немногих, где система установлена на необходимом минимуме, без кучи изначально ненужных пакетов.

Распакуйте и запишите на SD-карту.

В Linux это можно сделать одной командой: bzip2 -dc a20-debian-server-2gb*.

bz2 > /dev/sdX Где /dev/sdX путь к вашей SD-карте.

Под Windows его можно распаковать, например, с помощью 7Zip и запишите на SD-карту, используя Win32дискимагер .

Вставьте SD-карту в устройство и загрузитесь.

Для особых типов устройств, таких как МК802, требуются дополнительные действия по установке загрузчика, но мне этого делать не пришлось.

Необходимо иметь локальный доступ к устройству, например монитор+клавиатура, либо я использовал переходник USB-UART TTL 3,3В, параметры 115200/8/N/1. Потому что сеть пока не работает. Имя пользователя/пароль для входа: корень/пароль Монтируем наш Nand и копируем оттуда тот небольшой, но очень важный файл.

  
  
  
  
  
  
  
  
  
  
  
  
   

cp /boot/script.bin /boot/script.bak mount /dev/nanda /mnt cp /mnt/script.bin /boot/ umount /dev/nanda sync

Чтобы не искать каждый раз устройство на просторах домашней сети, так как в устройствах, собранных на А20, разработчики не удосужились присвоить устройству жидкий МАС-адрес, и после каждой перезагрузки он генерируется случайным образом, соответственно DHCP-сервер назначает другой IP-адрес.

Мы поместили это в его файл /etc/сеть/интерфейсы следующий:

auto lo iface lo inet loopback auto eth0 # for DHCP #iface eth0 inet dhcp # hwaddress ether c0:b0:c0:a8:1:f5 # Static IP iface eth0 inet static hwaddress ether c0:bo:c0:a8:1:17 address 192.168.1.23 network 192.168.1.0 netmask 255.255.255.0 broadcast 192.168.1.255 gateway 192.168.1.1 nameserver 192.168.1.1

Генерация новых ключей для SSH-сервера, смена пароля root

rm /etc/ssh/ssh_host_* dpkg-reconfigure openssh-server passwd reboot

После перезагрузки вы сможете подключиться к системе с помощью нашего любимого SSH-клиента.

Обновляем систему до актуального состояния, устанавливаем локали и время

apt-get update aptitude dist-upgrade dpkg-reconfigure locales dpkg-reconfigure tzdata

Если вы используете SD-карту объемом более 2 ГБ, то имеет смысл расширить раздел данных, чтобы охватить всю карту.

Делается это следующим образом на примере уже переразбитого диска:

root@debian:/dev# fdisk /dev/mmcblk0 Command (m for help): p Disk /dev/mmcblk0: 8018 MB, 8018460672 bytes 4 heads, 16 sectors/track, 244704 cylinders, total 15661056 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000cb560 Device Boot Start End Blocks Id System /dev/mmcblk0p1 2048 127071 62512 e W95 FAT16 (LBA) /dev/mmcblk0p2 131072 15661055 7764992 83 Linux

Давайте посмотрим, где находится раздел 2. Важно сохранить начальный адрес.

В моем случае это было 131072. Удаляем раздел с данными, не пугайтесь, физически мы их не удаляем, даже если в этот момент что-то пойдет не так.

Ничего плохого не произойдет. Потому что данные еще не были записаны на диск.



Command (m for help): d Partition number (1-4): 2

Создать новый раздел

Command (m for help): n Partition type: p primary (1 primary, 0 extended, 3 free) e extended Select (default p): p Partition number (1-4, default 2): Using default value 2 First sector (127072-15661055, default 127072):

Здесь важно не ошибиться и не согласиться со значениями по умолчанию, а ввести ранее записанное значение первого сектора раздела.



First sector (127072-15661055, default 127072): 131072 Last sector, +sectors or +size{K,M,G} (131072-15661055, default 15661055): Using default value 15661055

Проверяем, что все правильно и записываем изменения в таблицу разделов.

Потребуется перезагрузка.



Command (m for help): p Disk /dev/mmcblk0: 8018 MB, 8018460672 bytes 4 heads, 16 sectors/track, 244704 cylinders, total 15661056 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000cb560 Device Boot Start End Blocks Id System /dev/mmcblk0p1 2048 127071 62512 e W95 FAT16 (LBA) /dev/mmcblk0p2 131072 15661055 7764992 83 Linux Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) Syncing disks.

Теперь вам нужно сообщить системе, что она может использовать все свободное пространство раздела.

resize2fs /dev/mmcblk0p2 И мы проверяем

root@debian:~# df -h Filesystem Size Used Avail Use% Mounted on /dev/root 7.3G 746M 6.3G 11% / .

skip.

Уф, теперь начинается самое интересное.

Так как официального порта для Armv7l нет, по крайней мере при попытке установки сообщает, что mono-runtime нет в списке доступных пакетов.

Нам нужна экспериментальная версия.

Для начала нам нужно перенести систему со стабильной ветки Wheezy на sid+experimental. Вот файл /etc/apt/sources.list к следующему просмотру

deb ftp://ftp.debian.org/debian experimental main deb ftp://ftp.debian.org/debian sid main contrib non-free

Дальше все стандартно

apt-get update apt-get dist-upgrade reboot

Ну и в чем именно заключалась вся эта суета?

root@debian:~#apt-get -t experimental install mono-devel .

skip. root@debian:~# uname -a Linux debian 3.4.79-r0-s20-rm2+ #54 SMP Tue Feb 18 01:09:07 YEKT 2014 armv7l GNU/Linux root@debian:~t# mono -V Mono JIT compiler version 3.2.8 (Debian 3.2.8+dfsg-4) Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com TLS: __thread SIGSEGV: normal Notifications: epoll Architecture: armel,vfp+hard Disabled: none Misc: softdebug LLVM: supported, not enabled. GC: sgen

Теги: #cubieboard #Debian #mono 3 #manual #C++

Вместе с данным постом часто просматривают: