IT News: Digital Camera, OS, Laptop, Smartphone, Smart TV, Sound...

The Author's Project by Valeri N.Kravchuk
Сайт проверен Dr.Web
Меню сайта
  • Главная страница
  • Информация о сайте
  • Дневник
  • Каталог файлов
  • Обратная связь
  • Каталог сайтов
  • FAQ
  • Доска объявлений
  • Форум
  • Фотоальбом
  • Категории раздела
    Автомобильные гаджеты, ремонт... [220]
    Безопасность IT [484]
    Блоки питания, Power Banks, зарядки... [489]
    Видеорегистраторы [220]
    Гаджеты для спорта и здоровья... [189]
    Гаджеты, аксессуары... [625]
    Измерительная техника, инструменты [444]
    Накопители данных [226]
    Нетбуки, Ноутбуки, Ультрабуки [679]
    Мультиварки, блендеры и не только... [158]
    Планшеты [758]
    Радар-детекторы [26]
    Роботы-пылесосы [37]
    Своими руками [353]
    Сети, сетевые технологии, оборудование... [267]
    Смартфоны [4963]
    Фотокамеры, объективы, искусство фотографии.. [542]
    Умный дом [47]
    Электронные книги [95]
    CB, LPD, PMR- связь... [169]
    DECT, IP-телефоны [18]
    Drones, boats, cars... [108]
    electric cars [35]
    GPS-навигаторы, трекеры... [51]
    Linux и не только [4380]
    mini computers и не только... [409]
    News IT, Это интересно, ликбез... [1112]
    Smart TV, UltraHD, приставки, проекторы... [414]
    Smart Watch [263]
    Sound: наушники, плееры, усилители... [613]
    Windows 10... [298]
    Windows 11 [28]
    Погода

  • Метеорадар БРЕСТ
  • Погода в Бресте от www.yr.no

    Яндекс.Погода БРЕСТ

  • Интересные ссылки

    COMPIZOMANIA

    Наш опрос
    Оцените мой сайт
    Всего ответов: 1338
    Статистика
    Анализ веб сайтов

    Яндекс.Метрика

    Рейтинг@Mail.ru Яндекс цитирования

    Russian America Top. Рейтинг ресурсов Русской Америки.

    eXTReMe Tracker

    Правильный CSS!


    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    Locations of visitors to this page
    Форма входа
    Главная » 2014 » Февраль » 20 » Запуск Linux на медиапроцессоре Realtek RTL-1185
    08:57
    Запуск Linux на медиапроцессоре Realtek RTL-1185

    Запуск Linux на медиапроцессоре Realtek RTL-1185



    Попалась нам сегодня в руки отладочная плата на базе SoC RTD1185 — RTK300 Rev. C1 — для разработки мультимедийных устройств. В рамках этой статьи мы познакомимся с техническими параметрами этой SDK, cоберем и запустим на ней базовое ядро Linux и rootfs, успешно решив в процессе несколько проблем.

    Disclaimer: данная статья рассчитана на опытных линуксоидов, по крайней мере, мы не останавливались на второстепенных подробностях. Если возникнут вопросы, добро пожаловать в комментарии.

    Данная система на кристалле от наших друзей из Realtek c кодовым названием Jupiter, как и её брат RTD1186, предназначена для мультимедийных приложений, которые декодируют видео в форматах HD MPEG 1/2/4, H.264, VC1, RM/RMVB. Также в медиапроцессоре реализована поддержка разъемов USB 2.0 и SATA, шины PCI-Express и сетевого интерфейса Gigabit Ethernet.

    Наличие Ethernet в связке с соответствующим сетевым контроллером обеспечивает возможность передачи данных по проводной сети со скоростью до 1 Гбит/с. Хоть данное устройство имеет по современным меркам небольшую частоту CPU, но этот параметр компенсируется мощными декодерами видео, что вполне оправдывает использование данного чипа в мультимедиа приложениях.

    Технические параметры RTD1185:
    • CPU: 500 МГц
    • HD MPEG 1/2/4 & HD JPEG Decoder
    • HD H.264, VC1, RM/RMVB, AVS Decoder
    • TV Encoder with CVBS/S-Video/YPbPr/SCART Out
    • HDMI v1.3 with CEC
    • I2S, SPDIF Out
    • USB2.0 Host & PHY
    • USB2.0 Device & PHY
    • SATA
    • 10/100 Ethernet MAC & PHY
    • Gigabit Ethernet MAC
    • PCI-Express
    • Card Reader (SD/MMC)
    • DTV Recording & Time-Shifting
    • Dual TS-In

    Комплект Realtek RTL-1185


    Плата идет в комплекте с ИК-пультом дистанционного управления. От Realtek был получен «полурабочий» SDK, который якобы должен был решить все проблемы со сборкой прошивки. «Полурабочим» мы его назвали потому, что у нас получилось собрать без «бубна» linux-2.6.12 и базовую rootfs. Но когда дело дошло до приложений аудио- и видеоплеера, пришлось все-таки взять «бубен». Ну что же, и на этом спасибо. Кит изображен на фотографии ниже.



    На плате присутствуют следующие компоненты:
    1. SoC RTD11185
    2. 256MB RAM от NANYA
    3. 256MB NAND SLC — flash Samsung
    4. 2x 2.0 USB Host
    5. FastEthernet RJ45 розетка
    6. HDMI Transmitter out
    7. ИК-приемник для дистанционного управления (пульт имеется, фото ниже)
    8. Кнопка с фиксацией для включения/выключения
    9. В один USB Host вставлен USB WiFi на базе RTL8190U
    10. Штыревая вилка (UART)
    11. Кнопка восстановления



    Работаем с китом


    Ну что же, мы познакомились с платой, попробуем что-нибудь на ней запустить. Изначально на ките стояла прошивка Realtek, по всей видимости, она работала поверх QT4.7.

    Когда мы получили этот SDK, казалось, что все — птица в кармане. Но не тут то было. Собирается, конечно, не все. Документации нет ни к отладочной плате, ни к самой системе на кристалле (SoC). Гугл тоже не помог. Но об этом далее.

    В данной статье мы используем следующие обозначения:
    • host# — команда выполняется на ArchLinux x86_64;
    • ubuntu# — команда выполняется ubuntu-12.10 amd64 chroot;
    • jupiter# — команда выполняется на ките;

    Получаем консоль

    С помощью осциллографа была выяснена распиновка UART на плате (возле кнопки восстановления): (USB HOST) GND – RX — TX — VCC.

    Подключаемся с помощью minicom на хосте:
    host$ minicom -D /dev/ttyUSB0 -c on
    

    Включаем плату и нас встречает «приветливый» загрузчик:
    hello_world! 
    5522880 0 wwaiaittcheck_val=0x2700a0 
    
    REALTEK ROM Monitor, Revision 0000.0311.0022-ON. 
    Copyright (c) Realtek Semiconductor Corp. - All Rights Reserved. 
    For a list of available commands, type 'help'. 
    Compilation time /version= Feb 4 2013 15:12:08 /0000.0311.0022-ON 
    MAC address = 00.11.22.33.44.55 
    Processor Company ID/options = 0x01 (MIPS Technologies, Inc.) / 0x00 
    Processor ID/revision = 0x93 / 0x78 
    Endianness = Little 
    Flash memory size = 256 MByte 
    SDRAM size = 256 MByte 
    First free SDRAM address = 0x800b1000 
    Press 'ESC' to Monitor mode 
    Linux Kernel: 
     FW Image from 0xa2020000, to 0x80100000, size=0x44f086 
    decrypt from 0xa2020000 to 0x80100000, len:0x44f086 
    Audio FW: 
     FW Image from 0xa2480000, to 0x81b00000, size=0x17b040 
    decrypt from 0xa2480000 to 0x81b00000, len:0x17b040 
    Video FW: 
     FW Image from 0xa2600000, to 0x81d80000, size=0x1bfd68 
    decrypt from 0xa2600000 to 0x81d80000, len:0x1bfd68 
    Audio data: 
     FW Image from 0xa27c0000, to 0x83000000, size=0x68c78 
    Video data: 
     FW Image from 0xa2840000, to 0x83100000, size=0x413428 
    5280Go 5280Go SCPU_CLK90K=0.000 sec. 
    Debug: [go 0x80100000 mtdparts=rtk_nand:212096k,3968k(/),32768k(/usr/local/etc),13312k rootfstype=squashfs root=31:01 ] 
    Reset Ethernet Mac. 
    Address = 0x80100000 
    

    После чего начинается загрузка ядра.

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

    Обновление прошивки

    Ну что же, неплохо. Попытаемся обновить прошивку, которую в собранном виде была представлена в SDK.
    1. Для начала нужно отформатировать USB-накопитель:
      host# mkfs.vfat /dev/sdx -n firmware
      
    2. Скопировать образ прошивки install.img на данный накопитель.
    3. Вставить флешку и запустить процесс обновления ПО. Запуск этого «процесса» можно осуществить 2-мя основными способами (существуют и другие):

    • Recovery-режим загрузки: нужно включить плату с зажатой «кнопкой восстановления». Загрузчик при этом достает ядро по другому адресу во флеш, т.е., если при перепрошивке мы сделаем кирпич из нашей платы, зашив не то ядро, можно в любой момент загрузиться в Recovery-режиме.
    • Стандартная загрузка: выбрать соответствующий пункт в GUI. Не будем подробно описывать этот вариант.

    Все просто и понятно с первого взгляда. Форматируем. Копируем прошивку на флешку. Вставляем в устройство. Загружаемся в recovery-режиме. Флешка автоматически монтируется и начинается прошивка. За все это отвечает утилита loader_a. Но…
    [MCP][RSA] strip rsa header failed - no rsa padding header detected
    loader_a.c:verona_load_func:1456 Error! Image file, /mnt/usbmounts/sda/install.img, cannot be opened or the hash value is not correct.
    +++ ALLOC index: 3072 order: 8
    1. start remap DVR zone 81c00000(80409000) 256...
    

    Ладно, что поделать. Пробуем по-другому.

    Эту защиту можно обойти кривохаками, но нам пока это не нужно. Если кому-то интересно, то у утилиты прошивки loader_a есть аргумент — nonsecure который отключает проверку хэшем. Но для этого нужно собрать busybox для данной платформы и скопировать его тоже на USB-накопитель, загрузить плату в recovery-режиме и в shell'e линукс на ките выполнить:

    jupiter# cp /mnt/usbmounts/sda1/busybox /tmp/busybox && chmod a+x /tmp/busybox && /tmp/busybox killall loader_a && rm /var/lock/hotplug/mount_tmp/.lock_sda && loader_a --nonsecure &
    

    Busybox пришлось собирать, потому что в recovery initramfs нету ничего, чем можно было бы кильнуть процесс loader_a. Но это не основная причина. С ним было намного проще изучить внутренности recovery-режима, используя тот же ash, ls, cat из его состава, чем без них.

    Собираем базовое ядро Linux и rootfs

    Настало время собрать ядро и rootfs, используя SDK от Realtek. Так как мы работаем в ArchLinux x86_64, то обычно все операции по сборке embedded ПО осуществляем в Ubuntu 12.10 amd64 chroot по нескольким причинам:
    1. Часто все необходимые при сборке пакеты уже есть в Ubuntu.
    2. Embedded-разработчики консервативны, часто встречаются SDK в которых host-утилиты, необходимые для сборки прошивки (rootfs), собираются определенной старой версией gcc и библиотек, а так как у нас на арче постоянно свежая версия gcc, то часто возникают проблемы при сборке этих утилит. Намного проще развернуть chroot rootfs, чем возиться с поиском патчей или исправлять самостоятельно.
    3. Большинство SDK разворачиваются и тестируются как раз таки под Ubuntu. Дело даже не в самой Ubuntu. С таким же успехом можно развернуть у себя другой дистрибутив, если в этом возникает необходимость.
    4. Развертывание сборочной системы у заказчика происходит проще, так как можно передать ему всё вместе с chroot, и у него firmware соберется с большой вероятностью сразу. Но это в том случае, если заказчик не работает под Windows (в таком случае он будет использовать виртуальную машину и в этом смысла нету).

    Ubuntu rootfs для chroot развертывается с помощью утилиты debootstrap, которую мы вытянули из AUR.
    • развертываем ubuntu chroot wiki.ubuntu.com/DebootstrapChroot;
    • монтируем proc, sysfs, devtmpfs, devpts для chroot;
    • host# chroot ubuntu-12.10
    • ubuntu# apt-get update
    • ubuntu# apt-get install vim file lib32z1-dev libc6-i386 sed dos2unix python g++-4.4-multilib
    • ubuntu# useradd -s /bin/sh -m developer

    Сейчас копируем файлы SDK в ubuntu-12.10/home/developer/Jupiter.

    • ubuntu# su developer /bin/bash
    • ububtu$ cd /home/developer/Jupiter/linux/system
    • ubuntu$ make menuconfig # включаем поддержку NFS и NFS root
    • ubuntu$ make PRJ=develop.avhdd.jupiter.nand.loongtle

    После данных операций получаем ядро и базовую rootfs.

    Rootfs копируем в /srv/nfs/jupiter для того чтобы использовать nfs root. Добавляем /etc/exports соответствующие строки.
    host# exportfs -a

    Ядро копируем на tftp сервер в /srv/tftp/vmlinux.develop.avhdd.jupiter.nand.loongtle.bin.

    Запускаем сервера tftp и nfs на хосте. Конфигурируем NIC хоста подключенный по ethernet к отладочной плате: Ipv4 192.168.0.1/24.

    Запуск свежесобранного Linux


    Перезагружаем плату и сразу же зажимаем ESC для того, чтобы перейти в monitor-режим:
    REALTEK ROM Monitor, Revision 0000.0311.0022-ON. 
    Copyright (c) Realtek Semiconductor Corp. - All Rights Reserved. 
    
    For a list of available commands, type 'help'. 
    
    Compilation time /version= Feb 4 2013 15:12:08 /0000.0311.0022-ON 
    MAC address = 00.11.22.33.44.55 
    Processor Company ID/options = 0x01 (MIPS Technologies, Inc.) / 0x00 
    Processor ID/revision = 0x93 / 0x78 
    Endianness = Little 
    Flash memory size = 256 MByte 
    SDRAM size = 256 MByte 
    First free SDRAM address = 0x800b1000 
    
    Press 'ESC' to Monitor mode 
    Realtek> help 
    
    Available commands : 
    
    . . (repeat last command line) 
    ; ; (command separator) 
    + + <repeat count> ; 
    compare compare <address1> <address2> <size> 
    continue continue 
    copy copy [-f] <src> <dst> <size> 
    dump dump [-m][-8|-16|-32] <address> [<size>] 
    erase erase -e|-m| <address> <size> 
    factory factory [-r|-w|-sha1] <address> <size> or factory -c 
    fill fill [-8|-16|-32] <address> <size> <data> 
    fread fread tftp://<ipaddr>/<filename> <address> 
    fwrite fwrite tftp://<ipaddr>/<filename> <address> <size> 
    go go [?|.|<address> [<args>]] 
    help help [<command>] 
    info info [boot|board|cpu|sysctrl|memory|uart|all|pll] 
    keyset keyset 
    load load [-r] 
     ([tftp:][//<ipaddr>][/<filename>]) | 
     ([asc:] [//(tty0|tty1)]) 
    ping ping ipaddr [<datagramsize>] 
    port port [-a] [-8|-16|-32] <address> [<value>] 
    reset reset 
    saveenv saveenv 
    setenv setenv [<variable> [<value>]] 
    stty stty [-tty<0|1>] [-b|-u|[-p][<baudrate>][n|o|e][7|8][1|2][hw|none]] 
    test test [-l] | [-m] [ <module> [ <module arguments> ] ] 
     
    Realtek>
    

    Commandline загрузчика немного напоминает uboot, но это не он. Видно, что можно выгрузить файл по tftp, что мы и сделаем чтобы выгрузить ядро Linux из сети.

    Realtek> fread tftp://192.168.0.1/vmlinux.develop.avhdd.jupiter.nand.loongtle.bin 0x80100000; go 0x80100000 root=/dev/nfs rw nfsroot=192.168.0.1:/srv/nfs/jupiter,v3 
    About to binary read tftp://192.168.0.1/vmlinux.develop.avhdd.jupiter.nand.loongtle.bin 
    .............................................................................................................................................................................................s 
    Address = 0x80100000 
    
    Realtek LINUX started... 
    Venus setting: 
     ROSs have 2621440 bytes RAM. 
     System CPU has 2 UARTs. 
     System CPU uses external timer interrupt. 
     Bootloader version: 0000.0311.0022-ON. This version string is of new format. 
     The information of this board: Company ID:0x0 CPU ID: 0x33 Board ID: 0x311 
     Ethernet Mac address: 00.11.22.33.44.55 
     Model Config length=0 
    Base year of RTC is 2010. 
    Config serial console: console=ttyS0,115200n8r 
    prom_flashsize = 0x10000000 
    
    …
    
    BusyBox v1.1.3 (2014.01.27-13:35+0000) Built-in shell (ash) 
    Enter 'help' for a list of built-in commands. 
    
    / # cat /proc/cpuinfo 
    system type : Realtek DMP/Jupiter 
    processor : 0 
    cpu model : MIPS 24K V7.8 
    BogoMIPS : 332.59 
    wait instruction : yes 
    microsecond timers : yes 
    tlb_entries : 32 
    extra interrupt vector : yes 
    hardware watchpoint : yes 
    ASEs implemented : mips16 
    VCED exceptions : not available 
    VCEI exceptions : not available 
    / # cat /proc/fb 
    0 venusfb 
    / # cat /proc/filesystems 
    nodev sysfs 
    nodev rootfs 
    nodev bdev 
    nodev proc 
    nodev sockfs 
    nodev usbfs 
    nodev pipefs 
    nodev futexfs 
    nodev tmpfs 
    nodev eventpollfs 
    nodev devpts 
    nodev ptpfs 
     ext3 
     squashfs 
    nodev dvrfs 
    nodev ramfs 
     vfat 
    nodev devfs 
    nodev nfs 
    nodev nfs4 
    nodev smbfs 
    nodev cifs 
    nodev jffs2 
     yaffs 
     yaffs2 
    nodev rpc_pipefs 
    / # cat /proc/meminfo 
    MemTotal: 251716 kB 
    MemFree: 242036 kB 
    Buffers: 60 kB 
    Cached: 1372 kB 
    SwapCached: 0 kB 
    Active: 1144 kB 
    Inactive: 524 kB 
    HighTotal: 0 kB 
    HighFree: 0 kB 
    LowTotal: 251716 kB 
    LowFree: 242036 kB 
    SwapTotal: 32 kB 
    SwapFree: 32 kB 
    Dirty: 0 kB 
    Writeback: 0 kB 
    Mapped: 612 kB 
    Slab: 5496 kB 
    CommitLimit: 125888 kB 
    Committed_AS: 1588 kB 
    PageTables: 56 kB 
    VmallocTotal: 1048548 kB 
    VmallocUsed: 500 kB 
    VmallocChunk: 1047936 kB 
    

    Таким образом, мы получили базовую рабочую систему.

    Что дальше?


    Попытаться собрать QT, gstreamer. Найти и собрать в SDK или разработать cамостоятельно плагины для gstreamer для использования аппаратных декодеров. Возможно, придется избавиться от сборочной системы в SDK в пользу Buildroot. О чем еще, возможно, придется написать — шифрование ядра и firmware. Но это уже другая история для другой части статьи.

    Спасибо за внимание!
    http://habrahabr.ru/post/202178/
    Категория: Своими руками | Просмотров: 951 | Добавил: laptop | Рейтинг: 4.0/1
    Всего комментариев: 0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]
    Волк слабее льва и тигра, но в цирке волк не выступает!
    Волк слабее льва и тигра, но в цирке волк не выступает!
    Волк - единственный из зверей, который может пойти в бой на более сильного противника.
    Если же он проиграл бой, то до последнего вздоха смотрит в глаза противника. После этого умирает...

    Праздники сегодня

    Поиск
    Календарь
    Архив записей
    Друзья сайта
  • Официальный блог
  • JEEP - the best! Mercedes - the best! Автомобильный портал города Бреста: технические характеристики с фото, авторынок, автоспорт...
    Наша кнопка
    IT новости с моего лаптопа...

    Внимание!
    Администратор сайта laptop.ucoz.ru не несет ответственности за содержание рекламных объявлений. Все используемые на сайте зарегистрированные товарные знаки принадлежат своим законным владельцам! Используемая со сторонних источников информация публикуется с обязательными ссылками на эти источники.
    Copyright Valeri N.Kravchuk © 2007-2024