编译并执行,发现错误,找不到设备文件:
文章插图
这是因为还没有创建hello驱动的设备文件,我们为hello驱动手动创建设备文件:
root@ubuntu:/home/jinxin/drivers/helloDev# mknod /dev/hello c 232 0
备注:这里的232和0要跟驱动文件里定义的主次设备号对应起来!然后再次执行测试程序,发现成功了:
root@ubuntu:/home/jinxin/drivers/helloDev# ./test 3open successe0 0root@ubuntu:/home/jinxin/drivers/helloDev#
然后再次执行dmesg查看驱动输出,发现驱动里的hell_open, hello_write, hello_read被依次调用了 。文章插图
这就是一个完整的、最简单的驱动的开发和测试的流程 。
我想大家可能会有几个问题:
1.驱动测试的时候为什么要有设备文件,设备文件的作用是什么?hello驱动的设备文件创建的时候为什么要指定主设备号为232, 此设备号为0?
2.对/dev/hello执行write()调用的时候,怎么就调用到了驱动里的hello_write()里去了?
3.驱动代码里的register_chrdev_region这些函数都是干什么的?实现的地方在哪里?
4.测试程序的read和write的返回值为什么都是0?
针对以上可能的问题,敬请期待《linux内核驱动第2讲》,我会一一回答以上问题 。
关注“技术简说”,一步一步教你开发linux内核和驱动
【linux内核驱动第1讲:带你编写一个最简单的字符设备驱动】
推荐阅读
- Linux常规命令
- 整理 Linux下列出目录内容的命令
- linux系统中socket错误码:eintr和eagain的处理方法
- Linuxfx - 这套Linux操作系统看起来和Windows 10非常类似
- 外网主机A通过带内外网的Linux跳板机B直接访问内网机器C服务
- 带你阅读linux内核源码:下载源码、编译内核并运行一个最小系统
- Linux-监控命令和诊断思路
- 安装 Linux Mint 20 后需要做的 13 件事 | Linux 中国
- 在 Linux 服务器下安装 ftp 服务
- Linux tar打包命令详解