❶ 如何学习嵌入式linux驱动
学习嵌入式Linux驱动,首先我们需要的是去了解整个嵌入式开发的整个流程分为四个层次:底层硬件设计、嵌入式驱动开发、内核开发、应用层开发。其中底层硬件设计必须要有一定的硬件功底,我建议你若不是科班出身(数电、模电、高频学的比较好)的人不要去考虑。内核开发需要你有很好的软件功底(C语言、C++学的很好,有过一定的项目经验最好),这个事嵌入式驱动开发的人以后可以考虑发展的方向,不建议一开始就学。如果你是面临着急需找工作的人并且你有一定的商业头脑、创新思维,我认为学习应用层开发是最好不过的选择,但是你别忘了因为简单容易学所以学的人比较多。如果你把前面三个选择都否定了,而且你C语言学的还可以,有学过C51或者STM32这些简单的东西,你不妨看下去。如果你觉得这些对你没用或者不感兴趣,请就此打住不要再往下看不要再浪费你的时间了。亲,去做你该做的事吧!
一、入门者:了解嵌入式
了解嵌入式开发我觉得最好的东西还是《嵌入式系统设计师教程》,这本书写的很烂,无非是用来应付考试的。但是我认为对我们了解嵌入式开发需要学习些什么东西还是有一点用处的,可以在网上浏览一下,你就可以知道嵌入式大概要学的东西,不建议精读。另外如果想大致了解一下嵌入式开发的四个层次,可以看下韦东山韦老师的《作为一个新人,怎样学习嵌入式Linux》http://blog.sina.com.cn/s/blog_13955cfdb0102v3it.html
二、初学者:学习使用Linux
我这里的初学者者指的是已经回了解了嵌入式,有欲望想往深处学习的码农们。这个时候我们已经找到了感觉了。嵌入式操作系统有Vxworks、WINCE、uCLinux、Embedded Linux等操作,但是我们一般选择Linux。原因有二:Linux代码开源,可供学习免费使用。Linux学习的资料非常多,很容易找到小伙伴。学习嵌入式Linux驱动,就必须先学习使用Linux。但是我们对于Linux的使用其实不必学的太多,多了反而会在这浪费的时间。像大家都说可以的《鸟哥的linux私房菜》我不建议大家读,我认为像《Linux就该这么学》这样范范而谈的书籍反而更适合我们初学者。我们对Linux的定位是:基本命令会用,不懂再查。
http://www.linuxprobe.com/chapter-00.html如果觉的适合自己可以去看下
二、菜鸟们:加强C语言,看得懂电路图
我相信到这一阶段你已经深深的爱上了Linux,当然你也可能恨死她了,恨她为什么有那么多命令,恨她为什么不去想Windows那么傻瓜式啊,点点就可以了,但是你别忘了其实Windows也有DOS命令行,只是你没有用过而已吧。我对没有去Linux命令界面敲过几行命令的人视为不会使用操作系统的人,你觉得啦?
既然你爱上她了(不爱请不要再往下看),那请问你为了一个爱你的人做件可能对你难的事,你愿意吗?愿意的话,我们就要去加强自己的C语言基础,我觉得书看的多,视频看的多,还不如看懂一本书,把一本书的程序题好好敲敲,你觉得啦?所以我还是推荐最好的入门的C语言书籍《C程序设计》谭浩强前辈写的。对于看得懂电路图我认为最好的是去下一个画电路板的软件随便找几个电路图画画,慢慢就会了,当然你也可以跳过,我相信如果你真的爱上这一行了以后的学习工作中会逼出来的。
三、码农们:选择一块合适的开发板,然后看书、看数据手册、敲代码、看视频
嵌入式Linux驱动开发是一个敲代码的过程,所以称之为码农。对于嵌入式Linux驱动开发来说是一个偏软件的工作,而码农们就是一个看书、看资料、看视频学习理论知识,然后自己实现的反反复复的过程。只有你不断Debug不断解决不断充实理论知识,才可能往更高层次走。对于书籍我推荐韦东山韦老师的《嵌入式Linux驱动开发完全手册》,当然我觉得成为中国化的S3C2440数据手册更好些(至于为什么学ARM9的S3C2440可以往下看),当然这本书也有他的不好之处:太过于实践,理论知识不全。我觉得配合杜春雷老师的《ARM体系结构与编程》看会非常好,有比较详细的对ARM的介绍。另外既然我们学习S3C2440的话,《S3C2440数据手册》我们是非看不可。另外老外写的《设备驱动开发》也就是所谓的LDD,还有就是宋宝华老师的《Linux设备驱动开发详解》,挺不错的。视频的话我力顶《嵌入式Linux驱动开发完全手册》的作者韦东山韦老师的视频,可以去百问网http://www.100ask.org/ 自行查看。开发板的话我觉得可以自行选择,最好选择S3c2440或者S3c2410的芯片,因为ARM9的资料最多,随便上网搜就是一大把。
四、大神们:研究Linux
毛德操/ 胡希明写的《Linux内核源代码情景分析》、 赵炯《Linux内核完全注释》、《unix环境高级编程》还有更多的可以去看一看瞧一瞧了,我相信你学到这里就可以自找出路了,我也目前在前面阶段,以后把这些学习完再做补充了。
我相信能够学习嵌入式Linux驱动的人都能够知道有好的学习资料学习能够事半功倍的,本人也是学习驱动的菜鸟,历经了学习的沧桑,今天在这里分享一下自己学习嵌入式Linux驱动过程中自认为好的资料,不好请勿喷。有兴趣的可以转载分享给你的朋友。以后有时间我会整理我在学习过程中的东西,加我关注以后一起学习叫流。
❷ Linux嵌入式开发和Linux内核/驱动开发有什么区别
前者强调的是产品(linux嵌入式产品),而后者强调的是软件(内核和驱动)。
一般做linux嵌入式产品时都要涉及linux驱动和内核,当然不仅仅是内核驱动,还有gui系统,和其他软件等。
而做linux内核驱动则不一定用于嵌入式产品,也可以用于开发pc机(也就是一般的x86架构)软件。
❸ 嵌入式linux 的驱动怎么安装
如果是编译好的驱动,直接拷贝到mole目录下面。如果只是临时测试一下,可以用insmod *.ko来插入驱动模块。
如果是驱动源码文件,那么你得有内核目录树,需要自行编译,然后再重复上面的步骤。
❹ 什么叫内核驱动 LINUX 内核驱动
上海尚观Linux嵌入式研究室:内核是用于管理系统资源的程序。内核将应用程序与系统硬件隔离,并为它们提供基本系统服务,如输入/输出 (input/output, I/O) 管理、虚拟内存和调度。内核由需要时动态装入内存的对象模块组成。
Linux内核在逻辑上可分为两个部分: 第一部分称为内核,用于管理文件系统、调度和虚拟内存。第二部分称为 I/O 子系统,用于管理物理组件。
内核提供了一组接口,供可通过系统调用访问的应用程序使用。Reference Manual Collection 的第 2 部分对系统调用进行了介绍。某些系统调用用于调用设备驱动程序以执行 I/O 操作。设备驱动程序是可装入的内核模块,用于管理数据传输,同时将内核的其余部分与设备硬件隔离。为了与操作系统兼容,设备驱动程序需要能够提供多线程、虚拟内存寻址以及 32 位和 64 位操作之类的功能。
❺ 新手学习嵌入式linux驱动开发有没有什么步骤
1. 学会写简单的makefile
2. 编一应用程序,可以用makefile跑起来
3. 学会写驱动的makefile
4. 写一简单char驱动,makefile编译通过,可以insmod, lsmod, rmmod. 在驱动的init函数里打印hello world, insmod后应该能够通过dmesg看到输出。
5. 写一完整驱动, 加上read, write, ioctl, polling等各种函数的驱动实现。 在ioctl里完成从用户空间向内核空间传递结构体的实现。
6. 写一block驱动, 加上read,write,ioctl,poll等各种函数实现。
7. 简单学习下内存管理, 这个是最难的,明白各种memory alloc的函数实现细节。这是Linux开发的基本功。
8. 学习锁机制的应用,这个不是最难的但是最容易犯错的,涉及到很多同步和并发的问题。
9. 看内核中实际应用的驱动代码。 你会发现最基本的你已经知道了, 大的框架都是一样的, 无非是read, write, ioctl等函数的实现, 但里面包含了很多很多细小的实现细节是之前不知道的。 这时候就要考虑到很多别的问题而不仅仅是基本功能的实现。 推荐您看2.6.20中integrated的一个驱动 kvm, 记得是在driver/lguest下,很好玩的, 就是Linux下的虚拟机驱动, 代码不长,但功能强大。有能力的可以自己写一操作系统按照要求做成磁盘镜像加载到虚拟机中, 然后客户机可以有自己的4G虚拟地址空间。
10. 看完驱动欢迎您进入Linux kernel学习中来。 最简单的方法,跟着ldd(Linux devive driver)做一遍。
❻ 嵌入式linux 驱动设备识别过程
驱动程序识别设备时,有以下两种方法:
(1)驱动程序本身带有设备的信息,比如开始地址、中断号等:加载驱动程序时,就可以根据这些信息来识别设备。
(2)驱动程序本身没有设备的信息,但是内核中已经(或以后)根据其他方式确定了很多设备的信息;加载驱动程序时,将驱动程序与这些设备逐个比较,确定两者是否匹配(match)。如果驱动程序与某个设备匹配,就可以通过该驱动程序操作这个设备了。内核常使用第二种方法来识别设备,这可以将各种设备集中在-一个文件中管理,当开发板的配置改变时,便于修改代码。在内核文件includePnuxÔatform _device.h 中,定义了两个数据结构来表示这些设备和驱动程序: platform_ device 结构用来描述设备的名称、ID、所占用的资源(比如内存地址/大小、中断号)等; platform_ driver 结构用来描述各种操作函数, 比如枚举函数、移除设备函数、驱动的名称等。内核启动后,首先构造链表将描述设备的platform_device结构组织起来,得到一一个设备的列表:当加载某个驱动程序的platform_ driver 结构时,使用一.些匹配函数来检查驱动程序能否支持这些设备,常用的检查方法很简单:比较驱动程序和设备的名称。