1  2   

Расширение корневого раздела в LVM в RHEL6

24 декабря 2015, 10:23
Вводная: виртуальная машина с одним диском и корневой фс в lvm.
Задача: расширить корневую фс без остановки предоставляемого сервиса.
Решение:
1. Увеличиваем размер диска средствами системы управления виртуальными машинами. В моём случае это Proxmox:
qm resize 100 virtio0 +5G
2. Далее нужно как-то подключить наше новое пространство к VolumeGroup. Вот тут кроется засада. Для RHEL5 можно увеличить размер раздела с PhysicalVolume и обновить таблицу разделов командой partprobe. Но начиная с RHEL6 она покажет шиш и откажется что-либо делать пока мы всё не остановим и не отмонтируем. Однако есть и обходной путь: создаём на этом же диске ещё один раздел с PhysicalVolume чтобы затем расширить нашу VolumeGroup на неё:
parted /dev/vda mkpart primary ext2 НАЧАЛО_РАЗДЕЛА -1
parted set НОМЕР_РАЗДЕЛА lvm on
Затем выполняем потенциально опасную операцию - обновляем наживую таблицу разделов. Существующие разделы при этом остаются на месте (даже если были изменены/удалены), новые же добавляются:
partx -a /dev/vda
3. Дальше дело техники - расширяем VolumeGroup:
vgextend VolGroup /dev/vda3
4. ... расширяем LogicalVolume:
lvextend -l +100%FREE VolGroup/lv_root
5. ... и, наконец, увеличиваем сам раздел:
resize2fs /dev/VolGroup/lv_root
Готово.
Комментировать Теги: #linux  

Статический анализ вызовов printf-like функций

16 ноября 2015, 11:38
При разработке для встраиваемых систем зачастую приходится писать свои реализации printf и подобных функций. Однако для самописных функций не работает опция "-Wformat": проверка вызовов на корректность аргументов (сверка количества и типов аргументов со строкой форматирования). Для решения этой проблемы в GCC существует специальный атрибут функции "format". Пример применения:

int fmt( void (*put)(char,void**), void *putarg, const char *fmt, ... )
__attribute__ ((format (__printf__, 3, 4)));

Первым аргументом атрибута идёт тип проверки (__printf__, __scanf__, __strftime__, __strfmon__), второй - номер аргумента с форматом (нумерация с 1), третий - номер аргумента с которого начинается список аргументов (...).
Комментировать Теги: #gcc   #c  

Лямбды в Си

13 ноября 2015, 17:06
Есть два пути получения лямбд в Си:

1. Использовать дополнительный препроцессор cmacro. Идея очень интересная, но, к сожалению, реализация подводит. У меня этот препроцессор не только спотыкался на простейших конструкциях (например, лямбда, возвращающая указатель), но и умудрялся портить совершенно сторонний код ("return -1" чудесным образом превращается в "return- 1"). Проект по всей видимости заброшен.

2. Использовать расширения компилятора GCC. Это простой и безболезненный путь если нет необходимости сохранять совместимость с другими компиляторами. Для этого варианта достаточно объявить макрос:
#define lambda(l_ret_type, l_arguments, l_body)         \
({ \
l_ret_type l_anonymous_functions_name l_arguments \
l_body \
&l_anonymous_functions_name; \
})

Пример создания и использования лямбды:
    printf("%s world\n", lambda(char*, (void), { return "Hello"; } )() );
Комментировать Теги: #c   #gcc  

Анализ сбоев МК пост-фактум

8 октября 2015, 14:16
Часто возникает необходимость зафиксировать состояние МК во время сбоя (деление на 0, разыменование нулевого указателя, обращение к невыровненному адресу и тысяча других возможностей прострелить себе ногу). И часто при этом нет возможности держать устройство с подключенным отладчиком.

В таких случаев поможет связка ПО CrashDebug и CrashCatcher.
CrashCatcher - библиотека подключающаяся к прошивке МК. Она берёт на себя обработку исключения HardFault и вывод содержимого регистров и памяти на последовательный порт (либо любым другим реализованным программистом способом). Полученный по последовательному порту дамп сохраняется в файл и передаётся утилите CrashDebug, выступающей в роли target для GDB. Дальше уже можно работать любыми привычными средствами - консольным arm-none-eabi-gdb, ddd, либо даже Eclise (через тип конфигурации "GDB Hardware Debug").

Оба проекта имеют исчерпывающую документацию и достаточно легко интегрируются в существующий проект.
Комментировать Теги: #stm32   #отладка   #arm  

Если вы калибруете АЦП...

3 сентября 2015, 20:38
... то не забывайте перед калибровкой отключать DMA (ADC1->CFGR1 &= ~ADC_CFGR1_DMAEN) и сбрасывать значение счётчика DMA1_ChannelN->CNDTR.

Читать дальше →
Комментировать Теги: #stm32  

Отладка RTOS в OpenOCD

19 июля 2015, 19:54
Для отладки RTOS помимо плагинов IDE можно использовать встроенные средства OpenOCD. На данный момент поддерживаются FreeRTOS, ChibiOS, eCos и другие.

Для использования этой функциональности нужно в параметры запуска openocd добавить следующую строку (для openocd 0.9 и stm32f4):
-c "stm32f4x.cpu configure -rtos auto"


В случае FreeRTOS версий старше 7.5.3 нужно выполнить дополнительные движения:

Читать дальше →
Комментировать Теги: #rtos   #openocd   #stm32  

Секунда координации

1 июля 2015, 08:45
Быстрофикс зависших серверов:
/etc/init.d/ntp stop; date; date `date +"%m%d%H%M%C%y.%S"`; date
Комментировать Теги: #linux   #время  

Настройка Eclipse для разработки под STM32

2 июня 2015, 09:01
Инструкций сходной тематики в интернете немало, но как то вышло что информацию мне всё равно пришлось собирать по кусочкам. В этой статье я подытожу весь процесс от А до Я. Всё будет делаться на примере дистрибутива Debian Sid и отладочной платы STM32F4Discovery.

Читать дальше →
Комментировать Теги: #eclipse   #arm   #stm32   #ide   #linux  

Если долго запускается Wine...

12 марта 2015, 16:51
...то попробуйте сделать так:
mkdir ~/.cups ; echo 'ServerName dev.null' >~/.cups/client.conf
Комментировать Теги: #linux   #wine  

Проверяем готовность сервера к переходу на зимнее время

25 сентября 2014, 09:56
Всего месяц остался до перевода стрелок - пора подготавливаться к этому.
Для проверки готов ли сервер к зимнему времени можно использовать следующую команду:
linux% for i in `seq 1414269000 3600 1414280000`; do date --date="@$i"; done
freebsd% for i in `jot 4 1414269000 1414280000 3600`; do date -jf"%s" "$i"; done
Если всё ок - вывод будет таким:
Sun Oct 26 00:30:00 MSK 2014
Sun Oct 26 01:30:00 MSK 2014
Sun Oct 26 01:30:00 MSK 2014
Sun Oct 26 02:30:00 MSK 2014
Видим, что час ночи в Москве будет целых два раза - это и есть перевод часов. Если в системе временные зоны не обновлены, то последней строкой будет
Sun Oct 26 03:30:00 MSK 2014
Обновляем штатными средствами дистрибутива:
debian% aptitude update && aptitude install tzdata
centos% yum update && yum upgrade tzdata
freebsd% cd /usr/ports/misc/zoneinfo && make install clean && tzsetup
Либо универсальным методом:
% t=`mktemp -d` && cd $t && (curl http://www.iana.org/time-zones/repository/releases/tzdata2014h.tar.gz | tar xzvf -) && zic europe && cd && rm -rf $t

Так же нужно учесть, что некоторые платформы используют свою собственную базу данных по часовым поясам.
Проверяем PHP:
php -r 'for ($i=1414269000; $i<=1414280000; $i+=3600) { echo date("r", $i)."\n"; }'
Исходник, проверяющий время в java:
cat >timetest.java <<EOF
import java.util.Date;
import java.sql.Timestamp;
public class timetest {
public static void main(String[] args) {
for (long i=1414269000;i<=1414280000;i+=3600) {
Timestamp stamp = new Timestamp(i*1000);
Date date = new Date(stamp.getTime());
System.out.println(date);
}
}
}
EOF
javac -source 1.6 -target 1.6 timetest.java
java timetest

Зоны java обновляем либо штатными средствами дистрибутива, либо, если используется java с сайта Оракла - качаем Java Time Zone Updater Tool и запускаем
java -jar tzupdater-1.4.7-2014g/tzupdater.jar -u
java -jar tzupdater-1.4.7-2014g/tzupdater.jar -t
Комментировать Теги: #linux   #время   #россия  
1  2   
Февраль 2016
Пн
Вт
Ср
Чт
Пт
Сб
Вс
1234567
891011121314
15161718192021
22232425262728
29