LINUX.ORG.RU

Сообщения Eddy_Em

 

Чем компилять STM8?

Получил сегодня «вольтметр» на STM8. Накачал всяких библиотек-примеров-даташитов. И офонарел: оказывается, gcc не поддерживает этот микроконтроллер!

Я в шоке. Что, выкидывать железяку? Или ждать долгие годы, пока в arm-none-eabi его поддержку добавят?

Eddy_Em
()

Не могу сделать push в репозиторий на сосфорже

Пытаюсь сделать hg push на сосфорж, но получаю постоянно:

прервано: HTTP Error 500: Internal Server Error
Проверил с другой репой — работает. Пуш на гуглокод этой же репы тоже работает.

Что за фигня может быть? Уже третий коммит не могу на сосфорж отправить!

Eddy_Em
()

Что с ЛОРом творится?

Чего тормоза-то такие жуткие?

Eddy_Em
()

Как запретить иксам «автоматом» добавлять второй монитор?

Т.к. дома телевизор используется не всегда, то я решил по умолчанию сделать настройку иксов только на монитор, а скриптиком (который вызывает xrandr) активировать телевизор в случае необходимости. Телевизор сидит на DVI (через шнурок DVI-HDMI), а монитор на HDMI.

Проблема в том, что при запуске иксы автоматом пытаются активировать телевизор. Да еще и почему-то телевизор становится основным.

Я попробовал прописать в xorg.conf оба устройства вывода, но в настройках оставить активным лишь монитор:

Section "ServerLayout"
    Identifier     "layout1"
    Screen      0  "Screen0" 0 0
    InputDevice    "Keyboard Ergo. 4000 1" "CoreKeyboard"
    InputDevice    "Mouse[1]" "CorePointer"
    Option         "Xinerama" "0"
EndSection

Но получаю фигвам: все вроде бы ОК, но при запуске firefox его окно вообще уплывает в Лету (похоже, он пытается открыться на несуществующем экране). Запускаю скриптик:

xrandr --output HDMI-0 --mode 1920x1080 --pos 1920x0 --rate 60  --output DVI-I-2 --mode 1920x1080 --rate 50 --pos 0x0
Тут же консоль уплывает на телевизор, а огнелис отображается как и надо.

Лечится ли это как-нибудь?

 , ,

Eddy_Em
()

⁣⁣

Неразрывный пробел в теме. Баг.

 

Eddy_Em
()

Проблема с подключением телевизора

Купили мы с женой в качестве второго монитора небольшой телевизор. Т.к. видюшка у меня старенькая (nVidia 9600), то в ней только по одному разъему: HDMI, VGA, DVI. Монитор, понятное дело, подключен к HDMI, а вот телевизор я подключил через шнурок DVI-HDMI.

Настраивал через nvidia-settings:

Section "Device"
    Identifier     "device1"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BoardName      "GeForce 9600 GT"
    Option         "DPMS"
    Option         "DynamicTwinView" "false"
    Option         "AddARGBGLXVisuals"
    Option         "UseEdidDpi" "false"
    Option         "DPI" "96 x 96"
    BusID          "PCI:1:0:0"
    Screen          1
EndSection
    
Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BoardName      "GeForce 9600 GT"
    Option         "UseEdidDpi" "false"
    Option         "DPI" "96 x 96"

Section "Screen"
    Identifier     "screen1"
    Device         "Device1"
    Monitor        "Monitor1"
    DefaultDepth    24
    Option         "Stereo" "0"
    Option         "metamodes" "DFP-0: 1920x1080_60 +0+0"
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection
    
Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    Monitor        "Monitor0"
    DefaultDepth    24
    Option         "Stereo" "0"
    Option         "nvidiaXineramaInfoOrder" "DFP-1"
    Option         "metamodes" "DFP-0: 1920x1080 +0+0, DFP-1: 1920x1080_60 +1920+0"
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection

(только вручную DPI дописал, т.к. по умолчанию шрифты были жуткими)

Вопросы:

  1. На телевизоре «откушены примерно по строчке вверху и внизу и около пяти символов слева — как исправить?
  2. На статичных картинках по телевизору идет муар: это из-за того, что у меня слабая видеокарта? (телику надо 100Гц, а она больше 60Гц не умеет).

 ,

Eddy_Em
()

Как загрузиться в EFI?

На ноутбуке стоит эта дрянь. Втыкаю диск, выбираю - загрузиться с него. Попадаю в меню grub, вместо продолжения загрузки!

Как с этой дрянью бороться? Отключить EFI не могу, т.к. говнерка, стоящая на буке, должна оставаться, а бубунта, которую надо поставить, будет на USB-HDD.

 

Eddy_Em
()

bug — ломаные ссылки в уведомлениях

Докладую: при переходе по ссылке из уведомлений, получаю фикус 0. Не работают.

 

Eddy_Em
()

А посоветуйте-ка мне файлопомойку вроде дропбокса

А то на дропбоксе всего-то 2ГБ, мне же хочется свои шедевры с заваленным горизонтом куда-то складывать (фотосервисы кастрируют панорамы до таких жалких размеров, что получается черт-те что, а панорамки до ~60000х6000).

Много чего мне советовали, но либо вообще клиента линуксового нет, либо фигвам какой-то (с гуглодрайвом так и не вышло; яндодиск не работает из-за проксей почему-то).

Хочется хотя бы 10ГБ места + приличный прозрачный клиент.

 ,

Eddy_Em
()

У меня одного в арчике свежая октава сегфолтится, или это фича?

Когда делал предпоследний раз обновление, октава с 3.6.2-2 обновилась до 3.6.3-1. И перестала работать.

Намедни опять обновился (оказывается, пока еще это в арчике это можно сделать), забыв «заблэклистить» октаву.

Получаю:

GNU Octave, version 3.6.3
… (тут - всякие копирайты) …
panic: Segmentation fault -- stopping myself...
attempting to save variables to `octave-core'...
save to `octave-core' complete
Ошибка сегментирования (core dumped)

Откатился — все ОК. Ну и как это называется?

Перемещено JB из talks

 ,

Eddy_Em
()

Нужен приличный менеджер буфера обмена

Вот такой вопрос: существует ли в линуксе приличный буфер обмена, имеющий историю и вываливающий по "клавосочетанию" меню с историей, откуда можно при помощи клавиш управления курсором или "быстрым поиском" (по началу введенной фразы) выбрать нужное.

Обязательно, чтобы эта штука не засоряла собой трей.

Естественно, нужны 2 разные истории (одна на "клавиатурный буфер", одна — на "мышиный").


или с этим — обычная история под названием "пиши свое"? (как с экранной рисовалкой было)

Eddy_Em
()

fork, sockets & zombie

Вот такой вопрос: когда я делаю после accept в родительском процессе fork, закрываю вроде бы все ненужное и запускаю обработчик:

	while (1) {
		struct sockaddr_in remote;
		socklen_t sockaddr_len = sizeof(remote);
		int clientsocket = accept(listensocket, (struct sockaddr*)&remote, &sockaddr_len);
		if (clientsocket < 0) {
			perror("Accept failed");
			return EXIT_FAILURE;
		}
		printf("Connected %s:%d\n", inet_ntoa(remote.sin_addr), ntohs(remote.sin_port));
		switch(fork()){
		case -1:
			perror("fork");
			break;
		case 0:
			close(listensocket);
			close(0); close(1); close(2);
			client_worker(clientsocket);
			exit(0);
		default:
			close(clientsocket);
		}
	}
Однако, помимо открытого на свободном порту сокета, я вижу в /proc/ChildPID/fd симлинк на какую-то трубу [pipe:39128]. В результате чего после завершения дочернего процесса получается зомби, который висит, пока не помрет родительский.

Вопрос: как правильно закрывать сокеты?

Дополнительный вопрос: при работе в «приватном» режиме мне не нужны процессы — я хочу лишь запускать отдельные потоки подсоединяющимся «неприватным» клиентам и только отсылать им нужную часть информации, игнорируя прием (закрывать принимающий канал нельзя, а то клиент отвалится). Не будет ли здесь проблем с невесть откуда берущимися трубами или еще какой фигней?

 , ,

Eddy_Em
()

Помогите с макросами

Я хочу упростить задачу формирования функции-обертки, которая в случае компиляции с поддержкой CUDA должна сначала попробовать запустить код на GPU, если не выйдет (или если скомпилировано без CUDA) — на CPU.

Для этого в файле wrapper.c я определил макросы

#ifdef CUDA_FOUND
#define SET_F(FN)  int FN{ 			\
	if(!Only_CPU) if(CU ## FN) return 1;	\
	if(CPU ## FN) return 1;			\
	return 0;				\
}
#else
#define SET_F(FN)  int FN{ 			\
	if(CPU ## FN) return 1;			\
	return 0;				\
}
#endif // CUDA_FOUND

А в файле wrapper.h (который включается в т.ч. и файлами CUDA.cu и CPU.c, содержащими функции для выполнения на GPU или на CPU) вот такие макросы:

#ifndef EXTERN
	#define EXTERN extern
#endif // EXTERN

#ifdef CPU_C // file included from CPU.c
	#define BOTH(FN) EXTERN int CPU ## FN;
#elif defined CUDA_CU //file included from CUDA.cu
	#define BOTH(FN) EXTERN int CU ## FN;
#elif defined WRAPPER_C // wrapper.c needs names of both wariants
	#ifndef CUDA_FOUND
		#define BOTH(FN) EXTERN int CPU ## FN;
	#else
		#define BOTH(FN) EXTERN int CU ## FN; EXTERN int CPU ## FN;
	#endif // CUDA_FOUND
#else // file included from something else - just define a function
	#define BOTH(FN) EXTERN int FN;
#endif

По идее, все должно работать.

Для теста сделал простую функцию fillrandarr(size_t sz, char *arr) (в дальнейшем это будет реальная функция):

CPU.c:
int CPUfillrandarr(size_t sz, char *arr __attribute__((unused))){
	printf("CPU!!!: sz = %zd\n", sz);
	return 1;
}

CUDA.cu:
EXTERN int CUfillrandarr(size_t sz, char *arr){
	printf("GPU: sz = %zd\n", sz);
	return 1;
}
и добавил соответствующие макросы в файлы:
wrapper.h:
BOTH(fillrandarr(size_t sz, char *arr))

wrapper.c:
SET_F(fillrandarr(size_t sz, char *arr))


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

wrapper.c: В функции <<fillrandarr>>:
 ошибка: неявная декларация функции <<CUfillrandarr>> 
 ошибка: expected expression before <<size_t>>
 ошибка: expected expression before <<size_t>>
 ошибка: слишком мало аргументов в вызове функции <<CPUfillrandarr>>
wrapper.h:46:1: замечание: declared here
 ошибка: параметр <<sz>> не используется
 ошибка: параметр <<arr>> не используется

Чертовщина какая-то!

 ,

Eddy_Em
()

Есть ли *нормальная* сишная библиотека?

Убил вчера весь вечер, пытаясь разобраться в библиотеке libwebsockets. Старая версия (0.5) не работает с новыми браузерами. Новая версия (коммит 5 дней назад) не собирается (подозреваю, что виноваты проклятые autotools).

Я уж от отчаяния решил выкинуть оттуда все ненужное (а там ненужного полным-полно) и оставить лишь нужное мне. Ну и CMake нормальный сделать, а не чертовы autotools.

Так вот, вопрос: маяться ли мне с велосипедостроением или есть приличная сишная библиотека?

 ,

Eddy_Em
()

can <-> ethernet и rs485/232 <-> ethernet

Народ, подскажите, пожалуйста: может, кто с такими железяками сталкивался?

В интернете полно вариантов, но работают ли они в линуксе?

Можно, конечно, накупить макеток на ARM'ах и запрограммировать их вообще на универсальный преобразователь портов с веб-конфигурялкой, но хочется все-таки что-нибудь готовое.

Есть ли такие железки, уверенно работающие с линуксом (а то, мало ли: может, там какой-нибудь хитрый огороженный протокол, доступный только из-под вантузячьих драйверов)?

Eddy_Em
()

Можно ли как-то покрасивше Makefile сделать?

В связи с тем, что использовать cmake для разработки под STM32 — занятие крайне геморройное, пишу Makefile вручную.

Нагуглив кучу мануалов и перелистав все info make, упростил задачу конфигурирования Makefile'а под новые проекты. Однако, осталась там некрасивая штука:

$(OBJDIR):
	mkdir $(OBJDIR)

$(OBJDIR)/%.o: $(STLIBDIR)/%.c
	$(CC) $(CFLAGS) $< -o $@

$(OBJDIR)/system_stm32f10x.o: ./cmsis/system_stm32f10x.c
	$(CC) $(CFLAGS) $< -o $@

$(OBJDIR)/startup.o: ./cmsis/startup_stm32f10x_md.s
	$(AS) $(ASFLAGS) ./cmsis/startup_stm32f10x_md.s -o $(OBJDIR)/startup.o

$(OBJDIR)/%.o: %.c
	$(CC) $(CFLAGS) $< -o $@

$(OBJDIR)/%.o: $(USB_LIBDIR)/%.c
	$(CC) $(CFLAGS) $< -o $@

— куча целей с по сути одинаковыми действиями.

А нельзя ли сделать просто: имеем два списка $(OBJ) и $(SRC), и каким-то чудным образом пишем

$(OBJ): $(SRC)
	$(CC) $(CFLAGS) $< -o $@
вместо этой портянки?

А еще такой вопросец: зависимость от заголовочных файлов я тоже через жопу сделал:

$(ALL_SRC) : %.c : %.h $(INDEPENDENT_HEADERS)
	@touch $@
а как по-человечески?



-------------------------------------------------------------
Товарищи модераторы, тема в Talks, ибо реально руки у меня из жопы, а воли — 0. Ну не осилил я cmake для микроконтроллера!


P.S. Обнаружил баг в своем скрипте для засаленной обезьяны: нет панельки при редактировании тем. Исправляю.

 , ,

Eddy_Em
()

Опять обновление!

Опять обновился на свою голову. И перестало работать правило udev, расставляющее сетевые карты:

SUBSYSTEM=="net", ENV{ID_VENDOR_ID}=="0x10ec", NAME="eth0"
SUBSYSTEM=="net", ENV{ID_VENDOR_ID}=="0x10b7", NAME="eth1"
Вот как, блин, это называется? Желаю медленной и тяжелой смерти Поцтерингу!!!

// полчаса убил, даже сбегал на лестничной площадке в свич заглянул...

 

Eddy_Em
()

одновременная запись и воспроизведение видео

Подскажите, пожалуйста, а то меня в гугле забанили: как одновременно писать видео с веб-камеры и смотреть его?

Помню, встречал когда-то решение (с помощью tee, кажется), но не могу найти.

Пишу так:

ffmpeg -b:v 1000k -f video4linux2 -s 640x480 -i /dev/video0 -sameq -f alsa -i hw:0,0 -f avi 1.mkv

если пропускаю 1.mkv и перенаправляю в канал — фигвам:

At least one output file must be specified
И таки шо делать?

Перемещено mono из talks

Eddy_Em
()

Где найти midi-файлы для Piano Booster?

Установил я себе piano booster, но вот в пакете мидишек всего раз, два — и обчелся.

Где бы скачать пригодных MIDI-файлов уровня 1..4 класса ДМШ? А то перелопаченное из gtp в MIDI не годится для piano booster'а (ему надо отдельной дорожкой левую руку и отдельной — правую).

Eddy_Em
()

автодоверенность

Ходят сплетни, что не будет больше слухов.
Абсолютно. Ходят слухи, будто сплетни запретят.
©

Цитата Высоцкого неспроста. Опять черт-те что творится с нашими законниками. Сначала был слух, что потребуется нотариально заверенная доверенность на управление авто (а это — аж 1000р в год). Теперь все желтушные каналы пестрят тем, что со вчерашнего дня доверенность вообще не нужна.

Товарищи аналитики, так нужна доверенность или нет?

// спрашиваю, т.к. иной раз езжу на машине без жены

Eddy_Em
()

RSS подписка на новые темы