免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: xuxd32

诚恳请教一下,学习linux下驱动开发的过程。 [复制链接]

论坛徽章:
0
发表于 2007-08-27 12:36 |显示全部楼层
原帖由 xuxd32 于 2007-8-27 11:19 发表
多谢这么我关心这个问题,大家都说难,肯定就是难。我的愿望是有更好的实例来让我们这些想学习地人有更多地实用地入门.然后再提高。真心诚意地有大师们抽点时间来教导。



可以看大师们写的书. 你想学哪方面的东西, 就找到这方面最牛的书去看.

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
发表于 2007-08-27 14:01 |显示全部楼层
原帖由 scutan 于 2007-8-27 12:36 发表



可以看大师们写的书. 你想学哪方面的东西, 就找到这方面最牛的书去看.

这个属于正道.

论坛徽章:
0
发表于 2007-08-31 10:24 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
发表于 2007-08-31 19:21 |显示全部楼层
原帖由 xuxd32 于 2007-8-31 10:24 发表
希望有更多的人能提供公司或者硬件资料与驱动程序。这样学习才能快才能贴近生活。
当然愿每个人快乐平安

不是公司随便什么东西都可以拿到网上与别人共享的。当然,某些资料是公开的。

论坛徽章:
0
发表于 2007-08-31 20:16 |显示全部楼层

驱动的学习方法!!!请大家拍砖!!

你是想知道灯究竟是怎么亮起来的..
关键是能明白下面两段代码...

先看static ssize_t s3c2410_DbLed_write(struct file *file,const char
                              *buffer,size_t count,loft_t *ppos)
给你提个问题,这个函数是在什么时候使用的呢???
就是说什么时候调用的...
不知道?
正常...........................
你看过用户的测试程序没有...用户的测试程序中有个write函数.....

设备文件都有对应的fileoperation结构,在这里面定义了s3c2410_DbLed_write,当你的用户测试调用write的时候,设备驱动程序中的s3c2410_DbLed_write就会被调用..
具体是怎么从用户空间的write到内河中的s3c2410_DbLed_write是怎么传递参数的,不是几句话能说清楚的.....还需要用到了一个内河的write(不同用湖空间的write函数)函数..好象很少的书上都提到这点......

接着看,
s3c2410_DbLed_write里面有个函数
   Copy_from_user(&ledstatus,buffer,sizeof(ledstatus));
可能你不是非常清楚的理解这个函数的具体实现...
但是相信你一定知道这个函数差不多能完成些什么功能吧...
对不??因为几乎所有的驱动的书上都提到了..
这个函数是在内河中使用的.从buffer中拷贝字符!!
拷贝到哪里?为什么拷贝??
先说为什么拷贝..
比如说,你有4个小灯,你想点亮二号灯.你得通知驱动程序吧...
你就可以把2这个数字放在buffer.
从函数的参数中可以看出,buffer拷贝到ledstatus中了.
为什么不能在用的时候直接使用呢??
要是你不清楚内河空间和拥护空间这两个概念的话.这个问题问的相当有水平了.
对,就是这两个空间在作怪,让你不能直接使用.
放在ledstatus中之后,怎么使用的呢??

到这里只要你能都想清楚,,80%以上的工作都应该完成了..
虽然我们还没有看到关键的操作硬件的代码..

看下一个函数,Updateled();!!
这个函数的作用是更新led灯!!!!!!!!!!!!!!!!!!!从函数名上就可以看出来...
怎么更新的呢?
漫漫看...
看到if (ledstatus & (1 <<i) )没有??
这时候知道从用户状态传过来的信息怎么用的了吧...
??
别告诉我还不明白!!!会吐血的...
里面又调用了一个函数 write_gpio_bit(LED,1);
说了那么多,,,其实真正和硬件打交道的就是这个函数...
怎么打交道的呢???....
我也没看到你在哪里实现的这个函数...哈哈
但是肯定是要有的.......


   Updateled();

static void Updateled(void)    //更新LED。
{
   int i;
   for (i=0;i<NumberOfLed;i++){
      if (ledstatus & (1 <<i) )
         write_gpio_bit(LED,1);
       else
            write_gpio_bit(LED,0);
   }
}

static ssize_t s3c2410_DbLed_write(struct file *file,const char
                              *buffer,size_t count,loft_t *ppos)
{
   Copy_from_user(&ledstatus,buffer,sizeof(ledstatus));
   Updateled();

DPRINTK(“write: led= 0x %x, count=%d \n“, ledstatus,count);
Return sizeof(ledstatus);
}



很多人都说ldd写的非常好..
个人在看那书的时候感觉不到有什么收获...
云里雾里啊...

不过等现在翻翻字符设备那个单元,发现写的还是很有道理的..
但是如果基础非常差的话(像我)是非常不适合看这本书的.....呵呵...可能有人不同意...
大家没有发现这本书里面把知识点讲解的太散了吗??
没有一定的基础很难把散的知识点融会成一体的...
可能是自己比较笨,很难理解大师们的智慧吧...

有没有什么好的书呢???可能有吧.至少本人还没看到适合自己的.....

驱动的书籍,是不是先整个简单的驱动代码从头到尾给大家分析一下,然后在从特殊过度到一般,讲解驱动中的函数.....???这样比较好呢???


请大家拍砖...

如果有必要请斑竹从新发个帖子,大家讨论下驱动的学习心得...............

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
发表于 2007-08-31 20:26 |显示全部楼层
原帖由 vikingrex 于 2007-8-31 20:16 发表
大家没有发现这本书里面把知识点讲解的太散了吗??

感觉还是蛮集中的。

BTW,在看 LDD 之前最好能对 kernel 有个整体的了解,不然效果估计不会好。

论坛徽章:
0
发表于 2007-09-03 11:53 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
发表于 2007-09-03 11:55 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
24
15-16赛季CBA联赛之北京
日期:2018-08-17 18:43:33技术图书徽章
日期:2018-08-22 12:53:57技术图书徽章
日期:2018-08-22 12:54:20技术图书徽章
日期:2018-08-22 12:54:3015-16赛季CBA联赛之福建
日期:2018-10-19 16:58:1619周年集字徽章-庆
日期:2019-08-27 13:28:5619周年集字徽章-19
日期:2019-08-27 13:31:2619周年集字徽章-19
日期:2019-08-27 13:31:2615-16赛季CBA联赛之同曦
日期:2019-09-05 12:03:2819周年集字徽章-周
日期:2019-09-06 18:54:5415-16赛季CBA联赛之上海
日期:2018-07-25 11:55:2615-16赛季CBA联赛之青岛
日期:2018-07-10 14:13:18
发表于 2007-09-03 13:43 |显示全部楼层
感觉有点收获了,支持楼上的提议!

论坛徽章:
0
发表于 2007-09-03 16:27 |显示全部楼层
望版主能够把大家的意见反映出来,建立一个驱动开发完整的资料
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP