From: Sergey Vlasov <vsu@mivlgu.murom.ru> To: devel@altlinux.ru Cc: hihin@rambler.ru, smi@altlinux.ru Subject: Re: [devel] Агат Date: Fri, 22 Feb 2002 19:33:51 +0300 Message-ID: <20020222193351.2328e7b8.vsu@mivlgu.murom.ru> (raw) In-Reply-To: <1012136912.20020220040338@rambler.ru> On Wed, 20 Feb 2002 04:03:38 +0300 hihin_rambler <hihin@rambler.ru> wrote: > У нас на "Агате" накопилось к Вам несколько вопросов: > > По разработке драйверов нестандартных устройств: > > 1. Возможность работы с ПДП в Linux (МСВС). > Существует устройство, ведущее обмен информацией по прямому доступу. > Для передачи / приема информации надо указать устройству 24х-разрядный > адрес (ISA) из области памяти (для контроллера прямого доступа). > ВОПРОС: Как преобразовать 32х-разрядный адрес выделенной памяти к > необходимому виду или как выделить память, находящуюся в границах > 24 разрядов? Будет ли этот адрес постоянным в процессе работы? > Как это сделать на уровне ядра и на уровне пользователя? char *buffer = kmalloc (size, GFP_KERNEL | GFP_DMA) unsigned long buffer_phys = virt_to_bus (buffer); Физические адреса такого блока фиксируются в момент выделения и в дальнейшем не меняются. На пользовательском уровне это не делается - только через написание драйвера для ядра. > 2.Обработка аппаратных прерываний. > Если прерывания обрабатываются на уровне ядра,как организовать > синхронную передачу информации в пользовательский процесс? Что такое "синхронная передача" в Вашем понимании? Если Вы хотите обрабатывать прерывания в пользовательском процессе - это невозможно. Обработчик прерывания в ядре может активизировать процесс, находящийся в состоянии ожидания, но это не означает, что этот процесс начнет немедленно выполняться. Поэтому в любом случае необходима буферизация на уровне ядра. Стандартный подход следующий: процесс выполняет системный вызов (read или ioctl), запрашивая данные. Если в этот момент есть готовые данные, они копируются в буфер пользовательского процесса, и выполнение системного вызова завершается. Если данные не готовы - в зависимости от состояния флага O_NONBLOCK либо процессу немедленно возвращается ошибка EAGAIN, либо процесс переводится в состояние ожидания до поступления данных (либо прихода сигнала). Кроме того, процесс может проверять готовность с помощью системных вызовов select или poll. Наконец, можно установить O_ASYNC и получать сигнал при готовности устройства. Разумеется, для всего этого должна быть соответствующая поддержка в драйвере.
next prev parent reply other threads:[~2002-02-22 16:33 UTC|newest] Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top 2002-02-20 1:03 hihin_rambler 2002-02-22 16:33 ` Sergey Vlasov [this message] 2002-02-22 22:47 ` [devel] Re[2]: " hihin_rambler
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20020222193351.2328e7b8.vsu@mivlgu.murom.ru \ --to=vsu@mivlgu.murom.ru \ --cc=devel@altlinux.ru \ --cc=hihin@rambler.ru \ --cc=smi@altlinux.ru \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
ALT Linux Team development discussions This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \ devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru public-inbox-index devel Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.devel AGPL code for this site: git clone https://public-inbox.org/public-inbox.git