вторник, 3 декабря 2013 г.

Работа с COM портом в Linux

Инициализация COM порта

COM порт в Linux представляет собой файл устройства. Типичное расположение такого файла
\dev\ttySx для обычного COM порта или \dev\ttyUSBx для
USB-RS переходника, где x = 0,1,2...
Встречаются также \dev\ttyOSx и др.
Для начала работы COM порт необходимо открыть:
int F_ID = -1;
open("\dev\ttyUSB0", O_RDWR | O_NOCTTY);
if(F_ID == -1)
{
    std::cout << strerror(errno) << std::endl;
}
Если F_ID отличается от -1, значит COM порт открыт успешно
и можно переходить к его настройке.
Чтение текущих настроек:
struct termios options; /*структура для установки порта*/
tcgetattr(F_ID, &options); /*читает пораметры порта*/
Установка скорости:
cfsetispeed(&options, B57600); /*установка скорости порта*/
cfsetospeed(&options, B57600); /*установка скорости порта*/
Установка таймаутов чтения:
options.c_cc[VTIME]    = 20; /*Время ожидания байта 20*0.1 = 2 секунды */
options.c_cc[VMIN]     = 0; /*минимальное число байт для чтения*/
Установка других полезных (необходимых) параметров:
options.c_cflag &= ~PARENB; /*бит четности не используется*/
options.c_cflag &= ~CSTOPB; /*1 стоп бит */
options.c_cflag &= ~CSIZE;  /*Размер байта*/
options.c_cflag |= CS8;  /*8 бит*/
    
options.c_lflag = 0;
options.c_oflag &= ~OPOST; /*Обязательно отключить постобработку*/
 
options.c_iflag = 0;
options.c_iflag &= ~ (INLCR | IGNCR | ICRNL);
Сохранение параметров:
tcsetattr(F_ID, TCSANOW, &options);

Чтение и отправка данных

Прочитать данные из COM порта:

пятница, 29 ноября 2013 г.

Кино для консольщиков

Очередное подтверждение, что Linux очень весёлая вещь
$ gst-launch-1.0 filesrc location=SomeMovie.avi ! decodebin! aasink
где SomeMovie.avi - любой фильм

отсюда: habrahabr.ru/post/204014/

понедельник, 25 ноября 2013 г.

NFS сервер в Ubuntu

Устанавливаем необходимые пакеты
 $ sudo apt-get install nfs-kernel-server nfs-common
Редактируем конфигурационный файл
$ sudo gedit /etc/exports
Добавляем в конце файла нечто подобное
/data 192.168.4.0/255.255.252.0(ro,insecure,sync,no_subtree_check)
Перезапускаем сервер
$ sudo /etc/init.d/nfs-kernel-server restart
При дальнейших изменениях можно не перезапускать сервер, а выполнить
$ sudo exportfs -a

см. также
http://help.ubuntu.ru/wiki/nfs
man exports

пятница, 22 ноября 2013 г.

tftp сервер в Ubuntu

Простая инструкция по настройке tftp сервера

Суть:

Устанавливаем необходимые пакеты
$ sudo apt-get install openbsd-inetd tftpd tftp
Редактируем конфигурационный файл
$ sudo gedit /etc/inetd.conf
#:BOOT: TFTP service is provided primarily for booting.  Most sites
#       run this only on machines acting as "boot servers."
tftp  dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /tftpboot
Создаём директорию с нужными правами
$ sudo mkdir /tftpboot
$ sudo chown -R nobody /tftpboot
Финальный аккорд

sudo /etc/init.d/openbsd-inetd restart

На всякий случай убедиться, что порт 69/UDP открыт

вторник, 19 ноября 2013 г.

Работа с файловой системой UBIFS развернутой на NAND

Как сохранить образ rootfs развернутой на NAND с файловой системой UBIFS

  1. Для начала, необходимо загрузиться с внешнего носителя.
    Для модуля Compulab CM-T35x процесс сетевой загрузки выглядит примерно так:
    • Подключаем RS232 к консоли модуля. Запускаем терминальную программу;
    • Например: minicom –con –D /dev/ttyUSB0 или putty в MS Windows
    • Объединяем в локальную сеть модуль и HOST машину;
    • Включаем питание. И в терминале нажимаем на любую клавишу;
    • В командной строке u-boot пишем:
    > dhcp; setenv serverip 192.168.1.100; saveenv; tftp 80400000 bootscr.img && source 80400000
    где 192.168.1.100 ip адрес HOST машины с настроенной tftp и NFS шарой.
    Причем содержимое паки tftp-шары должно быть следующим:
    $ ls /tftpboot
    bootscr.img  kernel.img  ramdisk.img 
    
    • После чего логинимся под root'ом.

  2. Необходимо примонтировать раздел с rootfs.
    В отлчии от традиционных файловых систем для ubifs дынный процесс происходит в несколько этапов.
    Пусть rootfs развернуто на NAND в разделе mtd4.
    Приаттачим mtd4 в ubi0 (должно появится /dev/ubi0 и /dev/ubi0_4 )
    $ ubiattach /dev/ubi_ctrl -m 4 -O 2048
    НА экране получим примерно следующее
    
    UBI: attaching mtd4 to ubi0
    UBI: physical eraseblock size:   131072 bytes (128 KiB)
    UBI: logical eraseblock size:    126976 bytes
    UBI: smallest flash I/O unit:    2048
    UBI: sub-page size:              512
    UBI: VID header offset:          2048 (aligned 2048)
    UBI: data offset:                4096
    UBI: attached mtd4 to ubi0
    UBI: MTD device name:            "rootfs"
    UBI: MTD device size:            505 MiB
    UBI: number of good PEBs:        4041
    UBI: number of bad PEBs:         2
    UBI: max. allowed volumes:       128
    UBI: wear-leveling threshold:    4096
    UBI: number of internal volumes: 1
    UBI: number of user volumes:     1
    UBI: available PEBs:             0
    UBI: total number of reserved PEBs: 4041
    UBI: number of PEBs reserved for bad PEB handling: 40
    UBI: max/mean erase counter: 57/2
    UBI: image sequence number: 0
    UBI: background thread "ubi_bgt0d" started, PID 1776
    UBI device number 0, total 4041 LEBs (513110016 bytes, 489.3 MiB),
    available 0 LEBs (0 bytes), LEB size 126976 bytes (124.0 KiB)
    
    Запомним параметр: total 4041 и LEB size 126976 bytes Теперь можно монтировать файловую систему
    $ mkdir fs 
    $ mount -t ubifs ubi0_4 ./fs 
  3. Необходимо примонтировать сетевую папку для сохранения образа
    $ mount -n 192.168.1.100:/nfsshare /mnt/net 
  4. С помощью mkfs.ubifs создаем ubifs образа
    $ mkfs.ubifs -r ./fs -m 2048 -e 126976 -c 4041 -o /mnt/net/ubifs.img
    где -e =LEB size, -c =total Если в сетевом образе ОС нет утилиты mkfs.ubifs можно сделать финт ушами и запустить ее из rootfs на NAND:
    $ export LD_LIBRARY_PATH=/home/root/fs/usr/lib
    $ /home/root/fs/usr/bin/mkfs.ubifs -r ./fs -m 2048 -e 126976 -c 4041 -o /mnt/net/ubifs.img
    После нескольких минут ожидания ubifs образ создан. Можно выключать питание.
    Теперь для записи данного образа на другие платы необходимо из полученного ubifs образа создать ubi образ.
  5. Для этого на HOST машине должны быть установлены mtd-utils.
    Если таковых нет, то под Ubuntu их можно поставить:
    $ sudo apt-get install mtd-utils
  6. Создаем в директории с ubifs.img файл cfg.ini следующего содержания:
    [rootfs]
    mode=ubi
    image=ubifs.img
    vol_id=4
    vol_type=dynamic
    vol_name=cm-t35-rootfs
    vol_flags=autoresize
  7. Создаем ubi.img образ:
    $ ubinize -o ubi.img -m 2048 -p 128KiB -s 512 -O 2048 -v cfg.ini
    Всё, данный образ можно разворачивать на других платах.

Как развернуть образ linux на NAND

  1. Загружаемся через сеть
    • Подключаем RS232 к консоли модуля. Запускаем терминальную программу
    • Включаем питание. И в терминале нажимаем на любую клавишу.
    • В командной строке u-boot пишем:
    > dhcp; setenv serverip 192.168.1.100; saveenv; tftp 80400000 bootscr.img && source 80400000
    Содержимое паки tftp-шары:
    bootscr.img  kernel.img  ramdisk.img 
    А NSFS-шары:
    ubi.img uImage.img
    • Логинимся под root'ом
  2. Монтируем сетевую папку с нужными образами
    $ mount -n 192.168.1.100:/nfsshare /mnt/net
  3. Очищаем разделы для записи ядра linux и rootfs
    $ flash_eraseall /dev/mtd3
    $ flash_eraseall /dev/mtd4
  4. Записываем в NAND ядро
    $ nandwrite -p /dev/mtd3 /mnt/net/uImage
  5. Разворачиваем rootfs
    $ ubiformat -O 2048 -s 512 /dev/mtd4 -f /mnt/net/ubi.img
    Ждем завершение процесса.
    Далее можно грузиться с NAND.
    Для этого в u-boot необходимо прописать:
    > setenv bootdelay 3; setenv bootcmd "nboot 82000000 nand0 2a0000; bootm" ;saveenv;boot

пятница, 15 ноября 2013 г.

Сборка Yocto project под VAR-SOM-MX6

Довольна простая и понятная инструкция по сборке Yocto project для модуля на базе процессора Freescale MX6
VAR-SOM-MX6 - Yocto V4.0 Dylan

Идея такая:


  • Устанавливаем необходимые пакеты на Host-Linux машину:
    $ sudo apt-get install gawk wget git-core diffstat unzip texinfo build-essential chrpath libsdl1.2-dev xterm
  • Скачиваем тарбол var_yocto_v1.0.tar.bz2 с рецептами и bitbake с ftp variscite и распаковываем его:
    $ tar xvf ~/var_yocto_v1.0.tar.bz2
  • Настраиваем enveroment:
    $ cd ~/var_yocto
    $ . ./setup-environment build_var
  • Редактируем файл ~/var_yocto/build_var/conf/local.conf, указывая нужные параметры:
    для 4-x ядерного процессора:
    MACHINE ??= 'varsommx6q'  
    для экономии места на диске во время сборки:
    INHERIT += "rm_work"
  • Запускаем сборку для нужной цели и ждем пока все соберется:
    базовый образ, с минимальным набором пакетов:
    $ bitbake core-image-base
    полноценный образ но без X-server'a
    $ bitbake fsl-image-test
    полноценный образ с блэкджеком и X-server'ом:
    $ bitbake fsl-image-gui
  • Если всё пойдет хорошо, то результатом наслаждаемся в папке:  ~/var_yocto/build_var/tmp/deploy/images/

  • У меня пошло не всё хорошо:
    Failed to fetch URL  http://gpe.linuxtogo.org/download/source/xserver-common-1.34.tar.gz
    Решение нашлось в почтовой рассылке meta-freescale@yoctoproject.org
  • Скачать http://www.mlbassoc.com/misc/xserver-common-1.34.tar.g
  • Положить его в download директорию
  • Создать в той же директории server-common-1.34.tar.gz.done