Микрокомпьютер Module MB 77.07 — русский ответ Raspberry Pi

от автора

Читая новости о запрете на поставку электронной компонентной базы из США для отдельных производителей в РФ, мы решили рассказать об одноплатном микрокомпьютере Module МВ 77.07, который был разработан в российском научно-техническом центре «Модуль» на базе одного из наиболее производительных российских процессоров архитектуры ARM. Также мы рассмотрим установку Linux-дистрибутива Debian на этот микрокомпьютер.

МВ 77.07 построен на базе системы на кристалле К1879ХБ1Я, которая также является разработкой НТЦ «Модуль». И хотя схема К1879ХБ1Я, в первую очередь, предназначена для использования в качестве декодера видеосигнала в различных ТВ-приставках, устройствах для видеонаблюдения и системах «умного дома», сам микрокомпьютер МВ 77.07 с этим процессором на борту позиционируется в том числе как система для энтузиастов-программистов и учебная плата для студентов. Таким образом, можно сказать, что это русский аналог Raspberry Pi. Давайте кратко разберем основные характеристики процессора К1879ХБ1Я, а затем — и самой платы.

Система на кристалле К1879ХБ1Я построена на основе двух процессорных ядер — ARM11 (ARM1176JZF-S ) и дополнительного DSP-процессора оригинальной архитектуры NeuroMatrix, который входит в блок декодирования аудиосигналов.

Рабочая частота ARM-процессора — 324 МГц (и DSP — тоже), не самая большая по современным меркам, однако мы смогли убедиться на собственном опыте, что она позволяет комфортно запускать ОС Linux и пользоваться достаточно богатой периферией процессора: аппаратными видеодекодерами H.264, MPEG-2, VC-1; 2D-видеоускорителем; 8-канальным аудиопроцессором на основе DSP; блоком демультиплексирования TS-потока; криптопроцессором с поддержкой алгоритмов AES и 3DES.

К1879ХБ1Я оснащен следующими интерфейсами:

  • DDR2 SDRAM,
  • NAND и SPI Flash,
  • хостом HS USB 2.0,
  • 10M/100M Ethernet,
  • HDMI 1.2,
  • I2S,
  • S/PDIF,
  • UART,
  • SPI,
  • I2C,
  • JTAG,
  • TS,
  • GPIO.


Функциональная схема SoC К1879ХБ1Я

Перейдем к описанию самой платы МВ 77.07: её размер — 80×80 мм, помимо самого процессора на плате установлено 128 МБ системной памяти и 128 МБ видеопамяти (обе — DDR2-667 SDRAM), а также 1 ГБ NAND-памяти. Плата имеет следующие разъемы интерфейсов:

  • 10М/100М Ethernet,
  • два порта USB 2.0,
  • HDMI 1.2.

Кроме этого, на «гребенки» по бокам выведены следующие интерфейсы:

  • I2S,
  • SPI Flash,
  • TS (интерфейс транспортного потока),
  • 8 GPIO,
  • на отдельных разъемах UART, JTAG и два USB-порта.

Питание платы — 5 В, оценочная стоимость — в пределах 30 долларов.

В настоящее время для платы портированы загрузчик U-Boot и ядро Linux 2.6.33, разработаны драйвера для всех периферийных устройств, также сейчас завершается процесс портирования драйверов для Linux 3.10. Разработан ряд элементов конвейера gstreamer с поддержкой различных периферийных устройств (в частности, видеодекодера и видеоконтроллера). Для разработки под DSP-процессор существует NeuroMatrix SDK. Исходные коды U-Boot, Linux, а также сборочной Buildroot можно получить по запросу у НТЦ «Модуль».

1. Разворачиваем базовую Debian-систему

Для разворачивания корневой файловой системы Debian воспользуемся утилитой debootstrap, которая «признана официальным способом установки базовой системы Debian» (см. инструкцию на debian.org и wiki.debian.org).

Разворачивание целевой файловой системы с помощью debootstrap проходит в две стадии: первая выполняется в окружении хост-системы (на этой стадии скачиваются и распаковываются необходимые пакеты, но не устанавливаются); вторая стадии выполняется на целевой системе (здесь происходит конфигурация и установка пакетов).

Будем устанавливать Debian 7.0 Wheezy для архитектуры armel, система будет развернута в директории debrootfs.

Первая стадия debootstrap выполняется командой

sudo debootstrap --verbose --foreign --arch=armel wheezy debrootfs ftp://ftp.ru.debian.org/debian

Для выполнения второй стадии нам понадобится эмулятор QEMU в режиме syscall, его можно установить командой

sudo apt-get install qemu qemu-user-static

Затем надо скопировать qemu-arm-static с хост-системы на целевую систему:

sudo cp /usr/bin/qemu-arm-static debrootfs/usr/bin

После этого можно выполнить вторую стадию debootstrap:

sudo chroot debrootfs /debootstrap/debootstrap --second-stage

Далее можно удалить директорию debrootfs/debootstrap, которая нам больше не нужна.

2. Настраиваем Debian

Зададим пароль root-a и смонтируем виртуальные файловые систему на целевую систему:

sudo chroot debrootfs /usr/bin/passwd root

sudo mount -t proc none debrootfs/proc  sudo mount -t sysfs none debrootfs/sys  sudo mount -t devpts none debrootfs/dev/pts 

Теперь можно chroot-ся в целевую систему:

sudo chroot debrootfs

Необходимо добавить список источников пакетов в etc/apt/sources.list (изначально он пустой):

deb http://ftp.ru.debian.org/debian/ wheezy main contrib non-free  deb http://http.ru.debian.org/debian wheezy main contrib non-free 

И обновить индекс пакетов командой

apt-get update 

После этого можно начать устанавливать нужные пакеты, например ssh-сервер и клиент:

apt-get install openssh-server openssh-client

Завершить работу с целевой системой можно командой

exit

После этого необходимо размонтировать виртуальные файловые системы, которые были смонтированные ранее:

sudo umount rootfs-dir/proc  sudo umount rootfs-dir/sys  sudo umount rootfs-dir/dev/pts 

Также нужно скопировать модули ядра, с которым будет использоваться целевая rootfs, в директорию debrootfs/lib/modules.
Для возможности логинится на COM-порт, раскомментируйте строку в файле debrootfs/etc/inittab:

#T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100

И установите нужную скорость, например, 38400:

T0:23:respawn:/sbin/getty -L ttyS0 38400 vt100

После этого можно создать, скажем, UBI-образ rootfs и прошить его в NAND-флеш или загрузится по NFS.

Приложение. Лог загрузки системы по NFS

 MBOOT (UEMD mode): Version mboot-00045-gd0c2f07-dirty (Built 11 08:41:46 FET 2013) OTP info: boot_source 2 jtag_stop 0 words_len 1024 Maximum bank size: 0x10000000 bytes Detected 134217728 bytes of EM0 memory MEMORY: 40000000 -> 48000000 Memory layout         0x00100010  early         0x001001B8  text         0x001176C8  data         0x0011F028  signature         0x0011F02C  bss_start         0x00121D84  stack_start         0x00137BF8^ stack_ptr         0x00137C00  malloc         0x0013FC00  env mnand_read_id: flash id 0xDC mnand_read_id: flash ext_id 0x95 mnand_read_id: CS0 NAND 512MiB 3,3V 8-bit size(512) writesize(2048) oobsize(64) erasesize(131072) mnand_read_id: flash id 0xDC mnand_read_id: flash ext_id 0x95 mnand_read_id: CS1 NAND 512MiB 3,3V 8-bit size(512) writesize(2048) oobsize(64) erasesize(131072) greth: Setting GRETH base addr to 0x20034000 greth: Found GRETH at 0x20034000, irq 255 greth: Resetting GRETH greth: greth: 'phyaddr' not set, fall back to built-in table greth: greth: using preset PHY addr: 1f greth: Resetting the PHY greth: write_mii: 0x20034010 < 0xF809F801 [p:31 a:0 d:0xF809] greth: write_mii: 0x20034010 < 0x0000F801 [p:31 a:0 d:0x0000] greth: 10/100 GRETH Ethermac at [0x20034000] irq 255. Running 10 Mbps half duplex PHY info not available greth: greth_init greth: greth_init: enabling receiver ETH new device: name GRETH_10/100  greth: GRETH: New MAC address: 00:02:f7:00:27:0f Is there an EDCL emergency? Nope MTD Partition:       boot @ 0x00000000 size 0x00040000 MTD Partition:        env @ 0x00040000 size 0x00040000 MTD Partition: kernel_dtb @ 0x00080000 size 0x00080000 MTD Partition:     kernel @ 0x00100000 size 0x00400000 MTD Partition:     rootfs @ 0x00500000 size 0x3FB00000 Hit any key (in 2 sec) to skip autoload... Running autoload command 'mtdboot;bootm' MTD Loading kernel image: dev kernel offset 0x000000000000 addr 0x40100000 Linux preparing to boot the kernel: machid 0xcd1 IMG moving image: type 2 from 0x40100040 to 0x40008000 HINT: To optimize boot time adjust loadaddr to: 0x40007fc0 Linux DTB start 0x40000100 Linux entry 0x40008000 Uncompressing Linux... done, booting the kernel. [    0.000000] Booting Linux on physical CPU 0x0 [    0.000000] Linux version 3.10.18-uemd (sergei@shost) (gcc version 4.7.2 (crosstool-NG 1.18.0) ) #11 Tue Mar 4 13:48:01 FET 2014 [    0.000000] CPU: ARMv6-compatible processor [410fb767] revision 7 (ARMv7), cr=00c5387d [    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT nonaliasing instruction cache [    0.000000] Machine: Module MB77.07, model: Module MB77.07 [    0.000000] bootconsole [earlycon0] enabled [    0.000000] Memory policy: ECC disabled, Data cache writeback [    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 23840 [    0.000000] Kernel command line: console=ttyS0,38400 earlyprintk=serial root=/dev/nfs rw nfsroot=192.168.10.130:/srv/nfs/ ip=dhcp [    0.000000] PID hash table entries: 512 (order: -1, 2048 bytes) [    0.000000] Dentry cache hash table entries: 16384 (order: 4, 65536 bytes) [    0.000000] Inode-cache hash table entries: 8192 (order: 3, 32768 bytes) [    0.000000] Memory: 94MB 0MB = 94MB total [    0.000000] Memory: 89564k/89564k available, 41508k reserved, 0K highmem [    0.000000] Virtual kernel memory layout: [    0.000000]     vector  : 0xffff0000 - 0xffff1000   (   4 kB) [    0.000000]     fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB) [    0.000000]     vmalloc : 0xc8800000 - 0xff000000   ( 872 MB) [    0.000000]     lowmem  : 0xc0000000 - 0xc8000000   ( 128 MB) [    0.000000]     modules : 0xbf000000 - 0xc0000000   (  16 MB) [    0.000000]       .text : 0xc0008000 - 0xc045c930   (4435 kB) [    0.000000]       .init : 0xc045d000 - 0xc047d790   ( 130 kB) [    0.000000]       .data : 0xc047e000 - 0xc04be178   ( 257 kB) [    0.000000]        .bss : 0xc04be178 - 0xc053df90   ( 512 kB) [    0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1 [    0.000000] NR_IRQS:128 [    0.000000] regs = 0xf8000000, irq_start = 0 [    0.000000] VIC @f8000000: id 0x00041192, vendor 0x41 [    0.000000] regs = 0xf8010000, irq_start = 32 [    0.000000] VIC @f8010000: id 0x00041192, vendor 0x41 [    0.000000] UEMD: Firing up timer system [    0.000000] Clocksource: rate 54000000 mult 19418074 shift 20 [    0.000000] Clockevent: rate 54000000 mult 231928233 shift 32 [    0.000000] sched_clock: 32 bits at 100 Hz, resolution 10000000ns, wraps every 4294967286ms [    0.000000] Console: colour dummy device 80x30 [    0.020000] Calibrating delay loop... 215.04 BogoMIPS (lpj=1075200) [    0.100000] pid_max: default: 32768 minimum: 301 [    0.110000] Mount-cache hash table entries: 512 [    0.130000] CPU: Testing write buffer coherency: ok [    0.150000] Setting up static identity map for 0xc030aa10 - 0xc030aa48 [    0.160000] devtmpfs: initialized [    0.180000] NET: Registered protocol family 16 [    0.200000] DMA: preallocated 256 KiB pool for atomic coherent allocations [    0.260000] OTP ROM is not flashed [    0.270000] msvdhd: configuring memory [    0.280000] hw-breakpoint: found 6 breakpoint and 1 watchpoint registers. [    0.290000] hw-breakpoint: maximum watchpoint size is 4 bytes. [    0.420000] bio: create slab <bio-0> at 0 [    0.440000] SCSI subsystem initialized [    0.450000] ssp-pl022 20023000.ssp: ARM PL022 driver, device ID: 0x00041022 [    0.460000] pl022: mapped registers from 0x20023000 to f8023000 [    0.480000] usbcore: registered new interface driver usbfs [    0.490000] usbcore: registered new interface driver hub [    0.500000] usbcore: registered new device driver usb [    0.510000] media: Linux media interface: v0.10 [    0.520000] Linux video capture interface: v2.00 [    0.530000] Advanced Linux Sound Architecture Driver Initialized. [    0.550000] Switching to clocksource uemd_timer1 [    0.650000] NET: Registered protocol family 2 [    0.660000] TCP established hash table entries: 1024 (order: 1, 8192 bytes) [    0.670000] TCP bind hash table entries: 1024 (order: 0, 4096 bytes) [    0.680000] TCP: Hash tables configured (established 1024 bind 1024) [    0.690000] TCP: reno registered [    0.700000] UDP hash table entries: 256 (order: 0, 4096 bytes) [    0.710000] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes) [    0.720000] NET: Registered protocol family 1 [    0.730000] RPC: Registered named UNIX socket transport module. [    0.740000] RPC: Registered udp transport module. [    0.750000] RPC: Registered tcp transport module. [    0.760000] RPC: Registered tcp NFSv4.1 backchannel transport module. [    0.830000] squashfs: version 4.0 (2009/01/31) Phillip Lougher [    0.850000] msgmni has been set to 174 [    0.870000] alg: No test for stdrng (krng) [    0.880000] io scheduler noop registered (default) [    0.900000] module,pinmux 20033084.sysconfigh: DVB_CI mode is GPIO (0) [    0.910000] module,pinmux 20033084.sysconfigh: TS1 mode is GPIO (0) [    0.920000] module,pinmux 20033084.sysconfigh: TS2 mode is GPIO (0) [    0.930000] module,pinmux 20033084.sysconfigh: NAND mode is peripheral (1) [    0.940000] module_vdu 80173000.vdu: found VDU device at 80173000, id <ebebab01> [    0.970000] Console: switching to colour frame buffer device 90x36 [    0.990000] fb0: Module VDU frame buffer device [    1.040000] Serial: 8250/16550 driver, 3 ports, IRQ sharing disabled [    1.050000] 2002b000.uart: ttyS0 at MMIO 0x2002b000 (irq = 7) is a 8250 [    1.060000] console [ttyS0] enabled, bootconsole disabled [    1.060000] console [ttyS0] enabled, bootconsole disabled [    1.070000] 20022000.uart: ttyS1 at MMIO 0x20022000 (irq = 9) is a 8250 [    1.080000] 2002c000.uart: ttyS2 at MMIO 0x2002c000 (irq = 8) is a 8250 [    1.120000] loop: module loaded [    1.130000] msvdhd 80180000.video_decoder: found device at 0x80180000, id 0x0025300b [    1.180000] NMC3_DRIVER probe OK [    1.200000] dev_ex->Name=NMC3_0 [    1.220000] drivers/misc/rcmod_soc_nmc3.c#105: sync value ERROR code=0x4, memval=0x4 [    1.240000] nmcadec: could not initialize NMC3_0 [    1.260000] mnand CS0 Micron size(512) writesize(2048) oobsize(64) erasesize(131072) [    1.270000] mnand CS1 Micron size(512) writesize(2048) oobsize(64) erasesize(131072) [    1.280000] mnand: Detected 1073741824 bytes of NAND [    1.300000] libphy: greth-mdio: probed [    4.340000] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [    4.350000] uemd-ehci 10040000.ehci: UEMD EHCI [    4.360000] uemd-ehci 10040000.ehci: new USB bus registered, assigned bus number 1 [    4.370000] uemd-ehci 10040000.ehci: irq 35, io mem 0x10040000 [    4.400000] uemd-ehci 10040000.ehci: USB 2.0 started, EHCI 1.00 [    4.420000] hub 1-0:1.0: USB hub found [    4.430000] hub 1-0:1.0: 2 ports detected [    4.440000] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [    4.450000] usbcore: registered new interface driver usb-storage [    4.460000] mousedev: PS/2 mouse device common for all mice [    4.470000] i2c /dev entries driver [    4.490000] module_hdmi: module_hdmi: Device ID: 0x9132 [    4.530000] usbcore: registered new interface driver usbhid [    4.540000] usbhid: USB HID core driver [    4.570000] TCP: cubic registered [    4.580000] VFP support v0.3: implementor 41 architecture 1 part 20 variant b rev 5 [    4.610000] mvdu: will allocate buffers [    4.620000] mvdu: did allocate buffers cc000000 [    4.660000] Sending DHCP requests ., OK [    4.690000] IP-Config: Got DHCP answer from 192.168.10.41, my address is 192.168.10.117 [    4.710000] IP-Config: Complete: [    4.720000]      device=eth0, hwaddr=00:02:f7:00:27:0f, ipaddr=192.168.10.117, mask=255.255.255.0, gw=192.168.10.1 [    4.730000]      host=192.168.10.117, domain=promwad.corp, nis-domain=(none) [    4.740000]      bootserver=192.168.10.45, rootserver=192.168.10.130, rootpath= [    4.750000]      nameserver0=192.168.10.41, nameserver1=192.168.10.42 [    4.760000] ALSA device list: [    4.770000]   #0: Module MB7707 [    4.800000] VFS: Mounted root (nfs filesystem) on device 0:11. [    4.810000] devtmpfs: mounted [    4.830000] Freeing unused kernel memory: 128K (c045d000 - c047d000) [    4.850000] usb 1-1: new high-speed USB device number 2 using uemd-ehci [    5.020000] hub 1-1:1.0: USB hub found [    5.040000] hub 1-1:1.0: 4 ports detected INIT: version 2.88 booting [info] Using makefile-style concurrent boot in runlevel S. [....] Starting the hotplug events dispatcher: udevd[   39.850000] udevd[730]: starting version 175 . ok  [....] Synthesizing the initial hotplug events...done. [....] Waiting for /dev to be fully populated...done. [....] Activating swap...done. [....] Cleaning up temporary files.... ok  [....] Activating lvm and md swap...done. [....] Checking file systems...fsck from util-linux 2.20.1 done. [....] Mounting local filesystems...done. [....] Activating swapfile swap...done. [....] Cleaning up temporary files.... ok  [....] Setting kernel variables ...done. [....] Configuring network interfaces...done. [....] Cleaning up temporary files.... ok  [....] Setting up X socket directories... /tmp/.X11-unix /tmp/.ICE-unix. ok  INIT: Entering runlevel: 2 [info] Using makefile-style concurrent boot in runlevel 2. [....] Starting enhanced syslogd: rsyslogd. ok  [....] Starting periodic command scheduler: cron. ok  [....] Starting system message bus: dbus. ok  [....] Starting OpenBSD Secure Shell server: sshd. ok   Debian GNU/Linux 7 shost ttyS0  shost login: root Password:  Last login: Thu Jan  1 00:01:26 UTC 1970 on ttyS0 Linux shost 3.10.18-uemd #11 Tue Mar 4 13:48:01 FET 2014 armv6l  The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright.  Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. root@shost:~# cat /etc/issue Debian GNU/Linux 7 \n \l root@shost:~#  

Спасибо за внимание. Вопросы и комментарии приветствуются.

ссылка на оригинал статьи http://habrahabr.ru/post/217893/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *