linux支持三种类型的硬件,linux

纪晓岚曾经说:“世间的道理与事情,都在古人的书中说尽,现在如再著述,仍然超不过古人的范围,又何必再多著述。”于是他一生之中,从不著书,只是编书--整理前人的典籍,将中国文化作系统的分类,以便于以后的学者们学习。自己的著作只有『阅微草堂笔记』一册而已。

linux设备模型也是如此,这个东西本来就是老外发明的,而且英文相关资料也足够详实明了,我在此不多赘言,只将资料整理于此。

在Linux Kernel Development(Second Edition),linux device drivers(third edition),Understanding the Linux Kernel(third edition)中都有关于linux device model的章节,其中linux device drivers(third edition)中介绍最为详实,在第十四章。[这三本可以从这里下载]

其实所有关于linux device model的文章不过乎两点,一个是关于Kobjects, Ksets,Ktype,另一个就是关于sysfs,里面会介绍它的device,bus,class等目录。在linux device drivers还有一章14.6. Putting It All Together很好,使我们更加清晰的了解一个设备 ......

linux 文件系统结构

/       根目录

/bin         常用的命令   binary   file   的目录

/boot      存放系统启动时必须读取的档案,包括核心   (kernel)   在内

/boot/grub/menu.lst       GRUB设置

/boot/vmlinuz       内核

/boot/initrd           核心解压缩所需   RAM   Disk

/dev         系统周边设备

/etc         系统相关设定文件

/etc/DIR_COLORS &nbs ......

目 录

驱动

I/O端口

from smth

基本结构

驱动程序

具体实现

PCI

loopback

Sis 900

ISA总线DMA的实现

驱动

Linux系统支持三种类型的硬件设备:字符设备、块设

< type="text/javascript">< type="text/javascript"

src="http://pagead2.googlesyndication.com/pagead/show_ads.js">

备和网络设备。字符设备是直接读取的,不必使用缓冲区。例如,系统的串行口/dev/cua0和/dev/cua1。块设备每次只能读取一定大小的块的倍

数,通常一块是512或者1024字节。块设备通过缓冲区读写,并且可以随机地读写。块设备可以通过它们的设备文件存取,但通常是通过文件系统存取。只有

块设备支持挂接的文件系统。网络设备是通过BSD套接字界面存取的。

Linux系统支持多种设备,这些设备的驱动程序之间有一些共同的特点:

* 内核代码:设备驱动程序是系统内核的一部分,所以如果驱动程序出现错误的话,将可能严重地破坏整个系统。

*

内核接口:设备驱动程序必须为系统内核或者它们的子 ......

目 录

驱动

I/O端口

from smth

基本结构

驱动程序

具体实现

PCI

loopback

Sis 900

ISA总线DMA的实现

驱动

Linux系统支持三种类型的硬件设备:字符设备、块设

< type="text/javascript">< type="text/javascript"

src="http://pagead2.googlesyndication.com/pagead/show_ads.js">

备和网络设备。字符设备是直接读取的,不必使用缓冲区。例如,系统的串行口/dev/cua0和/dev/cua1。块设备每次只能读取一定大小的块的倍

数,通常一块是512或者1024字节。块设备通过缓冲区读写,并且可以随机地读写。块设备可以通过它们的设备文件存取,但通常是通过文件系统存取。只有

块设备支持挂接的文件系统。网络设备是通过BSD套接字界面存取的。

Linux系统支持多种设备,这些设备的驱动程序之间有一些共同的特点:

* 内核代码:设备驱动程序是系统内核的一部分,所以如果驱动程序出现错误的话,将可能严重地破坏整个系统。

*

内核接口:设备驱动程序必须为系统内核或者它们的子 ......

由于这些文件不是普通的文件,所以我们不能用

ANSI C

(标准

C

)的

fopen

fclose

等来操作文件,而应该使用系统文件

I/O

处理函数(

open

read

write

lseek

close

)来处理这些设备文件。

ioctl

()或许是

Linux

下最庞杂的函数,它可以控制各种文件的属性,在

Linux

声音设备编程中,最重要的就是使用此函数正确设置必要的参数。

下面我们举两个实际的例子来说明如何实现

Linux

下的声音编程。由于此类编程涉及到系统设备的读写,所以,很多时候需要你有

root

权限,如果你将下面的例子编译后不能正确执行,那么,首先请你检查是否是因为没有操纵某个设备的权限。

1.

对内部扬声器编程

内部扬声器是控制台的一部分,所以它对应的设备文件为

/dev/console

。变量

KIOCSOUND

在头文件

/usr /include /linux /kd.h

中声明,

ioctl

函数使用它可以来控制扬声器的发声,使用规则为:

ioctl ( fd, KIOCSOUND, (int) tone);

fd

为文件设备号,

tone

是音频值。当

tone

0

时,终止发声。必须一提的是它所理解的音频和我们平常以为的音频是不同的,由于计算机主板定时器的时钟频率为 ......

3ks:http://boz8.com/house/article.aspx?aid=112

在Linux下进行C语言编程,必然要采用GNU GCC来编译C源代码生成可执行程序。

一、GCC快速入门

Gcc指令的一般格式为:Gcc [选项] 要编译的文件 [选项] [目标文件]

其中,目标文件可缺省,Gcc默认生成可执行的文件名为:编译文件.out

我们来看一下经典入门程序"Hello World!"

# vi hello.c

#include

#include

void main(void)

{

printf("hello world!\r\n");

}

用gcc编译成执行程序。

#gcc hello.c

该命令将hello.c直接生成最终二进制可执行程序a.out

这条命令隐含执行了(1)预处理、(2)汇编、(3)编译并(4)链接形成最终的二进制可执行程序。这里未指定输出文件,默认输出为a.out。

如何要指定最终二进制可执行程序名,那么用-o选项来指定名称。比如需要生成执行程序hello.exe

那么

#gcc hello.c -o hello.exe

二、GCC的命令剖析--四步走

从上面我们知道GCC编译源代码生成最终可执行的二进制程序,GCC后台隐含执行了四个阶段步骤。

GCC编译C源码有四个步骤:

预处理-----> 编译 ----> 汇编 ----> 链接

现在我们就用GCC的命令选项来逐个剖析GCC过程。

1) ......

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值