Forums -> Глюкодром -> Простой вопрос по программированию в линуксах
| Full Version

VxWorks
Как получить реальное время и дату, если time() возращает uptime а не секунды с 1 января 1970 года? now() отсутствует как класс.

Вот такой вот вопросец :) Я уже часа три бьюсь над ним...
FiL
а в каком виде оно возвращает аптайм? все равно в секундах с начала эпохи?
Манов, как я понимаю, нету, посмотреть что они сами пишут про свои интерпретации нельзя. А вообще часы в системе есть? дату и время оно знает? А то может оно аптайм показывает потому, что у нее дата при включении сбрасывается на начало эпохи?
FiL
в качестве варианта могу предложить такое - создать файл (если уже есть, то тачнуть его (utime)) и потом попытаться почитать дату и время модификации файла (stat).
VxWorks
Манов нет. Часы в системе есть, причем правильные, однако показываются только одной программой, сырцов от которой нет.

В системе date возращает 01 Января 1970 + время, прошедшее с момента рестарта системы. Тоже самое выдает и time().
Все файлы имеют дату в 1970 году. Для системы это некритично.

Вот такие дела... rdate в системе тоже нет, может, скомпилировать какой-нибудь ntp клиент?
FiL
дык если системные часы показывают хреновое время, то понятно, что time() его и выдает.
А, собственно, что мешает на старте системы устанавливать системное время правильно по твоей программе?
что-то типа
date `mycooldateprog`
ну там с форматом только надо разобраться, но это не должно быть сложно.
А потом и time() будет правду говорить.

P.S. Можно и ntp, но оно тебе надо?
VxWorks
Дык та программа время не выдает, я только показывает на дисплее. Причем, не всегда, а только когда захочет. Я сильно подозреваю, что в нее встроен ntp клиент, но до него не добраться, ибо он часть экзешника.

Я хочу написать простую программу, чтобы показывать время на дисплее постоянно. Дисплейную часть я уже освоил, а вот со временем облом.
FiL
ндааа... тебе надо топик переименовать из "программирование в линуксах" на "как побороть эту гадость с недолинуксом внутри" :)

И, кстати, не думаю, что там у тебя ntp внутри. Был-бы ntp - он-бы тебе системное время выставлял. Этот момент можно проверить очень просто, кстати. Отруби девайс от интернета и проверь покажет-ли он время. Если да - значит к ntp оно отношения не имеет, время есть где-то внутри. Но вот где... Но это уже не по линуксу вопрос, а по твоей конкретной железяке, ибо у него системное время не совпадает с нормальными часами.
Set
Дизасм, дебаг и патч оригинальной проги. :drag:
VxWorks
Без подключения к Инету девайс не запускается и время не показывается.

Set

А как дизассемблить ARM9 под Линуксами? Я могу вытащить экзешник в комп.
FiL
QUOTE (VxWorks @ 23-04-2008, 13:14)
Без подключения к Инету девайс не запускается и время не показывается.
в очердной раз у меня созрело предложение выкинуть этот девайс в мусорку. Или не выкидывать, но и не мучаться.
Set
IDA Pro должно работать с arm9.
VxWorks
Короче, посмотрел я куда лезет прога. А лезет она в /dev/rtc.
Можно ли как-то посмотреть, что есть этот /dev/rtc и как к нему обращаться7
FiL
QUOTE (VxWorks @ 23-04-2008, 16:16)
Короче, посмотрел я куда лезет прога. А лезет она в /dev/rtc.
Можно ли как-то посмотреть, что есть этот /dev/rtc и как к нему обращаться7
в нормальных линуксах есть комманда hwclock, она умеет читать и писать rtc.

FiL
http://linux.die.net/man/4/rtc
Set
Выкинуть девайс нафиг. :actu:
VxWorks
OK, нашел сырцы rdate и скомпилировал, но работать оно нифига не хочет. Подозреваю, что проблема в библиотеках, то бишь, компилируется оно с библиотекой для хоста, а не для таргета. Как заставить компилятор использовать правильные библиотеки? Я могу их скопировать с девайса, но хедеров там нет, только сами библиотеки. libc.so.6 и т.п.
FiL
-L, если мне память не изменяет. Но я никогда не кросс-компилил, не знаю тонкостей.

Попробовать написать маленькую прогу на сях и почитать /dev/rtc, как в мане написано сложно? Хотя... все равно ведь кросс-компилить надо
Brait
VxWorks, а ты на hwclock смотрел? Она есть? Работает?
VxWorks
FiL

-L задает директории поиска для библиотек, -l саму библиотеку. Но компилятор все равно не хочет подключать ее.

К слову о мане и чтении /dev/rtc - а как его читать? Открыть как файл и скинуть поток сознания с него в другой файл, чтобы посмотреть что он выдает?


Brait

Нету.
FiL
ну там в мане чего-то написано про read, ioctl...
я не программер, не знаю.
Set
Было бы логично посмотреть в сорсы hwclock на любой другой версии глюникса.
VxWorks
QUOTE (Set @ 24-04-2008, 16:57)
Было бы логично посмотреть в сорсы hwclock на любой другой версии глюникса.
А зачем? В системе же системных часов нет. А к /dev/rtc обращается только сама прога, причем хз как.

Я вот тут с rdate ковыряюсь - скачал сорсы, но вот как заставить эту сволочь компилироваться супротив правильной библиотеки - не знаю.
FiL
QUOTE (VxWorks @ 24-04-2008, 11:19)
QUOTE (Set @ 24-04-2008, 16:57)
Было бы логично посмотреть в сорсы hwclock на любой другой версии глюникса.
А зачем? В системе же системных часов нет. А к /dev/rtc обращается только сама прога, причем хз как.

Я вот тут с rdate ковыряюсь - скачал сорсы, но вот как заставить эту сволочь компилироваться супротив правильной библиотеки - не знаю.
hwclock в обычных юниксах как раз читает rtc и по нему выставляет системное время. И наоборот. то есть это как раз прога для работы с /dev/rtc.

Так что идея на посмотреть сырцы hwclock - это очень здраво. А заодно можно попробовать ее скомпились.
Brait
Глянул я исходники hwclock, действительно ничего особенного, простое чтение из "/dev/rtc" через ioctl (обычный read результата не даст). Но ведь header'ы кернела нужны, они есть? И кросс-компиляцией я никогда не занимался, знания чисто теоретические.
VxWorks
Проблема в том, что нет ничерта, в системе два файла .h - zconf.h и zlib.h

Как сами понимаете, к кернелу они отношения не имеют.
FiL
а что гугл говорит на предмет скомпилированного hwclock'a для твоей архитектуры?
VxWorks
Ничего не говорит - чип довольно редкий :(
Brait
Тогда давай подробности, типа 'uname -a' (если есть), названия чипа и т.д. Хоть узнаем, с чем мучаемся.