字符驱动------实战代码分析之mknod命令(4)

命令mknod,可以生成块设备文件或者字符设备文件,格式为:

mknod [OPTION] NAME TYPE [MAJOR MINOR]

OPTION是选项,比较有用的是-m,表示生成的设备文件的权限;

NAME是生成的设备的名称

TYPE是设备类型,b表示块设备,c表示字符设备,p表示管道

MAJOR是主设备号MINOR是次设备号,主设备号是由文件/usr/include/linux/major.h定义的。摘取的代码段如下:


mknod /dev/demo1 c 243 0

ls -l /dev

insmod:挂载

mknod:创建设备文件

疑问?

写驱动文件的时候已经有设备号了,为什么还要创建设备文件的时候再写呢?mknod /dev/demo1 c 243 0

假设有hello.ko文件,insmod后产生字符设备(设备号123),mknod /dev/hello c 123 0 产生hello字符设备,请问insmod加载的模块和hello是怎么联系起来的?对hello直接操作是否就是操作加载的模块?他们的内在联系是什么?

当你加载驱动模块的时候,他会运行驱动中的初始化函数,然后会分配设备的主次设备号。并向内核注册这个设备和驱动。
如果驱动模块中有实现自动生成当前设备文件节点的代码。那么会使用和热插拔相关的代码脚本,自动在dev下面生成对应的设备文件。如果没有,你只能自己手动来生成这个设备文件。
当然最终都要运行mknode命令,它会根据你传进去的主次设备号和类型。在内核维护的设备和驱动列表中寻找你在驱动模块中注册的设备和驱动。如果找到了,会生成相关的文件节点,并在节点内部存下相关驱动的信息,其中会有一些vfs相关的知识,当你打开或者读写文件节点的时候,最终会调用到你注册的驱动中相关的驱动函数。

发布了165 篇原创文章 · 获赞 26 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_42269817/article/details/103914548