分类: LINUX
2008-11-06 13:11:47
Linux驱动程序和硬件的通讯是通过一系列的内核函数来进行的,比如说:
void rmb(void);
void read_barrier_depends(void);
void wmb(void);
void mb(void);
unsigned inb(unsigned port);
void outb(unsigned char byte, unsigned port);
unsigned inw(unsigned port);
void outw(unsigned short word, unsigned
port);
unsigned inl(unsigned port);
void outl(unsigned doubleword, unsigned
port);
据我所知,在无操作系统的单片机驱动开发过程中,驱动和硬件之间的通讯是直接通过in,out完成的。
在Linux内核中,对驱动操作硬件的端口则是提供了函数操作来完成的,在驱动编写的时候能够更加规范的编写代码,不但提高了代码的可读性,也方便了移植操作。驱动开发人员在开发的时候能够更加专注的思考驱动程序的逻辑结构,而淡化对硬件层次的关注。这样一来,分工明确,对所开发驱动的硬件能够在驱动的层面上提供更好的支持,也加快了开发速度。
在文件系统的驱动中,都会定义一系列的接口,比如open,read,release的操作,在用户空间中,也可以调用这些操作进行作业的。
有人提出,Linux的驱动是独立于内核的。其实,从驱动的开发整个流程中可以看出,驱动是内核的一部分,是对内核的完善。而独立于内核这个说法,或许仅仅是指驱动可以以模块的形式加入内核吧。