Jump to content

    

ARM926ejs и модуль ядра для Linux 2.4.xx

Доброго всем времени суток!

 

Коллеги, помогите решить следующую проблему. Есть старое ядро 2.4.хх, есть железяка работающая на arm926ejs под управлением этого ядра. С железякой общаюсь по СОМ-порту.

Пишу модуль ядра для этой железяки, в коде модуля есть такие строчки:

 

if( sock->ops && sock->ops->ioctl ) {

old_fs = get_fs();

printk( KERN_ALERT "aaa\n" );

set_fs( KERNEL_DS );

printk( KERN_ALERT "bbb\n" );

retval = sock->ops->ioctl( ... );

set_fs( old_fs );

...

}

 

Ошибка происходит в вызове set_fs( KERNEL_DS ) железка «умирает» молча, ни kernel_panic, ни error какой-то, ничего... я вижу в гипертерминале "ааа", но не вижу "bbb", железяка ни на что не отвечает, пока ей не передернуть питание.

 

Посмотрел на переключение доменов в uaccess.h, по-моему все осмысленно (установка лимита и отключение контроля доступа в домене ядра). Единственное смущает, что KERNEL_DS (то есть по сути - лимит ) задефайнен как 0х00000000, а комментарий рядом гласит, что здесь подразумевается 0x100000000. Поэтому в ходе экспериментов пробовал значения лимитов 0xFFFFFFFF, 0xFFFFF000 и 0xFFFF0000 (естественно смотрел, чтобы был DOMAIN_MANAGER) - не помогло. Пробовал local_irq_disable()/local_irq_enable() вокруг set_fs() - тоже.

 

Одним словом, коллеги, кто сталкивался с такой проблемой посоветуйте, что делать.

 

P.S. Этот же модуль на железяках с х86 работает прекрасно.

Share this post


Link to post
Share on other sites

Кросспост запрещён правилами.

Идентичные ткмы в других ветках удалил.

Модератор

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this