Module MB 77.07 — альтернативный миникомпьютер

Не давно на рынке появился интересный и не дорогой микрокомпьютер Module MB 77.07 от российского разработчика, компании Модуль. Он создан на базе отечественного процессора ARM.

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

Микрокомпьютер Module MB 77.07

Микрокомпьютер Module MB 77.07

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

ARM-процессор — 324 МГц

ARM-процессор — 324 МГц

 

Рабочая частота 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Я

Функциональная схема 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 долларов.

Module MB 77.07 2В настоящее время для платы портированы загрузчик 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

Приложение. Лог загрузки системы по 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:~# 

Найдено на habrhabr.ru —> Оригинал