Показаны сообщения с ярлыком linux. Показать все сообщения
Показаны сообщения с ярлыком linux. Показать все сообщения

пятница, 23 марта 2018 г.

Игра платформер на C++






Под Linux с использованием SDL, пока только основа.
Написано в процессе обучения сына основам программирования :).

Исходники тут.

Бинарники для Win32 и Linux тут.


PS: Версия с использованием SDL2 и OpenGL рендерингом:

картинка

Бинарники Win32 и Linux x64 тут.

среда, 3 мая 2017 г.

Аппаратное декодирование на rk3066 rk3188 rk3288

Аппаратное декодирование видео для rk3066 rk3188 rk3288.

На этих SOCах стоят видео декодеры одного типа (6731) но разной ревизии, также на rk3288 дополнительно стоит декодер HEVC .

Исходники и компилированные файлы  тут. (без HEVC)

Схема реализации для rk3066 и rk3188.




export VDPAU_DRIVER=rk3x

mplayer -vo vdpau -vc ffmpeg12vdpau,ffodivxvdpau,ffh264vdpau, [filename]

четверг, 28 января 2016 г.

Amlogic S812 легкий Dual Boot

Дано: андроид приставка М8 с s812 на борту, плата M8 V8_8 20150923, прошивка k200.bcm4335.2015.201510211111 (U-boot-00000-g92ff5df-dirty(m8_n200C_v1@) (Oct 21 2015 - 10:20:19)).

Задача: сделать двойную загрузку линукс/андроид с минимальными затратами.

Проект в стадии реализации прерван...

Что нужно...
  1. Берем исходники ядра и компонентов с http://openlinux.amlogic.com:8000/download/ARM/, (хотя можно попробовать с родным ядром просто изменив строку параметров ядра.). Родной конфиг и дерево устройств DTS можно легко добыть из родной прошивки или из дампа  раздела boot.
  2. Собираем ядро в формате uImage. Примерный порядок действий  http://www.cnx-software.com/2014/03/10/amlogic-gpl-source-code-release-kernel-3-10-u-boot-and-drivers-wi-fi-nand-tvin-mali-gpu/
  3. Создаем recovery.img. (например так mkbootimg --kernel uImage --ramdisk ramdisk.gz --second myboard.dtb --base 10000000 --pagesize 2048 -o recovery.img)
  4. SD карту разбиваем на два раздела, первый (20-30мб) форматируем fat32 и кидаем туда recovery.img, второй делаем ext4 и развертываем туда любимый linuxroot.
  5. Грузимся с зажатой кнопкой для восстановления - должно загрузится новое ядро.


кусок Uboot лога:
update by key...
Enter USB burn
Try connect time out 1001, 1000, 1318
 sdio_detect return 1
[mmc_init] SDIO Port B:0, if_type=7, initialized OK!
Device: SDIO Port B
Manufacturer ID: 0
OEM: 0
Name: ran Speed: 20000000
Rd Block Len: 512
SD version 2.0
High Capacity: No
Capacity: 2028994560
Boot Part Size: 0
Bus Width: 4-bit

** Unable to open "aml_sdc_burn.ini" from mmc 0:1 --- file not exist**
reading aml_autoscript

** Unable to read "aml_autoscript" from mmc 0:1 **
enter recovery
Device: SDIO Port B
Manufacturer ID: 0
OEM: 0
Name: ran Speed: 20000000
Rd Block Len: 512
SD version 2.0
High Capacity: No
Capacity: 2028994560
Boot Part Size: 0
Bus Width: 4-bit
reading recovery.img

6811731 bytes read
## ANDROID Format IMAGE
## Booting kernel from Legacy Image at 12000000 ...
   Image Name:   Linux-3.10.33
   Image Type:   ARM Linux Kernel Image (lzo compressed)
   Data Size:    6784865 Bytes = 6.5 MiB
   Load Address: 00208000
   Entry Point:  00208000
   Verifying Checksum ... OK
    Ramdisk start addr = 0x12679000, len = 0x427
    Flat device tree start addr = 0x12679800, len = 0x547a magic=0xedfe0dd0
   Uncompressing Kernel Image ... OK

простая консоль на последовательный порт для отладки (в initramfs):

/bin/sh -i </dev/ttyS0 >/dev/ttyS0 2>&1

четверг, 19 ноября 2015 г.

MK808 очередное обновление

Очередное обновление для любимого МК808 на rk3066 на базе ядра radxa stable-3.0. 

  • частота обновления экрана теперь ограничена 60фпс, поэтому во всех видео тестах показывает 60, XBMC в 1280х720 тоже дает 60фпс
  • немного подкорректировал таблицу ограничения частоты от температуры (самый верхний предел не менял),
  • убраны старые глюки с просмотром видео через XV,
  • добавлено двойное буферизирование для XV и 3D с vsync,
  • синий светодиод моргает :)

исходник тут master branch, подготовленная прошивка  

видеодрайвер: исходники, бинарные для Debian


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

На заметку по мк808:
  • синий светодиод подключен к выходу ШИМ (PWM)
  • единственная кнопка сидит на входе АЦП (ADC) 
  • под эти фичи есть драйвера


зы: с rockchip поигрались, будем ставить Linux десктоп на Amlogic S802.

среда, 12 февраля 2014 г.

CubieBook - Программы

оконный менеджер Mate - в репозитории от малины (для ностальгирующих по гному2)

deb http://archive.raspbian.org/mate wheezy main

apt-get update
apt-get install mate-core mate-desktop-environment

по скорости примерно как xfce, но удобнее (для меня)
-----------------
вот еще программы что я почти год назад скомпилировал для моего mk808 , идут и на кубике

там нужно устанавливать библиотеки из папки libs только не нужно ставить libmali  (не совместимая версия)

исходники тут

CubieBook - Разгон

попробовал я немного разогнать А20 на втором кубике

пристроил алюминиевую пластину на процессор и память (на термопасту), по периметру термоклеем закрепил чтоб не елозила
конечно лучше полноценный радиатор , но что было под рукой

изменил конфиг

[dvfs_table]
max_freq = 1200000000
min_freq = 400000000
LV_count =9
LV1_freq = 1200000000
LV1_volt = 1550
LV2_freq = 1100000000
LV2_volt = 1500
LV3_freq = 1008000000
LV3_volt = 1450
LV4_freq = 912000000
LV4_volt = 1400
LV5_freq = 864000000
LV5_volt = 1300
LV6_freq = 720000000
LV6_volt = 1200
LV7_freq = 528000000
LV7_volt = 1100
LV8_freq = 312000000
LV8_volt = 1050
LV9_freq = 144000000
LV9_volt = 1050

ну и задал гувернер и параметры

echo ondemand > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo 1200000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq

вроде все работает и не глючит

запускал расчет Пи(pi_css5) на милион знаков, до и после разгона
39.15 sec. (real time) и 34.43 sec. (real time)

CubieBook - Подсветка ЖК экрана

Как я делал подсветку подключенного по LVDS экрана

В моем экране от ноутбука стоит подсветка на газоразрядных лампах с инвертором. Она имеет отдельные выводы (питание, разрешение, яркость)

питание у нее 12 вольт, разрешение вместе с управлением яркостью к PB2 (выход PWM) через RC цепочку [img]http://upload.wikimedia.org/wikipedia/commons/e/e7/Low_pass_filter.png[/img]

разрешение подцепил к порту PH7, а управление яркостью к PB2 (выход PWM) напрямую

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


конфиг такой

[lcd0_para]
...
lcd_pwm_not_used = 0
lcd_pwm_ch = 0
lcd_pwm_freq = 10000
lcd_pwm_pol = 1
lcd_max_bright = 100
lcd_min_bright = 50
...
lcd_bl_en_used = 1
lcd_bl_en = port:PH07<1><0><default><1>
...
lcd_pwm_used = 1
lcd_pwm = port:PB02<2><0><default><default>


потом начал искать драйвер этого дела, и ... не нашел

пришлось писать самому

теперь яркость можно регулировать так

echo 70 > /sys/class/backlight/sunxipwm-bl/brightness

ну и всякими гуишными ползунками

CubieBook - Подключение внешней RTC (часов реального времени)

решил написать тут инструкцию на примере ds1307 (i2c интерфейс) и linux

1. Физическое подключение

к кубику 4 провода
выводы
кубик - ds1307
общий = 4
+5вольт = 8
PB19 = 5 (data)
PB18 = 6 (clk)

2. Конфигурация

   [twi1_para]
    twi1_used = 1
    twi1_scl = port:PB18<2><default><default><default>
    twi1_sda = port:PB19<2><default><default><default>

3. Проверка

ставим пакет i2c-tools

запускаем сканирование

i2cdetect -y n
  где n номер шины i2c   (список шин i2cdetect -l)

программа просканирует шину и выведет список устройств в сетке
там будет либо адрес устройства либо UU - если устройство используется

если следовать данной инструкции, то устройство должно появится на шине 1

i2cdetect -y 1

root@cubieez:~# i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --                       

можно пообщаться напрямую

секунды
i2cget -y 1 0x68 0
минуты
i2cget -y 1 0x68 1
часы
i2cget -y 1 0x68 2

смещение есть в даташите на ds1307

стоит иметь ввиду что при первом подключении к питанию ds1307 встает на тормоз (т.е не считает), необходимо ее активировать
"бит активации" это старший бит секунд, его нужно сбросить

i2cset -y 0 0x68 0x00 0x00

в принципе это делается драйвером часов при сохранении даты в rtc

4. Конфигурация и загрузка драйвера

Перед этим лучше проверить - может загружены другие драйвера RTC например встроенный в SOC
например так ls /dev/rtc*
или тут ls /sys/class/rtc

просто обычно по умолчанию linux использует /dev/rtc0, а это первый загруженный драйвер


далее активация

   echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
    modprobe rtc-ds1307

модуль rtc-ds1307 поддерживет следующие чипы
"ds1307" "ds1337" "ds1338" "ds1339" "ds1388" "ds1340" "ds3231" "m41t00" "mcp7941x" "pt7c4338" "rx8025"

соответственно нужно менять строку echo ds1307... подставляя нужный идентификатор

далее "человеческие" команды работы с часами

hwclock -r чтение и вывод на экран
hwclock -s чтение и установка системного времени
hwclock -w запись в rtc системного времени

по умолчанию hwclock читает /dev/rtc0
если нужны другие часы то задаем через обцию -f
hwclock -r -f /dev/rtc1

ЗЫ: пробовал я использовать встроенную RTC в А20, но чтото у меня получилась точность хода ужасная, да и питание нужно 1.3в

CubieBook - подключение микрофона

в моем проекте встала такая задачка , причем микрофон стерео

AllWinner SOCs вообще то имеют вход для микрофона, но создатели кубиков не стали заморачиваться на эту тему и просто не развели на плате эти выводы (как и другие не менее полезные)

Вобщем сейчас кубик имеет 2 входа звука (оба стерео), это линейный вход и вход для fm приемника (контакты FMINR FMINL)
но эти входы предназначены для более сильного (с более высокой амплитудой) сигнала чем микрофон и подключенный туда микрофон в лучшем случае будет очень тихо работать

Поэтому если необходим микрофон нужно усилить его сигнал с помощью предусилителя, например я собрал по такой схеме(для электретного микрофона), и подключил к входам FM на разъеме расширения

теперь конфигурация

[audio_para]
audio_used = 1
capture_used = 1
audio_pa_ctrl = port:PH15<1><default><default><1>


проверяем наличие устройства захвата звука
arecord -l

и переключаем запись на вход FM
для этого необходимо прописать одно из следующих значений в контрольный регистр ADC Input Mux
0 - linein
1 - fmin
7 - micin
(возможно 0 и 7 перепутаны местами я не проверял)
выясняем номер регистра ADC Input Mux по команде amixer contents
в появившемся списке находим ADC Input Mux и запоминаем значение из параметра numid=(24 у меня)

далее даем команду выбора устройства захвата звука

amixer -c 0 cset numid=24 1 
где 0 - номер звуковой карты
24 - номер регистра ADC Input Mux
1 - выбран вход FM

ссылка по теме

CubieBook

Вообщем был у меня ноут сломанный (без матери) и появился кубик2, и решил я их скрестить

вот что получается 

ядро с изменениями

зы: предвидя вопрос - зачем это нужно? отвечаю - просто так.


текущие проблемы:
- не будится после suspend
- не знаю как грузить с жесткого (пока ядро на сд карте)
встречал упоминание о lilo но не встречал рецептов приготовления