[LinuxFocus-icon]
�����  |  �����  |  ������  |  �����

������� | ������ | ������ | ��� LF
��� ������� �������� ��: English  ChineseGB  Deutsch  Francais  Italiano  Russian  Turkce  

[Photo of the Author]
����� Dr. B.Thangaraju
<balasubramanian.thangaraju(at)wipro.com>

�� ������:
Dr. B. Thangaraju ������� ������ ��������� ������ � ������������ Bharathidasan � 5 ��� ��������� �������������� � ��������� �������� ����. B. Thangaraju ����������� ����� 10 ������� ������ � ������������� ��������. �� ����������� ���� ����������������� ������ ����� ��� �� 7 ������������� � ������������ ������������

� ��������� ����� �� �������� ���������� � Talent Transformation, Wipro Technologies, � �����. ���������� ��������������, ��������� � ��������������� ������ � ������� Linux Kernel, Device Drivers (�������� ���������) and Real Time Linux.

������� �� �������:
kira <kirunchik(at)tut.by>

����������:

 

��������� ������ ��� ��������� � Linux

[Illustration]

������:

��������� �������� �������, �� ���������� ������. ��� ������ ������ �������� ������������ � ������ ������� init_module(), ������ ���� �������� ������� ��� ������� ������������. ����� �� �������� �������� ������������ �������� I/O port (���� �����/������). ����������� ������ ���� ������������ ��� �������� ��������� ������ ��� ������ ������������. ������ �����, �������� ���������� ��������� �����: ������������ �� ��� ���� ��������, ������ ����� ����� ���������� ��������� ������ ��� ������������. ����� ������ ��������� �� �������, ����� ������ ���� �����������. ��� ������ ��������� ��������� ����������� ��������� ������ ��� ��������� � �������.

_________________ _________________ _________________

 

��������

�������� ���� ������������ ��������� - ��������� �������� ��� ���������, ����� ��� I/O �����, ������ � ����������. ��� ������ �������� ��������� ������ ������������� �����-������ � �������� ��������� ��������, �������� I/O ������. ��� ����� ����������, ��� ����������, ���������� � ����������� ������ ������ ��� ���������.

�������� �������� ���������� ����� ���������� ����� ��� �����, ���� � ���������� ���������, ������ � ������ ������������� ��������� �����-������. �������� ������������ ����� ������������� ��������� ������� � ����������� ��� ���������� �����-������, ����� ��� ��������� ������ ������ ����������� ����������� ������� ���������� � ������������ ������. ���������� ��������� ��������� ������������ � ����������, ��������, �������� ����������, ����� ��� �����, ��������� ����������, CD-ROM � ��������� , ���������� �����-������: ����������, �����, �������, ���������� ������ �����������: ������� ����� � ������. �������� �� ������� ���������� ��������� ���������, ���������� ������ ������ ��������� �������� ��������� ����, ��� ��������������� ���������� � ��� ��� �������������� ����������� ������������.

 

�������� ��������

���������� ������� �� ���� ������: ������������� (��������� ����������) � ������������. ��������� ������ � �������� ����� ��������� ����. ������, ������� ���������� ���������� ���������� (�� ������������� � �������) �������� ������, ������� ������� �� ������� ������� ���������. ��� ������� ������� (status), �������� (control),����� ������ (data-in) � ������ ������ (data-out). ���� �������� ���� �� �������� �������, ���������� ��������� �� ���������� ������� �������, ���� ���������� ���������� � ������, ������, ��� ���������� ��� ������. ������� �������� ������ ��� �������� ������ ��� ��������� ������ ������ ����������. �������� �����-������ ������������ ��� �������� ������.

����� �������, �������� ����������� ������� ����� ����������� � ����������� ������ ����� ��������� �������� � �������. ����� ��������� ��������� ��������� � �������� ���������� ��������� � �����������, �� �� ��������� ��������� ������� ���������������� ����������. ��������� ������������ ��������� ����������� �������� � �������� ��������������� ���� � ������ ��������, � ����� ����. �������� ���������� �������� ������������� �������� ������� ����������, ���� �� �� ��������� ���������� ���������� �������. ��������, ������� ������������� ����� (������������� ���������) ������ ��������� ����� �� ������� ������� ����� (�� ������) � ���� ������� �� ����� , �� ������� �������� ���� ������ ����� �����-�� ����� (�� ������� ��������� ����� ���������� ������� ��������� ��������) � ��� �� ���� ������� ����� ������� ����� �����. ���� �������� �������� �������������� �������, �.� � ��������� ������ ������� ���� ���������� ���������� �� ��������� ������ �������� �������.

�������� ����� ����� ������������ ������ � ������� �����-������. � �������� ��� ������ ������������� �� ����� �������� �������, ��������� ��� ���� ����� ���������� ������������ � ����� ������������. ����� ������� ������ ���� ������ ��� ������� ����������, ��� �� ����������� �����������. ��� ������, ��� ������ �������� �������� ��� ������������ ���������, I/O ����� ���������� ��� ��������� ������ ��������� � ���������� proc. ���������� �� ������� ������������ � ������ ������ ����� �������� � ������� ������� $cat /proc/interrupts. ������ ������� ����� ������ ���������� ����� ������, � ������ - ���������� ������������ ��. � ��������� ������������ �������� ���� ����������� �������� ������� ��������� �����������, �.� ����� ������� ��������. ����� �������, ����� ����� ���������� ����� ���������� � ��� ���������� ������� � ��������������, � ��� �� �������� � ������ � ����, � ������� ����������� ������������� ������ ��������.

������� �������� ���������� �������� ����������, ��� ������ ������� ������������ �����������, ������� �������� �� ����������, �.� ������� ��������������� ������ � ����������� ������������� ����������. ������ ������� ��������� ����� ����������� (���������� ��� �������) ��� �����. ��� ������� ����������� ������������� ���������� ������ ���������� � ���������������� ��������. ������� � ���� ������� �������� ������� ����������. ������� ���������� - ����� �������, ����� ��� open, close, read, write, ioctl, llseek � �.�. ����� �� ����������� ������, �� ���������� ������� init_module( ), ����� �������� ������, ���������� ������� cleanup_module( ).

����� ���������� ���������������� � ������ init_module( ), ��� ���������� ����� �������� ���������� ������� ����� ��� I/O �����, ������ � ����������, ����������� �������� ��� ���������� ������. ��� �������� ������������� ������ � ������ ��� ������� ����������, ������ ������ ������ segmentation fault. �� � ������ I/O ������, ������ �� ������ ������� ������ ���� wrong I/O port, ������ ��������� � ��� ��������������� �����, �������������� ������-���� ����������, ������� ���� �������. ��� �������� ������, ���� ������� � ����������, �.� ���������� major number � ������� �������� cleanup_module( ).

�������� ������ ��������� ��������� ����������� � ������ � ������ � I/O �����. ������� ������� ������ ������������ ���������� �����. ��� ����� ��� ����������, ������ �����, ��������� ������������ �� ����� ����� � ������ ������ ��� ���. ��� ������ ������� ��������, ��� ������ �� ������������, �� ����� ��������� ������ ��������� ��� ����� �� ��� �����������.

 

��������� ������

������ �� ����������, ��� �������� � ���������� ������� � ������� ������� �������. ������ ������ ��� ���������� �� Linux 2.4 kernel, �� �������� ������ � ������ ������� Linux � Unix ������.

������ - ��������� �������� ������:

int check_region (unsigned long start, unsigned long len);

���������� �������� ������ 0, ���� ����� ������ ��������, ��� ������ 0 ��� ��� ������ ( -EBUSY ��� -EINVAL) ���� �������� ��� ������������. ������� ���������� ��� ���������: start ������ ������������ ��������� � len - ���������� ������.

���� ���� ��������, �� ����� ���� ��������� �� ����������� �������� request_region.

struct resource *request_region (unsigned long start, unsigned long len, char *name);

������ ��� ��������� ����� �� ��� � ���������� ������� �������� name - ��� ����������, ������� ���� ������� � ������. ������� ���������� ��������� �� ���������, ������� ��� �������� �������� ����������. ��������� ������� � <linux/ioport.h>. ��� ����� ��������� ������:

struct resource {
        const char *name;
        unsigned long start, end;
        unsigned long flags;
        struct resource *parent, *sibiling, *child;
};
����� ������ ��������� �� ������� ����� ������� ����������, �������������� ��� � ������� ������� release_region ( ) � cleanup_module ( ). ��������� ������� ���������:

void release_region ( unsigned long start, unsigned long len);

���������� ���� ���������� ��������� ����������. ��� ������� ��������� ���� �� ����� ���� ������� ��������� � <linux/ioport.h>.  

������

������ ��������� �������� �������� ��������� � ������������ ������ ��� ����������� ������������ ���������.
#include <linux/fs.h.>
#include <linux/ioport.h.>

struct file_operations fops;
unsigned long start, len;

int init_module (void)
{
 int status;
 start = 0xff90;
 len   = 0x90;

 register_chrdev(254,"���� ����������",&fops);

 status =  check_region (start, len);
 if (status == 0) {
     printk ("�������� ����� � ���������.\n");
     request_region(start,len,"���� ����������");
 } else {
     printk ("����� ��� ������������. ���������� ������ ��������.\n");
     return (status);
 }
 return 0;
}

void cleanup_module (void)
{
 release_region(start, len);
 printk (" ����� ����������� ������\n");
 unregister_chrdev(254,"���� ����������");}
 printk (" ���� ���������� �������\n");
}

��� �������� � ���� ������� ��������� �������� ������. ����� ����� �������� ��� ����� ��������� �������� :
$cat /proc/ioports  

������� ������� ��� ������ � I/O �������

� Linux ���� ��������� ������� ��� ������ � ������ I/O ������. ����� ����� ���� 8, 16 or 32 ������ �����������. ������������ ���� <asm/io.h> ���������� ������� ������� � ������ �����-������. ��� ������ (inx) � ������(outx) 8, 16 � 32 ������ ������ ���������� ��������� �������:



__u8 inb (unsigned int port);
void outb (__u8 data, unsigned int port);

__u16 inw (unsigned int port);
void outw(__u16 data, unsigned int port);

__u32 inl (unsigned int prot);
void outl (__u32 data, unsigned int port);


��� �������� ������ ����� �����, ������������ ��������� �������:


void insb(unsigned int port, void *addr, unsigned long count);
void outsb(unsigned int port, void *addr, unsigned long count);


addr ����� ������ �� �������� ��� � ������� ���������� ������, count - ���������� �������� ��� ��������. ������ �������� ��� ������������ � ������������ "port".


void insw(unsigned int port, void *addr, unsigned long count);
void outsw(unsigned int port, void *addr, unsigned long count);

������ ��� ������ 16 ������ �������� � 16 ������ ����.


void insl(unsigned int port, void *addr, unsigned long count);
void outsl(unsigned int port, void *addr, unsigned long count);

������ ��� ������ 32 ������ �������� � 32 ������ ����.  

�������������

����� ���������� Mr. Jayasurya V, ��������� Wipro Technologies, �� �������.  

������

 

�������� �������

� ������ ������� ���� �������� �������. �� ���� �������� �� ������ �������� ���� ����������� ��� ����������� ����������� ������ ��������� :
 talkback page 

Webpages maintained by the LinuxFocus Editor team
© Dr. B.Thangaraju, FDL
LinuxFocus.org
Translation information:
en --> -- : Dr. B.Thangaraju <balasubramanian.thangaraju(at)wipro.com>
en --> ru: kira <kirunchik(at)tut.by>

2002-11-16, generated by lfparser version 2.31