嵌入式linux驱动程序开发 linux嵌入式软件开发
新手学习嵌入式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内核开发与Linux驱动开发有什么关系
我做过驱动开发,说说我的看法。本质上说Linux内核开发和Linux驱动开发是不一样的,或者说驱动开发是内核开发的一部分,因为驱动属于内核。目前国内驱动开发和内核开发一般是一样的。有对应linux内核开发工程师和linux驱动开发工程师职位。
内核开发指的是形成linux操作系统的过程,也就是内核开发者向内核中添加信息使得linux从无到有的过程或者添加新的功能,比如Linux内核在2.6版本内核之前是没有设备驱动模型,内核开发者在2.6版本中增加了设备驱动模型,这属于linux内核开发。而linux驱动开发指的是使用Linux内核提供的接口,驱动开发者根据实际情况按照内核提供驱动的框架写相应的驱动并注册到相应的总线上,进而驱使硬件设备工作,比如I2C设备就注册到i2c总线上,这个i2c总线是内核开发者为我们提供的接口,我们只需要调用相应接口即可。整个工作流程是:linux应用程序-内核-驱动-硬件。如下图所示:
多说一点,要进行linux驱动开发,必须学好C语言、能够看懂电路图(因为驱动开发需要根据相应的引脚来编写驱动)需要模电和数电知识,linux操作系统知识,linux应用编程知识(多进程、多线程、文件io操作)因为我们要测试写的驱动能否正常工作需要linux应用编程知识。最好对数据结构中的链表有所了解,内核中有大量的内核链表。
感谢评论,交流,转发。更多精彩内容可关注本头条号:嵌入式软硬件开发。感谢大家。相互交流,共同进步。
如何学习嵌入式Linux驱动程序开发求解
2.编一应用程序,可以用makefile跑起来
3.学会写驱动的makefile
4.写一简单char驱动,makefile编译通过,可以insmod, lsmod, rmmod.在驱动的init函数里打印hello world, insmod后应该能够通过dmesg看到输出。
5.写一完整驱a动,加上read, write, ioctl, polling等各种函数的驱动实现。在ioctl里完成从用户空间向内核空间传递结构体的实现。
6.写一block驱动,加上read,write,ioctl,poll等各种函数实现。
7.简单学习下内存管理,这个是最难的,明白各种memory alloc的函数实现细节。这是linux开发的基本功。
8.学习锁机制的应用,这个不是最难的但是最容易犯错的,涉及到很多同步和并发的问题。
9.看内核中实际应用的驱动代码。你会发现最基本的你已经知道了,大的框架都是一样的,无非是read, write, ioctl等函数的实现,但里面包含了很多很多细小的实现细节是之前不知道的。这时候就要考虑到很多别的问题而不仅仅是基本功能的实现。例如:凌阳教育嵌入式linux培训课程的第四阶段:嵌入式微处理器及Linux设备驱动开发的学习主要是通过:ARM硬件接口原理,嵌入式Linux设备驱动开发,嵌入式Linux高级驱动程序设计这三大块深入浅出的学习驱动程序开发。让学员熟悉Linux的内核机制、驱动程序与用户级应用程序的接口,掌握系统对设备的并发操作。