Последнее обновление:
July 15, 2017

Есть мысль... Жми, напиши!
Что имеем: Постов : 166 Авторов: 1 Категорий: 37

Программирование и отладка STM32F3 Discovery в QtCreator под Ubuntu

Спустя три года опять решил поиграться с STM32F, но уже вплотную.

В этот раз в роли IDE и дебагера будет выступать QtCreator т.к. в новых версиях есть плагинчик для работы с голыми устройствами.

Ось — Ubuntu 16.04, под Windows тут недалеко.

1.  Поставим сам отладчик для STM т.е. gdb сервер

Для этого клонируем репозиторий и собираем ST-Link Utility

cd ~/Projects/ST-Link-Utility
git clone https://github.com/texane/stlink .
make release
sudo make install
sudo ldconfig
sudo udevadm control --reload-rules
sudo  udevadm trigger

Вот впринципе сервер скомпиллен, запускать его для вывода справки:

st-util -h

2. Включаем в QtCreator плагин Help -> About Plugins -> галка напротив BareMetal и перезапускаем QtCreator

3. Дальше необходимо поставить компилятор и отладчик для архитектуры ARM

sudo apt-get install gcc-arm-none-eabi
sudo apt-get install gdb-arm-none-eabi

4. Добавляем их в QtCreator

Preferences -> Build & Run -> Compillers -> Add -> GCC

Название на ваше усмотрение, у меня: arm-none-eabi-gcc

Путь прописываем такой: /usr/bin/arm-none-eabi-gcc

Preferences -> Build & Run -> Debuggers -> Add

Название на ваше усмотрение, у меня: arm-none-eabi-gdb 

Путь прописываем такой: /usr/bin/arm-none-eabi-gdb 

5. Создадим устройство, переходим в Preferences ->BareMetal -> Add ST-Link

название на ваше усмотрение, у меня ST-Link-Utility

режим запуска: TCP/IP

исполняемый файл: st-util

хост: localhost, порт: 4242

5.1 Нужно дать отладчику дополнительное время для ожидания подключения:

Options->Debugger->GDB->Additional Startup Commands и прописать

set remotetimeout 10

6. Теперь добавляем комплект сборки:

Preferences -> Build & Run -> Kits -> Add

Название на ваше усмотрение, у меня Qt for Bare Metal

Тип устройства: Bare Metal

Устройство: Нажимаете Manager -> Add -> Bare Metal

Название на ваше усмотрение, у меня ST-Link1

Тип сервера gdb:  ST-Link-Utility (из предыдущего шага)

Компилятор:  как задали в предыдущем шаге, у меня arm-none-eabi-gcc

Отладчик: как задали в предыдущем шаге, у меня arm-none-eabi-gdb

Профиль Qt: отсутствует

7. Так, с подготовкой закончили, создаём новый проект, импортировав его шаблон из Git репозитория File-> New -> Import -> Git.

Репозиторий с шаблоном: https://github.com/Riflio/STM32F3DiscoveryQtCreatorTemplate

Путь выбираете свой.

Смените комплект на Qt for Bare Metal и можно наконец то прожать Run, в окне вывод приложения должно появиться примерно это:

Отладка запущена
st-util 1.2.0-147-g3de5cf0
Flash page at addr: 0x08000000 erased
Flash page at addr: 0x08000800 erased
Flash page at addr: 0x08001000 erased

И светодиоды должны начать зажигаться по кругу.

Если вылетает при отладке, либо при её завершении, поставьте в Qt Creator -> Инструменты -> Параметры -> Отладчик -> GDB, расширенные
галку у «Использовать асинхронный режим для работы с программой»
Если будет ошибка «Unknown remote qXfer reply: OK«, то см. пункт 5.1

P.S. Как создавать шаблон под другие контроллеры?
Сделать его достаточно просто, потребуется CMSIS — в ней содержатся описания для доступа к регистрам периферии и STM32F30x_StdPeriph_Driver (в новых версиях переименован в HAL)
Всё это ищется в недрах сайта st.com    ldscripts были найдены в каком-то демо-проекте 😀

Вот как-то так =)

Views :

512

Ubuntu LTSP fat clients install OPENCHROME drivers

На этот раз достался очередной толстый клиент, но с видяхой VIA VX900, подключил в сеть и опять облом: картинка вся в мыле, не то разрешение и не работает OpenGL, при попытке узнать как он там:

glxinfo

Получаем кучу

Xlib:  extension "GLX" missing on display ":0.0".

Понятно дело, в предыдущий раз были поставлены дрова на Нвидию т.к. остальные клиенты на ней, а теперь зоопарк.

Чтож, добавим в эот зоопарк дрова на VIA VX900, а именно свободные openchrome

Переходим в рут к ltsp, подключаем нужные разделы и ставим дрова:

sudo su
export LTSP_HANDLE_DAEMONS=false
chroot /opt/ltsp/i386
mount -t proc proc /proc
apt-get install xserver-xorg-video-openchrome

разумеется нужно в lts.conf указать конкретный драйвер:

[client mac]
   XSERVER=openchrome

Можно попробовать перегрузиться, но по glxinfo опять облом =(

Смотрим /var/log/xorg.0.log, а там

 LoadModule: "glx"
...
Module glx: vendor="NVIDIA corporation"

Походу, что-то не оттуда грузиться, поэтому сделаем свой xorg.conf.openchrome, который укажем в настройках lts.conf и засунем в него портянку (взял из гугла), где в секции FIles укажем дефолтные пути загрузки:

nano /etc/X11/xorg.conf.openchrome
xorg.conf.openchrome

и пропишем в lts.conf его явно:

[client mac] 
X_CONF=/etc/X11/xorg.conf.openchrome

Можно пробовать перезагрузиться, разрешение должно прийти в норму, а вот с glxinfo опять облом, опять же смотрим xorg.0.log

AIGLX error: dlopen of /usr/lib/xorg/modules/drivers/i965_dri.so failed (/usr/lib/xorg/modules/drivers/i965_dri.so: undefined symbol: _glapi_set_dispatch)

Вот падла, что-то опять не оттуда загрузил, проверяем откуда libglx.so берёт зависимости:

ldd /usr/lib/xorg/modules/extensions/libglx.so

а там

libGL.so.1 => /usr/lib/nvidia-340/libGL.so.1

Бля, тащит libGL от Нвидии. Ладно, значит Нвидиа подсунула в ld свои настройки, идём в /etc/ld.so.conf.d смотрим в *.conf файлах отголоски Нвидии и заменяем на папку, откуда по идее должен быть libGL.so.1 (можно узнать, заюзав find / -name «libGL.so.1»)

/usr/lib/i386-linux-gnu/mesa

Ну и не забываем обновить кэш ld:

ldconfig

Обновляем образ, перегружаем клиента, радуемся,

ha_ha
Таким макаром мы сломали загрузу дров Нвидии.

Создадим и для неё отдельный xorg.conf.nvidia

xorg.conf.nvidia

не забудем прописать в lts.conf для клиентов с Нвидиа карточками

[client mac] 
X_CONF=/etc/X11/xorg.conf.nvidia

Но это ещё не всё…

Дело в том, что Nvidia подменяет системный libGL своим…, а мы заменив пути в /etc/ld.so.conf.d   тем самым указали использовать системный.

и через xorg.conf это никак не настроить =((    Тоесть придётся перед загрузкой клиента заранее прописывать какой там путь должен быть.

Как это сделать более элегантно я не придумал, кроме как запускать скрипты из rc.local

 

 

Вот как-то так =)

Views :

108

Ubuntu LTSP fat clients install NVIDIA drivers

Раздобыл тут на днях парочку толстых клиентов, но радость была недолгой, т.к. после подключения к сети картинка была вся в мыле и настройки не помогали.

Пришлось поплясать с бубном, что бы внедрить в дистрибутив драйвера от Нвидии, т.к. простой установкой nvidia-current дело не обошлось и всё равно грузился драйвер vesa.

Чтож, погнали:

переключаемся в рут к ltsp и монтируем нужные разделы:

sudo su
export LTSP_HANDLE_DAEMONS=false
chroot /opt/ltsp/i386
mount -t proc proc /proc

обновим систему:

sudo su
apt-get update
apt-get dist-upgrade

снесём отголоски предыдущих установок:

apt-get remove --purge nvidia-*
apt-get autoremove

Но это потянет за собой и оболочку, поэтому её нужно вернуть обратно (замените на свою, у меня lubuntu):

apt-get install lubuntu-desktop

установим заголовочники ядра и утилиты для пересборки:

apt-get install dkms build-essential linux-headers-generic

выпилим намертво vesa:

echo options nouveau modeset=0 | tee -a /etc/modprobe.d/nouveau-kms.conf
echo 'nouveau' | sudo tee -a /etc/modules
update-initramfs -u
nano /etc/modprobe.d/blacklist-nouveau.conf
>>blacklist nouveau
>>blacklist lbm-nouveau
>>options nouveau modeset=0
>>alias nouveau off
>>alias lbm-nouveau off

Что бы наверняка, можно вообще удалить её (не забудьте глянуть будет ли оболочка в списке зависимостей, если что — вернуть обратно, как-написано выше ):

apt-get --purge remove xserver-xorg-video-nouveau 

ну и ставим новые дрова (гляньте на сайте Нвидии какие подходят):

apt-get install nvidia-340

закругляемся:

umount /proc
exit
sudo ltsp-update-kernels
sudo ltsp-update-image

Осталось только в когфиге lts.conf прописать у клиентов какой драйвер использовать:

[client mac]
   XSERVER=nvidia

После перезагрузки клиента можно глянуть какие дрова используются:

lspci -k| grep -EA2 'VGA|3D'

Вот как-то так =)

 

 

 

 

Views :

86

Ubuntu server (14.04, 15.04) настройка wifi WPA2-PSK (wpa_supplicant) через консольку.

Со всеми этими юзер-френдли интерфейсами «далее-далее» совсем забыл как руками настраивать wifi только через консольку.
Для начала залогинимся под рутом, что бы каждый раз sudo не вбивать

sudo su

убеждаемся, что адаптер работает и посмотрим на список сетей

iwconfig
iwlist wlan0 scan

должен показаться список сетей, запоминаем название нужной
для работы с зашифрованными сетями требуется утилита wpa_supplicat, которая уже есть в дистрибутиве,
нам её нужно просто настроить.
Вбиваем:

wpa_passphrase SSID PASS >> /etc/wpa_supplicant.conf

разумеется вместо SSID и PASS впишите название вашей сети и пароль к ней.
Этим мы дописали в файл настроек (/etc/wpa_supplicant.conf) название сети и хэш пароля (ну не хранить же его в открытом виде).
Теперь необходимо дать знать, что мы используем WPA2-PSK:

nano /etc/wpa_supplicant.conf
network={
   ssid="имя сети"
   scan_ssid=1
   proto=WPA RSN
   key_mgmt=WPA-PSK
   group=CCMP TKIP
   pairwise=CCMP TKIP
   psk= сгенерированныйхэш
}

На этом всё. В настройках может быть несколько сетей.

Теперь необходимо настроить интерфейсы

nano /etc/network/interfaces
auto wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant.conf

Ну и напоследок перезагрузим сетевые подключения:

/etc/init.d/networking restart

Впринципе, всё просто. Должно заработать.

Views :

893

PoDoFo сборка для Qt на Ubuntu 14.10

PoDoFO

PoDoFo это библиотека для чтения и записи PDF файлов.

Для Windows мануал здесь.

Создаём папку, в которой будет идти вся сборка, у меня это ~/Projects/PoDoFO/

Скачиваем саму PoDoFO
Распаковываем файлы архива в папку  podofo-src

Ещё понадобиться LibJpeg
Распаковываем файлы в папку jpeg-9a
Компилируем LibJpeg.
В терминале:

cd ~/Projects/PoDoFo/jpeg-9a/
./configure
make
sudo make install

Так же потребуется LibPng, устанавливаем так:

sudo apt-get install libpng-dev

Теперь, наконец-то, собираем сам PoDoFo

cd  ~/Projects/PoDoFO/podofo-build/
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/Projects/PoDoFo/lib" ../podofo-src
make
sudo make install

Библиотека скомпилирована! Всё необходимое будет в папке ~/Projects/PoDoFo/lib

Документация по PoDoFo здесь.

Исходники тестового проекта Qt и PoDoFo.

Views :

626

Ubuntu Qt 5.6 mysql 5.6 драйвер не найден, но доступен (driver not loaded)

Собственно ошибка: SqlDatabase: QMYSQL driver not loaded

Обновил пост для Qt 5.6

Для Qt 5 и выше обычно mysql драйвер уже идёт в стандартной поставке.
Для уточнения переходим в каталог установки Qt а далее в папку с драйверами, у меня это /opt/Qt/Qt5.5.0/5.5/gcc_64/plugins/sqldrivers
по идее там должен быть libqsqlmysql.so

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

ldd libqsqlmysql.so

скорее всего будет не найдена (not found) зависимость libmysqlclient_r.so.16

Можно, конечно, только его и поставить, вот так:
[32]

wget http://launchpadlibrarian.net/75949497/libmysqlclient16_5.1.58-1ubuntu1_i386.deb
sudo dpkg -i ./libmysqlclient16_5.1.58-1ubuntu1_i386.deb
[64]
wget http://launchpadlibrarian.net/94808408/libmysqlclient16_5.1.58-1ubuntu5_amd64.deb
sudo dpkg -i ./libmysqlclient16_5.1.58-1ubuntu5_amd64.deb

Проверяем:

ldd libqsqlmysql.so

Может быть так же не доступны быть:
libssl.so.10 и libcrypto.so.10
Ставить их так:

sudo apt-get update
sudo apt-get install libssl1.0.0 libssl-dev
cd /lib/x86_64-linux-gnu
sudo ln -s libssl.so.1.0.0 libssl.so.10
sudo ln -s libcrypto.so.1.0.0 libcrypto.so.10

Впринципе, можно на этом остановиться,
но я решил использовать более новый, поэтому придётся пересобрать.

У меня стоит MySQL версии 5.5 (узнать можно в терминале командой mysql —version)
то потребуется драйвер собрать из исходников.
Запускаем консольку, вбиваем:

export QTDIR=/opt/Qt/Qt5.5.0/5.5/Src/qtbase
cd $QTDIR/src/plugins/sqldrivers/mysql
/opt/Qt/Qt5.5.0/5.5/gcc_64/bin/qmake
make
make install

Впринципе всё. Не забудьте пути заменить на свои. Qt у меня установлен в папке /opt/Qt/Qt5.5.0/.

Немного как подключится к базе MySQL из Qt
В проекте в файл *.pro   дабавить

QT+= sql

Ну а  потом в  классе прописать

#include <QSqlDatabase>
#include <QSqlError>
#include <QDebug>

Ну и подключаемся:

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL", "mydb");
db.setHostName("localhost");
db.setDatabaseName("WORKYS");
db.setUserName("root");
db.setPassword("12345");
bool ok = db.open();
qDebug()<< ((ok)? "DATABASE OPENED!!!!" : "DATABASE NOT OPENED" + db.lastError().text() );

Вот как то так =)

Views :

2897

Компиляция и установка OpenCV на Ubuntu для Qt 5.6 c поддержкой ffmpeg

Обновил для OpenCV 3.1

А началось всё с того что не работает CvCapture* capture = cvCreateFileCapture( filename );

capture возрашает ноль. Сука. Т.е. OpenCV отказывается воспроизводить mp4 видео.

У меня основной путь будет такой  cd /home/pavelk/Projects/OpenCV

Ставим нужные пакеты

sudo apt-get update
sudo apt-get install build-essential checkinstall git cmake libfaac-dev libjack-jackd2-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libsdl1.2-dev libtheora-dev libva-dev libvdpau-dev libvorbis-dev libx11-dev libxfixes-dev libxvidcore-dev texi2html yasm zlib1g-dev

sudo apt-get install libgstreamer0.10-0 libgstreamer0.10-dev gstreamer0.10-tools gstreamer0.10-plugins-base libgstreamer-plugins-base0.10-dev gstreamer0.10-plugins-good gstreamer0.10-plugins-ugly gstreamer0.10-plugins-bad gstreamer0.10-ffmpeg

Добавим x264 и ffmpeg по вкусу.

git clone git://git.videolan.org/x264.git
cd x264
./configure --enable-shared --enable-pic
make
sudo make install
cd ..

git clone git://git.videolan.org/ffmpeg.git 
cd ffmpeg

./configure --enable-gpl --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libx264 --enable-nonfree --enable-postproc --enable-version3 --enable-x11grab --enable-shared

Чёто жопой чую половину тут нафиг не надо… Пофиг пляшем.

make
sudo make install
cd ..
sudo apt-get install libgtk2.0-0 libgtk2.0-dev
sudo apt-get install libjpeg62 libjpeg62-dev
sudo apt-get install cmake-gui

Ну и теперь клонируем наш OpenCV, собираем, ставим:

git clone https://github.com/Itseez/opencv.git OpenCV3.0
cd OpenCV3.0
export PATH=/opt/Qt/5.6/gcc_64/bin:$PATH
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/opencv/3.1/  -DWITH_QT=ON
make -j5
sudo make install

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

git clone https://github.com/opencv/opencv_contrib

в параметры cmake добавить:

-DOPENCV_EXTRA_MODULES_PATH=<opencv_contrib>/modules

Все библиотеки будут в папке /usr/local/opencv/3.0/

 

Простенький пример:

В *.pro файл проекта добавляем:

INCLUDEPATH +="/usr/local/opencv/3.1/include/"
LIBS += -L"/usr/local/opencv/3.1/lib/"
LIBS += -lopencv_core \
        -lopencv_features2d \
        -lopencv_highgui \
        -lopencv_imgcodecs \
        -lopencv_imgproc \
        -lopencv_video \
        -lopencv_videoio \
        -lopencv_videostab

Здесь мы подключаем все библиотеки OpenCV

main.cpp

#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
using namespace std;
using namespace cv;
int main() {
   namedWindow("My Image");
   Mat image = imread("K:/Projects/OpenCV HelloWorld/img.jpg");

   imshow("My Image", image);
   waitKey(5000);

    return 0;
}

Всё должно получиться =)

 

Views :

2843