Дистрибутив linux под x86 размером в 4 метра
Нуден минидиструбутив чтобы поместился в 4 мегабайта и грузился с флэшки под 86 машину (можно 32 разряда) такие вообще существуют?
Нуден минидиструбутив чтобы поместился в 4 мегабайта и грузился с флэшки под 86 машину (можно 32 разряда) такие вообще существуют?
Какие волшебные слова сказать что бы это штука смогла работать от лица рядового пользователя?
Подскажите какие волшебные слова нужно сказать в udev rules чтобы он определенному usb устройству (его ID мне известен = 064b:0225 ) назначал права на его файл /dev/bus/usb/00x/0yy равными 666, а не 664? Ну или на крайняк на все такие файлы назначить 666...
Я могу использовать свободную версию Qt статически её связав с исполняемым модулем в коммерческом проекте? (Интересна юридическая сторона, практически конечно могу все наплевав на всех...)
обработчики этих таймеров вызываются в контексте с включенными прерываниями? (Похоже что да, хочу убедиться в этом)
Сразу после загрузки системы (linux 2.6.36 + busybox 1.17.3) при подаче первых нескольких комманд одна из них подвисает на 25 сек потом все ОК. Если после запуска подождать около 3 мин то никаких тормозов. Ваши гипотезы господа!
Для того чтобы отрубить оптимизацию компилятора достаточно указать EXTRA_CFLAGS := -O0 в спецификации kbuild или нет? И как заставить kbuild показывать команды компиляции?
Что может быть плохого в таком коде:
struct my_struct
{
...
short* offset;
...
short data[SOME_LENGTH];
};
...
void some_irq_handler(int irq, void* data)
{
struct my_struct* ms;
dma_addr_t dma;
...
ms = kzalloc(sizeof(struct my_struct), GFP_ATOMIC);
if ( ms == NULL ) goto cleanup;
ms->offset = ms->data;
...
dma = dma_map_single(...., ms->offset, ..., ...);
....
}
Вся эта мура в немного более сложном виде у меня завязана на SSC + PDC (архитектура AT91). Так вот если есть строка ms->offset = ms->data то передатчик SSC via PDC начинает терять первое слово (грубо говоря первый кадр попросту пропадает) если делать не так (без этой строки) все ОК. В чем может быть ЛАЖА?
В ядре dma_pool_create, dma_alloc_coherent, dma_pool_alloc в случае провала возвращают NULL? (Хочу убедиться что я правильно понял исходники)
Никто не знает сколько надо времени ядру Linux чтобы отреагировать на прерывание, при условии что линия прерывания совместно не используется, архитектура arm, частота проца 200 МГц. Нсть способ померить сие характеристику?
Проверять на ошибки вызовы kzalloc/kmalloc и kmem_cache_alloc грамотнее сравнивая результат их работы с NULL или применять IS_ERR к результату?
При входе в обработчик системного вызова (тот что нрописан в соответсвующем поле fops) прерывания включены или все же могут быть отключены?
Посоветуйте чего можно толкового почиать (что -то типа книги что есть по svn)
Должны ли быть реентерабельными: а - обработчик системного вызова в драйвере, б - обработчик прерывания в драйвере, в случае: 1 - SMP системы (возбуждение обрабатываемого прерывания блокируется до конца его обработки только на локальном APIC или все же на глобальном APIC контроллере?), 2 - при наличии вытеснения в ядре (обработчик системного вызова может быть прерван прерыванием от аппаратуры по окончании которого может произойти переключение процессов планировщиком, т. е. реентерабельность нужна и в отсутствие SMP?)
Нужно в дерево исходных кодов с системой сборки cmake (сама сборка естественно в отдельном каталоге) интегрировать каталог с исходными кодами модуля ядра linux (к модулю есть Makefile собирающей его через KBuild). Как сделать так чтобы при сборке cmake собирал этот модуль ядра (естественно в той директории где проходит сборка)?
В функции do_mmap поясните мне приз следующее: [code=c] addr = get_unmapped_area(file, addr, len, pgoff, flags); if (addr & ~PAGE_MASK) return addr;/code] нет ведь никакой гарантии что get_unmapped_area вернет адрес выровненный по границе страницы (типа вот она:) [code=c] ... for (vma = find_vma(mm, addr); ; vma = vma->vm_next) {
if (TASK_SIZE - len < addr) { if (start_addr != TASK_UNMAPPED_BASE) { start_addr = addr = TASK_UNMAPPED_BASE; goto full_search; } return -ENOMEM; } if (!vma || addr + len <= vma->vm_start) { mm->free_area_cache = addr + len; return addr; } addr = vma->vm_end; }[/code] и никакой гарантии что этот vma->vm_end выровнен нет.
После вызова get_unmapped_area как понимать следующий код: [code=c] munmap_back: vma = find_vma_prepare(mm, addr, &prev, &rb_link, &rb_parent); if (vma && vma->vm_start < addr + len) { if (do_munmap(mm, addr, len)) return -ENOMEM; goto munmap_back; }[/code] иными словами с чего бы вдруг найденная область начала перекрываться с другими (вроде как get_unmapped_area это исключает).
Заранее спасибо за внимание.
В 32 системе с 2 Гб оперативы каково пространство линейных адресов ядра в которых работате vmalloc?
Какой объем физ памяти линейно отображается в адреса после 0xffff810000000000?
Есть способ узнать от какого сигнала был запущен слот (узнать внутри запущенного слота) или нет.
ЗЫ: Внимание - интересно именно сигнал инициатор а не его отправитель!
В следующем фрагменте кода
list_move_tail(&p->run_list, array->queue + p->prio);Кто хорошо знает С по полочкам разложите что сие код делает:
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
Больше всего меня интересует два вопроса: 1 - как понимать нуль при обращении к члену структуры (подразумевается что type есть некая структура) 2 - как блок {} может возвращать какое либо значение (или я чего не догоняю)
| ← назад | следующие → |