Добрый день уважаемые участники форума. Имею плату видеозахвата Orient HW-504 + Debian lenny. Плата построена на 4х чипах SAA7130. Поддержку платы настраивал по данной статье: http://www.forumnov.ru/viewtopic.php?f=29&t=74Все работает, но мне необходима поддержка видеовыхода, который присутствует на плате. Точнее - поочередную коммутацию каждой камеры на этот выход (данный функционал заложен в родное ПО под Win).
Физически TVout реализован с помощью м/с 74HC4052D. По одной дорожке с нее идет на каждый из чипов SAA7130, а управляется она сама с 4го SAA7130. Судя по всему уменно в регистр GPIO этого 4го чипа надо писать некие значения для переключения каналов на TVout.
С помощью flytest я посмотрел, что происходит с этим 4м чипом в момент переключения каналов на TVout: При коммутации каналов изменяется GPIO Value.
GPIO Mode: 0x00389200
GPIO Value:
0x00010000 - 1 канал
0x00090000 - 2 канал
0x00110000 - 3 канал
0x00190000 - 4 каналПробовал ковырять исходники ядра (/usr/src/drivers/media/video/saa7134) на предмет как там считать или что-то записать в GPIO. Но, на самом деле, я не очень селен в программировании таких вещей - в общем не смог разобраться.
Может, кто-нибудь подскажет пример по работе с GPIO регистрами или где можно про это подробнее почитать. Буду очень благодарен.
> Пробовал ковырять исходники ядра (/usr/src/drivers/media/video/saa7134) на предмет
> как там считать или что-то записать в GPIO. Но, на самом
> деле, я не очень селен в программировании таких вещей - в
> общем не смог разобраться.В исходниках модуля функций работы с чипом, как грязи :-)
saa7134_set_gpio и другие saa_* функции )
Только как ими корректно пользоваться - еще знать надо...Что планируется задействовать источником (иницатором) переключений ?
Как будет определяться "четвертый" чип ?
> Может, кто-нибудь подскажет пример по работе с GPIO регистрами или где можно
> про это подробнее почитать. Буду очень благодарен.все примеры - в исходниках =)
>[оверквотинг удален]
>> деле, я не очень селен в программировании таких вещей - в
>> общем не смог разобраться.
> В исходниках модуля функций работы с чипом, как грязи :-)
> saa7134_set_gpio и другие saa_* функции )
> Только как ими корректно пользоваться - еще знать надо...
> Что планируется задействовать источником (иницатором) переключений ?
> Как будет определяться "четвертый" чип ?
>> Может, кто-нибудь подскажет пример по работе с GPIO регистрами или где можно
>> про это подробнее почитать. Буду очень благодарен.
> все примеры - в исходниках =).inputs = {{
.name = name_comp1, /* название входа */
.vmux = 3, /* номер канала видео микшера */
.amux = LINE1, /* название канала аудио микшера */
.gpio = 0x389c00, /* битовая маска GPIO */
}вот тут значение 0x389c00 - абсолютно не верно.
Значение в структуре определяет номер ножки, точнее номер бита в регистре, который нужно активировать чтобы выбрать данный звуковой вход.
Как правило, выбирается вход одним-двумя битами (4 варианта выбора), поэтому типовые значения поля в структуре - числа вида 0x0000, 0x4000, 0x8000 и т подобные//можете скомментить это в исходный форум по ссылке.
Посмотрим на описание другой карты. Оно отличается тем, что в ней расписаны пины.[SAA7134_BOARD_CRONOS_PLUS] = {
/*
gpio pins:
0 .. 3 BASE_ID
4 .. 7 PROTECT_ID
8 .. 11 USER_OUT
12 .. 13 USER_IN
14 .. 15 VIDIN_SEL
*/
.name = "Matrox CronosPlus",
.tuner_type = TUNER_ABSENT,
.radio_type = UNSET,
.tuner_addr = ADDR_UNSET,
.radio_addr = ADDR_UNSET,
.gpiomask = 0xcf00,
.inputs = {{
.name = name_comp1,
.vmux = 0,
.gpio = 2 << 14,
},{
.name = name_comp2,
.vmux = 0,
.gpio = 1 << 14,
},{
.name = name_comp3,
.vmux = 0,
.gpio = 0 << 14,
},{
.name = name_comp4,
.vmux = 0,
.gpio = 3 << 14,
},{
.name = name_svideo,
.vmux = 8,
.gpio = 2 << 14,
}},
},
.gpiomask = 0xcf00,gpio pins:
0 .. 3 BASE_ID
4 .. 7 PROTECT_ID
8 .. 11 USER_OUT
12 .. 13 USER_IN
14 .. 15 VIDIN_SEL
Значение 0xcf00 разрешает управлять пинами (выходами) VIDIN_SEL (14,15) USER_OUT(8-11), а пины USER_IN (входы) указывает не трогать.(исходя из анализа кода, драйвер будет стремиться выставить USER_OUT в нули, вероятно это зачем-то нужно)
Соответственно, значение .gpiomask = 0x01fc00, метом "сложить все значения" было выбрано не верно (хотя, возможно, позволяет достичь желаемого эффекта). Это значение не имеет никакого отношения к общей процедуре работы с GPIO-регистром, а только определяет биты, которые используются при работу со входами.
Оба эти поля, .gpio && .gpiomask, используются в коде драйвера только в коде выбора аудио? входа, функции mute_input_* :
Работа с выбором входа звука через GPIO-регистр:
saa_andorl(SAA7134_GPIO_GPMODE0 >> 2, mask, mask);
saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, mask, in->gpio);
saa7134_track_gpio(dev,in->name);mask - это та gpiomask в описании карты, и она определяет, какие биты регистра мы в принципе собираемся менять.
MODE - это направление работы регистра на вход (значение 0) или на выход (значение 1).
исходя из понимания работы макроса
#define saa_andorl(reg,mask,value) \
writel((readl(dev->lmmio+(reg)) & ~(mask)) | ((value) & (mask)), dev->lmmio+(reg))биты, подпадающие под маску, будут выставлены в значение, заданное в поле gpio, а также сам порт будет сконфигурирован на выход соответствующими битами.
//Зачем нужно смещение на два разряда - мне не понятно ) Оно есть везде, кроме одного случая, и, вероятно, "так надо".Итого, текст отладки, выдаваемый flyview
== == ==
GPIO pins:
Mode : 0x00389200
Value: 0x00010000
== == ==говорит нам о записи в регистр по адресу 0x00389200 значения 0х00010000
Адрес получается как базовый адрес + смещение адреса регистра относительно базового:
dev->lmmio+(reg). Вычтя из 0х00389200 базовый адрес, получим смещение, которое и надо использовать в исходном коде драйвера, поскольку базовый адрес, ИМХО, может меняться, в зависимости от конфигурации устройств компа.Вероятнее всего, это будет всё тот же регистр SAA7134_GPIO_GPMODE0, хотя и не факт.
Далее, требуется написать "небольшой кусочек кода", который будет управлять записью в соответствующий(ие) регистр(ы) нужных значений, в соответствии с "требуемым алгоритмом" (на изменение sysctl-переменной, на ioctl-вызов на специально созданном устройстве, просто в цикле, созданном на уровне драйвера, и т п).
//программистом драйверов не являюсь, все вышеописанное - ИМХО, и может быть очень далеко от реальности. Комментарии, корректировки, мнения и отзывы - приветствуются.
хм, так в обсуждении исходном-то, оказывается 12 страниц, а не одна :-)))
> В исходниках модуля функций работы с чипом, как грязи :-)
> saa7134_set_gpio и другие saa_* функции )
> Только как ими корректно пользоваться - еще знать надо...Ну вот в том то и дело. К примеру, взял saa-7134-cars.c Выкинул все лишнее (на мой взгляд :) ), пытаюсь использовать функцию saa7134_board_ini1. Но ей передается, я так понимаю, некий идентификатор устройства (если правильно выражаюсь). А где его взять - не понял.
Мне подумалось что это все должно как-то более просто делаться. Наверно 5-10 команд максимум. Или я ошибаюсь?
> Что планируется задействовать источником (иницатором) переключений ?
Мне видится что это будет некий исполняемый файл который будет запускаться с параметром от 1 до 4 по крону. Ну и в зависимости от параметра записывать в GPIO нужное значение видеоканала. Как-то так...
> Как будет определяться "четвертый" чип ?
Я незнаю если честно.
> все примеры - в исходниках =)
Может, есть что-нибудь попроще: ;) Не очень силен я в таком программировании..
>> В исходниках модуля функций работы с чипом, как грязи :-)
>> saa7134_set_gpio и другие saa_* функции )
>> Только как ими корректно пользоваться - еще знать надо...
> Ну вот в том то и дело. К примеру, взял saa-7134-cars.c Выкинул
> все лишнее (на мой взгляд :) ), пытаюсь использовать функцию saa7134_board_ini1.
> Но ей передается, я так понимаю, некий идентификатор устройства (если правильно
> выражаюсь).Туда структура передается. (Структура - это данные в памяти).
>А где его взять - не понял.
Загружается драйвер, он объявляет себя драйвером PCI-устройств (грубо говоря).
Вызывается saa7134_initdev, находит описание девайса в saa7134_boards, заполняет структуру значениями и передает в вызов saa7134_board_init1
> Мне подумалось что это все должно как-то более просто делаться. Наверно 5-10
> команд максимум. Или я ошибаюсь?
>> Что планируется задействовать источником (иницатором) переключений ?
> Мне видится что это будет некий исполняемый файл который будет запускаться с
> параметром от 1 до 4 по крону. Ну и в зависимости
> от параметра записывать в GPIO нужное значение видеоканала. Как-то так...ага. шелл записывает значение в PCI. Минуя драйвер. Ага.
Поддержку этого всего еще написать надо. ;-)>> Как будет определяться "четвертый" чип ?
> Я незнаю если честно.
>> все примеры - в исходниках =)
> Может, есть что-нибудь попроще: ;) Не очень силен я в таком программировании..:-)
> Туда структура передается. (Структура - это данные в памяти).А эта структура так и остается в памяти? С ней можно как-то работать?
> ага. шелл записывает значение в PCI. Минуя драйвер. Ага.
> Поддержку этого всего еще написать надо. ;-)Я конечно же не имел в виду что писать напрямую. :) Конечно надо каким-то образом взаимодействовать с драйвером. Все функции, которые описаны в /saa7134 - их можно вызывать из своих программ?
>> Туда структура передается. (Структура - это данные в памяти).
> А эта структура так и остается в памяти? С ней можно как-то
> работать?да, конечно же можно работать.
>> ага. шелл записывает значение в PCI. Минуя драйвер. Ага.
>> Поддержку этого всего еще написать надо. ;-)
> Я конечно же не имел в виду что писать напрямую. :) Конечно
> надо каким-то образом взаимодействовать с драйвером. Все функции, которые описаны в
> /saa7134 - их можно вызывать из своих программ?=) нет конечно. Оно же в ядре модулем крутится.
А с модулем, взаимодействовать можно:- через устройства, которые он создает, читая/записывая их
- через устройства, которые он создает, делая на них ioctl-операции
- через sysctl, но модуль опять же должен их создатьМое предложение решения вашей проблемы свелось бы к предложению создания нового модуля :-)
Базовый модуль saa7134 экспортирует много интересных вещей, которые можно использовать в сторонних модулях:EXPORT_SYMBOL(saa7134_set_gpio)
EXPORT_SYMBOL(saa7134_boards)
EXPORT_SYMBOL(saa7134_devlist)Т.е. доп модуль сможет получить доступ к нужной инфе базового.
Но тут есть маленькая проблемка с выбором интерфейса взаимодействия с ядром :-)
просто устройства, которые читать/писать - делать невыгодно, нерасширяемо :-)
sysctl - девайсов много, как сделать по элементу sysctl для каждого чипа - непонятно.
Видится мне решение проблемы созданием модуля, который бы для каждого чипа создавал бы по устройству videogpioX :-) и по паре ioctl, на чтение регистров статуса и значения порта.далее всё упирается в то, какие major/minor для этого выбрать...
А потом - еще надо написать клиентскую программу.
> да, конечно же можно работать.Но, если правильно понимаю, смысла особого нет - все-равно надо модуль писать..
> просто устройства, которые читать/писать - делать невыгодно, нерасширяемо :-)
Ну вроде расширяемость не очень важна..
> sysctl - девайсов много, как сделать по элементу sysctl для каждого чипа
> - непонятно.
> Видится мне решение проблемы созданием модуля, который бы для каждого чипа создавал
> бы по устройству videogpioX :-) и по паре ioctl, на чтение
> регистров статуса и значения порта.А зачем для каждого чипа? Надо только в один записать.
> далее всё упирается в то, какие major/minor для этого выбрать...
> А потом - еще надо написать клиентскую программу.По мере общения с Вами у меня ухудшается настроение и пропадает вера в благополучный исход данной затеи..
PS. :)
>> да, конечно же можно работать.
> Но, если правильно понимаю, смысла особого нет - все-равно надо модуль писать..
>> просто устройства, которые читать/писать - делать невыгодно, нерасширяемо :-)
> Ну вроде расширяемость не очень важна..
>> sysctl - девайсов много, как сделать по элементу sysctl для каждого чипа
>> - непонятно.
>> Видится мне решение проблемы созданием модуля, который бы для каждого чипа создавал
>> бы по устройству videogpioX :-) и по паре ioctl, на чтение
>> регистров статуса и значения порта.
> А зачем для каждого чипа? Надо только в один записать.а как определить, в который ? :-)
>> далее всё упирается в то, какие major/minor для этого выбрать...
>> А потом - еще надо написать клиентскую программу.
> По мере общения с Вами у меня ухудшается настроение и пропадает вера
> в благополучный исход данной затеи..
> PS. :)А я наоборот, модуля для ядра писать начал :-)
[109149.029396] saa7134_gpio: module license 'unspecified' taints kernel.
[109149.032384] Module successfully registered
[109704.063396] Module successfully registered
[110083.008825] Found card saa7133[0]<5>Module successfully registered
ch:/usr/src/modules/saa7134_gpio#
> а как определить, в который ? :-)Может, информация выдаваемая flytest сможет помочь? Ну GPIO mode и GPIO value?
> А я наоборот, модуля для ядра писать начал :-)Не перевелись еще у нас Человеки с широкой Русской душой :) :) :)
>> а как определить, в который ? :-)
> Может, информация выдаваемая flytest сможет помочь? Ну GPIO mode и GPIO value?
>> А я наоборот, модуля для ядра писать начал :-)
> Не перевелись еще у нас Человеки с широкой Русской душой :) :)
> :)Эти цифры в принципе не важны, главное интерфейс. И он есть.
Я восхищен тем, что в результате моих издевательств над ядром ничего особо критичного не произошло. Удаленная машина с карточкой (сервер) кидала много ругани в лог, замечая ошибки доступа к несуществующим данным, но выстояла... Хотя, наверное, немножко памяти таки утекло.==
В результате двойной загрузки модуля - таки повисло, и в ребут не ушло.
>[оверквотинг удален]
> Т.е. доп модуль сможет получить доступ к нужной инфе базового.
> Но тут есть маленькая проблемка с выбором интерфейса взаимодействия с ядром :-)
> просто устройства, которые читать/писать - делать невыгодно, нерасширяемо :-)
> sysctl - девайсов много, как сделать по элементу sysctl для каждого чипа
> - непонятно.
> Видится мне решение проблемы созданием модуля, который бы для каждого чипа создавал
> бы по устройству videogpioX :-) и по паре ioctl, на чтение
> регистров статуса и значения порта.
> далее всё упирается в то, какие major/minor для этого выбрать...
> А потом - еще надо написать клиентскую программу.Проблема высосана даже не из пальца :) Самый прямой путь - четвертый, тут не описаный. Сделать драйвер типа gpio_chip - с учетом того что сами ф-ции для работы с gpio уже есть - нужно только обертки сделать. В ядре есть готовый интерфейс для gpio в файловой ситеме sysfs - ознакомиться можно тут
linux/Documentation/gpio.txt
начиная со слов
Sysfs Interface for Userspace (OPTIONAL)Пример gpio_chip в ядре например linux/Documentation/bt8xxgpio.txt
При этом не нужно никакие клиентские программы изобретать - достаточно простенький скрипт с echo :)
>[оверквотинг удален]
> тут не описаный. Сделать драйвер типа gpio_chip - с учетом того
> что сами ф-ции для работы с gpio уже есть - нужно
> только обертки сделать. В ядре есть готовый интерфейс для gpio в
> файловой ситеме sysfs - ознакомиться можно тут
> linux/Documentation/gpio.txt
> начиная со слов
> Sysfs Interface for Userspace (OPTIONAL)
> Пример gpio_chip в ядре например linux/Documentation/bt8xxgpio.txt
> При этом не нужно никакие клиентские программы изобретать - достаточно простенький скрипт
> с echo :)Да, тема интересная, конечно...
Хотя по сложности она не особо и отличается.
Проблема, как обычно, есть =)
В 2.6.26 этого "почти нет" ))Попытался отстроить каркас, но чето нифига не получилось закомпилить это дело.
В 2.6.32 уже есть и описанные выше примеры с bt8xx, возможно там это получится проще, чем в 2.6.26 )Опять же, мне на данный момент не понятно, как оно себя поведет в случае, когда чипов - 4.
> linux/Documentation/gpio.txt
> начиная со слов
> Sysfs Interface for Userspace (OPTIONAL)Почитал. В конструкции "echo 19 > export" will create a "gpio19" не понял откуда взять номер регистра GPIO?
> Пример gpio_chip в ядре например linux/Documentation/bt8xxgpio.txt
Я наверно что-то не понимаю. Но там же просто распиновка соответствующей микросхемы?
>> linux/Documentation/gpio.txt
>> начиная со слов
>> Sysfs Interface for Userspace (OPTIONAL)
> Почитал. В конструкции "echo 19 > export" will create a "gpio19" не
> понял откуда взять номер регистра GPIO?
>> Пример gpio_chip в ядре например linux/Documentation/bt8xxgpio.txt
> Я наверно что-то не понимаю. Но там же просто распиновка соответствующей микросхемы?http://areainter.net/saa7134gpd.tar.gz
ch:/usr/src/modules/saa7134gpd# insmod saa7134gpd.ko
ch:/usr/src/modules/saa7134gpd# dmesg
....
[ 9.839348] saa7130/34: v4l2 driver version 0.2.14 loaded
[ 9.839348] ACPI: PCI Interrupt 0000:06:00.0[A] -> GSI 21 (level, low) -> IRQ 21
[ 9.839354] saa7133[0]: found at 0000:06:00.0, rev: 240, irq: 21, latency: 32, mmio: 0x88000000
[ 9.839433] saa7133[0]: subsystem: 0000:4091, board: Beholder BeholdTV 409 FM [card=67,autodetected]
[ 9.839516] saa7133[0]: board init: gpio is c0c000
[ 9.839603] input: saa7134 IR (Beholder BeholdTV 4 as /class/input/input5
[ 9.996685] saa7133[0]: i2c eeprom 00: 00 00 91 40 54 20 00 00 00 00 00 00 00 00 00 01
[ 9.997344] saa7133[0]: i2c eeprom 10: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
...
[ 10.006604] saa7133[0]: i2c eeprom f0: 42 54 56 30 32 30 32 ff ff ff ff ff ff ff ff ff
[ 10.127883] tuner' 1-0043: chip found @ 0x86 (saa7133[0])
[ 10.141070] tda9887 1-0043: creating new instance
[ 10.141126] tda9887 1-0043: tda988[5/6/7] found
[ 10.177842] All bytes are equal. It is not a TEA5767
[ 10.177936] tuner' 1-0060: chip found @ 0xc0 (saa7133[0])
[ 10.197309] tuner-simple 1-0060: creating new instance
[ 10.197377] tuner-simple 1-0060: type set to 38 (Philips PAL/SECAM multi (FM1216ME MK3))
[ 10.254270] saa7133[0]: registered device video0 [v4l2]
[ 10.254343] saa7133[0]: registered device vbi0
[ 10.254408] saa7133[0]: registered device radio0
....
[ 2958.994095] Found card saa7133[0], created video0gpio
[ 2958.994095] Module successfully registered. MAJOR 249Загрузился модуль, создал девайс.
ch:/usr/src/modules/saa7134gpd# ls -l /dev/vi*
crw-rw---- 1 root video 81, 0 Nov 1 10:07 /dev/video0
crw-rw---- 1 root root 249, 0 Nov 1 10:56 /dev/video0gpioЧтение из девайса показывает состояние регистра, в соответствии с регистром статуса раскладывается на две части, линии на вход и линии на выход.
ch:/usr/src/modules/saa7134gpd# cat /dev/video0gpio
saa7133[0]: gpio: mode=0x0008000 in=0x0c04000 out=0x0000000Клиентская программа имеет возможность читать/писать карту
ch:/usr/src/modules/saa7134gpd# ./client
/dev/video0gpio: ioctl_gpio: mode=0x0008000 in=0x0c04000 out=0x0000000по сути этот драйвер, в текущей реализации - это большой бэкдор =) если знать как им правильно пользоваться, поскольку позволяет читать любую область памяти.
Правильно - сделать отдельный ioctl на чтение/запись отдельного регистра карты, или хотя бы проверять диапазон запрашиваемых смещений. =)ch:/usr/src/modules/saa7134gpd# rmmod saa7134gpd
ch:/usr/src/modules/saa7134gpd# ls -l /dev/vi*
crw-rw---- 1 root video 81, 0 Nov 1 10:07 /dev/video0модуль умеет успешно выгружаться и чистить за собой все свои дела.
ch:/usr/src/modules/saa7134gpd# ls -l vi*
crw-r--r-- 1 root src 249, 0 Oct 31 05:07 videogpio0
ch:/usr/src/modules/saa7134gpd# cat videogpio0
cat: videogpio0: No such device or addressсобирается командами
make all
make client
=======
Если интересует, могу сделать более полноценный драйвер, который будет сам по таймеру производить переключения видеовходов по определенным параметрам маски и значений регистра для каждого входа.Маску и значения регистра предполагается выставлять с помощью утилиты управления, зашив нужные значения в её код.
Предполагается примерно следующее использование утилиты:
прямой выбор входа
client 1
client 2
client 3инициализация автоматического переключения каждые 10 сек
client auto 10
===========маску и значения регистров для активации соответствующих входов можно выставлять и как параметры загрузки модуля, но тогда это будет не гибко, если будет установлено несколько карт, и к одной из них будет подключен "не полный комплект" камер - то не задействованные входы всеравно будут выбираться.
====
upd, пока писал - появилась другая идея:
синтаксис:
активация переключателя, запись соответствующих значений
client mask 0x00190000
client ena 1 0x00110000
client ena 2 0x00190000
client ena 3 0x00010000
client ena 4 0x00090000стирание (отключение камеры)
client dis 3
принудительная коммутация
client sel 1
...
client sel 4автоматический перебор всех активированных камер
client auto 15
> Клиентская программа имеет возможность читать/писать карту
> ch:/usr/src/modules/saa7134gpd# ./client
> /dev/video0gpio: ioctl_gpio: mode=0x0008000 in=0x0c04000 out=0x0000000Блин, МОНСТР :) :)
> собирается командами
> make all
> make clientРешил попробовать Kubuntu вместо Debian. Сейчас zoneminder закончит заново устанавливаться и буду разбираться!!!
> =======
> Если интересует, могу сделать более полноценный драйвер, который будет сам по таймеру
> производить переключения видеовходов по определенным параметрам маски и значений регистра
> для каждого входа.;-) В общем то интересует
>> Клиентская программа имеет возможность читать/писать карту
>> ch:/usr/src/modules/saa7134gpd# ./client
>> /dev/video0gpio: ioctl_gpio: mode=0x0008000 in=0x0c04000 out=0x0000000
> Блин, МОНСТР :) :)
>> собирается командами
>> make all
>> make client
> Решил попробовать Kubuntu вместо Debian. Сейчас zoneminder закончит заново устанавливаться
> и буду разбираться!!!Ну что, как успехи ?
> Ну что, как успехи ?debian:/lib/modules/2.6.26-2-686/build# make all
make -C /lib/modules/2.6.26-2-686/build M=/lib/modules/2.6.26-2-686/build modules
make[1]: Entering directory `/lib/modules/2.6.26-2-686/build'
make[1]: *** Нет правила для сборки цели `modules'. Останов.
make[1]: Leaving directory `/lib/modules/2.6.26-2-686/build'
make: *** [all] Ошибка 2
debian:/lib/modules/2.6.26-2-686/build#
>> Ну что, как успехи ?
> debian:/lib/modules/2.6.26-2-686/build# make all
> make -C /lib/modules/2.6.26-2-686/build M=/lib/modules/2.6.26-2-686/build modules
> make[1]: Entering directory `/lib/modules/2.6.26-2-686/build'
> make[1]: *** Нет правила для сборки цели `modules'. Останов.
> make[1]: Leaving directory `/lib/modules/2.6.26-2-686/build'
> make: *** [all] Ошибка 2
> debian:/lib/modules/2.6.26-2-686/build#Это что такое ?
>>> Ну что, как успехи ?
>> debian:/lib/modules/2.6.26-2-686/build# make all
>> make -C /lib/modules/2.6.26-2-686/build M=/lib/modules/2.6.26-2-686/build modules
>> make[1]: Entering directory `/lib/modules/2.6.26-2-686/build'
>> make[1]: *** Нет правила для сборки цели `modules'. Останов.
>> make[1]: Leaving directory `/lib/modules/2.6.26-2-686/build'
>> make: *** [all] Ошибка 2
>> debian:/lib/modules/2.6.26-2-686/build#
> Это что такое ?ну в смысле что-то не собирается :(
>>>> Ну что, как успехи ?
>>> debian:/lib/modules/2.6.26-2-686/build# make all
>>> make -C /lib/modules/2.6.26-2-686/build M=/lib/modules/2.6.26-2-686/build modules
>>> make[1]: Entering directory `/lib/modules/2.6.26-2-686/build'
>>> make[1]: *** Нет правила для сборки цели `modules'. Останов.
>>> make[1]: Leaving directory `/lib/modules/2.6.26-2-686/build'
>>> make: *** [all] Ошибка 2
>>> debian:/lib/modules/2.6.26-2-686/build#
>> Это что такое ?
> ну в смысле что-то не собирается :(а то, что при распаковке мейкфайл слегка затерся, так это никого не напрягло ?
куда вы распаковали архив и кто вообще сказал вам сделать так, как вы сделали ?
> а то, что при распаковке мейкфайл слегка затерся, так это никого не
> напрягло ?
> куда вы распаковали архив и кто вообще сказал вам сделать так, как
> вы сделали ?Makefile вроде на месте. Распаковываю в /home/user
debian:/home/user# ls -l
итого 12304
-rw-r--r-- 1 user user 0 Окт 26 18:59 1~
-rw-r--r-- 1 user user 4567040 Окт 27 03:43 avreg-debian-repo_2010-05-14.tar
drwxr-xr-x 4 user user 4096 Фев 17 2010 debian
drwxr-xr-x 2 user user 4096 Ноя 1 22:51 Desktop
drwx------ 3 user user 4096 Окт 24 05:05 file:
-rw-r--r-- 1 root root 1940 Июл 14 2008 gpio.h
-rw-r--r-- 1 user user 62 Окт 26 19:03 hello.c
-rwxr-xr-x 1 root root 1393 Окт 13 2008 motion
drwxr-xr-x 4 user user 4096 Окт 26 19:06 my
drwxr-xr-x 3 root root 4096 Окт 29 02:40 red_storm
-rw------- 1 user user 4900130 Окт 29 02:38 red_storm.tar.gz
drwxr-xr-x 2 root root 4096 Окт 24 02:14 saa7134
drwxr-xr-x 2 root root 4096 Ноя 1 22:59 saa7134gpd
-rw-r--r-- 1 user user 3747 Ноя 1 22:51 saa7134gpd.tar.gz
-rw-r--r-- 1 root root 183 Окт 28 02:56 test.c
lrwxrwxrwx 1 user user 6 Окт 27 03:45 ubuntu -> debian
-rw-r--r-- 1 user user 1520748 Окт 24 04:07 zoneminder_1.24.2-1_i386.deb
-rw-r--r-- 1 user user 1521732 Окт 24 04:08 zoneminder_1.24.2-2_i386.deb
debian:/home/user# cd saa7134gpd
debian:/home/user/saa7134gpd# ls -l
итого 32
-rw-r--r-- 1 root root 1455 Ноя 1 08:16 client.c
-rw-r--r-- 1 root root 731 Ноя 1 22:59 Makefile
-rw-r--r-- 1 root root 8308 Ноя 1 08:15 saa7134gpd.c
-rw-r--r-- 1 root root 729 Окт 31 12:13 saa7134gpd.h
-rw-r--r-- 1 root root 474 Ноя 1 08:12 saa7134gpd-ioctl.h
-rw-r--r-- 1 root root 1297 Ноя 1 08:12 saa7134_gpio.c
debian:/home/user/saa7134gpd#
debian:/home/user/saa7134gpd# make all
make -C /lib/modules/2.6.26-2-686/build M=/home/user/saa7134gpd modules
make[1]: Entering directory `/lib/modules/2.6.26-2-686/build'
make[1]: *** Нет правила для сборки цели `modules'. Останов.
make[1]: Leaving directory `/lib/modules/2.6.26-2-686/build'
make: *** [all] Ошибка 2
debian:/home/user/saa7134gpd#
Я что-то не так делаю?
>[оверквотинг удален]
>>>> Ну что, как успехи ?
>>> debian:/lib/modules/2.6.26-2-686/build# make all
>>> make -C /lib/modules/2.6.26-2-686/build M=/lib/modules/2.6.26-2-686/build modules
>>> make[1]: Entering directory `/lib/modules/2.6.26-2-686/build'
>>> make[1]: *** Нет правила для сборки цели `modules'. Останов.
>>> make[1]: Leaving directory `/lib/modules/2.6.26-2-686/build'
>>> make: *** [all] Ошибка 2
>>> debian:/lib/modules/2.6.26-2-686/build#
>> Это что такое ?
>ну в смысле что-то не собирается :(Я предполагаю что мой архив был распакован в /lib/modules/2.6.26-2-686/build
и исходный файл /lib/modules/2.6.26-2-686/build/Makefile потерян.
ch:/lib/modules/2.6.26-2-xen-686/build# ls -l Ma*
lrwxrwxrwx 1 root root 45 Oct 31 01:14 Makefile -> ../linux-headers-2.6.26-2-common-xen/Makefile
ch:/lib/modules/2.6.26-2-xen-686/build# cd ../linux-headers-2.6.26-2-common-xen
ch:/usr/src/linux-headers-2.6.26-2-common-xen# ls -l Ma*
-rw-r--r-- 1 root root 55267 Sep 17 00:56 Makefile
> Я что-то не так делаю?Обратите внимание, что для сборки софта требуются хидер-файлы из распакованного дерева исходного кода ядра.
ch:/usr/src/modules/saa7134gpd# head -n 2 Makefile
LinuxSourcePath:=/usr/src/linux-source-2.6.26
Стандартный пакет linux-headers не содержит всех требуемых хидеров.Удачи в сборке.
> Обратите внимание, что для сборки софта требуются хидер-файлы из распакованного дерева
> исходного кода ядра.
> ch:/usr/src/modules/saa7134gpd# head -n 2 Makefile
> LinuxSourcePath:=/usr/src/linux-source-2.6.26
> Стандартный пакет linux-headers не содержит всех требуемых хидеров.
> Удачи в сборке.Исходники есть, но не собирается..
debian:/usr/src/saa7134gpd# cd /usr/src/
debian:/usr/src# ls -l
итого 47608
drwxr-xr-x 21 root root 4096 Окт 25 10:55 linux-source-2.6.26
-rw-r--r-- 1 root root 48688402 Сен 16 21:00 linux-source-2.6.26.tar.bz2
drwxr-xr-x 2 root root 4096 Ноя 2 22:51 saa7134gpddebian:/usr/src# cd saa7134gpd
debian:/usr/src/saa7134gpd# make all
make -C /lib/modules/2.6.26-2-686/build M=/usr/src/saa7134gpd modules
make[1]: Entering directory `/lib/modules/2.6.26-2-686/build'
make[1]: *** Нет правила для сборки цели `modules'. Останов.
make[1]: Leaving directory `/lib/modules/2.6.26-2-686/build'
make: *** [all] Ошибка 2
debian:/usr/src/saa7134gpd#
Должен отметить, что директория /lib/modules/2.6.26-2-686/build у меня отсутсвовала. Я ее создал ради пробы вручную
> Должен отметить, что директория /lib/modules/2.6.26-2-686/build у меня отсутсвовала.
> Я ее создал ради пробы вручнуюPavelR, тяжело тебе будет довести эту затею с помощью до конца -- но за попытку конечто честные +100500
если не секрет, с чего начал изучать kernel-programming? я вот с модификации ipt_recent.
>> Должен отметить, что директория /lib/modules/2.6.26-2-686/build у меня отсутсвовала.
>> Я ее создал ради пробы вручную
> PavelR, тяжело тебе будет довести эту затею с помощью до конца --
> но за попытку конечто честные +100500
> если не секрет, с чего начал изучать kernel-programming? я вот с модификации
> ipt_recent.Мне было надо маркировать realm-ами трафик, который проходил через bridge.
Убойный патч, который делал это выглядел примерно так:
nswhost:/usr/src/modules/bridge# diff -u br_netfilter.c.orig br_netfilter.c
--- br_netfilter.c.orig 2009-12-03 09:51:21.000000000 +0600
+++ br_netfilter.c 2010-07-04 16:13:04.000000000 +0700
@@ -55,6 +55,7 @@#ifdef CONFIG_SYSCTL
static struct ctl_table_header *brnf_sysctl_header;
+static int brnf_call_iproute __read_mostly = 0;
static int brnf_call_iptables __read_mostly = 1;
static int brnf_call_ip6tables __read_mostly = 1;
static int brnf_call_arptables __read_mostly = 1;
@@ -411,6 +412,11 @@
kfree_skb(skb);
return 0;
}
+ if (brnf_call_iproute) {
+ if (!(err = ip_route_input(skb, iph->daddr, iph->saddr, iph->tos, dev))) {
+ rt->u.dst.tclassid = skb_dst(skb)->tclassid;
+ }
+ }
dst_hold(&rt->u.dst);
skb_dst_set(skb, &rt->u.dst);
}
@@ -979,6 +985,13 @@static ctl_table brnf_table[] = {
{
+ .procname = "bridge-nf-call-iproute",
+ .data = &brnf_call_iproute,
+ .maxlen = sizeof(int),
+ .mode = 0644,
+ .proc_handler = brnf_sysctl_call_tables,
+ },
+ {
.procname = "bridge-nf-call-arptables",
.data = &brnf_call_arptables,
.maxlen = sizeof(int),Всё это делалось на удаленном рабочем сервере :-) (что поделать, оборудования чтобы создать тестовую среду - фактически нет, всё "на интерес")
И было очень интересно, ставишь в кроне ребут через 5 минут "на всякий случай", загружаешь модуль, заставляешь трафик идти через него (скриптом полностью перестраивается настройка сети).
Затем врубаешь флажок bridge-nf-call-iproute и смотришь, поперло или нет :-)
Это поработало несколько месяцев, но потом отказался из-за низкой стабильности - раз в месяц штормом в сети (плоская сетка провайдера на >1000 адресов в одном огромном физическом сегменте) или чем-то еще всё это дело стабильно "перекрывало" и сеть терялась. Серв удаленный, и подиагностировать это сложновато, поэтому в результате переделано на proxyarp - он лишние пакеты не слушает, маршрутизирует пакеты "честно" и делает требуемую раскраску.Попутно была разрисована схема прохождения пакетов через вызовы, ну и т д )
Собственно, написание модуля для задачи топика - это уже не первая попытка работы с saa713х, первые попытки были когда очень хотелось заставить его цифровать звук не на 32кГц, а на 44 :-) Был найден SDK :-) Но это уж больно сложно оказалось, в результате звук цифровался внешней звуковой картой (всё это было для вещания в интернет эфирной радиостанции, мы же не сразу идем простым путем, зато интересно :).
ну а эта реализация модуля писалась практически копипастом из других модулей ядра, по образу и подобию. Параллельно руководствовался LKMPG и сайтами с LXR. Когда не понятно, как работает некий вызов - смотришь её исходник, и мал-мальски проясняются моменты, где будет выделяться память и т п )
Очень интересная вещь - это работа container_of() ...
В общем, изучение было достаточно большой частью написания и этого модуля :-)
Я вообще на С не программирую ..... ))))
> В общем, изучение было достаточно большой частью написания и этого модуля :-)значиться начал тоже с сетевой подсистемы Ж:)
> Я вообще на С не программирую ..... ))))такая-же фигня :)
а ещё для (наколенной череч printk) отладки очень помогает использование uml -- подключаеш root как hostfs -- и получаеш средства разработки в полном объёме, модуль скопировал и в uml разгрузил-загрузил, что учитывая (бывает) недоступность этой самой сети очень удобно.
смотрел кстати что xeb делает? accel-pptp? серверную часть?
> а ещё для (наколенной череч printk) отладки очень помогает использование uml --
> подключаеш root как hostfs -- и получаеш средства разработки в полном
> объёме, модуль скопировал и в uml разгрузил-загрузил, что учитывая (бывает) недоступность
> этой самой сети очень удобно.а как там в UML работу модуля тестировать ? Вообще UML не пробовал использовать никак...
> смотрел кстати что xeb делает? accel-pptp? серверную часть?
Первый раз увидел что есть accel-pptp =)
Не в курсе ли, что собираются сделать с конфликтом с модулем ip_gre ? Я так понимаю, что accel-pptp "перехыватывает" весь GRE и разделить не получилось? Как это делаться должно теоретически?
> а как там в UML работу модуля тестировать ? Вообще UML не
> пробовал использовать никак...insmod-rmmod и вывод через printk, это конечно не полноценный kgdb но для мои целей пролне подходило. это подходит только для целей которые не используют железо.
>> смотрел кстати что xeb делает? accel-pptp? серверную часть?
> Первый раз увидел что есть accel-pptp =)
> Не в курсе ли, что собираются сделать с конфликтом с модулем ip_gre
> ? Я так понимаю, что accel-pptp "перехыватывает" весь GRE и
> разделить не получилось? Как это делаться должно теоретически?насколько я ничего не понимаю, он модифицировал ванильный ip_gre для того чтобы он работал совместно с серверным accel-pptp, незнаю отправл-ли уже на kernel.org
>> а как там в UML работу модуля тестировать ? Вообще UML не
>> пробовал использовать никак...
> insmod-rmmod и вывод через printk, это конечно не полноценный kgdb но для
> мои целей пролне подходило. это подходит только для целей которые не
> используют железо.не, я про то, как туда какой-то трафик завернуть, итд чтобы проверить работу модуля?
>>> смотрел кстати что xeb делает? accel-pptp? серверную часть?
>> Первый раз увидел что есть accel-pptp =)
>> Не в курсе ли, что собираются сделать с конфликтом с модулем ip_gre
>> ? Я так понимаю, что accel-pptp "перехыватывает" весь GRE и
>> разделить не получилось? Как это делаться должно теоретически?
> насколько я ничего не понимаю, он модифицировал ванильный ip_gre для того чтобы
> он работал совместно с серверным accel-pptp, незнаю отправл-ли уже на kernel.orgОга. Посмотрел что там внутрях, всё для людей, требуемые rfc приложены в комплект :-)
Чтобы понять архитектуру взаимодействия частей системы мне нужно плотно сидеть и вкуривать что там и как =) Как гоняются данные (принимаются из GRE и выталкиваются в сетевой стк), как происходит управление...Я так понимаю, что для управления создается новый протокол и создается его сокет?
Я такую высшую математику не изучал :-)Интересно, как потоки пакетов GRE разделялись на те, которые нужны драйверу туннеля и те, которые шли в pptpd... Любопытно, может потом посмотрю )
>>> а как там в UML работу модуля тестировать ? Вообще UML не
>>> пробовал использовать никак...
>> insmod-rmmod и вывод через printk, это конечно не полноценный kgdb но для
>> мои целей пролне подходило. это подходит только для целей которые не
>> используют железо.
> не, я про то, как туда какой-то трафик завернуть, итд чтобы проверить
> работу модуля?дык tun/tap же
> Я так понимаю, что для управления создается новый протокол и создается его
> сокет?
> Я такую высшую математику не изучал :-)я так понимаю через netlink
> Интересно, как потоки пакетов GRE разделялись на те, которые нужны драйверу
> туннеля и те, которые шли в pptpd... Любопытно, может потом посмотрю
> )это не смотрел
>> не, я про то, как туда какой-то трафик завернуть, итд чтобы проверить
>> работу модуля?
> дык tun/tap жеА, ну всё ясно.
> Должен отметить, что директория /lib/modules/2.6.26-2-686/build у меня отсутсвовала.
> Я ее создал ради пробы вручнуюваапщета нужно было как минимум поставить kernel-headers
а ещё лучше получить ядро, распаковать, сделать make oldconfig и make prepare
> ваапщета нужно было как минимум поставить kernel-headers
> а ещё лучше получить ядро, распаковать, сделать make oldconfig и make prepareМужики, ну не обижайтесь. Ну не силен я программировании. И собирать модули тоже никогда не приходилось, и пакет linux-headers тоже особо не нужен был. :)
Установка Linux-headers помогла. Все собралось. Модуль установился.Экспериментирую с clientc.c. Пробую значения GPIO из первого сообщения, но пока желаемого результата - переключения каналов - не достиг. Ну это, очевидно, опять же из-за моей криворукости. :)
Обоим Павлам выражаю ОГРОМНОЕ спасибо, и в особенности - разработчику программы!
>> ваапщета нужно было как минимум поставить kernel-headers
>> а ещё лучше получить ядро, распаковать, сделать make oldconfig и make prepare
> Мужики, ну не обижайтесь. Ну не силен я программировании. И собирать модули
> тоже никогда не приходилось, и пакет linux-headers тоже особо не нужен
> был. :)
> Установка Linux-headers помогла. Все собралось. Модуль установился.
> Экспериментирую с clientc.c. Пробую значения GPIO из первого сообщения, но пока желаемого
> результата - переключения каналов - не достиг. Ну это, очевидно, опять
> же из-за моей криворукости. :)
> Обоим Павлам выражаю ОГРОМНОЕ спасибо, и в особенности - разработчику программы!Правильный чип выбери, нулевой или четвертый, задается константой имени девайса.
> Правильный чип выбери, нулевой или четвертый, задается константой имени девайса.Ну что, ребята. Чем дело кончилось? Работает?
> Правильный чип выбери, нулевой или четвертый, задается константой имени девайса.Да, я так и сделал. Добавил еще 3 константы и подкорректировал вывод чтобы выводились значения для 4х чипов сразу - чтобы была наглядная картина по всей плате.
Трудности у меня вызывает что и куда писать. Исходя из вашего сообщения в начале топика:
> Работа с выбором входа звука через GPIO-регистр:
> saa_andorl(SAA7134_GPIO_GPMODE0 >> 2, mask, mask);
> saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, mask, in->gpio);
> saa7134_track_gpio(dev,in->name);
> mask - это та gpiomask в описании карты, и она определяет, какие биты регистра мы в принципе собираемся менять.GPIOMODE0 - мы меняем маску
GPSTATUS0 - собственно само значение регистрасоответственно, я беру значения из flytest и пытаюсь сделать, к примеру
ioctl_saa_writel(fd,SAA7134_GPIO_GPMODE0 >> 2, 0x0389200)
ioctl_saa_writel(fd,SAA7134_GPIO_GPSTATUS0 >> 2, 0x0110000)
Внимательно посмотри на карту. Найди (правильно посчитай ножки!) к каким ногам подключена микросхема коммутатора. Надо отследить по плате дорожки, даже если они уходят во внутренние слои. Лучще - вызвонить.
Скажи номера ног, я посмотрю в даташит, может быть найду соответствие битов.
> Внимательно посмотри на карту. Найди (правильно посчитай ножки!) к каким ногам подключена
> микросхема коммутатора. Надо отследить по плате дорожки, даже если они уходят
> во внутренние слои. Лучще - вызвонить.
> Скажи номера ног, я посмотрю в даташит, может быть найду соответствие битов.Подключена к ногам 59 и 60. В даташите сказано что PIN 59 - GPIO20, PIN 60 - GPIO19
>[оверквотинг удален]
> Трудности у меня вызывает что и куда писать. Исходя из вашего сообщения
> в начале топика:
>> Работа с выбором входа звука через GPIO-регистр:
>> saa_andorl(SAA7134_GPIO_GPMODE0 >> 2, mask, mask);
>> saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, mask, in->gpio);
>> saa7134_track_gpio(dev,in->name);
>> mask - это та gpiomask в описании карты, и она определяет, какие биты регистра мы в принципе собираемся менять.
> GPIOMODE0 - мы меняем маску
> GPSTATUS0 - собственно само значение регистра
> соответственно, я беру значения из flytest и пытаюсь сделать, к примеруДобавь в программу вывод значения регистров до их изменения, считывая их карты.
> ioctl_saa_writel(fd,SAA7134_GPIO_GPMODE0 >> 2, 0x0389200)
> ioctl_saa_writel(fd,SAA7134_GPIO_GPSTATUS0 >> 2, 0x0110000)
> Добавь в программу вывод значения регистров до их изменения, считывая их карты.Да, я так и сделал. Для каждого чипа сначала считывает, потом меняет (тут экспериментирую со значениями) затем снова выводит результат.
>> Добавь в программу вывод значения регистров до их изменения, считывая их карты.
> Да, я так и сделал. Для каждого чипа сначала считывает, потом меняет
> (тут экспериментирую со значениями) затем снова выводит результат.ну в общем-то всё выглядит правильно. (с даташитом сам не сверял).
Показывай вывод прогона программы, и её код, на всякий случай.
> ну в общем-то всё выглядит правильно. (с даташитом сам не сверял).
> Показывай вывод прогона программы, и её код, на всякий случай.debian:/usr/src/saa7134gpd# ./client
/dev/video0gpio: ioctl_gpio: mode=0x0000000 status=0x001fc00 in=0x001fc00 out=0x0000000
/dev/video0gpio: ioctl_gpio: mode=0x0389200 status=0x0096c00 in=0x0016c00 out=0x0080000
/dev/video2gpio: ioctl_gpio: mode=0x0000000 status=0x0010000 in=0x0010000 out=0x0000000
/dev/video2gpio: ioctl_gpio: mode=0x0000000 status=0x0010000 in=0x0010000 out=0x0000000
/dev/video3gpio: ioctl_gpio: mode=0x0000000 status=0x0010000 in=0x0010000 out=0x0000000
/dev/video3gpio: ioctl_gpio: mode=0x0389200 status=0x0090000 in=0x0010000 out=0x0080000
debian:/usr/src/saa7134gpd#Первая строка для каждого устройства соответствует только что загруженному компьютеру. Никакое ПО для работы с видео не запускалось.
debian:/usr/src/saa7134gpd# cat client.c
#include "saa7134gpd-ioctl.h"#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>#include "saa7134-reg.h"
#define DEVICE_FILE_NAME1 "/dev/video0gpio"
#define DEVICE_FILE_NAME2 "/dev/video1gpio"
#define DEVICE_FILE_NAME3 "/dev/video2gpio"
#define DEVICE_FILE_NAME4 "/dev/video3gpio"void ioctl_saa_writel(int fd,__u32 addr, __u32 value)
{
struct gpd_regio msg;
int ret;
msg.addr = addr;
msg.value = value;
ret = ioctl(fd, GPD_SET_REG, &msg);
if (ret < 0) {
printf("ioctl GPD_SET_REG failed:%d\n", ret);
exit(-1);
}
}unsigned long ioctl_saa_readl(int fd, __u32 addr)
{
struct gpd_regio msg;
int ret;
msg.addr = addr;
ret = ioctl(fd, GPD_GET_REG, &msg);
if (ret < 0) {
printf("ioctl GPD_GET_REG failed:%d\n", ret);
exit(-1);
}
return msg.value;
}ioctl_print1(int fd)
{
unsigned long mode,status;
mode = ioctl_saa_readl(fd, SAA7134_GPIO_GPMODE0 >> 2) & 0xfffffff;
status = ioctl_saa_readl(fd, SAA7134_GPIO_GPSTATUS0 >> 2) & 0xfffffff;
printf("%s: ioctl_gpio: mode=0x%07lx status=0x%07lx in=0x%07lx out=0x%07lx \n",
DEVICE_FILE_NAME1, mode, status, (~mode) & status, mode & status);
}ioctl_print2(int fd)
{
unsigned long mode,status;
mode = ioctl_saa_readl(fd, SAA7134_GPIO_GPMODE0 >> 2) & 0xfffffff;
status = ioctl_saa_readl(fd, SAA7134_GPIO_GPSTATUS0 >> 2) & 0xfffffff;
printf("%s: ioctl_gpio: mode=0x%07lx status=0x%07lx in=0x%07lx out=0x%07lx \n",
DEVICE_FILE_NAME3, mode, status, (~mode) & status, mode & status);
}ioctl_print3(int fd)
{
unsigned long mode,status;
mode = ioctl_saa_readl(fd, SAA7134_GPIO_GPMODE0 >> 2) & 0xfffffff;
status = ioctl_saa_readl(fd, SAA7134_GPIO_GPSTATUS0 >> 2) & 0xfffffff;
printf("%s: ioctl_gpio: mode=0x%07lx status=0x%07lx in=0x%07lx out=0x%07lx \n",
DEVICE_FILE_NAME3, mode, status, (~mode) & status, mode & status);
}
ioctl_print4(int fd)
{
unsigned long mode,status;
mode = ioctl_saa_readl(fd, SAA7134_GPIO_GPMODE0 >> 2) & 0xfffffff;
status = ioctl_saa_readl(fd, SAA7134_GPIO_GPSTATUS0 >> 2) & 0xfffffff;
printf("%s: ioctl_gpio: mode=0x%07lx status=0x%07lx in=0x%07lx out=0x%07lx \n",
DEVICE_FILE_NAME4, mode, status, (~mode) & status, mode & status);
}/*
* Main - Call the ioctl functions
*/
main()
{
int fd, ret_val;
char *msg = "Message passed by ioctl\n";fd = open(DEVICE_FILE_NAME1, 0);
if (fd < 0) {
printf("Can't open device file: %s\n", DEVICE_FILE_NAME1);
exit(-1);
}
ioctl_print1(fd);
ioctl_saa_writel(fd,SAA7134_GPIO_GPMODE0 >> 2, 0x0389200);
ioctl_saa_writel(fd,SAA7134_GPIO_GPSTATUS0 >> 2, 0x0090000);
ioctl_print1(fd);
close(fd);fd = open(DEVICE_FILE_NAME2, 0);
if (fd < 0) {
printf("Can't open device file: %s\n", DEVICE_FILE_NAME2);
exit(-1);
}
ioctl_print2(fd);
close(fd);
fd = open(DEVICE_FILE_NAME3, 0);
if (fd < 0) {
printf("Can't open device file: %s\n", DEVICE_FILE_NAME3);
exit(-1);
}
ioctl_print3(fd);
close(fd);
fd = open(DEVICE_FILE_NAME4, 0);
if (fd < 0) {
printf("Can't open device file: %s\n", DEVICE_FILE_NAME4);
exit(-1);
}
ioctl_print4(fd);
ioctl_saa_writel(fd,SAA7134_GPIO_GPMODE0 >> 2, 0x0389200);
ioctl_saa_writel(fd,SAA7134_GPIO_GPSTATUS0 >> 2, 0x0090000);
ioctl_print4(fd);
close(fd);
//Example.
//ioctl_saa_writel(fd,SAA7134_GPIO_GPMODE0 >> 2, 0x12345678);
}
debian:/usr/src/saa7134gpd#
обнови значения регистров не в двух чипах, а во всех четырех.
> обнови значения регистров не в двух чипах, а во всех четырех.не помогло
>> обнови значения регистров не в двух чипах, а во всех четырех.
> не помогло==== не обязательная часть, как выяснено далее. ===
Для моего внутреннего успокоения, сделай и приведи вывод:
cat /dev/video0gpio
cat /dev/video1gpio
cat /dev/video2gpio
cat /dev/video3gpioдо прогона программы и после. До прогона программы лучще сделать полное отключение питания, чтобы сбросилось всё содержимое памяти.
в выводе cat должны изменяться номера устройства в квадратных скобках.
ch:/usr/src/modules/saa7134gpd# cat /dev/video0gpio
saa7133[0]: gpio: mode=0x0008000 in=0x0c04000 out=0x0000000Ну ладно, поскольку значение регистров первого девайса отличается от значений регистров второго и последующих, то этот этап, думаю, можно не делать, тут всё в порядке (со внутренним успокоением), проверять можно и не надо.
========== конец необязательной части ==
Если подумать, то считывание значений регистров дает правильный результат, сходящийся с результатами flytest (1 в 16 разряде). И даже fc для первого чипа - в наличии./dev/video0gpio: ioctl_gpio: mode=0x0000000 status=0x001fc00 in=0x001fc00 out=0x0000000
/dev/video1gpio: ioctl_gpio: mode=0x0000000 status=0x0010000 in=0x0010000 out=0x0000000
/dev/video2gpio: ioctl_gpio: mode=0x0000000 status=0x0010000 in=0x0010000 out=0x0000000
/dev/video3gpio: ioctl_gpio: mode=0x0000000 status=0x0010000 in=0x0010000 out=0x0000000Исходя из этого, считаем что регистр верный, всё хорошо....
Переходим к электронике.
Идеальным вариантом было бы увидеть часть схемы, которая отвечает за коммутацию. Подпаять проводки к выходам чипа, проверить наличие или отсутствие и изменение напряжения.
Попробуй писать 0х00190000 вместо 0x00090000...
И еще, уточни - чего не удалось достичь - коммутации входов на выход вообще, или какой-то вход на выход скоммутирован, и не удается добиться переключения.Если на плате установлена именно 74HC4052D - то это тупой переключатель, и с ним вариантов поведения нетак много.
> И еще, уточни - чего не удалось достичь - коммутации входов на
> выход вообще, или какой-то вход на выход скоммутирован, и не удается
> добиться переключения.
> Если на плате установлена именно 74HC4052D - то это тупой переключатель, и
> с ним вариантов поведения нетак много.На TV out сразу же (при включении компьютера и до загрузки ОС) присутствует сигнал с 1го канала. Т.е. он туда скоммутирован по-умолчанию.
Не удалось достичь коммутации на 2й, 3й и 4й канал соответственно.
Да, на плате установленна именно эта микросхема.
> Попробуй писать 0х00190000 вместо 0x00090000...Решил писать все значения (не только для последнего чипа) из flytest во все регистры.
Flytest дает так:
До инициализации ПО:1: Mode 0x00389200 Value 0x0001fc00
2: Mode 0x00389200 Value 0x00010000
3: Mode 0x00389200 Value 0x00010000
4: Mode 0x00389200 Value 0x00010000После:
1: Mode 0x00389c00 Value 0x00016c00 или 0x00016400 (меняется оч. быстро)
2: Mode 0x00389200 Value 0x00010000
3: Mode 0x00389200 Value 0x00010000
4: Mode 0x00389200 Value 0x00010000 | 0x00090000 | 0x00110000 | 0x00190000 (частота смены = кол-ву секунд, которое выставляется в ПО в пункте "TV out")
Непонятный (по крайней мере для меня :) ) момент. Итак: пытаюсь писать все вышеозначенное в чипы, но в контрольный (пока ПРЕДПОЛАГАЮ что в первй) - 0x00190000.
Питание сброшено, машина загружена. Имеем:debian:/usr/src/saa7134gpd# cat /dev/video0gpio
saa7130[0]: gpio: mode=0x0000000 in=0x001fc00 out=0x0000000
debian:/usr/src/saa7134gpd# cat /dev/video1gpio
saa7130[1]: gpio: mode=0x0000000 in=0x0010000 out=0x0000000
debian:/usr/src/saa7134gpd# cat /dev/video2gpio
saa7130[2]: gpio: mode=0x0000000 in=0x0010000 out=0x0000000
debian:/usr/src/saa7134gpd# cat /dev/video3gpio
saa7130[3]: gpio: mode=0x0000000 in=0x0010000 out=0x0000000
debian:/usr/src/saa7134gpd# ./client
/dev/video0gpio: ioctl_gpio: mode=0x0000000 status=0x001fc00 in=0x001fc00 out=0x0000000
/dev/video0gpio: ioctl_gpio: mode=0x0389c00 status=0x0016c00 in=0x0016000 out=0x0000c00
/dev/video2gpio: ioctl_gpio: mode=0x0000000 status=0x0010000 in=0x0010000 out=0x0000000
/dev/video2gpio: ioctl_gpio: mode=0x0389200 status=0x0010000 in=0x0010000 out=0x0000000
/dev/video2gpio: ioctl_gpio: mode=0x0000000 status=0x0010000 in=0x0010000 out=0x0000000
/dev/video2gpio: ioctl_gpio: mode=0x0389200 status=0x0010000 in=0x0010000 out=0x0000000
/dev/video3gpio: ioctl_gpio: mode=0x0000000 status=0x0010000 in=0x0010000 out=0x0000000
/dev/video3gpio: ioctl_gpio: mode=0x0389200 status=0x0190000 in=0x0010000 out=0x0180000
debian:/usr/src/saa7134gpd# cat /dev/video0gpio
saa7130[0]: gpio: mode=0x0389c00 in=0x0016000 out=0x0000c00
debian:/usr/src/saa7134gpd# cat /dev/video1gpio
saa7130[1]: gpio: mode=0x0389200 in=0x0010000 out=0x0000000
debian:/usr/src/saa7134gpd# cat /dev/video2gpio
saa7130[2]: gpio: mode=0x0389200 in=0x0010000 out=0x0000000
debian:/usr/src/saa7134gpd# cat /dev/video3gpio
saa7130[3]: gpio: mode=0x0389200 in=0x0010000 out=0x0180000
debian:/usr/src/saa7134gpd#Т.е. видим, что запись значений прошла успешно. Хотя коммутации и не произошло.
Далее, предположил, что неизвестно где первый где последний чип и решил 1й и 4й поменять местами. Т.е. теперь в первый пишу Mode 0x00389200 Value 0x00190000 а в 4й Mode 0x00389c00 Value 0x00016c00
Выкл. питание, загрузка. Имеем:
debian:/usr/src/saa7134gpd# cat /dev/video0gpio
saa7130[0]: gpio: mode=0x0000000 in=0x001fc00 out=0x0000000
debian:/usr/src/saa7134gpd# cat /dev/video1gpio
saa7130[1]: gpio: mode=0x0000000 in=0x0010000 out=0x0000000
debian:/usr/src/saa7134gpd# cat /dev/video2gpio
saa7130[2]: gpio: mode=0x0000000 in=0x0010000 out=0x0000000
debian:/usr/src/saa7134gpd# cat /dev/video3gpio
saa7130[3]: gpio: mode=0x0000000 in=0x0010000 out=0x0000000
debian:/usr/src/saa7134gpd# ./client
/dev/video0gpio: ioctl_gpio: mode=0x0000000 status=0x001fc00 in=0x001fc00 out=0x0000000
/dev/video0gpio: ioctl_gpio: mode=0x0389200 status=0x0196c00 in=0x0016c00 out=0x0180000
/dev/video2gpio: ioctl_gpio: mode=0x0000000 status=0x0010000 in=0x0010000 out=0x0000000
/dev/video2gpio: ioctl_gpio: mode=0x0389200 status=0x0010000 in=0x0010000 out=0x0000000
/dev/video2gpio: ioctl_gpio: mode=0x0000000 status=0x0010000 in=0x0010000 out=0x0000000
/dev/video2gpio: ioctl_gpio: mode=0x0389200 status=0x0010000 in=0x0010000 out=0x0000000
/dev/video3gpio: ioctl_gpio: mode=0x0000000 status=0x0010000 in=0x0010000 out=0x0000000
/dev/video3gpio: ioctl_gpio: mode=0x0389c00 status=0x0010c00 in=0x0010000 out=0x0000c00
debian:/usr/src/saa7134gpd# cat /dev/video0gpio
saa7130[0]: gpio: mode=0x0389200 in=0x0016c00 out=0x0180000
debian:/usr/src/saa7134gpd# cat /dev/video1gpio
saa7130[1]: gpio: mode=0x0389200 in=0x0010000 out=0x0000000
debian:/usr/src/saa7134gpd# cat /dev/video2gpio
saa7130[2]: gpio: mode=0x0389200 in=0x0010000 out=0x0000000
debian:/usr/src/saa7134gpd# cat /dev/video3gpio
saa7130[3]: gpio: mode=0x0389c00 in=0x0010000 out=0x0000c00Видно, что запись Mode прошла успешно, а вот status не равен тем значениям, которые задавались.
стой.
1. Исправь имя константу в ioctl_print2() на DEVICE_FILE_NAME2, а то напрягает
2. Пиши во все чипы одинаковые маски и статусы, ВО ВСЕ, В ПЕРВЫЙ, ВО ВТОРОЙ, В ТРЕТИЙ И В ЧЕТВЕРТЫЙ.
3. Исправь значение статуса.надо писать значения с 19 и 20 битом, это
ioctl_saa_writel(fd,SAA7134_GPIO_GPSTATUS0 >> 2, 0x0090000);
ioctl_saa_writel(fd,SAA7134_GPIO_GPSTATUS0 >> 2, 0x0190000);а ты пишешь что-то типа
ioctl_saa_writel(fd,SAA7134_GPIO_GPSTATUS0 >> 2, 0x0010000);
тут 19 и 20 биты выставлены в 0, какая нафиг коммутация.
> 1. Исправь имя константу в ioctl_print2() на DEVICE_FILE_NAME2, а то напрягает
> 2. Пиши во все чипы одинаковые маски и статусы, ВО ВСЕ, В
> ПЕРВЫЙ, ВО ВТОРОЙ, В ТРЕТИЙ И В ЧЕТВЕРТЫЙ.
> 3. Исправь значение статуса.
> надо писать значения с 19 и 20 битом, это
> ioctl_saa_writel(fd,SAA7134_GPIO_GPSTATUS0 >> 2, 0x0090000);
> ioctl_saa_writel(fd,SAA7134_GPIO_GPSTATUS0 >> 2, 0x0190000);
> а ты пишешь что-то типа
> ioctl_saa_writel(fd,SAA7134_GPIO_GPSTATUS0 >> 2, 0x0010000);
> тут 19 и 20 биты выставлены в 0, какая нафиг коммутация.90000 я уже писал во все регистры. 190000 сейчас попробую и отпишусь о результатах.
Мне не очень понятно как тогда должен происходить выбор канала от 1 до 4 (с помощью каких значений STATUS). Или же коммутатор просто работает по кругу, сдвигаясь на следующий канал при появлении сигнала на ножках SAA..
> тут 19 и 20 биты выставлены в 0, какая нафиг коммутация.Пишу 389200/190000 во все регистры:
debian:/usr/src/saa7134gpd# cat /dev/video0gpio
saa7130[0]: gpio: mode=0x0000000 in=0x001fc00 out=0x0000000
debian:/usr/src/saa7134gpd# cat /dev/video1gpio
saa7130[1]: gpio: mode=0x0000000 in=0x0010000 out=0x0000000
debian:/usr/src/saa7134gpd# cat /dev/video2gpio
saa7130[2]: gpio: mode=0x0000000 in=0x0010000 out=0x0000000
debian:/usr/src/saa7134gpd# cat /dev/video3gpio
saa7130[3]: gpio: mode=0x0000000 in=0x0010000 out=0x0000000
debian:/usr/src/saa7134gpd#
debian:/usr/src/saa7134gpd# ./client
/dev/video0gpio: ioctl_gpio: mode=0x0000000 status=0x001fc00 in=0x001fc00 out=0x0000000
/dev/video0gpio: ioctl_gpio: mode=0x0389200 status=0x0196c00 in=0x0016c00 out=0x0180000
/dev/video1gpio: ioctl_gpio: mode=0x0000000 status=0x0010000 in=0x0010000 out=0x0000000
/dev/video1gpio: ioctl_gpio: mode=0x0389200 status=0x0190000 in=0x0010000 out=0x0180000
/dev/video2gpio: ioctl_gpio: mode=0x0000000 status=0x0010000 in=0x0010000 out=0x0000000
/dev/video2gpio: ioctl_gpio: mode=0x0389200 status=0x0190000 in=0x0010000 out=0x0180000
/dev/video3gpio: ioctl_gpio: mode=0x0000000 status=0x0010000 in=0x0010000 out=0x0000000
/dev/video3gpio: ioctl_gpio: mode=0x0389200 status=0x0190000 in=0x0010000 out=0x0180000
debian:/usr/src/saa7134gpd#
debian:/usr/src/saa7134gpd# cat /dev/video0gpio
saa7130[0]: gpio: mode=0x0389200 in=0x0016c00 out=0x0180000
debian:/usr/src/saa7134gpd# cat /dev/video1gpio
saa7130[1]: gpio: mode=0x0389200 in=0x0010000 out=0x0180000
debian:/usr/src/saa7134gpd# cat /dev/video2gpio
saa7130[2]: gpio: mode=0x0389200 in=0x0010000 out=0x0180000
debian:/usr/src/saa7134gpd# cat /dev/video3gpio
saa7130[3]: gpio: mode=0x0389200 in=0x0010000 out=0x0180000
debian:/usr/src/saa7134gpd#
Коммутации нет :(
> Коммутации нет :(т.е. показывает всё тот же первый канал ?
>> Коммутации нет :(
> т.е. показывает всё тот же первый канал ?да
>>> Коммутации нет :(
>> т.е. показывает всё тот же первый канал ?
> дапоказывай полный dmesg после загрузки.
> показывай полный dmesg после загрузки.debian:/home/user# dmesg
[ 0.000000] Initializing cgroup subsys cpuset
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Linux version 2.6.26-2-686 (Debian 2.6.26-25) (dannf@debian.org) (gcc version 4.1.3 20080704 (prerelease) (Debian 4.1.2-25)) #1 SMP Mon Aug 30 07:01:57 UTC 2010
[ 0.000000] BIOS-provided physical RAM map:
[ 0.000000] BIOS-e820: 0000000000000000 - 000000000009fc00 (usable)
[ 0.000000] BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved)
[ 0.000000] BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
[ 0.000000] BIOS-e820: 0000000000100000 - 000000007ffec000 (usable)
[ 0.000000] BIOS-e820: 000000007ffec000 - 000000007ffef000 (ACPI data)
[ 0.000000] BIOS-e820: 000000007ffef000 - 000000007ffff000 (reserved)
[ 0.000000] BIOS-e820: 000000007ffff000 - 0000000080000000 (ACPI NVS)
[ 0.000000] BIOS-e820: 00000000fec00000 - 00000000fec01000 (reserved)
[ 0.000000] BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved)
[ 0.000000] BIOS-e820: 00000000ffff0000 - 0000000100000000 (reserved)
[ 0.000000] 1151MB HIGHMEM available.
[ 0.000000] 896MB LOWMEM available.
[ 0.000000] Entering add_active_range(0, 0, 524268) 0 entries of 256 used
[ 0.000000] Zone PFN ranges:
[ 0.000000] DMA 0 -> 4096
[ 0.000000] Normal 4096 -> 229376
[ 0.000000] HighMem 229376 -> 524268
[ 0.000000] Movable zone start PFN for each node
[ 0.000000] early_node_map[1] active PFN ranges
[ 0.000000] 0: 0 -> 524268
[ 0.000000] On node 0 totalpages: 524268
[ 0.000000] DMA zone: 32 pages used for memmap
[ 0.000000] DMA zone: 0 pages reserved
[ 0.000000] DMA zone: 4064 pages, LIFO batch:0
[ 0.000000] Normal zone: 1760 pages used for memmap
[ 0.000000] Normal zone: 223520 pages, LIFO batch:31
[ 0.000000] HighMem zone: 2304 pages used for memmap
[ 0.000000] HighMem zone: 292588 pages, LIFO batch:31
[ 0.000000] Movable zone: 0 pages used for memmap
[ 0.000000] DMI 2.3 present.
[ 0.000000] ACPI: RSDP 000F5320, 0014 (r0 ASUS )
[ 0.000000] ACPI: RSDT 7FFEC000, 0030 (r1 ASUS P4PE-X 42302E31 MSFT 31313031)
[ 0.000000] ACPI: FACP 7FFEC0C0, 0074 (r1 ASUS P4PE-X 42302E31 MSFT 31313031)
[ 0.000000] ACPI: DSDT 7FFEC134, 2A43 (r1 ASUS P4PE-X 1000 MSFT 100000B)
[ 0.000000] ACPI: FACS 7FFFF000, 0040
[ 0.000000] ACPI: BOOT 7FFEC030, 0028 (r1 ASUS P4PE-X 42302E31 MSFT 31313031)
[ 0.000000] ACPI: APIC 7FFEC058, 005A (r1 ASUS P4PE-X 42302E31 MSFT 31313031)
[ 0.000000] ACPI: PM-Timer IO Port: 0xe408
[ 0.000000] ACPI: Local APIC address 0xfee00000
[ 0.000000] ACPI: LAPIC (acpi_id[0x00] lapic_id[0x00] enabled)
[ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x00] high edge lint[0x1])
[ 0.000000] ACPI: IOAPIC (id[0x02] address[0xfec00000] gsi_base[0])
[ 0.000000] IOAPIC[0]: apic_id 2, version 32, address 0xfec00000, GSI 0-23
[ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl edge)
[ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 22 low level)
[ 0.000000] ACPI: IRQ0 used by override.
[ 0.000000] ACPI: IRQ2 used by override.
[ 0.000000] Enabling APIC mode: Flat. Using 1 I/O APICs
[ 0.000000] Using ACPI (MADT) for SMP configuration information
[ 0.000000] Allocating PCI resources starting at 88000000 (gap: 80000000:7ec00000)
[ 0.000000] PM: Registered nosave memory: 000000000009f000 - 00000000000a0000
[ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000f0000
[ 0.000000] PM: Registered nosave memory: 00000000000f0000 - 0000000000100000
[ 0.000000] SMP: Allowing 1 CPUs, 0 hotplug CPUs
[ 0.000000] PERCPU: Allocating 37992 bytes of per cpu data
[ 0.000000] NR_CPUS: 8, nr_cpu_ids: 1
[ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 520172
[ 0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-2.6.26-2-686 root=/dev/hdb1 ro quiet
[ 0.000000] mapped APIC to ffffb000 (fee00000)
[ 0.000000] mapped IOAPIC to ffffa000 (fec00000)
[ 0.000000] Enabling fast FPU save and restore... done.
[ 0.000000] Enabling unmasked SIMD FPU exception support... done.
[ 0.000000] Initializing CPU#0
[ 0.000000] PID hash table entries: 4096 (order: 12, 16384 bytes)
[ 0.000000] Detected 2004.609 MHz processor.
[ 0.004000] Console: colour VGA+ 80x25
[ 0.004000] console [tty0] enabled
[ 0.004000] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)
[ 0.004000] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)
[ 0.004000] Memory: 2069304k/2097072k available (1771k kernel code, 26560k reserved, 749k data, 244k init, 1179568k highmem)
[ 0.004000] virtual kernel memory layout:
[ 0.004000] fixmap : 0xfff4c000 - 0xfffff000 ( 716 kB)
[ 0.004000] pkmap : 0xff800000 - 0xffc00000 (4096 kB)
[ 0.004000] vmalloc : 0xf8800000 - 0xff7fe000 ( 111 MB)
[ 0.004000] lowmem : 0xc0000000 - 0xf8000000 ( 896 MB)
[ 0.004000] .init : 0xc037f000 - 0xc03bc000 ( 244 kB)
[ 0.004000] .data : 0xc02baebd - 0xc0376620 ( 749 kB)
[ 0.004000] .text : 0xc0100000 - 0xc02baebd (1771 kB)
[ 0.004000] Checking if this processor honours the WP bit even in supervisor mode...Ok.
[ 0.004000] CPA: page pool initialized 1 of 1 pages preallocated
[ 0.084124] Calibrating delay using timer specific routine.. 4014.25 BogoMIPS (lpj=8028504)
[ 0.084193] Security Framework initialized
[ 0.084206] SELinux: Disabled at boot.
[ 0.084212] Capability LSM initialized
[ 0.084240] Mount-cache hash table entries: 512
[ 0.084517] Initializing cgroup subsys ns
[ 0.084528] Initializing cgroup subsys cpuacct
[ 0.084533] Initializing cgroup subsys devices
[ 0.084580] CPU: Trace cache: 12K uops, L1 D cache: 8K
[ 0.084586] CPU: L2 cache: 128K
[ 0.084590] CPU: Hyper-Threading is disabled
[ 0.084597] Intel machine check architecture supported.
[ 0.084605] Intel machine check reporting enabled on CPU#0.
[ 0.084609] CPU0: Intel P4/Xeon Extended MCE MSRs (12) available
[ 0.084616] CPU0: Thermal monitoring enabled
[ 0.084639] Checking 'hlt' instruction... OK.
[ 0.100531] SMP alternatives: switching to UP code
[ 0.112786] Freeing SMP alternatives: 16k freed
[ 0.112797] ACPI: Core revision 20080321
[ 0.119924] ENABLING IO-APIC IRQs
[ 0.120007] ..TIMER: vector=0x31 apic1=0 pin1=2 apic2=-1 pin2=-1
[ 0.159838] CPU0: Intel(R) Celeron(R) CPU 2.00GHz stepping 07
[ 0.160010] Brought up 1 CPUs
[ 0.160010] Total of 1 processors activated (4014.25 BogoMIPS).
[ 0.160010] CPU0 attaching sched-domain:
[ 0.160010] domain 0: span 0
[ 0.160010] groups: 0
[ 0.160010] net_namespace: 660 bytes
[ 0.160010] Booting paravirtualized kernel on bare hardware
[ 0.160010] NET: Registered protocol family 16
[ 0.160010] ACPI: bus type pci registered
[ 0.162036] PCI: PCI BIOS revision 2.10 entry at 0xf1e40, last bus=3
[ 0.162041] PCI: Using configuration type 1 for base access
[ 0.162065] Setting up standard PCI resources
[ 0.176011] ACPI: EC: Look up EC in DSDT
[ 0.186585] ACPI: Interpreter enabled
[ 0.186594] ACPI: (supports S0 S1 S4 S5)
[ 0.186621] ACPI: Using IOAPIC for interrupt routing
[ 0.200647] ACPI: PCI Root Bridge [PCI0] (0000:00)
[ 0.201255] * The chipset may have PM-Timer Bug. Due to workarounds for a bug,
[ 0.201259] * this clock source is slow. If you are sure your timer does not have
[ 0.201261] * this bug, please use "acpi_pm_good" to disable the workaround
[ 0.201314] pci 0000:00:1f.0: Enabled i801 SMBus device
[ 0.201323] pci 0000:00:1f.0: quirk: region e400-e47f claimed by ICH4 ACPI/GPIO/TCO
[ 0.201329] pci 0000:00:1f.0: quirk: region ec00-ec3f claimed by ICH4 GPIO
[ 0.201794] PCI: Transparent bridge - 0000:00:1e.0
[ 0.202287] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT]
[ 0.202496] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PCI1._PRT]
[ 0.202624] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PCI2._PRT]
[ 0.207323] ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 *5 6 7 9 10 11 12 14 15)
[ 0.207498] ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 5 6 7 9 10 11 12 14 15) *0, disabled.
[ 0.207700] ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 5 6 7 *9 10 11 12 14 15)
[ 0.207893] ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 5 6 7 *9 10 11 12 14 15)
[ 0.208122] ACPI: PCI Interrupt Link [LNKE] (IRQs 3 4 5 6 7 9 *10 11 12 14 15)
[ 0.208317] ACPI: PCI Interrupt Link [LNKF] (IRQs 3 4 5 6 7 *9 10 11 12 14 15)
[ 0.208508] ACPI: PCI Interrupt Link [LNKG] (IRQs 3 4 5 6 7 *9 10 11 12 14 15)
[ 0.208700] ACPI: PCI Interrupt Link [LNKH] (IRQs 3 4 5 6 7 9 10 *11 12 14 15)
[ 0.209148] Linux Plug and Play Support v0.97 (c) Adam Belay
[ 0.209276] pnp: PnP ACPI init
[ 0.209295] ACPI: bus type pnp registered
[ 0.219703] pnp: PnP ACPI: found 15 devices
[ 0.219709] ACPI: ACPI bus type pnp unregistered
[ 0.219716] PnPBIOS: Disabled by ACPI PNP
[ 0.220883] PCI: Using ACPI for IRQ routing
[ 0.221289] ACPI: RTC can wake from S4
[ 0.221362] system 00:00: iomem range 0x0-0x9ffff could not be reserved
[ 0.221368] system 00:00: iomem range 0xf0000-0xfffff could not be reserved
[ 0.221373] system 00:00: iomem range 0x100000-0x7fffffff could not be reserved
[ 0.221378] system 00:00: iomem range 0xfec00000-0xfec000ff could not be reserved
[ 0.221382] system 00:00: iomem range 0xfee00000-0xfee00fff could not be reserved
[ 0.221396] system 00:02: ioport range 0xe400-0xe47f has been reserved
[ 0.221400] system 00:02: ioport range 0xe800-0xe81f has been reserved
[ 0.221404] system 00:02: ioport range 0xec00-0xec3f has been reserved
[ 0.221408] system 00:02: ioport range 0x4d6-0x4d6 has been reserved
[ 0.221414] system 00:02: iomem range 0xfff80000-0xffffffff could not be reserved
[ 0.221418] system 00:02: iomem range 0xffb80000-0xffbfffff has been reserved
[ 0.221430] system 00:03: ioport range 0x4d0-0x4d1 has been reserved
[ 0.221454] system 00:0e: ioport range 0x3f0-0x3f1 has been reserved
[ 0.252958] PCI: Bridge: 0000:00:01.0
[ 0.252963] IO window: disabled.
[ 0.252971] MEM window: 0xde000000-0xdfefffff
[ 0.252976] PREFETCH window: 0x00000000dff00000-0x00000000f7ffffff
[ 0.252985] PCI: Bridge: 0000:02:0a.0
[ 0.252987] IO window: disabled.
[ 0.252994] MEM window: 0xdb000000-0xdcffffff
[ 0.252999] PREFETCH window: disabled.
[ 0.253006] PCI: Bridge: 0000:00:1e.0
[ 0.253008] IO window: disabled.
[ 0.253015] MEM window: 0xdb000000-0xdd7fffff
[ 0.253020] PREFETCH window: disabled.
[ 0.253042] PCI: Setting latency timer of device 0000:00:1e.0 to 64
[ 0.253110] NET: Registered protocol family 2
[ 0.253324] IP route cache hash table entries: 32768 (order: 5, 131072 bytes)
[ 0.253880] TCP established hash table entries: 131072 (order: 8, 1048576 bytes)
[ 0.255394] TCP bind hash table entries: 65536 (order: 7, 524288 bytes)
[ 0.256207] TCP: Hash tables configured (established 131072 bind 65536)
[ 0.256216] TCP reno registered
[ 0.256456] NET: Registered protocol family 1
[ 0.256654] checking if image is initramfs... it is
[ 0.756056] Switched to high resolution mode on CPU 0
[ 0.989586] Freeing initrd memory: 6050k freed
[ 0.989918] Simple Boot Flag at 0x3a set to 0x1
[ 0.991391] audit: initializing netlink socket (disabled)
[ 0.991422] type=2000 audit(1288945006.988:1): initialized
[ 0.991777] highmem bounce pool size: 64 pages
[ 0.991792] Total HugeTLB memory allocated, 0
[ 0.991976] VFS: Disk quotas dquot_6.5.1
[ 0.992052] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
[ 0.992141] msgmni has been set to 1751
[ 0.992434] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253)
[ 0.992443] io scheduler noop registered
[ 0.992445] io scheduler anticipatory registered
[ 0.992448] io scheduler deadline registered
[ 0.992481] io scheduler cfq registered (default)
[ 0.992575] pci 0000:01:00.0: Boot video device
[ 0.993698] isapnp: Scanning for PnP cards...
[ 1.348063] isapnp: No Plug & Play device found
[ 1.358135] Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing enabled
[ 1.358372] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[ 1.358617] serial8250: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
[ 1.359614] 00:0a: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[ 1.360065] 00:0b: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
[ 1.365108] brd: module loaded
[ 1.365405] PNP: PS/2 Controller [PNP0303:PS2K] at 0x60,0x64 irq 1
[ 1.365411] PNP: PS/2 appears to have AUX port disabled, if this is incorrect please boot with i8042.nopnp
[ 1.366191] serio: i8042 KBD port at 0x60,0x64 irq 1
[ 1.366600] mice: PS/2 mouse device common for all mice
[ 1.366957] rtc_cmos 00:05: rtc core: registered rtc_cmos as rtc0
[ 1.366984] rtc0: alarms up to one month
[ 1.367116] cpuidle: using governor ladder
[ 1.367122] cpuidle: using governor menu
[ 1.367133] No iBFT detected.
[ 1.367762] TCP cubic registered
[ 1.367771] NET: Registered protocol family 17
[ 1.367785] Using IPI No-Shortcut mode
[ 1.368285] registered taskstats version 1
[ 1.368485] rtc_cmos 00:05: setting system clock to 2010-11-05 08:16:48 UTC (1288945008)
[ 1.368829] Freeing unused kernel memory: 244k freed
[ 1.386262] input: AT Translated Set 2 keyboard as /class/input/input0
[ 1.547903] ACPI: Invalid PBLK length [5]
[ 1.548235] ACPI: ACPI0007:00 is registered as cooling_device0
[ 2.509360] usbcore: registered new interface driver usbfs
[ 2.509416] usbcore: registered new interface driver hub
[ 2.509511] usbcore: registered new device driver usb
[ 2.520197] USB Universal Host Controller Interface driver v3.0
[ 2.520274] ACPI: PCI Interrupt 0000:00:1d.0[A] -> GSI 16 (level, low) -> IRQ 16
[ 2.520291] PCI: Setting latency timer of device 0000:00:1d.0 to 64
[ 2.520297] uhci_hcd 0000:00:1d.0: UHCI Host Controller
[ 2.520517] uhci_hcd 0000:00:1d.0: new USB bus registered, assigned bus number 1
[ 2.520564] uhci_hcd 0000:00:1d.0: irq 16, io base 0x0000d800
[ 2.520712] usb usb1: configuration #1 chosen from 1 choice
[ 2.520769] hub 1-0:1.0: USB hub found
[ 2.520788] hub 1-0:1.0: 2 ports detected
[ 2.603502] Uniform Multi-Platform E-IDE driver
[ 2.603513] ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx
[ 2.624266] usb usb1: New USB device found, idVendor=1d6b, idProduct=0001
[ 2.624273] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 2.624277] usb usb1: Product: UHCI Host Controller
[ 2.624280] usb usb1: Manufacturer: Linux 2.6.26-2-686 uhci_hcd
[ 2.624284] usb usb1: SerialNumber: 0000:00:1d.0
[ 2.624408] ACPI: PCI Interrupt 0000:00:1d.1[B] -> GSI 19 (level, low) -> IRQ 19
[ 2.624425] PCI: Setting latency timer of device 0000:00:1d.1 to 64
[ 2.624430] uhci_hcd 0000:00:1d.1: UHCI Host Controller
[ 2.624492] uhci_hcd 0000:00:1d.1: new USB bus registered, assigned bus number 2
[ 2.624538] uhci_hcd 0000:00:1d.1: irq 19, io base 0x0000d400
[ 2.624793] usb usb2: configuration #1 chosen from 1 choice
[ 2.624847] hub 2-0:1.0: USB hub found
[ 2.624869] hub 2-0:1.0: 2 ports detected
[ 2.728229] usb usb2: New USB device found, idVendor=1d6b, idProduct=0001
[ 2.728236] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 2.728241] usb usb2: Product: UHCI Host Controller
[ 2.728244] usb usb2: Manufacturer: Linux 2.6.26-2-686 uhci_hcd
[ 2.728247] usb usb2: SerialNumber: 0000:00:1d.1
[ 2.728341] ACPI: PCI Interrupt 0000:00:1d.2[C] -> GSI 18 (level, low) -> IRQ 18
[ 2.728357] PCI: Setting latency timer of device 0000:00:1d.2 to 64
[ 2.728363] uhci_hcd 0000:00:1d.2: UHCI Host Controller
[ 2.728425] uhci_hcd 0000:00:1d.2: new USB bus registered, assigned bus number 3
[ 2.728467] uhci_hcd 0000:00:1d.2: irq 18, io base 0x0000d000
[ 2.728608] usb usb3: configuration #1 chosen from 1 choice
[ 2.728672] hub 3-0:1.0: USB hub found
[ 2.728694] hub 3-0:1.0: 2 ports detected
[ 2.832260] usb usb3: New USB device found, idVendor=1d6b, idProduct=0001
[ 2.832267] usb usb3: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 2.832271] usb usb3: Product: UHCI Host Controller
[ 2.832274] usb usb3: Manufacturer: Linux 2.6.26-2-686 uhci_hcd
[ 2.832277] usb usb3: SerialNumber: 0000:00:1d.2
[ 2.832451] ehci_hcd 0000:00:1d.7: enabling device (0004 -> 0006)
[ 2.832464] ACPI: PCI Interrupt 0000:00:1d.7[D] -> GSI 23 (level, low) -> IRQ 23
[ 2.832488] PCI: Setting latency timer of device 0000:00:1d.7 to 64
[ 2.832494] ehci_hcd 0000:00:1d.7: EHCI Host Controller
[ 2.832559] ehci_hcd 0000:00:1d.7: new USB bus registered, assigned bus number 4
[ 2.836507] ehci_hcd 0000:00:1d.7: debug port 1
[ 2.836516] PCI: cache line size of 128 is not supported by device 0000:00:1d.7
[ 2.836539] ehci_hcd 0000:00:1d.7: irq 23, io mem 0xdd800000
[ 2.840624] Floppy drive(s): fd0 is 1.44M
[ 2.859842] FDC 0 is a post-1991 82077
[ 2.864096] usb 1-2: new low speed USB device using uhci_hcd and address 2
[ 2.876143] ehci_hcd 0000:00:1d.7: USB 2.0 started, EHCI 1.00, driver 10 Dec 2004
[ 2.876293] usb usb4: configuration #1 chosen from 1 choice
[ 2.876362] hub 4-0:1.0: USB hub found
[ 2.876381] hub 4-0:1.0: 6 ports detected
[ 2.932147] hub 1-0:1.0: unable to enumerate USB device on port 2
[ 2.980237] usb usb4: New USB device found, idVendor=1d6b, idProduct=0002
[ 2.980244] usb usb4: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 2.980248] usb usb4: Product: EHCI Host Controller
[ 2.980251] usb usb4: Manufacturer: Linux 2.6.26-2-686 ehci_hcd
[ 2.980255] usb usb4: SerialNumber: 0000:00:1d.7
[ 2.982371] ICH4: IDE controller (0x8086:0x24cb rev 0x02) at PCI slot 0000:00:1f.1
[ 2.982389] ACPI: PCI Interrupt 0000:00:1f.1[A] -> GSI 18 (level, low) -> IRQ 18
[ 2.982404] ICH4: not 100% native mode: will probe irqs later
[ 2.982422] ide0: BM-DMA at 0xf000-0xf007
[ 2.982435] ide1: BM-DMA at 0xf008-0xf00f
[ 2.982442] Probing IDE interface ide0...
[ 3.404025] usb 1-2: new low speed USB device using uhci_hcd and address 3
[ 3.492191] hdb: WDC WD800BB-75DKA0, ATA DISK drive
[ 3.548109] hdb: host max PIO4 wanted PIO255(auto-tune) selected PIO4
[ 3.549031] hdb: UDMA/100 mode selected
[ 3.549977] Probing IDE interface ide1...
[ 3.572004] usb 1-2: configuration #1 chosen from 1 choice
[ 3.572004] usb 1-2: New USB device found, idVendor=046d, idProduct=c040
[ 3.572004] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 3.572004] usb 1-2: Product: USB-PS/2 Optical Mouse
[ 3.572004] usb 1-2: Manufacturer: Logitech
[ 3.620770] usbcore: registered new interface driver hiddev
[ 3.634382] input: Logitech USB-PS/2 Optical Mouse as /class/input/input1
[ 3.634382] input,hidraw0: USB HID v1.10 Mouse [Logitech USB-PS/2 Optical Mouse] on usb-0000:00:1d.0-2
[ 3.634382] usbcore: registered new interface driver usbhid
[ 3.634382] usbhid: v2.6:USB HID core driver
[ 4.284189] hdc: _NEC DVD_RW ND-3550A, ATAPI CD/DVD-ROM drive
[ 4.956101] hdc: host max PIO4 wanted PIO255(auto-tune) selected PIO4
[ 4.956272] hdc: UDMA/33 mode selected
[ 4.956476] ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
[ 4.981500] ide1 at 0x170-0x177,0x376 on irq 15
[ 4.987268] b44 0000:02:05.0: enabling device (0004 -> 0006)
[ 4.987284] ACPI: PCI Interrupt 0000:02:05.0[A] -> GSI 20 (level, low) -> IRQ 20
[ 5.044143] ssb: Sonics Silicon Backplane found on PCI device 0000:02:05.0
[ 5.044223] b44.c:v2.0
[ 5.064512] eth0: Broadcom 44xx/47xx 10/100BaseT Ethernet 00:0c:6e:78:99:f2
[ 5.067757] No dock devices found.
[ 5.081671] SCSI subsystem initialized
[ 5.104343] libata version 3.00 loaded.
[ 5.177093] hdb: max request size: 512KiB
[ 5.181105] hdb: 156250000 sectors (80000 MB) w/2048KiB Cache, CHS=16383/255/63
[ 5.184678] hdb: cache flushes supported
[ 5.184757] hdb: hdb1 hdb2 < hdb5 hdb6 hdb7 hdb8 hdb9 hdb10 hdb11 >
[ 5.309446] hdc: ATAPI 48X DVD-ROM DVD-R CD-R/RW drive, 2048kB Cache
[ 5.309446] Uniform CD-ROM driver Revision: 3.20
[ 5.896854] PM: Starting manual resume from disk
[ 5.974294] kjournald starting. Commit interval 5 seconds
[ 5.974321] EXT3-fs: mounted filesystem with ordered data mode.
[ 7.429570] udevd version 125 started
[ 8.660372] Linux agpgart interface v0.103
[ 8.675393] pci_hotplug: PCI Hot Plug PCI Core version: 0.5
[ 8.685503] shpchp: Standard Hot Plug PCI Controller Driver version: 0.4
[ 8.697545] agpgart: Detected an Intel 830M Chipset.
[ 8.701406] agpgart: AGP aperture is 64M @ 0xf8000000
[ 8.885106] input: Power Button (FF) as /class/input/input2
[ 8.915372] ACPI: Power Button (FF) [PWRF]
[ 8.915493] input: Power Button (CM) as /class/input/input3
[ 8.940123] ACPI: Power Button (CM) [PWRB]
[ 10.185780] intel_rng: FWH not detected
[ 10.356947] ACPI: PCI Interrupt 0000:00:1f.3[B] -> GSI 17 (level, low) -> IRQ 17
[ 10.584618] input: PC Speaker as /class/input/input4
[ 11.247441] parport_pc 00:09: reported by Plug and Play ACPI
[ 11.247472] parport0: PC-style at 0x378, irq 7 [PCSPP,TRISTATE,EPP]
[ 11.376939] gameport: NS558 PnP Gameport is pnp00:0d/gameport0, io 0x200, speed 764kHz
[ 11.560998] Linux video capture interface: v2.00
[ 11.587010] saa7130/34: v4l2 driver version 0.2.14 loaded
[ 11.587083] ACPI: PCI Interrupt 0000:03:0c.0[A] -> GSI 22 (level, low) -> IRQ 22
[ 11.587097] saa7130[0]: found at 0000:03:0c.0, rev: 1, irq: 22, latency: 32, mmio: 0xdc800000
[ 11.587108] saa7130[0]: subsystem: 1131:0000, board: Asus Europa2 OEM [card=100,insmod option]
[ 11.587128] saa7130[0]: board init: gpio is 1fc00
[ 11.689224] saa7130[0]: Huh, no eeprom present (err=-5)?
[ 11.794074] saa7130[0]: registered device video0 [v4l2]
[ 11.794121] saa7130[0]: registered device vbi0
[ 11.794158] saa7130[0]: registered device radio0
[ 11.794206] ACPI: PCI Interrupt 0000:03:0d.0[A] -> GSI 23 (level, low) -> IRQ 23
[ 11.794218] saa7130[1]: found at 0000:03:0d.0, rev: 1, irq: 23, latency: 32, mmio: 0xdc000000
[ 11.794229] saa7130[1]: subsystem: 1131:0000, board: Asus Europa2 OEM [card=100,insmod option]
[ 11.794256] saa7130[1]: board init: gpio is 10000
[ 11.891491] Intel ICH 0000:00:1f.5: enabling device (0004 -> 0007)
[ 11.891502] ACPI: PCI Interrupt 0000:00:1f.5[B] -> GSI 17 (level, low) -> IRQ 17
[ 11.891544] PCI: Setting latency timer of device 0000:00:1f.5 to 64
[ 11.903335] saa7130[1]: Huh, no eeprom present (err=-5)?
[ 11.957203] saa7130[1]: registered device video1 [v4l2]
[ 11.957253] saa7130[1]: registered device vbi1
[ 11.957294] saa7130[1]: registered device radio1
[ 11.957340] ACPI: PCI Interrupt 0000:03:0e.0[A] -> GSI 20 (level, low) -> IRQ 20
[ 11.957354] saa7130[2]: found at 0000:03:0e.0, rev: 1, irq: 20, latency: 32, mmio: 0xdb800000
[ 11.957365] saa7130[2]: subsystem: 1131:0000, board: Asus Europa2 OEM [card=100,insmod option]
[ 11.957392] saa7130[2]: board init: gpio is 10000
[ 12.067283] saa7130[2]: Huh, no eeprom present (err=-5)?
[ 12.087841] saa7130[2]: registered device video2 [v4l2]
[ 12.087892] saa7130[2]: registered device vbi2
[ 12.087932] saa7130[2]: registered device radio2
[ 12.087987] ACPI: PCI Interrupt 0000:03:0f.0[A] -> GSI 21 (level, low) -> IRQ 21
[ 12.088037] saa7130[3]: found at 0000:03:0f.0, rev: 1, irq: 21, latency: 32, mmio: 0xdb000000
[ 12.088047] saa7130[3]: subsystem: 1131:0000, board: Asus Europa2 OEM [card=100,insmod option]
[ 12.088074] saa7130[3]: board init: gpio is 10000
[ 12.199321] saa7130[3]: Huh, no eeprom present (err=-5)?
[ 12.219871] saa7130[3]: registered device video3 [v4l2]
[ 12.219919] saa7130[3]: registered device vbi3
[ 12.219961] saa7130[3]: registered device radio3
[ 12.316040] intel8x0_measure_ac97_clock: measured 55897 usecs
[ 12.316046] intel8x0: clocking to 48000
[ 12.447595] tda10046: chip is not answering. Giving up.
[ 12.447707] saa7130[0]/dvb: frontend initialization failed
[ 12.448394] tda10046: chip is not answering. Giving up.
[ 12.448503] saa7130[1]/dvb: frontend initialization failed
[ 12.449149] tda10046: chip is not answering. Giving up.
[ 12.449250] saa7130[2]/dvb: frontend initialization failed
[ 12.449895] tda10046: chip is not answering. Giving up.
[ 12.449994] saa7130[3]/dvb: frontend initialization failed
[ 12.965286] Adding 2931820k swap on /dev/hdb7. Priority:-1 extents:1 across:2931820k
[ 13.266823] EXT3 FS on hdb1, internal journal
[ 13.564806] loop: module loaded
[ 14.641111] kjournald starting. Commit interval 5 seconds
[ 14.641527] EXT3 FS on hdb9, internal journal
[ 14.641537] EXT3-fs: mounted filesystem with ordered data mode.
[ 14.656891] kjournald starting. Commit interval 5 seconds
[ 14.660862] EXT3 FS on hdb8, internal journal
[ 14.660872] EXT3-fs: mounted filesystem with ordered data mode.
[ 14.706706] kjournald starting. Commit interval 5 seconds
[ 14.708334] EXT3 FS on hdb5, internal journal
[ 14.708344] EXT3-fs: mounted filesystem with ordered data mode.
[ 14.736794] kjournald starting. Commit interval 5 seconds
[ 14.740336] EXT3 FS on hdb6, internal journal
[ 14.740345] EXT3-fs: mounted filesystem with ordered data mode.
[ 19.816170] b44: eth0: Link is up at 100 Mbps, full duplex.
[ 19.816176] b44: eth0: Flow control is off for TX and off for RX.
[ 27.789068] NET: Registered protocol family 10
[ 27.789736] lo: Disabled Privacy Extensions
[ 30.497274] lp0: using parport0 (interrupt-driven).
[ 30.518937] ppdev: user-space parallel port driver
[ 38.324034] eth0: no IPv6 routers present
Смущают строки saa7130[2]/dvb: frontend initialization failed. Хотя вроде такого раньше не было. Гугление нам должно помочь..PS. wavtv и zoneminder несмотря на это работают..
> Смущают строки saa7130[2]/dvb: frontend initialization failed. Хотя вроде такого раньше
> не было. Гугление нам должно помочь..
> PS. wavtv и zoneminder несмотря на это работают..вы запутались в патчах. После определенного момента, когда вы поставили что-то новое, нумерация карт сместилась. Блин, да будь же уже внимательнее.
Мне профита никакого возиться с твоей картой, так ты хоть усилия приложи. Название карты в выводе драйвера ни на какие мысли не наводит ?
> Смущают строки saa7130[2]/dvb: frontend initialization failed. Хотя вроде такого раньше
> не было. Гугление нам должно помочь..
> PS. wavtv и zoneminder несмотря на это работают..В общем, даже не смотря на то,что номер карты выставлен не верно, всё должно работать и коммутация должна происходить.
Судя по вот этому выводу:
>debian:/usr/src/saa7134gpd# cat /dev/video0gpio
>saa7130[0]: gpio: mode=0x0389200 in=0x0016c00 out=0x0180000
>debian:/usr/src/saa7134gpd# cat /dev/video1gpio
>saa7130[1]: gpio: mode=0x0389200 in=0x0010000 out=0x0180000
>debian:/usr/src/saa7134gpd# cat /dev/video2gpio
>saa7130[2]: gpio: mode=0x0389200 in=0x0010000 out=0x0180000
>debian:/usr/src/saa7134gpd# cat /dev/video3gpio
>saa7130[3]: gpio: mode=0x0389200 in=0x0010000 out=0x0180000А в частности по значению out=0x0180000, если я не ошибаюсь в битовой арифметике :-) 19 и 20 биты выставлены, коммутатор должен переключиться.
код, выводящий значение из драйвера через cat, идентичен коду в основном модуле.
Значения регистра до применения к нему операций совпадают.
Делаем вывод, что мы работаем с правильным регистром.Почему по факту не работает - понятия не имею.
> В общем, даже не смотря на то,что номер карты выставлен не верно,
> всё должно работать и коммутация должна происходить.Действительно, номер карты был неверный. HW_504 у меня имеет № 143, а 100 - как раз та аврора, что писалась в логе. Все исправил:
[ 11.607425] Linux video capture interface: v2.00
[ 11.651122] saa7130/34: v4l2 driver version 0.2.14 loaded
[ 11.651195] ACPI: PCI Interrupt 0000:03:0c.0[A] -> GSI 22 (level, low) -> IRQ 22
[ 11.651209] saa7130[0]: found at 0000:03:0c.0, rev: 1, irq: 22, latency: 32, mmio: 0xdc800000
[ 11.651220] saa7130[0]: subsystem: 1131:0000, board: Orient HW-504 [card=143,insmod option]
[ 11.651240] saa7130[0]: board init: gpio is 1fc00
[ 11.753226] saa7130[0]: Huh, no eeprom present (err=-5)?
[ 11.861450] saa7130[0]: registered device video0 [v4l2]
[ 11.861492] saa7130[0]: registered device vbi0
[ 11.861542] ACPI: PCI Interrupt 0000:03:0d.0[A] -> GSI 23 (level, low) -> IRQ 23
[ 11.861554] saa7130[1]: found at 0000:03:0d.0, rev: 1, irq: 23, latency: 32, mmio: 0xdc000000
[ 11.861565] saa7130[1]: subsystem: 1131:0000, board: Orient HW-504 [card=143,insmod option]
[ 11.861587] saa7130[1]: board init: gpio is 10000
[ 11.931867] Intel ICH 0000:00:1f.5: enabling device (0004 -> 0007)
[ 11.931877] ACPI: PCI Interrupt 0000:00:1f.5[B] -> GSI 17 (level, low) -> IRQ 17
[ 11.931921] PCI: Setting latency timer of device 0000:00:1f.5 to 64
[ 11.971391] saa7130[1]: Huh, no eeprom present (err=-5)?
[ 11.991818] saa7130[1]: registered device video1 [v4l2]
[ 11.991860] saa7130[1]: registered device vbi1
[ 11.991908] ACPI: PCI Interrupt 0000:03:0e.0[A] -> GSI 20 (level, low) -> IRQ 20
[ 11.991922] saa7130[2]: found at 0000:03:0e.0, rev: 1, irq: 20, latency: 32, mmio: 0xdb800000
[ 11.991933] saa7130[2]: subsystem: 1131:0000, board: Orient HW-504 [card=143,insmod option]
[ 11.991961] saa7130[2]: board init: gpio is 10000
[ 12.099286] saa7130[2]: Huh, no eeprom present (err=-5)?
[ 12.119816] saa7130[2]: registered device video2 [v4l2]
[ 12.119868] saa7130[2]: registered device vbi2
[ 12.119923] ACPI: PCI Interrupt 0000:03:0f.0[A] -> GSI 21 (level, low) -> IRQ 21
[ 12.119936] saa7130[3]: found at 0000:03:0f.0, rev: 1, irq: 21, latency: 32, mmio: 0xdb000000
[ 12.119947] saa7130[3]: subsystem: 1131:0000, board: Orient HW-504 [card=143,insmod option]
[ 12.119975] saa7130[3]: board init: gpio is 10000
[ 12.231355] saa7130[3]: Huh, no eeprom present (err=-5)?
[ 12.251498] saa7130[3]: registered device video3 [v4l2]
[ 12.251550] saa7130[3]: registered device vbi3
YESSS!!! ПЕРЕКЛЮЧЕНИЕ ЗАРАБОТАЛО!!! ОГРОМНОЕ СПАСИБО PavelR за проявленное терпение и написание программы!Теперь наверно стоит сделать 4 client.c с разными параметрами и запускать по крону...
> YESSS!!! ПЕРЕКЛЮЧЕНИЕ ЗАРАБОТАЛО!!! ОГРОМНОЕ СПАСИБО PavelR за проявленное терпение и
> написание программы!Мдаа, очень интересно, почему это дело не работало с другим номером карты, ведь по идее должно было.
> Теперь наверно стоит сделать 4 client.c с разными параметрами и запускать по
> крону...Старый клиент и старый модуль ядра теоретически могут корежить состояние регистра.
(сбивать режимы, выставленные другим софтом)
Практически они его корежат, но это не заметно, поскольку другие программы этот регистр не используют никаким образом (АФАйК), точнее в модуле и в карте этот регистр особо не задействован.В идеале, надо сделать новый модуль ядра и новый клиент, хотя можно использовать и так.
====
А совсем в идеале - надо сделать как написано выше, с таймером внутри ядра.
> А совсем в идеале - надо сделать как написано выше, с таймером
> внутри ядра.Мне это точно не под силу :)
какое устройство используется для переключения ?
> какое устройство используется для переключения ?последнее, /dev/video3
> YESSS!!! ПЕРЕКЛЮЧЕНИЕ ЗАРАБОТАЛО!!! ОГРОМНОЕ СПАСИБО PavelR за проявленное терпение и
> написание программы!Приветствуются различные проявления благодарности:
WMR: R628139523591
WMZ: Z302907472448
Yandex: 4100170462624
>> YESSS!!! ПЕРЕКЛЮЧЕНИЕ ЗАРАБОТАЛО!!! ОГРОМНОЕ СПАСИБО PavelR за проявленное терпение и
>> написание программы!
> Приветствуются различные проявления благодарности:
> WMR: R628139523591
> WMZ: Z302907472448
> Yandex: 4100170462624Кошельков у меня нигде нет. Ты из Москвы? Если да то готов приличной встрече презентовать ящик моего любимого невского классического или что-то в этом роде
> Ты из Москвы? Если да то готов
> приличной встрече презентовать ящик моего любимого невского классического или что-то в
> этом родеага, из Москвы, ну прям )))) нет конечн...
Siberia. The place to live )
>> Ты из Москвы? Если да то готов
>> приличной встрече презентовать ящик моего любимого невского классического или что-то в
>> этом роде
> ага, из Москвы, ну прям )))) нет конечн...
> Siberia. The place to live )жесть. ну тогда пин-код карточки WMR думаю сойдет. Стукнись ко мне в мыло sf17 потом надо будет вставить большую собаку, например бульдога маил ру
>Видно, что запись Mode прошла успешно, а вот status не равен тем значениям, которые >задавались.Поясняю...
Статус и не должен читаться тем, который ты записываешь в него.
Моде выставляет направления регистра, ножка на чтение или ножка на запись.Соответственно, большая часть там выставлена на чтение.
Вот и читается то, что дает аппаратура.
Тебе важно чтобы читались нужные значения в тех битах, которые на запись выставлены.
Но их стирать некому =)
Так что тут проблемы не будет.
> Тебе важно чтобы читались нужные значения в тех битах, которые на запись
> выставлены.
> Но их стирать некому =)2 saska
Модуль SAA7134 (родной) скомпилирован с новым значением GPIOMASK ?
Обратите внимание, что комментарий в строке:.gpio = 0x389c00, /* битовая маска GPIO */
неверный! Заметил это, только после замечаний PavelR в начале темы... :(
2 PavelR
Общение Вашего модуля с картой идет через родной модуль или напрямую?
>> Тебе важно чтобы читались нужные значения в тех битах, которые на запись
>> выставлены.
>> Но их стирать некому =)
> 2 saska
> Модуль SAA7134 (родной) скомпилирован с новым значением GPIOMASK ?
> Обратите внимание, что комментарий в строке:
> .gpio = 0x389c00, /* битовая маска GPIO */
> неверный! Заметил это, только после замечаний PavelR в начале темы... :(Собственно говоря, это уже пофиг, поскольку вызов клиентской программы перезатрет значения регистров.
А во вторых, не такой уж он и не верный. По-моему очень даже хорошее значение =)
После трех бессонных ночей и вечера чтения даташитов, мнение несколько меняется )> 2 PavelR
> Общение Вашего модуля с картой идет через родной модуль или напрямую?=) интересный вопрос. Это еще как посмотреть, через какой модуль что идет )
Мой модуль забирает из основного модуля список карт. Список карт содержит заполненные данными структуры для каждой карты. Структура в т.ч. содержит базовые адреса каждого чипа. Используя базовые адреса определяется адрес регистра требуемого для операции чтения/записи. Далее происходит чтение/запись значения по вычисленному адресу в адресном пространстве компа. Получается, что общение идет напрямую, с использованием данных основного модуля.
> Получается, что общение идет напрямую, с использованием данных основного
> модуля.Т.е. никакие маски заданные в основном модуле на записываемые значения не влияют.
По-факту, добившись переключения каналов, надо будет корректировать программу и модуль, в направлении того, чтобы изменение значения портов происходило более мягко, не тупо записью 32 битов, а путем последовательного считывания значения, накладывая нужной маски и последующей записи - чтобы работа переключателя не конфликтовала с прочими программами и драйверами, использующими регистр.
>> Получается, что общение идет напрямую, с использованием данных основного
>> модуля.
> Т.е. никакие маски заданные в основном модуле на записываемые значения не влияют.
> По-факту, добившись переключения каналов, надо будет корректировать программу и модуль,
> в направлении того, чтобы изменение значения портов происходило более мягко, не
> тупо записью 32 битов, а путем последовательного считывания значения, накладывая нужной
> маски и последующей записи - чтобы работа переключателя не конфликтовала с
> прочими программами и драйверами, использующими регистр.Меня беспокоит, что данные, записанные основным модулем, могут "обнулить" значения нужных коммутатору бит. Как я понимаю маска тупо накладывается на записываемое значение и обнуляет "лишние" биты, на то она и маска.=) Думаю, что корректировать ее все же придется.
>[оверквотинг удален]
>> Т.е. никакие маски заданные в основном модуле на записываемые значения не влияют.
>> По-факту, добившись переключения каналов, надо будет корректировать программу и модуль,
>> в направлении того, чтобы изменение значения портов происходило более мягко, не
>> тупо записью 32 битов, а путем последовательного считывания значения, накладывая нужной
>> маски и последующей записи - чтобы работа переключателя не конфликтовала с
>> прочими программами и драйверами, использующими регистр.
> Меня беспокоит, что данные, записанные основным модулем, могут "обнулить" значения нужных
> коммутатору бит. Как я понимаю маска тупо накладывается на записываемое значение
> и обнуляет "лишние" биты, на то она и маска.=) Думаю, что
> корректировать ее все же придется.фокус маски в том, что она еще выставляет биты в регистре маски, т.е. переключает часть GPIO в режим "выход".
Кроме того, тут наоборот, эта маска, когда используется в основном модуле, ..... [skipped, падумал... :)]
Да, получается что так.
>[оверквотинг удален]
>> Т.е. никакие маски заданные в основном модуле на записываемые значения не влияют.
>> По-факту, добившись переключения каналов, надо будет корректировать программу и модуль,
>> в направлении того, чтобы изменение значения портов происходило более мягко, не
>> тупо записью 32 битов, а путем последовательного считывания значения, накладывая нужной
>> маски и последующей записи - чтобы работа переключателя не конфликтовала с
>> прочими программами и драйверами, использующими регистр.
> Меня беспокоит, что данные, записанные основным модулем, могут "обнулить" значения нужных
> коммутатору бит. Как я понимаю маска тупо накладывается на записываемое значение
> и обнуляет "лишние" биты, на то она и маска.=) Думаю, что
> корректировать ее все же придется.короче говоря, сейчас это значение не влияет, потому что инициировать его применение - некому.
Вспомогательный модуль лезет в регистры напрямую, и мешать ему некому.
Главное сейчас - добиться переключения коммутатора. Остальные феньки можно сделать чуть позже )
>> Пример gpio_chip в ядре например linux/Documentation/bt8xxgpio.txt
> Я наверно что-то не понимаю. Но там же просто распиновка соответствующей микросхемы?А чего там еще должно быть ? Сам драйвер как обычно в дереве исходников :)
linux-xx/drivers/gpio/bt8xxgpio.cРаспиновка дана очевидно для того чтобы понимать какими gpio управляешь.
> Может, кто-нибудьЭх блин, такое рубилово пропустил.... *<:-)
%-))))))