找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

嵌入式linux学习线路图

[复制链接]
 楼主| 奋斗的蚂蚁 发表于 2016-10-26 11:18:06 | 显示全部楼层
学习方法:
①沿着数据流向,从应用程序的对驱动程序的使用进行情景分析。
所谓情景分析,就是假设应用程序发起某个操作,你去分析其中的运作过程。比如应程序调用open、read、ioctl等操作时涉及驱动的哪些函数调用。你要思考一个问题:一个应用程序,怎么获得按键信息,怎么去控制LED。把其中数据的流向弄清楚了,对字符驱动程序也就基本理解了。
②学习异常和中断时,可以结合书和视频;对于驱动程序中其他内容的学习,可以不看书。

2.3.2、工作中各类驱动程序
我们的视频中讲解的驱动程序非常多,目的有二:
①在你工作中遇到同类驱动时提供借鉴
②供你学习、练习,煅炼阅读驱动程序的“语感”,提升编写程序的能力,增加调试经验
我们还打算扩充驱动视频,把它打造成“Linux驱动程序大全”视频,基本上都会采取从零现场编写的方式。也许有人说:在工作中我们基本上只是移植、修改驱动而已,很少从头编写。这话没错,但是能修改的前提是理解;想更好地理解,最好的方法是从零写一个出来。在学习阶段,不要怕耗费太多时间,从零开始编写,慢慢完善它,在这过程中你既理解了这个驱动,也煅炼了能力,做到触类旁通。

如果有时间,建议你学完这些所有的视频,直到你自认为:
① 给你一个新板,你可以很快实现相关驱动
② 给你一个新硬件,你可以很快给它编写/移植驱动。

我们录制的视频很多,下面只罗列到“课”,不罗列到“节”。
第2期视频:
第14课 驱动程序分层分离概念_总线驱动设备模型
第15课 LCD驱动程序
第16课 触摸屏驱动程序
第17课 USB驱动程序
第18课 块设备驱动程序
第19课 NAND FLASH驱动程序
第20课 NOR FLASH驱动程序
第21课 网卡驱动程序
第22课 移植DM9000C驱动程序
第23课 I2C设备裸板程序
第24课 I2C驱动程序    (不看此课,看第32课,第32课讲得更好)
第26课 声卡驱动程序    (不看此课,看第3期的ALSA驱动,那讲得更好)
第27课 DMA驱动程序
第28课 hotplug_uevent机制
第32课 3.4.2内核下的I2C驱动程序
第3期的驱动视频:
摄像头驱动_虚拟驱动vivi
摄像头驱动_USB摄像头
摄像头驱动_CMOS摄像头
WIFI网卡驱动程序移植
3G网卡驱动程序移植
ALSA声卡驱动程序
学习方法:
①再次强调,不能光看不练:一定要写程序,即使照抄也得写
②必学:LCD、触摸屏、NAND Flash、Nor Flash、hotplug_uevent机制
③学完之后,强烈建议换一个不同的开发板,尝试在新板上写驱动程序。
按视频学习会一切顺利,很多问题你可能没想到、没想通,换一个新板会让你真正掌握。

2.3.3、调试方法
有一种说法,程序是三分写七分调,我们从操作系统的角度提供了一些很有用的调试方法。
相关的视频有:
第29课第1节_裸板调试之点灯法_P.wmv
第29课第2节_裸板调试之串口打印及栈初步分析_P.wmv
第29课第3.1节_裸板调试之JTAG原理_P.wmv
第29课第3.2节_裸板调试之JTAG调试体验_P.wmv
第29课第3.3节_裸板调试之JTAG调试命令行调试_P.wmv
第29课第3.4节_裸板调试之JTAG调试源码级调试_P.wmv
第30课第1.1节_驱动调试之printk的原理_P.wmv
第30课第1.2节_驱动调试之printk的使用_P.wmv
第30课第1.3节_驱动调试之打印到proc虚拟文件_P.wmv
第30课第2.1节_驱动调试之段错误分析_根据pc值确定出错的代码位置_P.wmv
第30课第2.2节_驱动调试之段错误分析_根据栈信息确定函数调用过程_P.wmv
第30课第3节_驱动调试之自制工具_寄存器编辑器_P.wmv
第30课第4节_驱动调试之修改系统时钟中断定位系统僵死问题_P.wmv
第31课第1节_应用调试之使用strace命令跟踪系统调用_P.wmv
第31课第2节_应用调试之使用gdb和gdbserver_P.wmv
第31课第3节_配置修改内核打印用户态段错误信息_P.wmv
第31课第4.1节_应用调试之自制系统调用_P.wmv
第31课第4.2节_应用调试之使用自制的系统调用_P.wmv
第31课第5.1节_应用调试之输入模拟器之设计思路_P.wmv
第31课第5.2节_应用调试之输入模拟器之编写保存功能_P.wmv
第31课第5.3节_应用调试之输入模拟器之编写测试模拟功能_P.wmv

2.4、Linux应用程序的学习
对于大多数人来说,第1个C程序是在Windows的Visual Studio C++(简称VC)上写的,所以你们关心的也许是:嵌入式Linux应用程序,跟VC应用程序之间的区别:
①编译方法不同:
在VC上点点鼠标即可编译,对于嵌入式Linux应用程序,我们需要“交叉编译”:程序要在PC Linux上编译,但是运行时要放到单板上。并且,它的编译环境需要你自己搭建:解压出工具链后设计PATH,还要自己构造一套Makefile系统。
②调试方法不同:
在VC上点点鼠标就可以调试,对于嵌入式Linux应用程序,你可以更喜欢用打印;或是在PC Linux上通过GDB观察应用程序在单板上的运行状况。
③可用的资源不同:
对于VC程序,你可以直接使用微软公司提供的各种类库;对于嵌入式Linux应用程序,很多时候需要去寻找、下载、编译、使用开源库。
④功能不同:
VC程序运行在PC上,一般是用来解决某些纯软件的问题,比如整理数据、修图、联网播放音乐之类。嵌入式Linux应用程序一般都要操作若干种硬件,比如监控设备中要操作摄像头、存储音视频,无人机中要操作GPS、螺旋桨,POS机中要操作银行卡等等。它跟单板上的硬件联系很大,很多时候需要你懂点硬件知识,至少是知道怎么通过驱动程序来操作这些硬件。
上述4点的不同,花很少的时间就可以掌握。
如果你有志于开发应用程序,那么一定要有算法、数据结构、网络编程等基础,然后再掌握一些设计模式,最后就是多参加一些实际项目的开发了。

基于我们提供的视频,你可以这样学习:
①先掌握第1期讲解的根文件系统:
在后续学习中你会经常构建根文件系统,比如往里面添加库、修改配置文件让你的程序自动运行。
②掌握怎么编译、烧写u-boot、内核:
在实际工作中,一般来说不需要你去烧写u-boot、内核,但是在自学阶段还是自己掌握吧,免得去麻烦别人。按开发板手册即可操作,你甚至不用管里面的原理。
③掌握Makefile:
可以看如下第3期视频,以后编译程序时只要执行make命令即可:
第1课第4节_数码相框_编写通用的Makefile
④学习第1个项目:数码相框
该项目不使用任何开源的GUI项目,完全是自己构建一套GUI系统,实现了文件浏览、文件显示(文本和图片)、图片操作(放大、缩小、自动播放)等功能;涉及网络编程、多线程编程、开源库使用等等。
虽然数码相框作为一个产品已经落伍了,但是该项目所涉及的技术,特别是以面向对象的编程思想设计出一个模块化的、易扩展的系统,非常适合没有大型项目开发经验的人。很多同学,都是根据该项目所教会的编程思想找到了心怡的工作。

第3期视频取名为“项目开发”,而非“应用开发”,它的第2、3个项目跟内核、驱动耦合很大。如果只关心应用开发,或是急于找一份工作,可以先看第1个项目。
第2个项目涉及摄像头、ALSA声卡、WIFI网卡、3G网卡,这些都是在实际工作过程中经常用到的设备,比如我们后面补充的QQ物联就用到摄像头、声卡、WIFI网卡。
第3个项目是电源管理,讲解怎么讲你的单板休眠以省电。

3、怎么学习整个Android系统
待续...
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-12-23 08:15 , Processed in 0.074152 second(s), 7 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表