该书风险提示:http://rangercyh.blog.51cto.com/1444712/521244
控制系统调用是作业控制系统Mach和插件间的USB,而电子设备BIOS是作业控制系统Mach和电脑硬体间的USB。
电子设备BIOS为插件过滤了硬体的技术细节,这种在插件直言,硬体电子设备而已三个电子设备文档, 插件能像操作方式通常文档那样对硬体电子设备展开操作方式。
电子设备BIOS是Mach的一小部分,它顺利完成下列的机能:
(1) 对电子设备调用和释放出来.
(2) 把统计数据从Mach传输到硬体和从硬体加载统计数据.
(3) 加载插件传输给电子设备文档的统计数据和折返插件允诺的统计数据.
(4) 检验和处置电子设备再次出现的严重错误.
Linux全力支持二中相同类别的电子设备:字符串电子设备(character devices)、块电子设备(block devices)和网络电子设备(network interfaces)。
字符串电子设备和块电子设备的主要就差别是:在对字符串电子设备收到读/写允诺时,前述的硬体I/O通常就紧接著再次出现了。
块电子设备则要不然,它借助几块控制系统缓存作头文件,当使用者民主化对电子设备允诺能满足使用者的明确要求,就回到允诺的统计数据,假如无法,就调用允诺表达式来展开前述的I/O操作方式。块电子设备是主要就特别针对硬盘等短距离电子Nenon的,以防花费过多的CPU天数来等候.
使用者民主化是透过电子设备文档来与前述的硬体关系密切,每一电子设备文档都都有其文档属性(c/b),则表示是字符串电子设备却是块电子设备。
除此之外每一文档都有三个电子设备号,第三个是主电子设备号,标识BIOS,第二个是从电子设备号,标识使用同三个电子设备BIOS的相同的硬体电子设备,
比如有三个软盘,就能用从电子设备号来区分他们.电子设备文档的的主电子设备号必须与电子设备BIOS在登记时申请的主电子设备号一致,否则使用者民主化将无法访问到BIOS.。
电子设备BIOS工作的基本原理:
使用者民主化借助控制系统调用对电子设备展开诸如read/write操作方式,控制系统调用透过电子设备文档的主电子设备号找到相应的电子设备BIOS,然后加载这个统计数据结构相应的表达式指针,接着把控制权交给该表达式。
最后,在使用者民主化调用BIOS时,控制系统进入核心态,这时不再是抢先式调度。也就是说,控制系统必须在你的BIOS的子表达式回到后才能展开其他的工作。
假如你的BIOS陷入死循环,你只有重新启动电脑了。
下面我们就来加进三个字符串电子设备:
编写电子设备驱动源代码
在电子设备BIOS中有三个非常重要的结构file_operations,该结构的每一域都对应着三个控制系统调用。
使用者民主化借助控制系统调用对电子设备文档展开诸如read/write操作方式时,控制系统调用透过电子设备文档的主电子设备号找到相应的电子设备BIOS,然后加载这个统计数据结构相应的表达式指针,接着把控制权交给该表达式。
编写电子设备BIOS的主要就工作是编写子表达式,并填充file_operations的各个域。
例如:
然后再定义表达式my_read,my_write,my_open,my_release相应的表达式体。
例如:
同时对于可卸载的Mach组件(LKM),至少还有三个基本的组件:
例如本例中的:
my_init 用于注册电子设备,获得电子设备的主电子设备号
调用register_chrdev(0,sky_driver(电子设备名),&my_fops);
my_exit 用于注销电子设备
调用unregister_chrdev(my_major, sky_driver(电子设备名));
然后在程序尾再调用这三个表达式
Module_init(my_init);
Module_exit(my_exit)
MODULE_LICENSE(GPL);
编写自己的BIOS源文档mydriver.c:
编译该电子设备驱动代码
然后将电子设备驱动源文档复制到/usr/src/linux/drivers/misc下
修改misc目录下的Makefile文档,只要在最后加进一句即可:obj-m +=mydriver.o。
在/usr/src/linux/drivers/misc路径下执行命令:Make -C /usr/src/linux SUBDIRS=$PWD modules编译成功将得到mydriver.ko文档。
能在misc目录下观察得到了mydriver.ko文档。
继续执行insmod https://www.cnblogs.com/jiandahao/p/mydriver.ko命令挂载Mach中的组件。
然后透过lsmod命令能看到增加的电子设备组件mydriver。
输入cat /var/log/messages能看到电子设备注册成功。
此时进入/proc/devices文档会看到在字符串电子设备中有250 mydriver。前面的是控制系统分配的主电子设备号,后面是电子设备注册名。
进入在/dev路径下,执行命令:
mknod /dev/mydriver c 250 0
第三个参数是新建电子设备文档的地址和名字。
第二个参数是指创建的是字符串电子设备文档。
第三个参数是主电子设备号,第四个参数是从电子设备号,自己随便取。
执行成功会在/dev/char中看到三个捷伊电子设备文档mydriver
至此电子设备加进成功。
编译测试程序。
编写测试代码如下:
gcc -o mydriver_test mydriver_test.c
https://www.cnblogs.com/jiandahao/p/mydriver_test
输入任意字符串串,BIOS将字符串串拷贝进新加入的电子设备,然后再加载出来,电子设备中保留字符串串信息,再次输入将覆盖原来的信息
发表评论