请教下:什么样的才是真正的Linux驱动开发

发布于 2022-09-22 13:55:45 字数 54 浏览 17 评论 0

请教下:什么样的才是真正的Linux驱动开发
在文件系统基础上怎样搭建一套的Linux驱动架构?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

好听的两个字的网名 2022-09-29 13:55:45

Linux设备驱动开发是不是以struct device_driver结构和driver_register和driver_unregister两个函数为最底层,在上面再搭建驱动框架?

脸赞 2022-09-29 13:55:45

什么叫真正的linux驱动开发?其实真的不好定义一个概念。
你理解的可能有一点片面。首先,驱动开发包括很多种设备类型:字符设备,块设备,网络设备。
他们的方式及实现机制存在一定的差异。在Linux下的驱动,必须借助于linux内核,因为驱动是跑在内核里面的,实现它的一些功能,并能与上层结合,同时又要使硬件正常工作起来。
这就是驱动程序承担的任务。
暂且就说这些吧,要表述的其实太多了。

跨年 2022-09-29 13:55:45

我是要做一个字符型的设备驱动,但是不能用if (major) {
dev_id = MKDEV(major, 0);
retval = register_chrdev_region(dev_id, CS5535_GPIO_COUNT,
NAME);
} else {
retval = alloc_chrdev_region(&dev_id, 0, CS5535_GPIO_COUNT,
NAME);
major = MAJOR(dev_id);
}

if (retval) {
release_region(gpio_base, CS5535_GPIO_SIZE);
return -1;
}

printk(KERN_DEBUG NAME ": base=%#x mask=%#lx major=%d\n",
gpio_base, mask, major);
等这一套动作完成,我需要重新写一个注册动作等其他的一些工作

枯叶蝶 2022-09-29 13:55:45

你看看ldd3的第三章

星星的轨迹 2022-09-29 13:55:45

可能是我没讲清楚吧,上面贴出来的那些是关于设备号的工作,跟我的问题无关,我的问题是我不能用cdev_init(struct cdev *cdev, struct file_operations *fops); 这个函数去注册一个字符设备,要另外自己写个注册设备的函数

梦中楼上月下 2022-09-29 13:55:45

原帖由 zouzheng 于 2008-11-13 22:42 发表
可能是我没讲清楚吧,上面贴出来的那些是关于设备号的工作,跟我的问题无关,我的问题是我不能用cdev_init(struct cdev *cdev, struct file_operations *fops); 这个函数去注册一个字符设备,要另外自己写个注册 ...

说一下我的看法,不过一般都是错误的
cdev_init()是linux中注册字符设备的函数,当然具体对象也有其他的注册方式,比如串口和misc,虽然它们有各自的注册函数,不过这些函数(块设备和网络除外)都是通过cdev_init()实现的!
楼主自己写个,只要是字符设备,应该都要用到这个函数的!
全属臆断,不要当真!

止于盛夏 2022-09-29 13:55:45

做驱动开发很牛吗?
我没觉得怎么牛

为你鎻心 2022-09-29 13:55:45

驱动程序也有简单和复杂之分,简单的驱动功能相对简单,例如读取期望的寄存器的值,并返回给应用程序;复杂的驱动,有些时候功能并不一定复杂,而是要考虑到多种情况,例如:并发与同步,定时,内存分配等等情况,要完成复杂的功能就肯定要借助于内核提供的种种机制;

千と千尋 2022-09-29 13:55:45

原帖由 T-bagwell 于 2008-11-14 09:06 发表
做驱动开发很牛吗?
我没觉得怎么牛

其实做什么都一样,^_^
牛人自牛,烂人自烂,哈哈

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文