|
Printable Version of Topic
Click here to view this topic in its original format |
| Forums > Глюкодром > Простой вопрос по программированию в линуксах |
| Posted by: VxWorks on 23-04-2008, 01:01 |
|
Как получить реальное время и дату, если time() возращает uptime а не секунды с 1 января 1970 года? now() отсутствует как класс. Вот такой вот вопросец |
| Posted by: FiL on 23-04-2008, 07:04 |
|
а в каком виде оно возвращает аптайм? все равно в секундах с начала эпохи? Манов, как я понимаю, нету, посмотреть что они сами пишут про свои интерпретации нельзя. А вообще часы в системе есть? дату и время оно знает? А то может оно аптайм показывает потому, что у нее дата при включении сбрасывается на начало эпохи? |
| Posted by: FiL on 23-04-2008, 07:09 |
| в качестве варианта могу предложить такое - создать файл (если уже есть, то тачнуть его (utime)) и потом попытаться почитать дату и время модификации файла (stat). |
| Posted by: VxWorks on 23-04-2008, 10:08 |
|
Манов нет. Часы в системе есть, причем правильные, однако показываются только одной программой, сырцов от которой нет. В системе date возращает 01 Января 1970 + время, прошедшее с момента рестарта системы. Тоже самое выдает и time(). Все файлы имеют дату в 1970 году. Для системы это некритично. Вот такие дела... rdate в системе тоже нет, может, скомпилировать какой-нибудь ntp клиент? |
| Posted by: FiL on 23-04-2008, 15:50 |
|
дык если системные часы показывают хреновое время, то понятно, что time() его и выдает. А, собственно, что мешает на старте системы устанавливать системное время правильно по твоей программе? что-то типа date `mycooldateprog` ну там с форматом только надо разобраться, но это не должно быть сложно. А потом и time() будет правду говорить. P.S. Можно и ntp, но оно тебе надо? |
| Posted by: VxWorks on 23-04-2008, 16:02 |
|
Дык та программа время не выдает, я только показывает на дисплее. Причем, не всегда, а только когда захочет. Я сильно подозреваю, что в нее встроен ntp клиент, но до него не добраться, ибо он часть экзешника. Я хочу написать простую программу, чтобы показывать время на дисплее постоянно. Дисплейную часть я уже освоил, а вот со временем облом. |
| Posted by: FiL on 23-04-2008, 18:22 |
|
ндааа... тебе надо топик переименовать из "программирование в линуксах" на "как побороть эту гадость с недолинуксом внутри" И, кстати, не думаю, что там у тебя ntp внутри. Был-бы ntp - он-бы тебе системное время выставлял. Этот момент можно проверить очень просто, кстати. Отруби девайс от интернета и проверь покажет-ли он время. Если да - значит к ntp оно отношения не имеет, время есть где-то внутри. Но вот где... Но это уже не по линуксу вопрос, а по твоей конкретной железяке, ибо у него системное время не совпадает с нормальными часами. |
| Posted by: Set on 23-04-2008, 19:19 |
|
Дизасм, дебаг и патч оригинальной проги. |
| Posted by: VxWorks on 23-04-2008, 21:14 |
|
Без подключения к Инету девайс не запускается и время не показывается. Set А как дизассемблить ARM9 под Линуксами? Я могу вытащить экзешник в комп. |
| Posted by: FiL on 23-04-2008, 22:10 | ||
|
| Posted by: Set on 23-04-2008, 23:12 |
| IDA Pro должно работать с arm9. |
| Posted by: VxWorks on 24-04-2008, 00:16 |
|
Короче, посмотрел я куда лезет прога. А лезет она в /dev/rtc. Можно ли как-то посмотреть, что есть этот /dev/rtc и как к нему обращаться7 |
| Posted by: FiL on 24-04-2008, 00:50 | ||
|
| Posted by: FiL on 24-04-2008, 00:50 |
| http://linux.die.net/man/4/rtc (http://linux.die.net/man/4/rtc |
| Posted by: Set on 24-04-2008, 00:55 |
|
Выкинуть девайс нафиг. |
| Posted by: VxWorks on 24-04-2008, 01:49 |
| OK, нашел сырцы rdate и скомпилировал, но работать оно нифига не хочет. Подозреваю, что проблема в библиотеках, то бишь, компилируется оно с библиотекой для хоста, а не для таргета. Как заставить компилятор использовать правильные библиотеки? Я могу их скопировать с девайса, но хедеров там нет, только сами библиотеки. libc.so.6 и т.п. |
| Posted by: FiL on 24-04-2008, 04:19 |
|
-L, если мне память не изменяет. Но я никогда не кросс-компилил, не знаю тонкостей. Попробовать написать маленькую прогу на сях и почитать /dev/rtc, как в мане написано сложно? Хотя... все равно ведь кросс-компилить надо |
| Posted by: Brait on 24-04-2008, 07:50 |
| VxWorks, а ты на hwclock смотрел? Она есть? Работает? |
| Posted by: VxWorks on 24-04-2008, 11:28 |
|
FiL -L задает директории поиска для библиотек, -l саму библиотеку. Но компилятор все равно не хочет подключать ее. К слову о мане и чтении /dev/rtc - а как его читать? Открыть как файл и скинуть поток сознания с него в другой файл, чтобы посмотреть что он выдает? Brait Нету. |
| Posted by: FiL on 24-04-2008, 16:00 |
|
ну там в мане чего-то написано про read, ioctl... я не программер, не знаю. |
| Posted by: Set on 24-04-2008, 18:57 |
| Было бы логично посмотреть в сорсы hwclock на любой другой версии глюникса. |
| Posted by: VxWorks on 24-04-2008, 19:19 | ||
Я вот тут с rdate ковыряюсь - скачал сорсы, но вот как заставить эту сволочь компилироваться супротив правильной библиотеки - не знаю. |
| Posted by: FiL on 24-04-2008, 20:14 | ||||
Так что идея на посмотреть сырцы hwclock - это очень здраво. А заодно можно попробовать ее скомпились. |
| Posted by: Brait on 25-04-2008, 03:08 |
| Глянул я исходники hwclock, действительно ничего особенного, простое чтение из "/dev/rtc" через ioctl (обычный read результата не даст). Но ведь header'ы кернела нужны, они есть? И кросс-компиляцией я никогда не занимался, знания чисто теоретические. |
| Posted by: VxWorks on 25-04-2008, 10:23 |
|
Проблема в том, что нет ничерта, в системе два файла .h - zconf.h и zlib.h Как сами понимаете, к кернелу они отношения не имеют. |
| Posted by: FiL on 25-04-2008, 16:04 |
| а что гугл говорит на предмет скомпилированного hwclock'a для твоей архитектуры? |
| Posted by: VxWorks on 25-04-2008, 16:33 |
|
Ничего не говорит - чип довольно редкий |
| Posted by: Brait on 28-04-2008, 02:47 |
| Тогда давай подробности, типа 'uname -a' (если есть), названия чипа и т.д. Хоть узнаем, с чем мучаемся. |