我也是计算机专业毕业的,在嵌入式这个领域,学计算机的其实占有很大的优势,因为他们对OS的理解比电子信息,自动化的要好,当然在底层芯片的工作原理上,却不占优势,但,整个嵌入式领域,OS却是最深奥的!其实,你考虑的很全面和深刻了,如果还在学生阶段,若能尽快动手做些东西,那么你今后应该可以在研发这条路上走得很好!你的这些问题,我没有时间一一作答,下面我举一个简单的通过I2C总线如何读写EEPROM的,例子,希望对你有帮助!
要实现一个这样的功能,首先,你要看你这个要控制的设备的datasheet,搞清楚他的从设备地址,子设备地址,(如果从来没有接触过I2C总线,那么你要研究研究),然后就开始要写驱动了,写驱动当然要熟悉linux驱动架构,linux驱动主要分模块驱动和内核驱动,(通常大家所说的网络设备,字符设备,块设备是说的设备的分类,想必你可以理解),我们这里讲内核驱动,这种驱动在内核起来后会在文件系统dev下面生成一个设备文件,这个设备文件就是应用程序与内核(或者说驱动)沟通的一个纽带,那么怎么实现的呢!
在驱动代码里面,首先要配置I2C总线接口,然后映射虚拟地址,然后设置时钟,这个时钟是CPU这边I2C控制器(master)的时钟,不是你要驱动的那个EEPROM(slave)的时钟,然后就是注册设备文件描述符,建立设备文件了;
好,这个设备文件描述符,是个很大的结构体,其中有大家比较熟悉的函数如:open,write,read,ioctrl等函数,那么这些函数就相当于windows的那套API函数,是给应用程序调用的。这里当然要写一个open函数,一个close函数,还要写一个write,read函数,(具体怎么写,你去参考其他代码)
驱动是为应用服务的, 在应用程序这边,我们就可以调用系统函数open,write,read,close!
linux操作系统把我们要控制的设备抽象成了一类对象(文件),所以叫设备文件,既然是文件,对应用程序来说就透明了,应用程序不用去关心驱动是怎么写的,他只要知道这些接口函数该怎么调用就行了,而且象通用的open,write,read函数都是象访问一个文本文件一样,没有什么区别!!!
由这个问题想到的:
我一口气回答完了这个问题,而且写了那么多,但我总觉得还有些东西没有告诉这些初学者!现在其实已经到了中午12:21,但是,这就就像写作文,灵感来了,想一气呵成,所以继续写完吧,也了却了一桩心思!我很热爱研发工作(我曾因用arm7控制image sensor拍出天花板图片而欣喜若狂,想出去表达这种欣喜,晚上10点多,打个的士却不知去哪里玩,最后去网吧打游戏),我在研发之中找到了自信,找到了生命的意义,人一旦有了自信,工作中的,生活中的问题都会有信心去解决,(呵呵,老板听到这样的心声应该在窃喜,因为只有这样的工程师才能做出真正的产品,才会不那么跟他计较待遇,但话又说回来,这样的工程师老板会出高薪强这要)
我做嵌入式9年研发,2年教学,我也从对研发工作的热爱但又不知该如何入手走过来,嵌入式确实涉及面很广,硬件软件(当然我这里说的是底层,就是做driver或BSP,firmware这些职位的,上层应用的严格讲不叫嵌入式工程师),硬件要看懂原理图,IC datasheet,软件要熟悉相关总线协议,呵呵不要被驱动,协议这些字眼吓到。(驱动,就是让某个硬件设备动起来,就是设置里面相关register,裸奔时代其实就是一种驱动,只是大家不那么叫而已,协议,就象看间谍剧里面的地下party接头暗号,简单的很简单,负责的当然很复杂)!
那么嵌入式该如何学呢!现在的很多老师,书籍,培训机构,一谈到驱动,就是虚拟地址什么的,在我看来那是故弄玄虚。所以,在我的教学里面,我从来就不是一上手就跟学生讲什么虚拟地址,首先要让他们有个感性认识,那么什么是感性认识,举个例子!声卡驱动,先也不去讲什么驱动,先移植一个mplayer,先听听美妙的音乐是自己开发板上出来,然后有了这个兴趣,有了这个乐趣之后再去看内核代码,应用程序!而且,这里还有个误区就是,一些初学者,一上手就要自己写驱动,可以说这是不可能的事情,所以,各位如果真想学好嵌入式linux,还是先多看看里面的驱动是怎么写的,只有熟悉了现有的linux驱动架构,你才可以写出自己的驱动!而且,不要贪多,什么驱动都想学,其实先找个比较容易的切入点,把某一种驱动确实搞清楚后,再去拓展也不迟!
裸奔也叫嵌入式哦,因为嵌入式一般都会跑OS,所以,我这里也是跟Linux一起说的!
2012-9-12 下家山 写于上海。松江
本文是我个人意见, 有什么问题可以给我邮件
ximenpiaoxue4016@sina.com或加我群198204885
我也是计算机专业毕业的,在嵌入式这个领域,学计算机的其实占有很大的优势,因为他们对OS的理解比电子信息,自动化的要好,当然在底层芯片的工作原理上,却不占优势,但,整个嵌入式领域,OS却是最深奥的!其实,你考虑的很全面和深刻了,如果还在学生阶段,若能尽快动手做些东西,那么你今后应该可以在研发这条路上走得很好!你的这些问题,我没有时间一一作答,下面我举一个简单的通过I2C总线如何读写EEPROM的,例子,希望对你有帮助!
要实现一个这样的功能,首先,你要看你这个要控制的设备的datasheet,搞清楚他的从设备地址,子设备地址,(如果从来没有接触过I2C总线,那么你要研究研究),然后就开始要写驱动了,写驱动当然要熟悉linux驱动架构,linux驱动主要分模块驱动和内核驱动,(通常大家所说的网络设备,字符设备,块设备是说的设备的分类,想必你可以理解),我们这里讲内核驱动,这种驱动在内核起来后会在文件系统dev下面生成一个设备文件,这个设备文件就是应用程序与内核(或者说驱动)沟通的一个纽带,那么怎么实现的呢!
在驱动代码里面,首先要配置I2C总线接口,然后映射虚拟地址,然后设置时钟,这个时钟是CPU这边I2C控制器(master)的时钟,不是你要驱动的那个EEPROM(slave)的时钟,然后就是注册设备文件描述符,建立设备文件了;
好,这个设备文件描述符,是个很大的结构体,其中有大家比较熟悉的函数如:open,write,read,ioctrl等函数,那么这些函数就相当于windows的那套API函数,是给应用程序调用的。这里当然要写一个open函数,一个close函数,还要写一个write,read函数,(具体怎么写,你去参考其他代码)
驱动是为应用服务的, 在应用程序这边,我们就可以调用系统函数open,write,read,close!
linux操作系统把我们要控制的设备抽象成了一类对象(文件),所以叫设备文件,既然是文件,对应用程序来说就透明了,应用程序不用去关心驱动是怎么写的,他只要知道这些接口函数该怎么调用就行了,而且象通用的open,write,read函数都是象访问一个文本文件一样,没有什么区别!!!
由这个问题想到的:
我一口气回答完了这个问题,而且写了那么多,但我总觉得还有些东西没有告诉这些初学者!现在其实已经到了中午12:21,但是,这就就像写作文,灵感来了,想一气呵成,所以继续写完吧,也了却了一桩心思!我很热爱研发工作(我曾因用arm7控制image sensor拍出天花板图片而欣喜若狂,想出去表达这种欣喜,晚上10点多,打个的士却不知去哪里玩,最后去网吧打游戏),我在研发之中找到了自信,找到了生命的意义,人一旦有了自信,工作中的,生活中的问题都会有信心去解决,(呵呵,老板听到这样的心声应该在窃喜,因为只有这样的工程师才能做出真正的产品,才会不那么跟他计较待遇,但话又说回来,这样的工程师老板会出高薪强这要)
我做嵌入式9年研发,2年教学,我也从对研发工作的热爱但又不知该如何入手走过来,嵌入式确实涉及面很广,硬件软件(当然我这里说的是底层,就是做driver或BSP,firmware这些职位的,上层应用的严格讲不叫嵌入式工程师),硬件要看懂原理图,IC datasheet,软件要熟悉相关总线协议,呵呵不要被驱动,协议这些字眼吓到。(驱动,就是让某个硬件设备动起来,就是设置里面相关register,裸奔时代其实就是一种驱动,只是大家不那么叫而已,协议,就象看间谍剧里面的地下party接头暗号,简单的很简单,负责的当然很复杂)!
那么嵌入式该如何学呢!现在的很多老师,书籍,培训机构,一谈到驱动,就是虚拟地址什么的,在我看来那是故弄玄虚。所以,在我的教学里面,我从来就不是一上手就跟学生讲什么虚拟地址,首先要让他们有个感性认识,那么什么是感性认识,举个例子!声卡驱动,先也不去讲什么驱动,先移植一个mplayer,先听听美妙的音乐是自己开发板上出来,然后有了这个兴趣,有了这个乐趣之后再去看内核代码,应用程序!而且,这里还有个误区就是,一些初学者,一上手就要自己写驱动,可以说这是不可能的事情,所以,各位如果真想学好嵌入式linux,还是先多看看里面的驱动是怎么写的,只有熟悉了现有的linux驱动架构,你才可以写出自己的驱动!而且,不要贪多,什么驱动都想学,其实先找个比较容易的切入点,把某一种驱动确实搞清楚后,再去拓展也不迟!
裸奔也叫嵌入式哦,因为嵌入式一般都会跑OS,所以,我这里也是跟Linux一起说的!
2012-9-12 下家山 写于上海。松江
本文是我个人意见, 有什么问题可以给我邮件
ximenpiaoxue4016@sina.com或加我群198204885
举报