谷动谷力

 找回密码
 立即注册
查看: 1225|回复: 0
收起左侧

Linux开发笔记--驱动开发之ioctl

[复制链接]
发表于 2022-11-23 23:07:48 | 显示全部楼层 |阅读模式
Linux开发笔记--驱动开发之ioctl
: a7 Z1 A6 ^0 _( }* w. h$ I
- J6 k1 I! [* t9 S6 `/ L+ U! p1 A% v# ~6 z" t% N
驱动数据传递2 a. x/ K' i/ k

! H, G2 V: F& Z( {( fcopy_from_user   == write()* C  x% o! K" [3 `+ e& D& L
copy_to_user     === read()1 I+ V/ Q% S/ Y* i

3 b1 @; _# R/ u' S4 X' Xioctl 高级控制接口/ A" g3 O# I3 \: S

; R2 G7 F2 M' t# \5 e. u除了读写之外,设置功能比如设置波特率,数据位,校验# @! Y; Q1 A, {  u
方向性:2 d  m+ K- Y- @% S6 T* _' O
        无方向,0 R3 S- x3 {* S5 @, N, ^  S$ x% b0 |& `
        读方向
0 Y; T" t/ l* i8 H1 ^) `# n        写方向( I$ h) Z; r; X- p

; i. w1 k9 J( v8 m/ M1 oapp:对应有xx_ioctl()
0 R: J) \$ x/ }2 ]" G9 Y' O: Hlong (*unlocked ioctl) struct file *, unisigned int, unsigned long)
& @8 V9 A0 `5 {3 {long (*unlocked_ioctl) struct file *, unisigned int cmd, unsigned long arg)
; _, H: Z0 L* ?# ], X* mlong (*compat_ioctl) (struct file *, unsigned int, unsigned long);9 G3 f* G( L2 P/ l9 a
8 l1 E, `2 w- D. y1 \
struct file *filp 文件属性,只有打开成功' I* o! u  \+ I1 ~. Z3 u0 k
unsigned int cmd 命令值
2 T. A, w/ k1 U* n8 Iunsigned long arg 用来读或写的数据参数
) j* f9 f/ _% h# F8 t) H, C
7 N3 U+ b: _1 D" c9 h标准用法:" ]1 {( S8 Y+ n- C8 G6 t" T
cmd:  体现出命令的方向,分成四部分
3 B, E2 T5 ]4 U2 O4 `2 |1 magic:高8位,用来区别不同设备的命令) V, c- g5 F+ }* f" |9 g
2 type:        设备命令4 i5 `3 ]5 \8 w* d# S
3 dir:         传输方向
" t! @( G" T* Z. u+ U4 sizeof: 参数大小
+ K6 S8 j3 o& Y. E( V0 K+ P9 @& [0 s+ E" n, M4 y! u
设置命令4 X2 F5 {& L- I* d) M
magic |= 1<<245 w: m2 s7 Z7 L* v; ~
type |=  1<<163 a( S7 E8 {) L, u
linux内核提供一系列的接口函数" ^: L. m; u- X5 [; A' D0 P* o
_IO(type,nr)        //设置方向的命令
- ~0 U' z( I$ k& T_IOW(type,nr,size)        //设置写方向( Y+ t/ o6 Q9 t* n
_IOR(type,nr,size)        //设置读方向        size变量类型
) X! i; o; M1 U4 j: |! W# t7 hnr是这个设备的哪个命令- g8 H9 [+ m  ^) l
egg' S$ r0 _# f# s* a. ?1 D
#define MAGIC        'p'5 l3 |5 s/ T0 h" `/ P0 m4 @6 ?
#define XNULL        _IO(MAGIC,5)        //设置方向的命令
: T, x2 P- x3 \- {  F: Y#define _IOW(MAGIC,1,char)        //设置写方向; c# H3 N; F. n' B
#define _IOR(MAGIC,1,char)        //设置读方向        size变量类型: X0 W( s" K/ L& w3 s' e+ X
" K" M5 k! y: h+ P; Q
8 q! P# M, M1 w" y* V5 C. [7 }
app应用层调用
7 ^5 @8 m- \- ~3 Bioctl4 d8 d. L( v2 Y3 {- Q
int ioctl(int d, int cmd , ...)
8 p4 f8 B, C0 Q& G9 vint d 文件描述符
9 o: t0 q- L( R# b' f7 gint cmd 命令
( ?- G" W$ z" y8 ]0 S
2 p& j( @- y2 u/ M
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|深圳市光明谷科技有限公司|光明谷商城|Sunshine Silicon Corpporation ( 粤ICP备14060730号|Sitemap

GMT+8, 2024-3-29 15:12 , Processed in 0.087190 second(s), 37 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表