**!

[复制链接]
4901|12
 楼主| 94179411 发表于 2007-10-22 08:40 | 显示全部楼层 |阅读模式
我在做nios&nbsp;2的外设驱动开发,nios&nbsp;2的软件结构(hal)支持字符型设备,文件子系统等通用的设备模型。<br />最近分析了开发软件自带的一个简单的lcd(character&nbsp;lcd(16x2,optrex16207))驱动程序altera_avalon_lcd_16207.c和它相应的头文件。hal已经提供了一个文件系统,并且已经把lcd定义成了文件子系统设备,最后这一点我是看了它的测试程序之后才知道的,测试程序<br />...<br />lcd&nbsp;=&nbsp;fopen(&quot;/dev/lcd_display&quot;,&nbsp;&quot;w&quot;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//lcd_display是lcd名字<br />&nbsp;&nbsp;fprintf(lcd,&nbsp;&quot;
This&nbsp;is&nbsp;the&nbsp;LCD&nbsp;Display.
&quot;);<br />...<br />尽管看懂了驱动程序,但是我现在还是一头雾水,仍然不明白如何以文件的方式来管理和操作它。比如fprintf(lcd,&nbsp;&quot;
This&nbsp;is&nbsp;the&nbsp;LCD&nbsp;Display.
&quot;);是如何跟驱动程序中的static&nbsp;void&nbsp;lcd_write_data(alt_LCD_16207_dev&nbsp;*&nbsp;dev,&nbsp;unsigned&nbsp;char&nbsp;data)建立关系并调用它来驱动lcd的,这中间都作了些什么工作。<br /><br />我是学电子和通信的,对软件结构和编译原理不太懂,是不是要学一些计算机的课程才能搞动这个问题呢?<br /><br />不知道我以上的提问是否把我的问题描述清楚了。<br /><br />希望各位大哥大姐指点一下刚开始搞驱动程序的菜鸟,或者推荐一些书目有助于我搞明白这个问题,不胜感激!!!
 楼主| 94179411 发表于 2007-10-22 09:00 | 显示全部楼层

自己顶!!

  
high 发表于 2007-10-22 09:39 | 显示全部楼层

文件系统有很多种

yaffs,&nbsp;fat32,&nbsp;ntfs,binfs......每一种如果都有自己独立接口给用户.用户会烦死.(用yaffs_open()?fat32_open()?......前提是您还得具体知道底层是到底哪种)<br /><br />而且不方便扩展新的文件系统.所以,为了屏蔽底层方便扩展,os会抽象一层filesystem来管理所有这些文件系统,统一一个接口出来.这个接口就是您用到的fopen(),CreateFile()等等.<br /><br />怎么识别不同文件系统?在文件打开时候参数指定.比如<br />CreateFile(&quot;c:windows&quot;...)&nbsp;&nbsp;给出路径,那就时硬盘c盘.再根据c盘是fat32或者ntfs来分发调用底层.<br />设备驱动同样<br />CreateFile(&quot;COM1:&quot;...)&nbsp;给出设备号做标识分发.<br /><br />---<br />根据自己理解.<br /><br />
 楼主| 94179411 发表于 2007-10-22 15:12 | 显示全部楼层

谢楼上的大侠回答

还是有点不理解,<br />fprintf(lcd,&nbsp;&quot;
This&nbsp;is&nbsp;the&nbsp;LCD&nbsp;Display.
&quot;);是如何跟fprintf(lcd,&nbsp;&quot;
This&nbsp;is&nbsp;the&nbsp;LCD&nbsp;Display.
&quot;);是如何跟驱动程序中的static&nbsp;void&nbsp;lcd_write_data(alt_LCD_16207_dev&nbsp;*&nbsp;dev,&nbsp;unsigned&nbsp;char&nbsp;data)建立关系并调用它来驱动lcd的,这中间都作了些什么工作。<br />建立关系并调用它来驱动lcd的,这中间都作了些什么工作。参数是怎么一步步的传递到static&nbsp;void&nbsp;lcd_write_data(alt_LCD_16207_dev&nbsp;*&nbsp;dev,&nbsp;unsigned&nbsp;char&nbsp;data)。<br />根据high大侠的说法我是不是应该找到filesystem的文档或是源代码拿来分析呢?或者有没有这方面的书可以讲的比较通用一点的<br /><br />
high 发表于 2007-10-22 15:16 | 显示全部楼层

filesystem会对下也留出接口的.

底层通过这个接口把自己注册到filesystem或者系统中.
 楼主| 94179411 发表于 2007-10-22 22:12 | 显示全部楼层

high大侠请给我推荐一本参考书吧,看来要系统的了解一下

filesystem既然上下都有接口,可不可以把这个filesystem当成一个“翻译器”就是把一些标准的文件操作指令如fprintf翻译成驱动程序里面的某个或是某几个实现特定功能的驱动程序的子程序?<br />说到这里,我有了一个问题,如果驱动程序里的实现特定功能的子程序的参数如果比标准文件操作指令的参数多怎么办?比如lcd_write_data有三个参数,而fprintf只能有两个参数会怎么样?<br />这样是不是就要求我们在编写驱动程序的时候要遵守一定的准则呢?
high 发表于 2007-10-23 00:15 | 显示全部楼层

**!

上诉全部是我自己猜测和忽悠。我自己都不懂。<br />喜欢但又怕麻烦就去研究那个linux的早期版本好像是linux1.0.配有本书
 楼主| 94179411 发表于 2007-10-23 07:14 | 显示全部楼层

谢谢high!如果我有资格选举最佳斑竹,我肯定会投您一票

不知道各位大侠在编写驱动程序的时候有没有考虑过我提取的简单问题呢?希望能有更多的高手来点化一下我,谢谢!
computer00 发表于 2007-10-23 09:29 | 显示全部楼层

lcd_write_data怎么会有三个参数呢?一个就够了。

设备会在操作系统中注册,这样操作系统就知道了驱动程序入口。当调用上层API函数时,操作系统会自动根据设备类型选择驱动程序。<br /><br />ps:&nbsp;我也不会linux。
 楼主| 94179411 发表于 2007-10-23 20:31 | 显示全部楼层

各位编驱动程序的时候都要按照什么规范来编呢?

computer00&nbsp;发表于&nbsp;2007-10-23&nbsp;09:29&nbsp;驱动开发|WIN编程&nbsp;←返回版面&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;9楼:&nbsp;lcd_write_data怎么会有三个参数呢?一个就够了。&nbsp;<br /><br />如果要把坐标也当作参数的话lcd_write_data的参数就不只3个了。我最近在看UC/OS&nbsp;2也没有研究linux。<br /><br /><br /><br />&nbsp;<br />
computer00 发表于 2007-10-23 20:44 | 显示全部楼层

用其它函数设置坐标。

就拿最基本的文件来说,不是也有设置文件指针的函数么?
 楼主| 94179411 发表于 2007-10-24 09:04 | 显示全部楼层

哦,总感觉自己像是在摸着石头过河,有没有这方面的经典

得抓紧时间把这个驱动程序搞定,同学们都开始找工作了,我也该写份简历了。<br />另外,祝圈圈生日快乐!!!
computer00 发表于 2007-10-24 09:22 | 显示全部楼层

谢谢。我还是看着OS麻烦,所以经常裸奔,哈哈

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

191

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部