您的位置:首页 > 其它

转一本好书和一位好朋友一样重要

2010-12-03 22:49 225 查看
使用linux—〉linxu系统编程开发---〉驱动开发和分析linux内核。
先《鸟哥的LINUX私房菜》 然后《GNU/Linux编程指南》或机械工业出版社的《Unix高级环境编程》接着看驱动编程参考中国电力出版社的《Linux设备驱动程序》。然后:《深入理解linux内核》《情景分析》和源代码。
一本挨着一本~~

ARM和Linux学习方法的体会
如何才能学好或尽快上手ARM和Linux?这是很多初学者想问的,也曾经在网上讨论过。其实学习没有捷径,主要还是取决于学习态度和学习方法。ARM、Linux也一样,在此阿南根据自学过程中的体会和网上的讨论作一些总结。
ARM的学习。有了单片机或计算机结构的基本知识、C语言的基础,上手ARM是比较容易的。学习ARM,首先应该了解一下ARM的体系结构,了解它有哪些版本、哪些模式、哪些寄存器、异常等。这方面的内容可以参考《ARM体系结构与编程》一书,这本书介绍的内容还是很全的,可以先快速地浏览,特别是汇编指令不需要记住,以后应用时再查。其次选定一种具体厂家型号的ARM处理器,学习该处理器相关的开发工具的使用,如开发环境、仿真器及评估板等。然后可以分析该处理器的外围扩展方法,如SDRAM、NAND Flash等,一般官方或第三方都会提供原理图,可以用来分析。接下来要理解该处理器的启动过程,亲自尝试从一块裸板逐步运行自己的应用程序,也可以参考官方的启动代码及例程。最后就可以调试、测试该处理器的各种外围部件,例如定时器PWM、串口、LCD等,特别是中断及执行过程。
Linux的学习。尽管我们最终应用的是嵌入式Linux,但还是要先在PC机下学习,因为无论基于PC机还是嵌入式处理器的Linux开发、编程、调试等都是相近的,而PC机的性能、资源等都更加丰富,嵌入式Linux的开发环境通常也都建立在PC机Linux环境下,另外Linux大量的书籍也都是针对PC机写的。阿南觉得学习的顺序应该是先在PC机上安装Linux系统,再参考相应的入门书籍,主要是熟悉Linux环境,学习常用的命令和操作(不一定多,基本、常用的就可以,以后在使用过程中慢慢积累),理解各Linux下的目录结构与作用等。其次,学习在Linux环境下编程。可以参考《GNU/Linux编程指南》或《UNIX环境高级编程》,它们介绍了文件描述符的概念,打开、读、写等操作的系列基础知识;没有这些基础而直接看《Linux设备驱动程序》会觉得困难。再次,了解一下Linux内核源代码树的目录结构、编译等。最后,学习《Linux设备驱动程序》,理解驱动程序的结构框架等。根据实践需要也可学习网络编程和图形用户界面GUI编程,可以参考学习《UNIX网络编程》和《C++ GUI Qt3编程》。另外由于Qt GUI是基于C++的,所以需要学习C++的知识,也可以选择其他如Microwindows、MiniGUI等。有了PC机的Linux基础及编程知识后,就可以直接应用于嵌入式了!此时需要一个硬件平台(如开发板或直接的产品等目标系统)和该平台的开发环境。一般的处理器原厂或第三方都会提供开发环境,所以不需要我们移植,它包括建立在PC宿主机上的编译等工具和嵌入式Linux内核(包括硬件驱动等BSP)源码。此时只须学习开发环境的建立和使用,以及将PC机所学的知识应用于具体的嵌入式平台。如果涉及硬件及驱动,那么应该有一定的硬件调试和解决问题的能力,此时单片机、ARM基础及外围设备接口的调试能力将起到很重要的作用。很多朋友(包括非电子、自动化专业的朋友)都希望将来从事Linux驱动方面的工作,认为学习了Linux驱动方面的知识就OK了,而往往忽略硬件本身的调试解决问题能力,阿南觉得这是不正确的。因为Linux驱动与前后台控制硬件外设的区别只在于它与应用程序的接口,它要遵循一定的结构和规则,这种规则涉及的也就是通常讲的Linux驱动知识和技术,它是固定的,是容易掌握的,只要遵循就不会出问题。而硬件及外设是千变万化的,它所涉及的技术是多方面的,除处理器本身外,还有各种接口及协议、数字、模拟技术等。这些在设计、调试时是很容易出现问题的,此时要求我们有一定的调试、测试手段和方法。所以,阿南认为要想成为一名优秀的ARM Linux驱动工程师,首先必须是一名优秀的、具有丰富调试经验的单片机或ARM处理器应用工程师。
本书的使用与相关知识的同步学习曾经有一个朋友这样告诉阿南:“如果看您的笔记就能掌握ARM Linux驱动,那就是最好的目的了”。对不起,阿南做不到,写不出这种“葵花宝典”。这本书的前身是在21IC BBS上发表的《嵌入式Linux入门笔记》,主要是阿南在自学Linux和在项目中应用Linux时记录的笔记、出现的错误和心得等,是自己平时工作中非常重要的参考手册。发表后得到众网友的喜爱、支持及北航出版社胡晓柏主任的鼓励,故花更多的时间、精力将笔记丰富出版。..
嵌入式是一门实践性很强的技术,而《嵌入式Linux入门笔记》主要记录的是Linux等相关的软件部分,没有包括硬件相关的部分,为了让读者能够亲自实践,故增加了ARM及硬件部分。并且亲自设计了AN2410SSB(最小系统板)和AN2410MB(扩展底板),给出了所有原理图,介绍了制作过程,记录了用裸板开始调试的步骤和过程,介绍了如何让ARM运行及启动等各方面的内容,以及前后台(无操作系统下)的应用等。本书没有将所涉及的技术及理论都包括进来,不仅篇幅有限,而且也没有必要,因为已有太多相当经典的资料。
本书第1章为概述。第2章分析了硬件的原理图,读者应该阅读S3C2410A的数据手册,特别是信号引脚功能描述,内存控制部分。第3章主要介绍了关于Protel原理图和PCB板的绘制,如果读者没有Protel的基础可以参考人民邮电出版社的《电路设计与制版——Protel 99入门与提高》或其他Protel书。如果有Protel基础,只是没有绘制过多层板,那么可以参考人民邮电出版社的《Protel 99SE多层电路板设计与制作》。第4章介绍了S3C2410A系统核心部分的调试方法和工具的使用,以及利用工具进行测试的方法、手段。该部分是整个系统的基础,也是非常重要的,读者需要多试验,出现问题时多参考S3C2410A的数据手册。第5章专门分析了S3C2410A的启动代码,用于理解S3C2410A的启动过程,中断处理过程及存储器等相关部分,也是非常基础和重要的。因为启动代码由汇编组成,此时可参考清华大学出版社的《ARM体系结构与编程》,学习理解ARM的汇编语言等相关知识。第6、7章为硬件平台上实现ARM的外围实验和扩展实验,读者仍然要参考S3C2410A的数据手册,在仿真调试情况下理解ARM内部的寄存器、存储器、状态寄存器等与ARM体系相关的知识。另外还要阅读如WAV音频格式,SD卡规范及相关的数据手册等。CPLD部分读者可以参考电子工业出版社的《基于Quartus II的FPGA/CPLD设计》,学习基本的工程创建,图形设计输入,编译和编程等。Altera CPLD更详细的资料可以去官网下载。第8章介绍了前后台系统还需要考虑的相关知识:NAND Bootloader、文件系统和图形界面。图形界面部分,读者需要理解一些基本的绘图原理和算法,可以参考机械工业出版社的《计算机图形学的算法基础》。第9章介绍了在PC机下的Linux各方面技术,这些都是嵌入式Linux的基础,非常重要,涉及的知识内容也很多。在该章中,阿南只是总结了一些实践操作的部分内容,所以还需要读者自己去参考学习Linux的这些书籍:Linux系统的基本操作参考清毕大学出版社的《Red Hat Linux 9系统管理》(这本书应该被实践安装的桌面Linux系统相应版本的书替代),应用编程参考清华大学出版社的《GNU/Linux编程指南》或机械工业出版社的《Unix高级环境编程》,驱动编程参考中国电力出版社的《Linux设备驱动程序》。第10章主要介绍S3C2410A的嵌入式Linux开发环境的搭建及工具的使用。这里采用的是MIZI公司的Linux for S3C2410平台,读者也可以直接参考《MIZI Linux SDK for S3C2410》文档。第11章介绍在S3C2410A下实现Linux驱动,很多原理性的知识依然要参考《Linux设备驱动程序》一书,而且要多试验验证。读者在调试实现过程中也可以直接参考Linux for S3C2410的内核源码中和硬件、驱动相关的代码例子(可以在Windows系统下安装Source Insight软件,方便阅读Linux内核源代码)。第12章介绍嵌入式Linux桌面系统,可读写文件系统YAFFS的实现,嵌入式Web服务器BOA、NFS及WIFI。这些都是实践性很强的应用操作,所以读者主要是应用它们,出现问题时上网查找相关应用操作,寻找解决问题的思路,再测试验证。第13章是网络编程方面的知识,主要参考清华大学出版社的《UNIX网络编程第1卷:套接口API》,目的是掌握TCP客服机/服务器的实现及网络的调试方法。第14章介绍嵌入式GUI开发环境的创建和开发方法,桌面系统的移植。学习前读者应该先学习基于Qt的应用编程,可以参考北航出版社的《C++ GUI Qt3编程》,如果没有C++的基础可以参考清华大学出版社的《C++程序设计教程》。
致谢
感谢我的导师(也是本书的另一位作者)——方强多年来的关心与指导,且对本书付出的辛苦劳动。
感谢我的公司——广州市天誉创高科技有限公司及同事们,他们对本书提供了很大帮助。段克为本书绘制了部分电路图,丁亚锋为本书编写并调试了部分程序。另外,还要感谢曾水生、李玉琪、刘卫国、张端峰、龙靖、彭雄飞、王勇、黄焕立、王菊林、黄斌、何运辉、吴建、方斌、黄伟、傅良英、胡孝发、黄志艳、张凯、欧孔德、梁家乐、宁雪玉、蔡青青及蓝萍等人的帮助。
感谢深圳英蓓特公司提供RealView MDK开发工具及相关资料和技术支持。感谢EDN网为本书创立书友会(http://group.ednchina.com/999/)和开展本书的AN2410SSB学习板助学等活动。
感谢北京航空航天大学出版社嵌入式系统事业部主任胡晓柏的信任与鼓励,感谢21IC BBS上网友们的支持、建议和帮助。
感谢我的父母、老师、姐姐、姐夫及所有亲戚朋友们,你们的关心与爱都是阿南不断前进的动力。
阿南的技术水平、经验都还很欠缺,书中的错误和不妥之处在所难免,恳请广大读者朋友们批评指正;也欢迎登陆21IC BBS的ARM论坛或《ARM Linux入门与实践》书友会与阿南交流,共同提高。...
阿南
2008年9月

应用编程参考清华大学出版社的《GNU/Linux编程指南》或机械工业出版社的《Unix高级环境编程》,驱动编程参考中国电力出版社的《Linux设备驱动程序》。
我个人推荐一个学习路线是:使用linux—〉linxu系统编程开发---〉驱动开发和分析linux内核。
怎么开始学linux内核:最好有三件宝物:《深入理解linux内核》《情景分析》和源代码。

  先看《深》,那主要讲原理,好像市场上有本讲原理性并且更浅,《linux内核设计与实现》听说不错。如果没有学习操作系统的,像我这样的,最好先看看操作系统原理的书。看了几遍后,就看情景分析,最好对着《深》看。两本交叉看,《深》是纲,《情》是目。最后深入代码。
关于要不要学习内核的问题,我的回答如下:不一定。如果你是喜欢钻研的那你进入内核会满足你的欲望。同时对你以后的嵌入式系统的开发有很好的影响。如果你想从事嵌入式linux系统开发,最好对内核有所了解。如果仅仅是做应用开发没有必要。我打个比喻:c、c++、java等语言是武林中的某个武林派别的话,如什么拳法,什么刀法等,那么linux 内核应该是一个人的内功的反应。

使用linux—〉linxu系统编程开发---〉驱动开发和分析linux内核。
先《鸟哥的LINUX私房菜》 然后《GNU/Linux编程指南》或机械工业出版社的《Unix高级环境编程》接着看驱动编程参考中国电力出版社的《Linux设备驱动程序》。然后:《深入理解linux内核》《情景分析》和源代码。
一本挨着一本~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: