|
|
��� ������� �������� ��: English ChineseGB Deutsch Francais Italiano Russian Turkce |
����� 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> ����������:
|
������:
��������� �������� �������, �� ���������� ������. ��� ������ ������ �������� ������������ � ������ ������� 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 �����. ������� ������� ������ ������������ ���������� �����. ��� ����� ��� ����������, ������ �����, ��������� ������������ �� ����� ����� � ������ ������ ��� ���. ��� ������ ������� ��������, ��� ������ �� ������������, �� ����� ��������� ������ ��������� ��� ����� �� ��� �����������.
������ - ��������� �������� ������:
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"); }
__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);
void insw(unsigned int port, void *addr, unsigned long
count);
void outsw(unsigned int port, void *addr, unsigned long
count);
void insl(unsigned int port, void *addr, unsigned long
count);
void outsl(unsigned int port, void *addr, unsigned long
count);
|
Webpages maintained by the LinuxFocus Editor team
© Dr. B.Thangaraju, FDL LinuxFocus.org |
Translation information:
|
2002-11-16, generated by lfparser version 2.31