LINUX.ORG.RU

Сообщения Eddy_Em

 

ССЗБизм или корень на SSD

Форум — Talks

Недолго я радовался корню на SSD'шке ноутбука (KINGMAX SMP35 120GB): 6292 часов, и кирдык.

smartctl:

SMART Attributes Data Structure revision number: 10
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000f   120   120   050    Pre-fail  Always       -       111669149696
  5 Reallocated_Sector_Ct   0x0033   100   100   003    Pre-fail  Always       -       16
  9 Power_On_Hours          0x0032   000   000   000    Old_age   Always       -       6292 (137 58 0)
 12 Power_Cycle_Count       0x0032   099   099   000    Old_age   Always       -       1513
171 Unknown_Attribute       0x0032   000   000   000    Old_age   Always       -       0
172 Unknown_Attribute       0x0032   000   000   000    Old_age   Always       -       0
174 Unknown_Attribute       0x0030   000   000   000    Old_age   Offline      -       218
177 Wear_Leveling_Count     0x0000   000   000   000    Old_age   Offline      -       3
181 Program_Fail_Cnt_Total  0x0032   000   000   000    Old_age   Always       -       0
182 Erase_Fail_Count_Total  0x0032   000   000   000    Old_age   Always       -       0
187 Reported_Uncorrect      0x0032   000   000   000    Old_age   Always       -       284
194 Temperature_Celsius     0x0022   013   025   000    Old_age   Always       -       13 (Min/Max 7/25)
195 Hardware_ECC_Recovered  0x001c   100   100   000    Old_age   Offline      -       0
196 Reallocated_Event_Count 0x0033   100   100   003    Pre-fail  Always       -       16
201 Unknown_SSD_Attribute   0x001c   100   100   000    Old_age   Offline      -       0
204 Soft_ECC_Correction     0x001c   100   100   000    Old_age   Offline      -       0
230 Unknown_SSD_Attribute   0x0013   100   100   000    Pre-fail  Always       -       100
231 Temperature_Celsius     0x0013   100   100   010    Pre-fail  Always       -       0
233 Media_Wearout_Indicator 0x0000   000   000   000    Old_age   Offline      -       2168
234 Unknown_Attribute       0x0032   000   000   000    Old_age   Always       -       1719
241 Total_LBAs_Written      0x0032   000   000   000    Old_age   Always       -       1719
242 Total_LBAs_Read         0x0032   000   000   000    Old_age   Always       -       1774

dmesg пестрит:

[ 3062.761966] sd 12:0:0:0: [sdj] Unhandled sense code
[ 3062.761976] sd 12:0:0:0: [sdj]  
[ 3062.761979] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[ 3062.761982] sd 12:0:0:0: [sdj]  
[ 3062.761985] Sense Key : Medium Error [current] 
[ 3062.761990] sd 12:0:0:0: [sdj]  
[ 3062.761993] Add. Sense: Unrecovered read error
[ 3062.761996] sd 12:0:0:0: [sdj] CDB: 
[ 3062.761999] Read(10): 28 00 03 0c 0a 68 00 00 08 00
[ 3062.762020] REISERFS error (device sdj1): vs-13070 reiserfs_read_locked_inode: i/o failure occurred trying to find stat data of [2263 2269 0x0 SD]
Ноутбук сначала грустно матюкался, попискивая, потом я воткнул SSD'шку в USB-коробочку, попробовал на компьютере — вроде подмонтировалось, подключил к буку — даже пошел процесс загрузки, но после каждого сообщения о запуске/ошибки сервиса была пара сотен матюков на ошибки чтения.

Грустно, однако. Но нет худа без добра: генточку наконец-то поставлю...

 ,

Eddy_Em
()

Не было печали — апдейтов накачали

Форум — General

Как разрешить вот эту проблему?

...
[ebuild     U  ] net-firewall/shorewall-4.6.6.1 [4.5.21.9] USE="init%* ipv4%* ipv6%* -lite4% -lite6%" 
[uninstall     ] net-firewall/shorewall-core-4.5.21.9 
[blocks b      ] net-firewall/shorewall-core ("net-firewall/shorewall-core" is blocking net-firewall/shorewall-4.6.6.1)
[blocks B      ] <sys-fs/udev-init-scripts-27 ("<sys-fs/udev-init-scripts-27" is blocking sys-apps/openrc-0.13.11)
app-text/poppler:0

  (app-text/poppler-0.31.0:0/50::gentoo, installed) pulled in by
    >=app-text/poppler-0.12.3-r3:0/50=[cairo,xpdf-headers(+)] required by (media-gfx/inkscape-0.48.5-r1:0/0::gentoo, installed)
                                ^^^^^^                                                                                                                             
    (and 1 more with the same problem)

  (app-text/poppler-0.30.0:0/49::gentoo, ebuild scheduled for merge) pulled in by
    <app-text/poppler-0.31.0:=[cxx,jpeg?,lcms,tiff?,xpdf-headers(+)] required by (net-print/cups-filters-1.0.53:0/0::gentoo, ebuild scheduled for merge)
    ^                 ^^^^^^ ^     

 * Error: The above package list contains packages which cannot be
 * installed at the same time on the same system.

  (sys-apps/openrc-0.13.11:0/0::gentoo, ebuild scheduled for merge) pulled in by
    sys-apps/openrc required by @system
    >=sys-apps/openrc-0.12 required by (net-misc/netifrc-0.2.2:0/0::gentoo, installed)
    sys-apps/openrc required by (virtual/service-manager-0:0/0::gentoo, installed)

  (sys-fs/udev-init-scripts-26-r2:0/0::gentoo, installed) pulled in by
    >=sys-fs/udev-init-scripts-26 required by (sys-fs/udev-216:0/0::gentoo, installed)
?

До этого махинациями вида «удалить пакет — обновиться — установить пакет» удавалось разрешить проблему, но тут еще openrc с udev оказались замешаны...

 ,

Eddy_Em
()

Конфигурация geany при печати

Форум — General

Возможно ли настроить geany так, чтобы на экране шрифт был нормального размера, а при печати маленького?

А то некрасиво получается: по ширине где-то 64 символа только влезает на страницу.

 

Eddy_Em
()

И таки как правильно потоки убивать?

Форум — Development

Вчера полдня бился, так и не разгадал загадку pthreads.

Итак, у меня есть основной поток, который проверяет, не было ли запроса на создание окна GLUT и опрашивает события окон посредством glutMainLoopEvent(). Все бы хорошо, но чтобы другие потоки (которые могут изменять содержимое отображаемого изображения) имели возможность вклиниться между блокировкой/разблокировкой мьютекса, я вставляю паузу в 10мс. И вот в этой паузе и кроется проблема: при убивании этого основного потока с помощью pthread_cancel(GLUTthread) и последующем ожидании смерти (pthread_join(GLUTthread, NULL)) на pthread_join нет-нет, да происходит зависание. Я так понял, что pthread_cancel просто не срабатывает, если вызывается, когда поток находится в состоянии паузы.

Паузу реализовывал тремя способами. Сначала было просто

usleep(10000);
понятно, что этот вариант — самый корявый.

Потом сделал так:

struct timeval tv;
... 
tv.tv_sec = 0;
tv.tv_usec = 10000;
select(0, NULL, NULL, NULL, &tv);
а потом — вообще вот так:
pthread_cond_t fakeCond = PTHREAD_COND_INITIALIZER;
struct timespec timeToWait;
struct timeval now;
while(1){
	pthread_mutex_lock(&winini_mutex);
... // критическая секция
	gettimeofday(&now,NULL);
	timeToWait.tv_sec = now.tv_sec;
	timeToWait.tv_nsec = now.tv_usec * 1000UL + 10000000UL;
	pthread_cond_timedwait(&fakeCond, &winini_mutex, &timeToWait);
	pthread_mutex_unlock(&winini_mutex);
... // некритическая секция
}
И та же история: ни один из способов не спасает от зависания!

Как же с этим бороться?

Сейчас у меня пауза при помощи pthread_cond_timedwait, а еще я запихал в критическую секцию проверку

if(!initialized){
	DBG("!initialized");
	pthread_exit(NULL);
}
Функция убиения вот какая:
void clear_GL_context(){
	FNAME();
	if(!initialized) return;
	DBG("lock");
	pthread_mutex_lock(&winini_mutex);
	initialized = 0;
	DBG("locked");
	 // kill main GLUT thread
	pthread_cancel(GLUTthread);
	pthread_mutex_unlock(&winini_mutex);
	forEachWindow(killwindow_v);
	DBG("join");
	pthread_join(GLUTthread, NULL);
	pthread_mutex_unlock(&winini_mutex);
	DBG("main GL thread cancelled");
}
Пришлось разблокировать мьютекс после убиения потока, потому что, несмотря на то, что в мане пишут, что pthread_cond_timedwait при получении сигнала pthread_cancel разблокирует мьютекс, на деле это не так!

Вот как правильно поступить?

 ,

Eddy_Em
()

Обновка

Галерея — Рабочие места

Еще фото

В прошлом году купили металлическую мебель. Один верстак я перетащил к себе в кабинет. Теперь очень удобно: легким движением ноги я перекатываюсь на кресле от рабочего стола к верстаку и обратно.

На фото запечатлена одна из стадий изготовления коробочки для системы управления криостатом ИК-спектрометра.

Код прошивки лежит на сосфорже, также доступен клон на гитхабе. Чертежи самого криостата, к сожалению, выложить не могу, т.к. их делал не я (я лишь рисовал эскизы и согласовывал детализацию).

Здесь можно почитать о самой железяке.

 

Eddy_Em
()

Баг с EXIF в добавляемых изображениях так и остался?

Форум — Linux-org-ru

Создал темку, забыл предварительно сделать exiftool -all=, фото не загрузилось.

Ведь багу уже не первый год!

 ,

Eddy_Em
()

ога-ога

Форум — Talks

И кто там врал, что в тытрубе нонче все по хытымылы5 работает?

Это наглая ложь! Только что пытался мелкой открыть мультик про Мусти. Промотал с десяток — ни один не работает в огнелисе! Только в хромом, со сраным быдлофлешем!

Вот такой вот тытруб...

 

Eddy_Em
()

Подскажите аналог GLUT, но без проблем с потоками

Форум — Development

Замучился я уже извращениями страдать: т.к. glutMainLoop() можно вызывать только из основного потока, приходится все с ног на голову переворачивать, да еще и какие-нибудь глобальные флаги использовать, чтобы окна создавать/уничтожать из вычисляющего потока, а не отображающего.

Нашел такую штуку — предлагают сделать свою обертку, которая будет вести себя правильно. Но это же придется таскать еще и целую библиотеку вместе со своим велосипедом.

Вопрос: есть ли что-нибудь OpenGL'ное вроде GLUT'а, что позволит элементарно создавать окна, рисовать менюшки и обрабатывать события клавы/мыши?

 , ,

Eddy_Em
()

Как в cmake определить свою xxx_FOUND?

Форум — Development

Замучился уже: у меня в отдельной поддиректории лежат файлики, которые могут быть вкомпилены в основной проект, если будут найдены определенные библиотеки. А если не будут найдены, то и вкомпиливаться ничего не будет.

Вот весь CMakeLists.txt из поддиректории:

set(IMLIB image_view_module)
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} IMSOURCES)

find_package(OpenGL)
find_package(GLUT)

if(GLUT_FOUND AND OPENGL_FOUND)
	add_library(image_view_module ${IMSOURCES})
	target_link_libraries(${IMLIB} ${OPENGL_LIBRARIES} ${JPEG_LIBRARIES} ${GLUT_LIBRARIES} -lm -lpthread)
	include_directories(${${IMLIB}_INCLUDE_DIRS} ${OPENGL_INCLUDE_DIR} ${JPEG_INCLUDE_DIR} ${GLUT_INCLUDE_DIR})
	link_directories(${${IMLIB}_LIBRARY_DIRS})
	set(IMAGEVIEW_FOUND TRUE)
	message("GLUT & OpenGL are found")
else()
	add_definitions(-DIMAGEVIEW)
	set(IMAGEVIEW_FOUND FALSE)
endif()

А в основном CMakeLists.txt я просто пр оверяю переменную IMAGEVIEW_FOUND:

if(IMAGEVIEW_FOUND)
	message("found image view module")
	target_link_libraries(${PROJ} ${${PROJ}_LIBRARIES} -lm ${IMLIB})
else()
	message("not found image view module")
	target_link_libraries(${PROJ} ${${PROJ}_LIBRARIES} -lm)
endif()
Но постоянно получаю «not found».

Пробовал и так: if(${IMAGEVIEW_FOUND}) (хотя это неправильно). Все равно аналогичное поведение.


Как правильно определить эту переменную, чтобы она вела себя аналогично остальным cmake'овским xx_FOUND?

 ,

Eddy_Em
()

OpenGL приложение сегфолтится, если удалить данные текстуры

Форум — Development

Пытаюсь сделать многооконное приложение OpenGL. Для создания окна я заполняю структуру

typedef struct{
	int ID;            // identificator
	char *title;       // title of window
	GLuint Tex;        // texture for image inside window
	int GL_ID;         // identificator of OpenGL window
	GLubyte *rawdata;  // raw image data
	int w; int h;      // image size
	pthread_t glthread;// thread identificator
	pthread_mutex_t mutex;// mutex for operations with image
} windowData;
typedef struct list_{
	windowData *data;
	struct list_ *next;
	struct list_ *prev;
} WinList;
здесь rawdata — "сырые" данные, которые будут отображаться в текстуре на окне (видео, изображения и т.п.).

Все это инициализируется успешно, открывается и работает. Но как только я открываю 2 окна и пытаюсь закрыть одно из них, происходит сегфолт.

Закрываю так:

int destroyWindow(int window, winIdType type){
	windowData *win;
	if(type == OPENGL)
		win = searchWindow_byGLID(window);
	else
		win = searchWindow(window);
	if(!win) return 0;
	pthread_mutex_lock(&win->mutex);
	glDeleteTextures(1, &win->Tex);
	glFinish();
	glutDestroyWindow(win->GL_ID);
	win->GL_ID = 0; // reset for forEachWindow()
	pthread_mutex_unlock(&win->mutex);
	//removeWindow(win->ID);
	totWindows--;
	return 1;
}
Если закомментировать (как в этом коде) строчку removeWindow(win->ID);, то сегфолт не происходит. Однако, если ее раскомментировать, то приложение падает.

Вот функция removeWindow:

int removeWindow(int winID){
	WinList *node = searchWindowList(winID);
	if(!node) return 0;
	WinList_freeNode(&node);
	return 1;
}
Она просто ищет узел в списке и вырезает его:
void WinList_freeNode(WinList **node){
	if(!node || !*node) return;
	WinList *cur = *node;
	windowData *win = cur->data;
	FREE(win->title);
	FREE(win->rawdata); // *
	pthread_mutex_destroy(&win->mutex);
	if(cur->prev)
		cur->prev->next = cur->next;
	if(cur->next)
		cur->next->prev = cur->prev;
	FREE(*node); // *
}
Если в последней функции закомментировать обе отмеченные звездочкой строки, ничего не падает; но стоит хоть одну раскомментировать, опять сегфолт. Я вообще не понимаю, почему это происходит!

Что здесь может быть не так? Как правильно освободить память, использующуюся OpenGL'ем?


Итак, во всем были виноваты мои кривые руки.


Дополнил сниппеты

 ,

Eddy_Em
()

Подвисает загрузка Raspberry Pi

Форум — Linux-hardware

Итак, обновив систему в qemu-chroot и наставив туда своих велосипедов (даже в чруте компиляция проходит на порядок-полтора шустрей, чем на самой «малинке»), я залил обратно образ на флешку и пытаюсь загрузиться. Подключил консольку через переходник на PL2303, и вижу:

[    6.021229] usbtv 1-1.3:1.0: Fushicai USBTV007 Video Grabber
[    6.088038] usbcore: registered new interface driver usbtv
[   17.811852] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
[   18.248896] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
При попытке смонтировать корень почему-то система подвисает.

Образ я видоизменил (до этого там был корень и home, но т.к. на корне кончилось место, я объединил их и сделал одним разделом, начинается он там же, где раньше начинался корень, так что вряд ли проблема в этом), ФС та же, что и была в изначальном raspbian'е.

Вопрос: с чем это можешь быть связано?

 ,

Eddy_Em
()

Не могу чрутнуться в qemu-arm-static

Форум — General

Так как Raspberry Pi жутко тормозная, я решил все необходимое сделать на компьютере (в qemu chroot), а потом просто перенести образ на флешку.

Скопировал в /usr/bin целевой системы qemu-arm-static, написал такой скрипт для упрощения chroot:

#!/bin/bash
CHRT="ROOT"
if [ $# != 1 ]; then
    echo "usage: $0 image"
    exit 1
fi

function mnt(){
    mount -o bind $1 ${CHRT}$1
}
[ -f /proc/sys/fs/binfmt_misc/arm ] || echo ':arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\x
ff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-arm-static:' > /proc/sys/fs/binfmt_misc/register
mount -o loop,offset=62914560 $1 ${CHRT}
mount -o loop,offset=2962227200 $1 ${CHRT}/Data
mnt /dev
mnt /sys
mount -t proc none ${CHRT}/proc
mnt /run
chroot ${CHRT}
Однако, ничего в чруте, кроме выполнения ls/cd сделать не могу, ругается:
./Chroot Raspberry-3.12.32_last.img
root@ishtar:/# apt-get update
qemu: uncaught target signal 4 (Illegal instruction) - core dumped
Illegal instruction (core dumped)
root@ishtar:/Data/pi/Apogee/opt/apogee/libapogee-3.0.2865# ./configure
qemu: uncaught target signal 4 (Illegal instruction) - core dumped
Illegal instruction (core dumped)

Что я сделал не так?

 ,

Eddy_Em
()

Тяпничное измерение

Форум — Talks

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

У меня их 140. Можно в моем профиле посмотреть, что за теги я игнорирую.

Ну, кто больше?

 

Eddy_Em
()

gcc, задание размера структуры

Форум — Development

В STM32F103 нет EEPROM, а флеш умеет стираться только страницами по 1-2кБ. Поэтому мне нужно не только выравнять размер структуры данных, где хранятся все переменные, которые пользователь может изменять, но и ограничить ее размер двумя килобайтами, чтобы gcc не впихнул туда что-нибудь.

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

Для начала я навелосипедил так (там малость устаревший вариант, правда: еще будет поле size, чтобы при обновлении все было ОК): задал выравненный по 2048Б массив (const) размером 2кБ, далее создал указатель на структуру и приравнял его этому массиву. Эта реализация плоха тем, что каждый раз после прошивки в случае изменения размера структуры приходится еще раз перезаписывать этот кусок флеша, копируя туда данные по умолчанию.

Сейчас балуюсь на компьютере (хоть и не ARM, но выравнивает-то так же). Пытаюсь создать "терминатор" — лишний 2049-й байт, который будет выходить за границы структуры, но я не буду его использовать. В итоге вроде бы структура должна иметь размер 2049, однако, почему-то получаю 4096:

#include <stdio.h>

struct {
        int i;
        double d;
        char ch __attribute__ ((aligned(2048)));
} test __attribute__ ((aligned(2048)));

int main(){
        int i;
        unsigned char *ptr = (unsigned char*)&test;
        size_t s = sizeof(test);
        test.i = 10;
        test.d = 1.5;
        test.ch = 'a';
        for(i = 0; i < s; i++){
                printf("%d: %u\n", i,*ptr++);
        }
        printf("size: %zd\n", s);
        return 0;
}

Последние строчки:

2044: 0
2045: 0
2046: 0
2047: 0
size: 2048
Переменная ch, как и ожидалось, лежит в 2049-м байте.

Вопрос: возможно ли средствами gcc дополнить структуру нулями до 2048Б или 2049Б, чтобы она не заняла внезапно 4кБ?


Еще раз лучи ненависти тому, кто придумал, что без тегов нельзя.

 ,

Eddy_Em
()

А как у нас нонче с webRTC?

Форум — Web-development

Есть ли сишные библиотеки, чтобы организовать потоковое вещание в реальном времени?

Или таки лучше моих 7 кадров в секунду на 640x480 через вебсокеты ничего не сделать?

 

Eddy_Em
()

leave, а это нормально?

Форум — Linux-org-ru

Вырезать, начиная с конца темы (чтобы побольше шкворца выпилить) «некорректные» на твой взгляд сообщения, а лишь затем грохать тему?

 

Eddy_Em
()

gentoo asoundconf

Форум — General

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

Сейчас хотел переключить звук на наушники, а оказалось, что я эту штуку не установил!

У меня вот такие псевдонимы:

alias intel='asoundconf set-default-card Intel'
alias sblive='asoundconf set-default-card Live'

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

Но не тут-то было! Команды-то нет!!!

Где скачать-то? Гугол меня забанил, похоже ☹

 ,

Eddy_Em
()

Как в планшете без тачскрина включить мышу?

Форум — Talks

В толксы помещаю, т.к. с линуксом вообще 0 связи.

Итак, имеем китайский 10" планшет на ондроиде 4.4. Дочка вчера на него наступила и тачскрин лопнул. Не работает вообще никак теперь.

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

sshd на планшете по умолчанию, к сожалению, не запускается.

Возможно ли как-то эту заразу при помощи клавиатуры и/или мыши разблокировать, чтобы заставить работать от мышатины?

 ,

Eddy_Em
()

Баг: игнорируемые сообщения в уведомлениях

Форум — Linux-org-ru

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

 ,

Eddy_Em
()

Как добавить кое-чего в NAS'овский линукс?

Форум — General

Ни в коем случае не покупайте сигейтовские NAS'ы: говно!

Итак, есть у меня на работе сигейтовский 4-bay NAS (ARM'овская архитектура). Там стоит неопознанный линукс. Через пыхпыховский скрипт получилось (по образцу, стыренному в интернете) запустить telnet.

ssh, к сожалению, отсутствует. Отсутствуют какие-либо пакетные менеджеры. Отсутствует gcc.

Вопрос: как бы попроще туда ssh поставить? Может, где-нибудь есть руководства, как под эту фиговину собрать гентушку в чруте через qemu и потом нужные пакеты вручную перенести, распаковать и скопировать по назначению?

Может и еще чего туда воткнуть...

А то хочется по-человечески NAS использовать, а не через одно место. Сейчас там ни квот человеческих, ни групп, ни прочих возможностей (например, можно нормальный веб-сервер поднять).

НЕГОДУЮ!!!

С КАКИХ ЭТО ПОР НУЖНО ОБЯЗАТЕЛЬНО МЕТКИ УКАЗЫВАТЬ?

 

Eddy_Em
()

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