Читая новости о запрете на поставку электронной компонентной базы из США для отдельных производителей в РФ, мы решили рассказать об одноплатном микрокомпьютере 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.
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/
Добавить комментарий