linux 编译3g驱动_连载 | 系统学习Linux+Android:bootloader编译等常见驱动程序编写、调试学习(三)...

原标题:连载 | 系统学习Linux+Android:bootloader编译等常见驱动程序编写、调试学习(三)

导语

昨天给大家讲了嵌入式开发前需要准备的知识:基本C语言编程、PC linux命令行操作,硬件知识,再从windows系统单片机开发,过渡到linux arm裸机程序开发。今天再来详细讲解下bootloader编译(本文以u-boot为例)执行,linux内核原理、根文件系统,以及各类在工作中常见驱动程序编写、调试方法。

2.2.7、bootloader的学习

bootloader有很多种,vivi、u-boot等等,最常用的是u-boot。

u-boot功能强大、源码比较多,对于编程经验不丰富、阅读代码经验不丰富的人,一开始可能会觉得难以掌握。但是,u-boot的主要功能就是:启动内核。它涉及:读取内核到内存、设置启动参数、启动内核。按照这个主线,我们尝试自己从零编写一个bootloader,这个程序相对简单,可以让我们快速理解u-boot主要功能的实现。

从零编写bootloader的视频有:

分析u-boot 1.1.6的视频有:

移植一个全新u-boot的视频有:

《嵌入式Linux应用开发完全手册》上对u-boot的讲解有如下章节:

学习方法如下:

① 先学习《从零编写bootloader的视频》,这可以从最少的代码理解bootloader的主要功能;

② 再看书上对u-boot的讲解,并结合《分析u-boot 1.1.6的视频》来理解;

③ 最后,有时间有兴趣的话,看《移植一个全新u-boot的视频》,这不是必须的。

学习程度:

① 理解u-boot的启动过程,特别是u-boot代码重定位:怎么从Flash上把自己读入内存;

② 理解u-boot的核心:命令;

③ 知道bootloader如何给内核传递参数

④ 知道bootloader是根据“bootcmd”指定的命令启动内核

⑤ 作为入门:只求理解,不要求能移植u-boot

2.2.8、Linux内核的学习

前面说过,内核本身不是我们学习的重点,但是了解一下内核的启动过程,还是很有必要的:工作中有可能要修改内核以适配硬件,掌握了启动过程才知道去修改哪些文件。

分析内核的视频有:

移植内核的视频有:

《嵌入式Linux应用开发完全手册》上对内核的讲解有如下章节:

学习方法如下:

① 先看书,并结合《分析内核的视频》进行理解

② 如果有兴趣,再根据《移植内核的视频》自己掌握移植内核,这不是必须的

学习程度:

① 知道机器ID的作用,根据机器ID找到单板对应的文件

② 知道Makefile、Kconfig的作用,知道怎么简单地配置内核

③ 知道怎么修改分区

④ 作为入门:只求理解,不要求能移植

2.2.9 根文件系统

在驱动程序开发阶段,我们喜欢搭建一个最小根文件系统来调试驱动;

在开发应用程序时,也需要搭建文件系统,把各种库、配置文件放进去;

在发布产品时,你还需要修改配置文件,使得产品可以自动运行程序;

甚至你想实现插上U盘后自动启动某个程序,这也要要修改配置文件;

这一切,都需要你理解根文件系统的构成,理解内核启动后是根据什么配置文件来启动哪些应用程序。

分析根文件系统的视频有:

《嵌入式Linux应用开发完全手册》上对文件系统的讲解有如下章节:

学习方法:结合书和视频学习。

学习程度:

① 理解配置文件的作用

② 知道根文件系统中lib里的文件来自哪里

③ 可以制作、烧写文件系统映象文件

2.3、驱动程序的学习

《嵌入式Linux应用开发完全手册》对驱动程序的讲解不多,我们推出的“韦东山Linux视频第2期_驱动现场编写调试”,可以认为完全脱离了书本。

所以,驱动程序的学习完全按照视频来就可以了。

第2期的视频,对每一个驱动,先讲解硬件原理,然后从零写代码,从简单到复杂,逐渐完善它的功能。我们不会罗列专业术语,会参考日常生活的例子,力争用最形象的比喻让你轻松入门,同时又会很深入。

注意:我们可以让你入门时很轻松,但是要深入理解的话,这需要你跟着视频练习代码,这是个要慢慢思考的过程,不会轻松。

轻松的话,凭什么拿高工资?

再次申明:即使照抄也要写代码!很多人视频看得很高兴,但是写代码时就傻了。

2.3.1 经典字符设备驱动程序

视频中以LED、按键驱动为例,讲解并练习开发过程中碰到的机制:查询、休眠-唤醒、中断、异步通知、poll、同步、互斥等等。后续更复杂的驱动程序,就是在这些机制的基础上,根据硬件特性设计出精巧的软件框架。

相关的视频有(文件名中带“_P”的属于第2期加密视频):

《嵌入式Linux应用开发完全手册》上对字符设备驱动程序的讲解有如下章节:

学习方法:

① 沿着数据流向,从应用程序的对驱动程序的使用进行情景分析。

所谓情景分析,就是假设应用程序发起某个操作,你去分析其中的运作过程。比如应用程序调用open、read、ioctl等操作时涉及驱动的哪些函数调用。你要思考一个问题:一个应用程序,怎么获得按键信息,怎么去控制LED。把其中数据的流向弄清楚了,对字符驱动程序也就基本理解了。

② 学习异常和中断时,可以结合书和视频;对于驱动程序中其他内容的学习,可以不看书。

2.3.2、工作中各类驱动程序

我们的视频中讲解的驱动程序非常多,目的有二:

① 在你工作中遇到同类驱动时提供借鉴;

② 供你学习、练习,煅炼阅读驱动程序的“语感”,提升编写程序的能力,增加调试经验。

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

如果有时间,建议你学完这些所有的视频,直到你自认为:

① 给你一个新板,你可以很快实现相关驱动

② 给你一个新硬件,你可以很快给它编写/移植驱动。

我们录制的视频很多,下面只罗列到“课”,不罗列到“节”。

第2期视频:

第3期的驱动视频:

学习方法:

① 再次强调,不能光看不练:一定要写程序,即使照抄也得写;

② 必学:LCD、触摸屏、NAND Flash、Nor Flash、hotplug_uevent机制;

③ 学完之后,强烈建议换一个不同的开发板,尝试在新板上写驱动程序。

按视频学习会一切顺利,很多问题你可能没想到、没想通,换一个新板会让你真正掌握。

2.3.3、调试方法

有一种说法,程序是三分写七分调,我们从操作系统的角度提供了一些很有用的调试方法。

相关的视频有:

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个项目是电源管理,讲解怎么讲你的单板休眠以省电。

点击“阅读全文”

立即加入韦东山嵌入式linux开发之旅!

ARM 裸机1期加强版:

1.韦东山团队亲身授课,综合九年培训经验直击痛点、难点;

2.专门针对“三无”学员:无linux操作基础、无单片机开发经验、无硬件知识课程;

3.现场编写代码,相比旧1期,加强硬件基础知识、c语言、汇编知识讲解;

4.定期直播答疑+24小时qq在线答疑,每周布置课后巩固作业,随时了解学习进度。

从菜鸟进阶到嵌入式linux高手,必须要懂得编写嵌入式驱动程序!

从菜鸟进阶到嵌入式linux高手,必须要懂得编写嵌入式驱动程序!返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值