Ano, ale málokdy je to užitečné. Na 32bitových systémech x86 můžete použít ioperm(2)
systémové volání k nastavení aktuálního procesu tak, aby mohl přímo provádět port I/O. Věřím, že to nefunguje na 64bitových systémech. Můžete také udělat lseek/read/write
kombinace proti /dev/port
a myslím, že to také není příliš přenosné. Další podrobnosti najdete na http://tldp.org/HOWTO/IO-Port-Programming-2.html. Oba tyto přístupy jsou samozřejmě mnohem pomalejší a méně flexibilní než psaní ovladače zařízení (/dev/port
nejpomalejší ze všech). Žádný z mechanismů uživatelského prostoru vám samozřejmě neumožňuje zpracovávat přerušení nebo něco podobného. Pokud je problém s výkonem, skončíte psaním ovladače zařízení.
Váš odhad je správný. Jádro je jediný software, který může odesílat hardwarové požadavky. To neplatí jen pro Linux. Prakticky žádný operační systém novější než DOS vám neumožňuje přímý přístup k hardwaru, protože, jak také tušíte, je to docela nebezpečné.
Není však problém napsat si vlastní ovladač a k dispozici je spousta dokumentace. Například tento tutoriál na xatlantis se zdá být aktuálním (to je důležité!) a dobrým zdrojem.