linux系统编写驱动时,怎样用C语言去访问硬件

linux系统编写驱动时,怎样用C语言去访问硬件,第1张

在linux系统上编写驱动要访问硬件,首先要地址映射,因为有了linux系统后程序中所使用是地址都是虚拟地址,所以需要经过ioremap重映射后得到需要的虚拟地址,然后用ioread32和iowrite32就可以进行读写 *** 作了。如下是led的 *** 作:

int init_led_device(struct led_dev_t *l)

{

l->phys = 0x7F008000

l->virt = ioremap(l->phys, SZ_4K)

l->gpmcon = l->virt + 0x820

l->gpmdat = l->virt + 0x824

return 0

}

void led_config(struct led_dev_t *l)

{

l->reg = ioread32(l->gpmcon)

l->reg &= ~(0xf <<0)

l->reg |= (0x1 <<0)

iowrite32(l->reg, l->gpmcon)

}

GPMC即 组策略管理控制台,与windows 2000/2003 Server上传统的组策略 编辑器截然不同,由一个全新的MMC管理单元及一整套 脚本化的接口组成,提供了集中的 组策略管理方案,可以大大减少不正确的组策略可能导致的网络问题并简化组策略相关的安全问题,解决组策略部署中的难点,减轻了IT管理员们在实施 组策略时所承担的沉重包袱。

1 test -d

文件测试

test命令也可以用于检查文件的状态

-e文件存在则为真

-r 文件存在并且可读则为真

-w 文件存在并且可写则为真

-x文件存在并且可执行则为真

-s文件存在并且至少有一个字符则为真

-d文件存在并且为目录则为真

-f 文件存在并且为普通文件则为真

-c文件存在并且为字符型文件则为真

-b 文件存在并且为块特殊文件则为真

-a并且-o或者 !非

2 能为myfile1更新时间的命令____touch

3 linux中的归档解档命令____tar

4 编译是优先级的取值范围是:______,默认的优先级是____

中进程的优先极是由进程的nice值决定的,值越小,优先级越高

5 linux中标准设备文件有哪些.分别用什么符号表示.

----------------------------------------------------------------------

主设备号设备类型

次设备号=文件名 简要说明

----------------------------------------------------------------------

0 未命名设备(例如:挂载的非设备)

0 = 未空设备号保留

1 char 内存设备

1 = /dev/mem 直接存取物理内存

2 = /dev/kmem 存取经过内核虚拟之后的内存

3 = /dev/null 空设备。任何写入都将被直接丢弃,任何读取都将得到EOF。

4 = /dev/port 存取 I/O 端口

5 = /dev/zero 零字节源,只能读取到无限多的零字节。

7 = /dev/full 满设备。任何写入都将失败,并把errno设为ENOSPC以表示没有剩余空间。

8 = /dev/random 随机数发生器。完全由用户的输入来产生随机数。

如果用户停止所有动作,则停止产生新的随机数。

9 = /dev/urandom 更快,但是不够安全的随机数发生器。尽可能由用户的输入来产生随机数,

如果用户停止所有动作,则把已经产生的随机数做为种子来产生新的随机数。

10 = /dev/aio 异步 I/O 通知接口

11 = /dev/kmsg 任何对该文件的写入都将作为 printk 的输出

1 block RAM disk

0 = /dev/ram0 第1个 RAM disk (initrd只能使用ram0)

1 = /dev/ram1 第2个 RAM disk

...

200 = /dev/ram200 第200个 RAM disk

4 char TTY(终端)设备

0 = /dev/tty0 当前虚拟控制台

1 = /dev/tty1 第1个虚拟控制台

...

63 = /dev/tty63 第63个虚拟控制台

4 block 如果根文件系统以是以只读方式挂载的,那么就不可能创建真正的设备节点,

此时就使用该设备作为动态分配的主(major)设备的别名

0 = /dev/root

5 char 其他 TTY 设备

0 = /dev/tty 当前 TTY 设备

1 = /dev/console 系统控制台

2 = /dev/ptmx 所有 PTY master 的复用器

7 char 虚拟控制台捕捉设备(这些设备既允许读也允许写)

0 = /dev/vcs 当前虚拟控制台(vc)的文本内容

1 = /dev/vcs1 tty1 的文本内容

...

63 = /dev/vcs63 tty63 的文本内容

128 = /dev/vcsa 当前虚拟控制台(vc)的文本/属性内容

129 = /dev/vcsa1 tty1 的文本/属性内容

...

191 = /dev/vcsa63 tty63 的文本/属性内容代码:

7 block 回环设备(用一个普通的磁盘文件来模拟一个块设备)

对回环设备的绑定由 mount(8) 或 losetup(8) 处理

0 = /dev/loop0 第1个回环设备

1 = /dev/loop1 第2个回环设备

...

8 block SCSI 磁盘(0-15)

0 = /dev/sda 第1个 SCSI 磁盘(整个磁盘)

16 = /dev/sdb 第2个 SCSI 磁盘(整个磁盘)

32 = /dev/sdc 第3个 SCSI 磁盘(整个磁盘)

...

240 = /dev/sdp 第16个 SCSI 磁盘(整个磁盘)

分区表示方法如下(以第3个 SCSI 磁盘为例)

33 = /dev/sdc1 第1个分区

34 = /dev/sdc2 第2个分区

...

47 = /dev/sdc15 第15个分区

对于Linux/i386来说,分区1-4是主分区,5-15是逻辑分区。

9 block Metadisk(RAID)设备

0 = /dev/md0 第1组 metadisk

1 = /dev/md1 第2组 metadisk

...

metadisk 驱动用于将同一个文件系统分割到多个物理磁盘上。

10 char 非串口鼠标,各种杂项设备和特性

1 = /dev/psaux PS/2鼠标

131 = /dev/temperature 机器内部温度

134 = /dev/apm_bios APM(高级电源管理) BIOS

135 = /dev/rtc 实时时钟(Real Time Clock)

144 = /dev/nvram 非易失配置 RAM

162 = /dev/smbus 系统管理总线(System Management Bus)

164 = /dev/ipmo Intel的智能平台管理(Intelligent Platform Management)接口

173 = /dev/ipmikcs 智能平台管理(Intelligent Platform Management)接口

175 = /dev/agpgart AGP图形地址重映射表(Graphics Address Remapping Table)

182 = /dev/perfctr 性能监视计数器

183 = /dev/hwrng 通用硬件随机数发生器

184 = /dev/cpu/microcode CPU微代码更新接口

186 = /dev/atomicps 进程状态数据的原子快照

188 = /dev/smbusbios SMBus(系统管理总线) BIOS

200 = /dev/net/tun TAP/TUN 网络设备(TAP/TUN以软件的方式实现了网络设备)

TAP模拟了以太网帧(第二层),TUN模拟了IP包(第三层)。

202 = /dev/emd/ctl 增强型 Metadisk RAID (EMD) 控制器

220 = /dev/mptctl Message passing technology (MPT) control

223 = /dev/input/uinput 用户层输入设备驱动支持

227 = /dev/mcelog X86_64 Machine Check Exception driver

228 = /dev/hpet HPET driver

229 = /dev/fuse Fuse(用户空间的虚拟文件系统)

231 = /dev/snapshot 系统内存快照

232 = /dev/kvm 基于内核的虚构机(基于AMD SVM和Intel VT硬件虚拟技术)

11 block SCSI CD-ROM 设备

0 = /dev/scd0 第1个 SCSI CD-ROM

1 = /dev/scd1 第2个 SCSI CD-ROM

...代码:

13 char 核心输入设备

32 = /dev/input/mouse0 第1个鼠标

33 = /dev/input/mouse1 第2个鼠标

...

62 = /dev/input/mouse30 第31个鼠标

63 = /dev/input/mice 所有鼠标的统一

64 = /dev/input/event0 第1个事件队列

65 = /dev/input/event1 第2个事件队列

...

95 = /dev/input/event1 第32个事件队列

21 char 通用 SCSI 设备(通常是SCSI光驱)

0 = /dev/sg0 第1个通用 SCSI 设备

1 = /dev/sg1 第2个通用 SCSI 设备

...

29 char 通用帧缓冲(frame buffer)设备

0 = /dev/fb0 第1个帧缓冲设备

1 = /dev/fb1 第2个帧缓冲设备

...

31 = /dev/fb31 第32个帧缓冲设备

30 char iBCS-2 兼容设备

0 = /dev/socksys 套接字访问接口

1 = /dev/spx SVR3 本地 X 接口

32 = /dev/inet/ip 网络访问接口

33 = /dev/inet/icmp

34 = /dev/inet/ggp

35 = /dev/inet/ipip

36 = /dev/inet/tcp

37 = /dev/inet/egp

38 = /dev/inet/pup

39 = /dev/inet/udp

40 = /dev/inet/idp

41 = /dev/inet/rawip

此外,iBCS-2 还需要下面的连接必须存在

/dev/ip ->/dev/inet/ip

/dev/icmp ->/dev/inet/icmp

/dev/ggp ->/dev/inet/ggp

/dev/ipip ->/dev/inet/ipip

/dev/tcp ->/dev/inet/tcp

/dev/egp ->/dev/inet/egp

/dev/pup ->/dev/inet/pup

/dev/udp ->/dev/inet/udp

/dev/idp ->/dev/inet/idp

/dev/rawip ->/dev/inet/rawip

/dev/inet/arp ->/dev/inet/udp

/dev/inet/rip ->/dev/inet/udp

/dev/nfsd ->/dev/socksys

/dev/X0R ->/dev/null代码:

36 char Netlink 支持

0 = /dev/route 路由, 设备更新, kernel to user

3 = /dev/fwmonitor Firewall packet 复制

59 char sf 防火墙模块

0 = /dev/firewall 与 sf 内核模块通信

65 block SCSI 磁盘(16-31)

0 = /dev/sdq 第17个 SCSI 磁盘(整个磁盘)

16 = /dev/sdr 第18个 SCSI 磁盘(整个磁盘)

32 = /dev/sds 第19个 SCSI 磁盘(整个磁盘)

...

240 = /dev/sdaf 第32个 SCSI 磁盘(整个磁盘)

66 block SCSI 磁盘(32-47)

0 = /dev/sdag 第33个 SCSI 磁盘(整个磁盘)

16 = /dev/sdah 第34个 SCSI 磁盘(整个磁盘)

32 = /dev/sdai 第35个 SCSI 磁盘(整个磁盘)

...

240 = /dev/sdav 第48个 SCSI 磁盘(整个磁盘)

89 char I2C 总线接口

0 = /dev/i2c-0 第1个 I2C 适配器

1 = /dev/i2c-1 第2个 I2C 适配器

...

98 block 用户模式下的虚拟块设备(分区处理方式与 SCSI 磁盘相同)

0 = /dev/ubda 第1个用户模式块设备

16 = /dev/udbb 第2个用户模式块设备

...

103 block 审计(Audit)设备

0 = /dev/audit 审计(Audit)设备

128-135 char Unix98 PTY master

这些设备不应当存在设备节点,而应当通过 /dev/ptmx 接口访问。

136-143 char Unix98 PTY slave

这些设备节点是自动生成的(伴有适当的权限和模式),不能手动创建。

方法是通过使用适当的 mount 选项(通常是:mode=0620,gid=<"tty"组的gid>)

将 devpts 文件系统挂载到 /dev/pts 目录即可。

0 = /dev/pts/0 第1个 Unix98 PTY slave

1 = /dev/pts/1 第2个 Unix98 PTY slave

...代码:

153 block Enhanced Metadisk RAID (EMD) 存储单元(分区处理方式与 SCSI 磁盘相同)

0 = /dev/emd/0 第1个存储单元

1 = /dev/emd/0p1 第1个存储单元的第1个分区

2 = /dev/emd/0p2 第1个存储单元的第2个分区

...

15 = /dev/emd/0p15 第1个存储单元的第15个分区

16 = /dev/emd/1 第2个存储单元

32 = /dev/emd/2 第3个存储单元

...

240 = /dev/emd/15 第16个存储单元

180 char USB 字符设备

96 = /dev/usb/hiddev0 第1个USB人机界面设备(鼠标/键盘/游戏杆/手写版等人 *** 作计算机的设备)

...

111 = /dev/usb/hiddev15 第16个USB人机界面设备

180 block USB 块设备(U盘之类)

0 = /dev/uba 第1个USB 块设备

8 = /dev/ubb 第2个USB 块设备

16 = /dev/ubc 第3个USB 块设备

...

192 char 内核 profiling 接口

0 = /dev/profile Profiling 控制设备

1 = /dev/profile0 CPU 0 的 Profiling 设备

2 = /dev/profile1 CPU 1 的 Profiling 设备

...

193 char 内核事件跟踪接口

0 = /dev/trace 跟踪控制设备

1 = /dev/trace0 CPU 0 的跟踪设备

2 = /dev/trace1 CPU 1 的跟踪设备

...

195 char Nvidia 图形设备(比如显卡)

0 = /dev/nvidia0 第1个 Nvidia 卡

1 = /dev/nvidia1 第2个 Nvidia 卡

...

255 = /dev/nvidiactl Nvidia 卡控制设备

202 char 特定于CPU模式的寄存器(model-specific register,MSR)

0 = /dev/cpu/0/msr CPU 0 的 MSRs

1 = /dev/cpu/1/msr CPU 1 的 MSRs

...

203 char CPU CPUID 信息

0 = /dev/cpu/0/cpuid CPU 0 的 CPUID

1 = /dev/cpu/1/cpuid CPU 1 的 CPUID

...代码:

===================================================================

这部分详细说明一些应该或可能存在于 /dev 目录之外的文件。

链接最好使用与这里完全相同的格式(绝对路径或相对路径)。

究竟是使用硬链接(hard)还是软连接(symbolic)取决于不同的设备。

必须的链接

必须在所有的系统上都存在这些连接:

链接 目标 链接类型 简要说明

/dev/fd /proc/self/fd symbolic 文件描述府

/dev/stdin fd/0 symbolic 标准输入文件描述府

/dev/stdout fd/1 symbolic 标准输出文件描述符

/dev/stderr fd/2 symbolic 标准错误文件描述符

/dev/nfsd socksys symbolic 仅为 iBCS-2 所必须

/dev/X0R null symbolic 仅为 iBCS-2 所必须

[注意] /dev/X0R 是 <字母 X>-<数字 0>-<字母 R>

推荐的链接

推荐在所有的系统上都存在这些连接:

链接 目标 链接类型 简要说明

/dev/core /proc/kcore symbolic 为了向后兼容

/dev/ramdisk ram0 symbolic 为了向后兼容

/dev/ftape qft0 symbolic 为了向后兼容

/dev/bttv0 video0 symbolic 为了向后兼容

/dev/radio radio0 symbolic 为了向后兼容

/dev/i2o* /dev/i2o/* symbolic 为了向后兼容

/dev/scd? sr? hard 代替 SCSI CD-ROM 的名字

本地定义的链接

下面的链接很可能需要根据机器的实际硬件配置创建其中的一部分甚至全部。

这些链接仅仅是为了迎合习惯用法,它们既非必须也非推荐。

链接 目标 链接类型 简要说明

/dev/mouse mouse port symbolic 当前鼠标

/dev/tape tape device symbolic 当前磁带

/dev/cdrom CD-ROM device symbolic 当前CD-ROM

/dev/cdwriter CD-writer symbolic 当前CD-writer

/dev/scanner scanner symbolic 当前扫描仪

/dev/modem modem port symbolic 当前调制解调器

/dev/root root device symbolic 当前根文件系统所在设备

/dev/swap swap device symbolic 当前swap所在设备

/dev/modem 不应当用于能够同时支持呼入和呼出的modem,因为往往会导致锁文件问题。

如果存在 /dev/modem ,那么它应当指向一个恰当的主 TTY 设备。

对于SCSI设备,

/dev/tape 和 /dev/cdrom 应该分别指向"cooked"设备 /dev/st* 和 /dev/sr* ;

而 /dev/cdwriter 和 /dev/scanner 应当分别指向恰当的 /dev/sg* 。

/dev/mouse 可以指向一个主串行 TTY 设备、一个硬件鼠标、

或者一个对应鼠标驱动程序的套接字(例如 /dev/gpmdata)。

套接字和管道

持久套接字和命名管道可以存在于 /dev 中。常见的有:

/dev/printer socket lpd 本地套接字

/dev/log socket syslog 本地套接字

/dev/gpmdata socket gpm 鼠标多路复用器(multiplexer)

/dev/gpmctl socket (LFS-LiveCD中出现)

/dev/initctl fifo pipe init 监听它并从中获取信息(用户与 init 进程交互的通道)

挂载点

以下名称被保留用于挂载特殊的文件系统。

这些特殊的文件系统只提供内核界面而不提供标准的设备节点。

/dev/pts devpts PTY slave 文件系统

/dev/shm tmpfs 提供对 POSIX 共享内存的直接访问


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7343103.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存