Модераторы: xvr

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Тема вопросов и ответов по ядру 
:(
    Опции темы
konshyn
Дата 1.2.2015, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 19.9.2013

Репутация: нет
Всего: нет



Разбираюсь с системным таймером. Есть такое определение 
Код

#define HZ 1000

Но когда я его вывожу, то выводится значение 250
ну и переменная jiffies увеличивается на 250.
Перерыл весь каталог "../include/linux/*" grep'ом - ничего похожего на HZ = 250 не нашел, только определение в 1000.
Как так выходит?
И откуда берется тогда эта переменная?



--------------------
«Потому что ценность акта действия в этой стране возрастает в несколько раз».
PM MAIL Skype   Вверх
konshyn
Дата 2.2.2015, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 19.9.2013

Репутация: нет
Всего: нет



Не могу понять, как сделать cross компиляцию. У меня есть Makefile
Код

obj-m := hello.o
KVERSION = $(shell uname -r)
PWD = $(shell pwd)

all:
    make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules
clean:
    make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean
    

как сделать так, чтобы при опции CROSS_COMPILE (make CROSS_COMPILE=/path_to_cimpiler) у меня компилировалось под версию компилятора?


Это сообщение отредактировал(а) konshyn - 2.2.2015, 00:16


--------------------
«Потому что ценность акта действия в этой стране возрастает в несколько раз».
PM MAIL Skype   Вверх
tzirechnoy
Дата 2.2.2015, 05:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 3
Всего: 16



Чаще всего HZ берётся из CONFIG_HZ. Как Вы не нашли пяток взаимоисключающих определений -- не понимаю. rgrep 'define.*HZ' выводит достаточно интересного.

Но, по факту, во времена HPET само наличие HZ -- очень системнозависимая штука.

Добавлено через 5 минут и 20 секунд
1) Кроме CROSS_COMPILE -- надо задавать ещё и ARCH
2) CROSS_COMPILE -- это не совсем /path/to/compiler. Это префикс. То есть под путём обычно понимается полный путь, включая имя бинарника CROSS_COMPILE -- это не полный путь к gcc, это путь к gcc без слова gcc.
 Ну и, там должэн лежать не только компилер... Ну, как минимум, gcc и binutils.
А, вот, нашёл в Makefile: as, ld, gcc, ar, nm, strip, objcopy, objdump. Кстати, ничего сложного нет в том, чтобы открыть Makefile и посмотреть.
PM MAIL   Вверх
tzirechnoy
Дата 2.2.2015, 06:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 3
Всего: 16



А, ещё забыл совсем: если вопрос в передаче CROSS_COMPILE и ARCH в make -- то у make есть команда export.
PM MAIL   Вверх
konshyn
Дата 2.2.2015, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 19.9.2013

Репутация: нет
Всего: нет



Цитата(tzirechnoy @  2.2.2015,  05:59 Найти цитируемый пост)
Чаще всего HZ берётся из CONFIG_HZ. Как Вы не нашли пяток взаимоисключающих определений -- не понимаю. rgrep 'define.*HZ' выводит достаточно интересного.

Не там искал немного. 
Вы правы, есть #define CONFIG_HZ 250, но так и не нашел, где происходит переопределение самой HZ, только код
Код

#undef HZ
#define HZ 1000

С таймерами более-менее понятно. Особенно что будет, если выгрузить модуль и запущенный таймер с его обработчиком не остановить :(


Цитата(tzirechnoy @  2.2.2015,  05:59 Найти цитируемый пост)
2) CROSS_COMPILE -- это не совсем /path/to/compiler. Это префикс. То есть под путём обычно понимается полный путь, включая имя бинарника CROSS_COMPILE -- это не полный путь к gcc, это путь к gcc без слова gcc.

Да, пока разбирался, понял

Но я компилирую модуль не вручную, а через систему kbuild. 

Цитата(tzirechnoy @  2.2.2015,  05:59 Найти цитируемый пост)
А, вот, нашёл в Makefile: as, ld, gcc, ar, nm, strip, objcopy, objdump. Кстати, ничего сложного нет в том, чтобы открыть Makefile и посмотреть. 

только какой Makefile?


--------------------
«Потому что ценность акта действия в этой стране возрастает в несколько раз».
PM MAIL Skype   Вверх
tzirechnoy
Дата 2.2.2015, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 3
Всего: 16



Цитата
но так и не нашел, где происходит переопределение самой HZ,


Введите rgrep 'define *HZ' в исходниках ядра -- одна из строчек будет ответом.

Но да, оно ещё и системно-зависимое.

Цитата
только какой Makefile?


Ядра линукса.


PS И нет, я не знаю, как передать архитектуру через kbuild.
PM MAIL   Вверх
konshyn
Дата 3.2.2015, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 19.9.2013

Репутация: нет
Всего: нет



Цитата(tzirechnoy @  2.2.2015,  23:03 Найти цитируемый пост)
PS И нет, я не знаю, как передать архитектуру через kbuild. 

Я не уверен, но все работает, если я просто в Makefile пишу так $(MAKE)


Цитата(tzirechnoy @  2.2.2015,  23:03 Найти цитируемый пост)
Но да, оно ещё и системно-зависимое.

Что значит системно-зависимое? Насколько я почитал а Роберта Лава, то HZ определен везде, только на разных архитектурах по-разному, в зависимости от возможностей. И где-то есть дополнительные методы для лучшей точности таймера, счетчик тиков, например. И если посмотреть на определения функций различных таймеров, то все они требуют аргументы именно тиков - значение в будущем, при котором должен сработать таймер. Т.е. в принципе неважно, как работает таймер, т.к. высокоуровневые функции все делают за нас.


--------------------
«Потому что ценность акта действия в этой стране возрастает в несколько раз».
PM MAIL Skype   Вверх
tzirechnoy
Дата 17.2.2015, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 3
Всего: 16



Цитата
 то HZ определен везде, только 


С тех пор времена изменились, и появилась опцыя CONFIG_NO_HZ.
PM MAIL   Вверх
konshyn
Дата 3.6.2015, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 19.9.2013

Репутация: нет
Всего: нет



Пытаюсь поймать usb-клавиатуру от Logitech. (Id продукта {0xc31d})

вот код 
Код

#include <linux/module.h> 
#include <linux/init.h> 
#include <linux/usb.h> 
#include <linux/slab.h> 

MODULE_LICENSE( "GPL" ); 

static int my_usb_probe( struct usb_interface *intf, const struct usb_device_id *id ) { 
    printk("vendor = %d, product = %d\n", id->idVendor, id->idProduct); 

    return 0; 


static void my_usb_disconnect( struct usb_interface *intf ) { 


static struct usb_device_id my_usb_table[] = { 
   { USB_DEVICE( 0x046d, 0xc31d ) }, // Logitech, Inc. - keyboard k200 
   //{ USB_DEVICE( 0x0, 0x0 ) }, // Любое устройство 
   {}                           
}; 

static struct usb_driver my_usb_driver = { 
   .name = "my_usb", 
   .probe = my_usb_probe, 
   .disconnect = my_usb_disconnect, 
   .id_table = my_usb_table, 
}; 

static int __init my_init_module( void ) {  
   printk( KERN_INFO "Hello USB\n" ); 
   return usb_register( &my_usb_driver ); 


static void my_cleanup_module( void ) { 
   printk( KERN_INFO "Goodbye USB\n" ); 
   usb_deregister( &my_usb_driver ); 


module_init( my_init_module ); 
module_exit( my_cleanup_module ); 


И этот драйвер почему-то не выводит ID_VENDOR и ID_PRODUCT. Значит он не может поймать устройство.
Хотя в логах основной драйвер пишет, что клавиатура подключена и id vender и id product совпадают с теми, что я написал.

Напрашивается вопрос: че делать?smile


--------------------
«Потому что ценность акта действия в этой стране возрастает в несколько раз».
PM MAIL Skype   Вверх
konshyn
Дата 3.6.2015, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 19.9.2013

Репутация: нет
Всего: нет



Как определить, какой драйвер управляет клавиатурой?


--------------------
«Потому что ценность акта действия в этой стране возрастает в несколько раз».
PM MAIL Skype   Вверх
Olej
Дата 22.12.2016, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 30.11.2016

Репутация: нет
Всего: нет



Цитата(konshyn @ 26.1.2015,  12:36)
Суть: отдельная тема, чтобы не создавать каждый раз новую, где я, а может и другие, будут задавать общие вопросы по ядру linux (НЕ решение какой-то определенной проблемы)

Практикум по Linux Kernel 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.1750 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.