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

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) ......

linux支持三种类型的硬件,linux相关推荐

  1. Asp.net支持三种类型的cache[转]

    from:http://www.cnblogs.com/thomasnet/archive/2006/11/26/573104.html Asp.net支持三种类型的cache 想写一个技术快速概述, ...

  2. java集合框架支持三种类型,Java集合框架(一)

    集合类存放于java.util包中,集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用(reference) 集合类型主要有3种:set(集).lis ...

  3. GoAccess 支持三种类型的存储方式。请根据你的需要和系统环境进行选择

    默认哈希表 内存哈希表可以提供较好的性能,缺点是数据集的大小受限于物理内存的大小.GoAccess 默认使用内存哈希表.如果你的内存可以装下你的数据集,那么这种模式的表现非常棒.此模式具有非常好的内存 ...

  4. 从U盘运行Linux操作系统的三种方法

    摘要: 从U盘运行Linux操作系统的三种方法 usb_linux_0 你或许听说过在U盘上运行live Linux操作系统,但你知不知道可以永久的保存运行时的数据,或者直接将Linux安装到U盘?本 ...

  5. linux查看php日志命令,linux查看日志的三种命令是什么,linux查看进程命令

    linux查看日志的三种命令是什么Linux查看日志的三个命令是什么,linux查看日志有三个命令:1.查看实时更改日志,代码为[tail-f filename]:2.搜索关键字附近的日志代码为[ca ...

  6. Linux Vim三种工作模式(命令模式、输入模式和编辑模式)详解

    通过前面的学习我们知道,Linux 系统中所有的内容都以文件的形式进行存储,当在命令行下更改文件内容时,常会用到文本编辑器. 我们首选的文本编辑器是 Vim(至于为什么,可查看<Vi和Vim的区 ...

  7. 3.1 Linux 支持的文件系统类型

    第3章Linux磁盘文件管理 本章要点 v Linux 支持的文件系统类型 v Linux 系统的目录结构 v Linux 常用命令 学习要求 v 熟悉L inux 支持的文件系统类型 v 了解ext ...

  8. Linux 中三种引号(单引号、双引号、反引号)的区别

    1.双引号 保护特殊元字符和通配符不被 shell 解析,但是允许变量和命令的解析,以及转义符的解析. 2.单引号 单引号内不允许任何变量.元字符.通配符.转义符被 shell 解析,均被原样输出. ...

  9. Nacos支持三种部署模式

    Nacos支持三种部署模式 Nacos支持三种部署模式 单机模式 - 用于测试和单机试用. 集群模式 - 用于生产环境,确保高可用. 多集群模式 - 用于多数据中心场景. 单机模式下运行Nacos L ...

最新文章

  1. 新建域用户添加提示密码策略受限
  2. 1282:最大子矩阵《信息学奥赛一本通》
  3. Linux中RAID机制的实现
  4. 干货----003----乱码解决方法
  5. [COCI2009]Dvapravca
  6. springboot+Vue+java零食销售网上商城系统多商家
  7. Maven下载及安装
  8. Android裁剪图片总结
  9. 2、Docker部署的Onlyoffice中文字体修改
  10. 爬虫工具 AppCrawler
  11. Tp5设置参数全局过滤方法
  12. 批量给pdf添加目录(最完整详细方法)
  13. ADB命令连接逍遥模拟器
  14. python程序设计与基础教程第六章上机实验_《Python程序设计与算法基础教程(第二版)》江红 余青松 课后代码题详解...
  15. Fiddler的安装及配置2-2
  16. HAWQ技术解析(十一) —— 数据管理
  17. 图表嵌入到数据表格下方_如何在excel图表下方添加数据表 如何在excel图表中显示数值...
  18. @CrossOrigin Enabling CORS
  19. phpfetion.php,php 飞信2012最新可用api 接口免费分享phpfetion_PHP教程
  20. (74)项目中的亮点是什么?

热门文章

  1. 英雄联盟客户端可以打开知道选择英雄,但是进入游戏时一直客户端无响应
  2. 什么是请求参数、表单参数、url参数、header参数、Cookie参数?一文讲懂
  3. Vue2.0 Vue组件 单文件组件
  4. 2022春招、金三银四,面试官必问的1000道Java面试题及答案整理
  5. 外贸新手如何高效管理Linkedin账号
  6. 【java基础】java关键字总结及详解
  7. Q3净利润同比下降67.83% 中兴通讯和华为终成“难兄难弟”?
  8. uni-app基础知识点
  9. ssmpro-note
  10. 单例模式之饿汉、懒汉模式