目录
(一)上篇回顾:上一篇讲到如何加载自己的hello驱动模块。Hello,World驱动之旅,初识驱动模块(一)-优快云博客
(一)上篇回顾:上一篇讲到如何加载自己的hello驱动模块。Hello,World驱动之旅,初识驱动模块(一)-优快云博客
- 我们通过指令insmod加载hello.ko
- module_init对应的函数会被执行调用。
- 通过dmesg查看内核LOG,发现hello_init中“hello, world!”有打印
- 通过rmmod卸载hello驱动模块
- 通过dmesg查看内核LOG,发现hello_exit中“see you agin”有打印
(二)驱动模块的意义是什么?
我们的hello驱动莫i狂,仅仅打印一行Log吗?当然不是,虽然目前仅打印了一行Log,不过这已经很厉害了,这个已经是跟内核打交道了,我们的模块已经是操作系统的一员了。所以我们继续努力,丰富我们的Hello模块,让他具备更多的功能。
总所周知,Linux的设计哲学中,有一条核心原则:一切皆文件。这一原则意味着在Linux中,几乎所有的资源和设备都以文件的形式进行表示和访问,我们的hello驱动模块当然也不例外,我们需要为我们的hello模块打开对外服务的大门,通过文件节点的方式提供,这样上层应用才能访问到我们的驱动服务,否则我们的hello模块毫无意义。抛开具体字符设备、块设备、网络设备不谈,我们先通过其他简单方式打开该通过。
(三)hello模块升级,常见class属性文件
通过class_create创建struct class类,"cdevhelloclass"文件讲被创建,位于/sys/class目录下
hellodev.chardev_class = class_create(THIS_MODULE,"cdevhelloclass");
进入Ubuntu命令行,加载模块,执行ls命令,查看/sys/class目录,已生成cdevhelloclass。