我想学linux嵌入式linux内核编程,请问北京的...

3633人阅读
她山之玉(4)
转载,感谢作者,可以给从事相关行业的朋友一些方向性的建议。
------------------------------------------------------------------------------
有人说程序员可以说是一个吃青春饭的职业。而且做程序员很累,每天都是代码,感到很枯燥无味,一个人如果做到35或者40来岁.估计他的程序生涯也差不多到头了;也有人说程序员有两条进阶路线。一条是技术路线,由程序员,经系统分析师、系统设计师、项目经理、产品经理,直到架构设计师为归宿。另一条是领导路线,由程序员,经开发小组负责人、工程负责人,奋斗到项目经理。但是又有几个人能走到设计师、经理的位置,这使得好多想做程序员的毕业生很犹豫,不知道到底该不该做程序员。其实大部分职业都一样,有能力的自然会往高处走,没能力的自然就被淘汰。优胜劣汰的原则大家都知道,干别的行业三四十岁无所建树不也玩完吗?
做程序员很累这是大家都知道的,但是累和累还是不同的,当你把程序当作异物看待时,编程是一种负担,你会感到枯燥无味。如果程序员能把自己作为一个具有个性的人的主体存在,程序就只是人的属性的延伸。这时,程序就不会作为人的负担,就象人不会把自己的肢体作为负担一样。这样的人会不断努力,不断学习新知识,把程序作为人生奋进的载体,创造性地使用程序,会把编程升华成一种精神,主动地影响其它领域,这样的累你会感觉到一种满足、一种充实。
另外好多人因为看到程序员的高薪就想转行做开发,所谓“人往高处走”,这样也没有什么不对,但是我想对转行的人一些忠告:
1、非计算机特别是文科类因为没有学过操作系统,编译原理,数据结构,数据库,离散数学,软件设计等专业课程,逻辑思维也和理工科的不一样,开发语言理论积累从头做起显然很难,开始写代码可以,但是随着技术的积累必然会遇到瓶颈的,除非你很聪明否则最好不要入这行!计算机相关专业数学等理工科毕竟经过四年的理论基础逻辑思维的熏陶,经过几个月的培训,基本上就可以上手开发了。
2、作为程序员,学习能力也是很重要的,如果在学第一门编程语言的时候不能在半个月内,写出象样的小程序,你不能入这行。
3、作为程序员,如果你不能承受巨大压力的情况下,你不能入这行,因为在程序开发的过程中很可能遇到你完全陌生的技术,甚至听都没听过,而你必须再短时间内了解它,并写出完美的商业代码。这个过程不能超过一两周,这期间会有很大的压力。
有的学生认为女生不适合做JAVA,适合做测试,那是大错特错,女生一样会比男生强,关键看自已是不是有兴趣去学!如果真的想在测试方面有发展,也要至少做一到两年程序员再转向测试会更有发展,试想一下连代码都没编过的人去做测试能有什么前途呢!
------------------------------------------------------------------------------
嵌入式时代已经来临,你还在等什么?
---循序渐进学习嵌入式开发技术(南京凌嵌电子科技)
最近经常有用人单位给我打来电话,问我这有没有嵌入式Linux方面的开发人员,他们说他们单位急需要懂得在嵌入式linux环境下的软件开发人员,我回答说,现在每年毕业的大学生那么多,还招不到合适的软件开发人员吗?他跟我说,毕业大学生虽然多,但大部分都能力不够,不能达到他们的工作的要求。
该公司HR的一句话说出来我们现在的大学教学和大学生就业的现状:一方面每年那么多大学生毕业找不到合适的工作,另一方面很多用人单位和企业又找不到合适的人才。造成这种现象最基本的原因是学校教育和社会需求的严重脱节(本人认为在大学学习的是修炼内功的,使你能够走的更远的东西;大多培训机构则更针对大多企业需要,更偏重于技能培训)。其他的专业和行业我不清楚,但是对于嵌入式专业和嵌入式软件行业来说,通过与多所高校的老师和在校高年级本科生,研究生交流,我还是有所了解的,高校的嵌入式专业的教学现状我在前一篇文章里仔细分析过,造成很多嵌入式专业的学生在毕业后,还是很难达到用人单位的要求最主要的原因在于高校在嵌入式教学方面重理论和轻实践,很多嵌入式专业的老师也没有实际的工作经验,这样培养出的学生可能让他讲起来头头是道,但是让他去真正编写,调试一个应用程序就傻眼了,不知道从何下手,因为他们在学校的学习可能从来就没有老师带着他们实际调试过嵌入式程序,也没有机会让你去调试嵌入式应用程序,那些看起来非常不错的嵌入式实验箱大部分时间都躺在实验室睡大觉,只有在上实验课的时候搬出来让大家看2眼,摸2下,还没有弄明白怎么回事,又要收到实验室睡大觉去了。这样的教学模式,如何能培养出一名合格的嵌入式工程师呢?出现企业找不到合适的人,大学毕业生找不到合适的工作也就不奇怪了。
嵌入式专业是一门实践性非常强的学科,只有多动手,多实践,多编程,多调试,多看书,多思考才能真正掌握好嵌入式开发技术。
现在很多同学也意识到了学校培养模式和社会需求脱节问题,有一部分同学也先行行动起来,开始注重培养自己的实际动手能力,培养自己实际分析问题,解决问题的问题,培养自己在嵌入式专业实际编程,和调试程序的能力。但是嵌入式专业不同于其他学科,嵌入式专业是一门综合性非常强,涉及知识面非常广的学科,对于初学者来说,面对那么多教程,课本,那么多知识点,往往不知道从何处下手,不知道哪些是重点,哪些不是重点,这些知识点之间有什么关联,一脸的茫然,然后东一榔头,西一棒子,折腾了几个月甚至大半年后,还是找不着学习嵌入式的方向,还徘徊在嵌入式开发的大门之外。
那么,如何从零开始学习嵌入式开发技术, 进入嵌入式开发大门呢,笔者根据自己的嵌入式学习经历和多年的嵌入式linux教学经验,谈谈自己对嵌入式学习的一些想法和意见,希望对大家有所帮助。
一、 练好基本功
嵌入式系统专业是综合了计算机硬件技术,计算机软件技术以及电子电路技术的一门综合学科,所涉及的内涵和知识非常广泛,包括:数字电路,模拟电路,计算机组成原理,单片机基础,C语言基础,操作系统,数据结构,编译原理,计算机控制,计算机网络等知识。
在真正学习嵌入式开发之前,首先要打好基础。其中最重要的是C语言基础、数字电路、计算机组成原理三门课程。对于C语言,至少能单独编写调试一个3~ 500行的程序,能够了解C语言的基本语法规则,基本语句的使用,理解指针概念并能灵活使用各种指针。
计算机组成原理要能理解组成一个计算机系统的几大部件,计算机系统的结构,理解系统总线,理解处理器和计算机外部设备的关系,处理器和计算机外设是如何协调工作完成某一项功能的,计算机软件和硬件是如何分工协作完成某一项任务的,理解软件是通过寄存器来控制硬件的。
数字电路,模拟电路要了解其基本原理个概念,能看懂简单模拟、数字电路原理图。理解数字电路中的寄存器,时序的概念,能看懂芯片手册和时序图。对于其他基础课程,重点要理解其中的一些基本概念,如何使用等等。
对于电子,自动化,通信,计算机类专业的学生,在大二、大三开设的专业基础或专业课程中基本包含了以上的大部分课程。因为缺乏实践,可能学得不是很深入,但是一些基本的概念和基本知识应该还是有所了解,针对一些薄弱环节,自己稍微加强学习一下,基本上已经具备了学习嵌入式开发的基础。在嵌入式基本功学习阶段,最重要的是C语言和单片机基础,最好是能用C语言开发一个小的单片机程序,例如用C语言实现单片机和PC的串口通信,用C语言控制LED等显示,用C语言控制数码管显示等小程序。在这个期间需要的学习工具就是单片机51学习开发板。
二、嵌入式Linux应用开发
嵌入式开发基础知识学习完后,这时候你已经有了一定的嵌入式开发基础了,可以进行基于单片机的嵌入式系统设计了。单片机编程本身也是属于嵌入式编程,但是在这里我们只是把单片机开发当作嵌入式系统开发的基础,不把单片机开发作为真正的嵌入式系统开发,在这里我们的嵌入式系统开发是指在带有操作系统的嵌入式平台上的应用和驱动开发,特别指在嵌入式linux平台上的开发。
单片机开发在很早以前是非常热门的,现在在一些比较简单的系统上单片机也用的非常广泛,随着硬件的成本不断降低,在一些比较复杂的嵌入式设备一般都采用嵌入式linux操作系统,在嵌入式linux平台上进行开发,这样可以极大的提高嵌入式开发效率,提高系统的稳定性和可靠性,降低开发成本。由于linux是一个开源的操作系统,你可以通过阅读linux内核来理解内核的实现机制,如果有需要,你甚至可以通过修改内核源码来提高系统的性能;同时,全球参与linux开发的队伍非常庞大,网上有大量的嵌入式linux开发资料和源代码,很多你需要实现的功能在网上基本都能找到相关源码,参考一下别人写的源码,这样可以极大的提高自己的工作效率和技术能力,近几年,随着参与linux开发的人越来越多,linux系统的稳定性、实时性有了很大的提高,linux系统无论在服务器上还是嵌入式设备平台上都应用越来越广泛,现在包括华为、中兴、朗讯的各大通信巨头都开始把自己设备的底层平台从vxworks操作系统迁移到linux系统,可以说嵌入式linux是嵌入式技术发展一个方向,是嵌入式技术的一面旗帜。基于以上原因,我的建议是学嵌入式开发,就学嵌入式linux开发,相对于wince等其他的嵌入式平台,你可以真正学到更多的东西,学到嵌入式技术的精髓,同时他又符合嵌入式产业发展的方向,不容易被日新月异的技术发展所淘汰。
有了嵌入式开发的基础,又知道了我们为什么要学习嵌入式linux开发,那我们就要开始动手开始学习了,那如何开始学习嵌入式linux开发,从哪里开始着手呢?
很多同学这时候就开始买linux书籍,从图书馆借了一大堆关于linux的书:什么《linux使用基础教程》、《linux源码深度分析》、《linux情景分析等》、 《linux高级使用指南》等等。结果抱着这些图书看了10天半个月还是不知所云,当初学习的激情慢慢就消退了,最后不了了之,终究没有进入嵌入式开发大门。究其原因,是因为没有找到合适学习嵌入式开发的方法,做任何事情都有方法可循,找对了学习方法往往就能事半功倍;否则就可能是事倍功半,甚至劳而无功。
接下来我先分析一下同学们的几种常见的嵌入式linux学习误区,然后提出一种比较合适的嵌入式linux学习方法。
误区一、全身投入学习桌面或服务器版本linux系统
很多想学嵌入式linux 的同学经常问我,我不会linux系统,怎么学习嵌入式linux开发,于是他们就花费了大量的精力和时间去研究学习桌面版本linux系统的使用,什么redhat 、federo,、ubuntu等等都用过,如何配置linux,linux的各种使用命令都背的滚瓜烂熟,linux各种服务器的配置,还原备份各种操作非常熟悉,以为这样就学会了嵌入式linux开发。其实这是一个学习嵌入式Linux开发的误区。
Linux桌面环境只是嵌入式linux的一个开发工具,开发环境而已。我们的目标不是学习linux服务器的配置和使用,linux服务器的高级配置和使用那是另外一个领域,不属于嵌入式linux讨论的范畴。我们进行嵌入式linux开发,只是把linux桌面环境当作一个工具,在linux桌面环境下运行嵌入式linux开发工具,例如gcc 编译器,make工具来开发我们的嵌入式linux应用程序而已,对于嵌入式开发工程师来说,没有必要花费那么多的精力和时间去研究linux桌面版和服务器的应用,只要能了解最基本的操作即可。现在的桌面linux系统的图形化界面做的也相当好,跟window具有相同的易用性能,例如ubuntu很多操作都可以在图形界面下完成,就没有必要去记每个linux命令了。熟悉linux桌面系统的使用和基本操作命令,安排1~2天时间学习基本就可以掌握了。
误区二、直接阅读linux内核源代码
很多想学linux,在连linux是什么东西,一点都还不会使用的情况下去就阅读linux内核源代码,花了大量时间去阅读《linux源码深度分析》、《linux情景分析等》等书。这样的结果很可能就是看的头昏眼花,不知所云,最后只能放弃了。
这也是同学们学习嵌入式linux的一个误区,在有一定嵌入式linux开发基础后,带着一定的目的去阅读linux源代码,这样可以极大的提高你的技术能力,但是你在没有任何基础,对linux一点都不了解的情况下就去阅读linux内核源代码,无异于以卵击石,最后只能是撞个头破血流。
以上分析了同学们学习嵌入式linux开发的2个误区,那么如何正确的嵌入式linux开发呢?
做任何事情都有一个循序渐进的过程,学习嵌入式linux也一样。在有了一定的嵌入式开发基础后,学习嵌入式linux开发比较适合的切入点是从嵌入式linux应用程序开发开始,即暂时先不去关心嵌入式硬件平台,不去关心linux的底层驱动,先把精力集中在现有的嵌入式linux平台上进行嵌入式linux应用程序设计开发。学习嵌入式linux开发绝不是看看书就可以学好的,需要多实践,编程调试;因为嵌入式开发不同于普通的基于PC机或服务器的应用程序开发,嵌入式开发的应用程序是要烧写到嵌入式板卡或开发板上运行的,所以首先你要给自己购买一块开发板,现在普遍流行的嵌入式开发板都是基于三星的ARM9
CPUS3C2440,性价比极高。
有了开发板后,先后开始学习嵌入式linux开发环境搭建、嵌入式linux开发模型、linux内核移植和文件系统、嵌入式linux应用程序移植、嵌入式linux多进程,多线程应用程序设计、嵌入式linux网络编程,如果对嵌入式数据库或图形软件开发有兴趣的,可以进一步学习嵌入式linux数据库开发或基于QT的嵌入式linux图形应用软件设计。每学一章节都要通过相关实验来来验证你从书上学到的东西,同时提高自己编写代码,调试程序的能力。这个过程根据不同学员的基础不同,大概要花上1 ~ 2个月时间。学完这些课程后,你就有了再现有的嵌入式linux平台上进行应用程式设计开发的能力,到一些嵌入式软件公司去,能够胜任在现有的嵌入式linux平台上进行上层的应用程序开发工作。但是目前你还不能进行嵌入式linux系统和驱动的开发,也就是说,你现在只能在一个已经构建好的嵌入式linux平台上进行应用程序开发,而自己还没有能力根据实际需要去重新构建一个嵌入式linux平台。要让自己有能力根据实际需要重新构建一个嵌入式linux软硬件平台,这时候就需要进行下一阶段的学习了,即嵌入式linux系统和驱动开发。
三、嵌入式Linux系统和驱动开发
有了嵌入式linux平台上开发应用程序的基础,你已经对linux的功能、linux对应用程序提供的接口和系统调用有了一定的了解,知道如何利用linux提供的功能来进行应用程序开发,知道如何来使用设备驱动来进行应用程序设计,有了这些知识后,你就可以更深入的去学习Linux系统原理和基于Linux驱动的开发,Linux内核的裁剪,文件系统构,bootloader等等底层的知识了。
想要更深入学习嵌入式Linux系统和驱动开发,要学的内容非常多包括计算机软件、硬件、操作系统知识。这时候你可以参照以下的学习思路,因为嵌入式Linux系统和驱动的开发,和底层硬件联系非常紧密,所以首先我们从学习了解嵌入式硬件开始,包括:ARM体系架构、S3C2440微处理器接口设计、时钟系统、LCD屏接口、存储控制器及系统的存储空间分配、NAND FLASH接口和NOR FLASH接口等。对嵌入式系统硬件有了一定的了解后,接下来就可以开始学习bootloader了,理解bootloader的概念,功能,和原理,重点掌握U-BOOT的使用和移植。接下来就开始学习嵌入式linux内核机制,分析嵌入式Linux源码组成、内核的模块机制、内核进程管理、内存管理机制、linux的中断系统、Linux内核的移植等。有了内核的基础,就可以学习嵌入式Linux设备驱动开发了,重点掌握字符设备驱动开发,LCD屏设备驱动开发、触摸屏设备驱动开发、USB设备驱动开发,网卡设备驱动开发。学完这些知识点并通过相关实验验证后,嵌入式Linux系统和驱动的开发就算掌握了差不多了,能够胜任绝大部分基于linux平台的驱动开发工作了。学完这些知识点,根据学员的不同情况,一般需要花三个月到半年时间。通过这一阶段的学习,你在嵌入式Linux开发领域已经算是有了一定的功底,已经不再被人称为菜鸟了,已经进入嵌入式linux开发高手行列了。
四、更上一层楼
深入理解了嵌入式内核和驱动开发,这时候写个什么驱动对你已经没有什么问题了,开发过程中一些基本问题都难不倒你了。这是你可能想优化一下系统的性能,比如实时性,提高系统的启动速度,或者优化系统的内存管理机制,要达到修改内核核心机制的境界,你就需要去深入去研读linux内核源码了,参考《linux源码深度分析》、《linux情景分析等》等linux源码分析的书籍,深入理解linux各部分的实现机制和原理,以及可能存在的问题。你只有在深入理解现有代码和实现机制的基础上,才能提出更好的改进方案。如果你能达到这个境界,那你已经是高手中的高手,可以笑傲群雄了。
以上是笔者结合自己的嵌入式学习经历和嵌入式培训经验总结的一些嵌入式学习方法和步骤,这只是笔者对嵌入式学习的一些看法,希望对那些有兴趣学习嵌入式linux又不知道从哪开始学的同学们有所帮助。当然,每个人,每个同学的基础,各方面的情况都不一样,每个人都有自己适合的学习方式,本文章总结的一些学习方法和思路仅供参考,希望大家能找到适合自己的学习嵌入式开发的方式,早日进入嵌入式开发大门。
万丈高楼平地起,心动不如行动,有志从事嵌入式开发的同学不要再犹豫了,赶紧拿出实际行动,好好学习,为实现自己的伟大梦想而努力奋斗吧。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:39506次
排名:千里之外
原创:15篇
评论:16条
(4)(1)(1)(1)(2)(2)(5)(3)(1)(2)你的位置:
&& 详细内容
《从实践中学嵌入式Linux C编程》扫描版[PDF]
本资料所属分类:
更新时间:日
如不能下载,请查看
电子书http://www.minxue.net:&从实践中学嵌入式Linux C编程作者:& 曾宏安图书分类:&软件资源格式:&PDF版本:&扫描版出版社:&电子工业出版社书号:&4地区:& 大陆语言:& 简体中文简介:&
内容介绍:《高等院校嵌入式人才培养规划教材:从实践中学嵌入式Linux C编程》详细介绍了开发工具和Linux C语言基础、嵌入式Linux C语言高级编程、内核常见数据结构的解析与应用、嵌入式Linux编程基础、文件I/O操作相关的C语言应用及网络通信相关的C语言应用等,并设置了嵌入式Linux C函数参考附录。《高等院校嵌入式人才培养规划教材:从实践中学嵌入式Linux C编程》是大学院校嵌入式技术专业、电子信息类其他专业的专业课程教材,也可供高等及中等职业技术院校使用。电子书www.minxue.net下载地址内容截图:
第1章 嵌入式Linux C语言开发工具1.1 嵌入式Linux C语言概述1.1.1 C语言简史1.1.2 C语言特点1.1.3 嵌入式Linux C语言编程环境1.2 嵌入式Linux编辑器vi的使用1.2.1 vi的基本模式1.2.2 vi的基本操作1.2.3 vi的使用实例分析1.3 嵌入式Linux编译器GCC的使用1.3.1 GCC概述1.3.2 GCC编译流程分析1.3.3 GCC警告提示1.3.4 GCC使用库函数1.3.5 GCC代码优化1.4 嵌入式Linux调试器GDB的使用1.4.1 GDB使用实例1.4.2 设置/删除断点1.4.3 数据相关命令1.4.4 调试运行环境相关命令1.4.5 堆栈相关命令1.5 make工程管理器1.5.1 Makefile基本结构1.5.2 Makefile变量1.5.3 Makefile规则1.5.4 make使用1.6 Eclipse集成开发环境1.6.1 Eclipse 简介1.6.2 Eclipse相关术语1.6.3 安装Eclipse集成开发环境(假设宿主机环境为ubuntu10.10)1.6.4 Eclipse的使用1.7 本章小结1.8 本章习题第2章 嵌入式Linux C语言基础2.1 ANSI C与GNU C2.1.1 ANSI C简介2.1.2 GNU C简介2.2 基本数据类型2.2.1 整型家族2.2.2 实型家族2.2.3 字符型家族2.2.4 枚举家族2.2.5 指针家族2.3 变量与常量2.3.1 变量的定义2.3.2 typedef2.3.3 常量定义2.4 运算符与表达式2.4.1 算术运算符和表达式2.4.2 赋值运算符和表达式2.4.3 逗号运算符和表达式2.4.4 位运算符和表达式2.4.5 关系运算符和表达式2.4.6 逻辑运算符和表达式2.4.7 sizeof操作符2.4.8 条件运算符(?)2.4.9 运算符优先级总结2.5 程序结构和控制语句2.5.1 C语言程序结构2.5.2 C语言控制语句2.6 数组、结构体和指针2.7 函数2.7.1 概述2.7.2 函数定义和声明2.7.3 函数的参数、返回值和调用方法2.8 _attribute_机制介绍2.9 系统调用和应用程序编程接口2.9.1 系统调用2.9.2 应用程序编程接口2.9.3 系统命令2.10 本章小结2.11 本章习题第3章 嵌入式Linux C语言高级用法3.1 预处理3.1.1 预定义3.1.2 文件包含3.1.3 条件编译3.2 C语言中的内存分配3.2.1 C语言程序所占内存分类3.2.2 堆和栈的区别3.3 程序的可移植性考虑3.3.1 字长和数据类型3.3.2 数据对齐3.3.3 字节顺序3.4 C和汇编的接口3.4.1 内嵌汇编的语法3.4.2 编译器优化介绍3.4.3 C语言关键字volatile3.4.4 memory描述符3.5 本章小结3.6 本章习题第4章 嵌入式Linux C内核常用数据结构4.1 链表4.1.1 单向链表4.1.2 双向链表4.1.3 循环链表4.1.4 ARM Linux中链表使用实例4.2 树、二叉树、平衡树4.2.1 树的定义4.2.2 二叉树4.2.3 平衡树4.2.4 ARM Linux中红黑树使用实例4.3 哈希表4.3.1 哈希表的概念及作用4.3.2 哈希表的构造方法4.3.3 哈希表的处理冲突方法4.3.4 ARM Linux中哈希表使用实例4.4 本章小结4.5 本章习题第5章 嵌入式Linux文件操作5.1 Linux文件系统概述5.1.1 虚拟文件系统5.1.2 通用文件模型5.1.3 Linux下的设备文件5.2 Linux下的I/O操作5.2.1 不带缓存的文件I/O操作5.2.2 标准I/O5.3 Linux下对文件和目录的操作5.3.1 文件类型5.3.2 文件访问权限5.3.3 获取文件属性5.3.4 修改文件访问权限5.3.5 创建目录5.3.6 创建链接文件5.3.7 删除文件5.3.8 重命名文件5.4 嵌入式Linux串口应用开发5.4.1 串口概述5.4.2 串口设置详解5.4.3 串口使用详解5.5 本章小结5.6 本章习题第6章 嵌入式Linux进程和线程编程6.1 Linux进程概述6.1.1 进程描述符及任务结构6.1.2 进程的调度6.1.3 Linux中的线程6.2 Linux进程控制相关API6.3 ARM Linux进程间通信6.3.1 管道通信6.3.2 信号通信6.3.3 共享内存6.3.4 消息队列6.4 ARM Linux线程相关API6.5 Linux守护进程6.5.1 守护进程概述6.5.2 编写规则6.5.3 守护进程实例6.6 本章小结6.7 本章习题第7章 网络通信相关的C语言应用7.1 TCP/IP协议简介7.1.1 TCP/IP的分层模型7.1.2 TCP/IP分层模型的特点7.1.3 TCP/IP核心协议7.2 套接字的基本知识7.2.1 套接字概述7.2.2 地址结构和字节序7.3 套接字相关的API及应用7.3.1 socket函数7.3.2 bind函数7.3.3 connect函数7.3.4 listen函数7.3.5 accept函数7.3.6 send、recv函数7.3.7 sendto和recvfrom函数7.3.8 close和shutdown函数7.3.9 setsockopt和getsockopt函数7.3.10 getpeername函数7.3.11 gethostname函数7.3.12 编程实例7.4 套接字高级编程7.5 本章小结7.6 本章习题附录A 嵌入式Linux C函数快速参考
自带站内搜索End-->
相关学习资料您的位置:
少走弯路 从裸机编程到嵌入式Linux编程思想的转
发贴人:222.20.19.*发贴时间:【】[]
笔者学习嵌入式Linux也有一段时间了,很奇怪的是很多书讲驱动方面的知识,也有很多书讲ARM9方面的知识,但是从以前51形式的(对寄存器直接操作,芯片的功能模块)方法,和思维模式,变换为基于Linux操作系统,讲这个思想转变的书几乎没有,让初学者走了很多弯路,撞了很多难墙。 && ()&& () 笔者因此写上自己的学习心得,希望能给和我一样转变做嵌入式Linux这块的朋友一点帮助,早点入门,于愿足矣让一起回顾一下51形式的方法,以一个简单的LED例子:通过串口向其发送一串指令,让LED灯闪烁,闪烁频率由串口发送的指令决定于是开始:一开始各种晶振,要用的功能模块:UART,GPIO,定时器那么就会通过设置寄存器的各种位,把UART配置为中断模式,GPIO对应的LED引脚为输出模式,用于控制LED灯的暗灭,最后定时器,来控制暗灭的频率相信有过嵌入式裸机经验的朋友们一定都觉得这很简单,但是如果跑上了操作系统,那又应该怎么办?嵌入式Linux分为驱动层和应用程序层什么意思?大家一定偶尔听过,对Linux设备的操作就像操作文件一样简单,打开,写入,关闭听起来是很简单,听完就算了,也不知道到底说什么驱动层就相当于在51形式中的功能模块,在Linux中,已经把所有函数封装好了举例:笔者用的at91sam9260的芯片,现在我要把PB1引脚设置为输出模式,且初始值为低电平,则调用系统封装好的函数:[cpp]这个函数位于Linux内核源代码arch/arm/mach-at91,(我用的是at91的芯片)要用到什么函数进去找在arch/arm下有很多文件夹,以后需要自己根据自己的需求去选择相应的芯片找函数,这个笔者认为是Linux不人性化的地方,需要改进,只有有经验的工程师才能轻松找到,初学者真的要费很大精力而那些晶振时钟就不用写了,在Linux操作系统运行的时候已经帮你好了还有串口也已经好了,在Linux有专门的操作函数,大家可以看看Linux下串口操作的相关资料,这里不赘述当然驱动层完成的还不只这些工作,剩下的工作在讲玩应用程序层之后再介绍应用程序层:这是一个完全与硬件无关的层次,就相当于51形式的逻辑层一样那么怎么和驱动层打交道呢?大家回忆那句话:像操作文件一样,操作硬件设备没错,就是操作文件每个硬件设备驱动会有一个设备文件(一般要手动生成,自动生成要在驱动中写好也行)例如为LED灯取一个设备文件名字为leds,然后在dev/leds生成这个设备文件,应用程序用open方法打开文件后,得到文件描述符fd,那么以后操作LED这个设备就是操作这个fd[cpp]fd = open (“dev/leds”, flags);到底怎么操作fd才能像操作文件一样操作硬件设备呢?就是命令机制!通过一个非常重要的函数ioctl看过我上几篇文章的朋友们一定知道这个函数,这就是应用程序和驱动程序的接口之一假设定义了命令 LED_ON和LED_OFF(定义命令的方法见前几篇文章),那么要让LED闪烁,在应用层只要写:[cpp]{}是在应用层看来这个是不是很简单?但是却苦了驱动层了刚刚说到驱动层做的事情不只是模块功能,不错她还有一个功能就是完善ioctl,根据相应的命令进行相应的动作(ioctl是比较复杂的,这里只是举了一个最简单的例子,朋友们还是要多看一些书籍和实验),这里是不是连定时器的都不用自己写,直接调用系统的休眠函数来达到延迟的目的咯~~~让再次回到驱动层,驱动层就要完善这个ioctl了,因为驱动层可以直接对硬件操作,让输出高电平和低电平驱动的操作就比较复杂了,这里只能简单讲下概念了,因为这时已经是Linux设备驱动开发的内容了关于Linux设备驱动的总结文章,会在以后再写,建议大家可以看看华清远见的Linux视频这篇文章的主要目的是让大家思想上从51形式的转变到嵌入式Linux思想,希望大家能转变过来思想,踏入嵌入式Linux之门!
向好友推荐本贴:&&&& 标题:《少走弯路 从裸机编程到嵌入式Linux编程思想的转》&&&& 地址: .cn/Article/201601/showp1.html
发表您的评论
点评字数 0
?尊重网上道德,遵守中华人民共和国各项有关法律法规
?承担一切因您的行为直接间接导致的民事刑事法律责任
?本站管理人员有权保留或删除其管辖留言中的任意内容
?本站有权在网站内转载或引用您的评论
?参与本评论即表明您已经阅读并接受上述条款
?共同建立健康的网络社区,请向管理员举报不良帖子
?举报邮箱:}

我要回帖

更多关于 嵌入式linux内核 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信