open, read, ioctl 这些系统调用本来是提供给用户空间的程序访问的,所以,对传递给它的参数,它默认会认为来自用户空间,在->write()函数中,为了保护内核空间,一般会用get_fs()得到的值来和USER_DS进行比较,从而防止用户空间程序“蓄意”破坏内核空间;
而现在要在内核空间使用系统调用,此时传递给->ioctl()的参数地址就是内核空间的地址了,在USER_DS之上(USER_DS ~ KERNEL_DS),如果不做任何其它处理,在ioctl()函数中,会认为该地址超过了USER_DS范围,所以会认为是用户空间的“蓄意破坏”,从而不允许进一步的执行; 为了解决这个问题; set_fs(KERNEL_DS);将其能访问的空间限制扩大到KERNEL_DS,这样就可以在内核顺利使用系统调用了!
以下是实现代码, dbg.h中主要是DBG_ERROR这些调试宏,所有不列出来了.
Makefile:
参考:
SCSI Inquiry Command http://en.wikipedia.org/wiki/SCSI_Inquiry_Command
SCSI INQUIRY 命令的详细解说;
The sdparm utility http://sg.danny.cz/sg/sdparm.html
lsscsi http://sg.danny.cz/scsi/lsscsi.html
The Linux sg3_utils package http://sg.danny.cz/sg/sg3_utils.html
linux下访问SCSI设备参数的几个工具, 对VPD pages有较详细的解说;
The Linux SCSI Generic (sg) HOWTO http://www.tldp.org/HOWTO/SCSI-Generic-HOWTO/index.html
The Linux 2.4 SCSI subsystem HOWTO http://tldp.org/HOWTO/SCSI-2.4-HOWTO/index.html
分享到:
相关推荐
GetSerial2.c为获取U盘序列号源码 GetDiskSerialNum.c为获取硬盘序列号源码
易语言取硬盘序列号模块源码,取硬盘序列号模块,取硬盘信息,取硬盘信息_ATA,取硬盘信息_IOCTL_STORAGE_QUERY_PROPERTY,ASM_两两颠倒字节集,ASM_16进制文本到字节集,asm_读整型内存,存在其他字符,是否不存在多字节字符...
ioctl系统调用流程 系统调用函数名以“sys_”开头,后面是该系统调用的名字,由此构成了sys_name()这样的函数名。
an IOCtl_SCSI_MINIPORT request with a custom ControlCode to the SCSI miniport driver. Second, a detailed description is provided that explains what changes the driver writer has to make to a SCSI ...
Build LLVM code for texture wrap mode for linear filtering.convert to int, compute lerp weight.
linux内核驱动模块编写ioctl[归纳].pdf
Android下通过root实现对system_server中binder的ioctl调用拦截
Linux内核驱动模块编程指南 (内核版本2.2, 2.4) The Linux Kernel Module Programming Guide CHS Linux内核驱动模块编程指南 (内核版本2.2, 2.4) Peter Jay Salzman Ori Pomerantz 版权 © 2001 Peter Jay Salzman...
通过Linux系统调用对设备文件进行操作,内含目的要求!
学习IOctl的控制方法,通过ioctl控制驱动程序,可以更加简单方便的管理内核。如果这方面了解不是很多的话,可以查看内核源码,来查看具体的内核分布
总共2个程序实例,可以在linux下,获取磁盘设备号,以及对应磁盘厂商名称,以及相关信息本代码实例调用了一个IOCTL命令读取磁盘厂商信息,以及磁盘序列号,并打印出来。
// linux 初始化(仅在这个程序中被调用)。 static inline _syscall0 (int, sync) // int sync()系统调用:更新文件系统。 #include <linux/tty.h> // tty 头文件,定义了有关tty_io,串行通信方面的参数、常数...
内核中使用缩写“ sg”来指代SCSI通用驱动程序和许多现代IO设备(通常与DMA相关联)提供的分散收集功能。上下文通常会清楚地指出要引用的是哪一个。例如,请注意名称为SG_GET_SG_TABLESIZE的扭曲sg ioctl(),其中...
IMX8 mini mipi 摄像头报错: VIDIOC_QUERYCTRL: Inappropriate ioctl for device) 需要在内核的驱动代码中去实现相关函数。
。。。
。。。
详细介绍哦ioctl函数用法, 一看必然会用。。。。
在ubuntu18.04系统;利用V4L2采集两个usb摄像头数据,在QT上控件显示两个采集的视频流。可以同时采集两个相机。 在QT下调用V4L2的库函数来实现采集视频流。并且把采集到的视频流在控件上显示出来。 相机输出格式...
LINUX底层文件,关于端口(I/O)初始化等