Chinaunix首页 | 论坛 | 博客
  • 博客访问: 63597
  • 博文数量: 10
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 143
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-20 21:24
个人简介

学习是一种修行

文章分类

全部博文(10)

文章存档

2014年(2)

2013年(8)

我的朋友

分类: LINUX

2014-01-08 16:06:40

   时间过得真快,一晃半年过去了,我的大三第一学期也快结束了。回忆这半年,好像还是看书居多。可我到底学了些什么?自己这么一问,还是回忆一下,记录下来,安慰那颗不安的心。
   自大一开始就开始搞单片机,大一暑假搞完51,也做出了些作品,时钟显示,那时突然一想,家里的电子钟竟然买这么贵,原来就是这么做出来的,感觉学了很多东西的样子。大二或许说是充实的一年,但也是最苦逼,这一年主要弄飞思卡尔智能车竞赛,倒也把开关电源,数据采集,pid算法学得马马虎虎,也能跑个2.2m/s的水平,(一看比赛,也能拿华南赛区二等的水平),不过感觉时间用多了而随着校赛的失败,也就是大二暑假到现在,我开始了嵌入式linux的学习。
   
   开始linux
   
    大二结束,暑假就开始了,在老师的推荐下,买了块开发板,开始照着卖家的开发手册,搭建开发环境、nfs数据共享、
移植u-boot、操作系统、然后移植了驱动、应有程序开发。搞了这些,什么都不懂,只是了解这个流程。很迷茫,感觉这也不会那也不会:看u-boot,汇编看不懂;看移植,都不知道什么和什么,连内核是什么都不知;更坑爹的是,看驱动移植和应用开发,我连编程的不会,想fopen、getchar那些C库函数,以为这是linux特有,后来才知道那是C语言,回去翻翻c语言教科书,原来老师没有讲,自己也没去看,第一次感悟原来自己连最基本的C语言都不会。不过这个过程虽然很迷茫,但也有收获:学会了linux开发环境的搭建arm-linux-gcc,nfs数据共享的搭建,对内核有了概念,也了解了arm的基本,了解了什么是驱动,什么是应用程序。

   AUPE


  暑假就这样糊里糊涂的过去了,大三也来了,
面对暑假傻瓜式照做有颇多不解,导致了迷茫好些时候,天天百度、谷歌怎么去学,而这网上的回答或者博客更像百家争鸣,各有各的说法,不知信谁,后来根据一些博客和回答,我开始学习AUPE这本经典书籍,开始看时感觉挺好,让我了解了不少新的东西,不过内容很多,记不住的赶脚。或许是第一次读外国书籍,或许是基础太差,看了前面十章,也敲了些代码。而后找了一般国内的linux C编程一站式学习 是宋劲杉写的,很实用,让我c语言得到了提高,也了解什么是系统调用,什么是C库函数,而之前暑假的编程疑惑也解开了,这本书是我学的最爽的一本书,十一长假的七天就搞定了,不过这是有C的基础上。而最后的网络编程更是喜爱,简单的代码实现两台电脑的通信,让我大发遐想,做完这些实验,不免有些兴奋,有了些成就感。学完了这本,虽还是有不少的疑问,但对linux应用编程已经可以上手,再回去翻翻AUPE,感觉那根本就是一本字典,那么多谁也记不住,除非你全部都用的很多,我想如果应用开发时拿一本AUPE在身边,要用时查查,详细看看,应该不成问题。

   LINUX驱动


   学linux之初,我的想法是以后的工作是嵌入式linux驱动,而怎么去学驱动,却茫然不知,不断地百度,最终锁定宋宝华的《linux驱动开发详细》,在此之前还看了下韦东山的
嵌入式Linux应用开发完全手册》了解基本硬件知识,但不够深入,我想以后有空还是要回去读读。《linux驱动开发详细》这本书比较注重实践,看了字符驱动就看不下去了,不是说它不好,而是可能不大适合那时的我,又或许我没看一本书都有一本书来垫背,。不过确实我看了这本书的前半部分,我还是不知道什么是字符驱动。反过来,这本书给我带来的是:对驱动有一定的概念,知道驱动是干什么的(和单片机设置那些寄存器的类似)。为我看ldd做了一定的基础。然后就真的去看ldd了,ldd很是经典,一开篇就把很多问题解释了一边,好像是专门为我解惑而来。特别是第三章,把字符驱动解释的淋漓尽致,看着那一个爽字了得。基本初学者不懂得都有,open做什么,release做什么,read、write做什么;在跳出这段代码,并移植到开发板上,我的感觉是我真的懂字符驱动了。印象深刻的是copy_to_user和copy_from_user这两个函数,让我记住了内核与应用是不一样的,访问内核要通过专用函数或者系统调用才安全。而后陆续介绍了并发及管理,分别用什么。中断分上下两部分,下半部分用工作对列、软中断、tasklet等等;而后是内存分配,了解了内存分配的基本函数和虚拟内存,不过有些模糊,而后的章节就越渐模糊,以致于块设备驱动也没看,那时的感觉是,这些已经涉及到内核了,或许内核是一定要学习的。

  内核

  接下来当然是学习内核,与其说学习内核,不如说是了解。我速速买了lkd。这本也是学习linux的经典。300多页。先后学习了进程管理、进程调度、系统调用、内核数据结构、中断、中断的上下部分,内存管理,内核同步、时间管理,
这些基本都认真看了,印象还是比较深刻。其中进程管理和调度,让我了解了进程数据结构task_struct,写时拷贝fork和vfork的不同,vfork调用exec()失败不明后果,而现在内核基本不实现。一般都用fork安全些。创建了进程,谁先运行就要用到调度算法,cfs简单了解下。另外就是系统调用的了解及其实现,当时没去实现一个系统调用很后悔,有空应该写一个看看,深入感受下。内核数据结构包括链表、队列、二叉树等等,不过链表至今还是不很了解,有点模糊。由于驱动那里有疑问,加上单片机那里有基础,中断、锁还是看得比较深,说起来还是能将几句。知识这本书不是太深入,对于我这个初学者,代码也不知怎么找,所以感觉就一些接口而已,深入的话绝非这么简单。但作者说的还是非常不错的,让看过一遍的人基本懂得内核包括了那些,是一个整体的把握。 
   
    要想深入,只能看源代码,所以就开始了linux0.11之旅——《linux内核完全剖析》是赵炯老师所写,可谓国内经典啊!我现在刚看完内核初始化。解开不少疑惑,也学到了不少
,前面的原理介绍了很详细,是让人真正学习操作系统的,前面的什么,内存管理、进程调度全部详细的说了一遍,程序如何执行,cpu具体怎么操作,看完之后,都非常的清楚。在我看完的那些章节,保护模式是印象最深的,进入保护模式下对内存进行段保护和分页保护机制,段大小可变,页是固定的,这个过程也把内存管理深入的诠释了一番。另一个印象深刻的是启动过程了,利用uboot中断将代码拷到内存一个地方,然后跳转到该地址,将内核代码拷到0地址,并跳转到0地址开始执行。在启动代码下初始化硬件一次,内核代码又重新初始化一遍,以符合内核习惯。这个过程,我了解了基本的操作系统知识,学会了看内核代码,另外的收获是学会基本的汇编,内敛汇编,不过不是很系统。
 
   总结,半年来,迷茫走来,也还在迷茫中,看了不少书,也烂尾很多了,难道是烂尾新闻啊!这个做法不可取,但也是一种方法吧!这个过程确实学到了不少,远的不说,基本的都大概了解了。
AUPE感觉就不去再看了,用时再查。lkd还是接着把它看完,ldd要再研究一番,毕竟自己想做驱动,除了块开发板,也没什么好实践的工具。或许工作时才能学到更多。而linux内核完全剖析不知看不看了,有大神说年代过于久远,了解启动过程就可以,然后写几个驱动,或许能找到相关工作,求大家给些意见吧!小弟不胜感激!
阅读(3607) | 评论(6) | 转发(1) |
给主人留下些什么吧!~~

2568932014-01-20 21:42:51

leon_yu:被楼主勤奋务实的学习态度打动,忍不住也啰嗦几句。
你列的学习过程,书籍等基本都OK,相信你收获也肯定不小。不敢说教,给点过来人的经验:
1.对驱动说,宋宝华的《linux详解》是本很好的入门,实例多,很多代码甚至可以直接用,简单说,像各种兵器或实战招式,能直接干活;LDD3,地位不用说,是驱动书的圣经,国内很多书都是照他抄的,内容偏理论,概念,比较难,但理解本书,对驱动认识会有质的提升,我理解为LDD是内核所需的内功。怎么取舍,如何用这两本书,看个人需要。
2.你相对缺乏的一点是,了解各种外围设备的硬件原理,即建议多阅读各芯片spec,这一块韦东山的《嵌入式》也可以参考;
3.纸上得来终觉浅,驱动的实践性很强,建议做点实际项目,回头来看,你读过的书,会有不同的理解。

最后,扯点技术之外的淡,驱动不是高薪代名词,不一定比干其他的好多少,当然也不会差多少。个人觉得,工作,随自己兴趣走,这样虽然屌丝,但做喜欢做的事,多少有点快乐。

谢谢前辈能看我的啰嗦及指导,方向对了,就不怕了,可以努力深入学习。宋宝华的书,当然好,只不过不适合我到时的水平和思维方式。我比较讨厌不知其中所以然而直接弄,有点死脑筋,不过为了安全,这习惯还是好的。所以他的书到时不合适,现在就合适。正好要多实践。对于高薪,其实我也知道一点点,只能说应用也驱动也好,其他也好,毕业可以找到个一般工作,养活自己就可以了,其他吧!以后再说。现在准备准备,怕出去什么都不懂,丢脸

回复 | 举报

leon_yu2014-01-15 17:42:19

被楼主勤奋务实的学习态度打动,忍不住也啰嗦几句。
你列的学习过程,书籍等基本都OK,相信你收获也肯定不小。不敢说教,给点过来人的经验:
1.对驱动说,宋宝华的《linux详解》是本很好的入门,实例多,很多代码甚至可以直接用,简单说,像各种兵器或实战招式,能直接干活;LDD3,地位不用说,是驱动书的圣经,国内很多书都是照他抄的,内容偏理论,概念,比较难,但理解本书,对驱动认识会有质的提升,我理解为LDD是内核所需的内功。怎么取舍,如何用这两本书,看个人需要。
2.你相对缺乏的一点是,了解各种外围设备的硬件原理,即建议多阅读各芯片spec,这一块韦东山的《嵌入式》也可以参考;
3.纸上得来终觉浅,驱动的实践性很强,建议做点实际项目,回头来看,你读过的书,会有不同的理解。

最后,扯点技术之外的淡,驱动不是高薪代名词,不一定比干其他的好多少,当然也不会差多少。个人觉得,工作,随自己兴趣走,这样虽然屌丝,但做喜欢做的事,多少有点快乐。

2568932014-01-15 13:26:41

AoyamaRyo:很充实啊。
忍不住罗嗦几句,
2010年的时候看到一本书《自己动手写操作系统》,写的很煽情。于是啃了一半,到CPU的中断门、陷阱门之类内容时感觉头都大了。徘徊了一段时间听说了ARM,RISC指令集的CPU的确比80386容易操作。有一个韩国作者写了一本Linux驱动开发详解,但他的第一个例子用并口实验。我的电脑没有并口,又搜索了一通,决定买块开发板。最终选了OK6410,苦也,感觉按照它的实验手册学不到什么东西,于是想移植UBOOT,但2011年的时候关于S3C6410操作4K/page Nand的资料并不像现在这么丰富。看了它的芯片手册,明确说了最大支持2K/Page,而我的Nand Flash的确是4K/Page,这对一个数学系的人来说实在很无助。后来荒废了好长一段时间,开发板搁置了两年。再后来对自己很气愤,于是大体上读了Uboot1.1.6的源码,用半本挂历作笔记。
    APUE是本好书,最新版依然延续了史帝文的风格,只是看了三四章就没再看。有些浮躁,好书太多了,不知道看哪本好。有些书明知道自己不会看(或看不懂),还是会去买。

    最终得出结论,嵌入式这玩意,“独学而无友,则耗时又费力”。
 &nb

是啊!充实但略带迷茫,自己动手写操作系统我也看了一下,不过看完也写不出什么来,知识了解了大概框架。很多书都是经典,也值得一看,只是经历有限,不能一一都看。uboot源码还是很优秀吧!有空我也打算看看。嵌入式除了一个人学习难,更重要的是没有项目,相信到了公司干着活,迷茫会缓解很多

回复 | 举报

AoyamaRyo2014-01-10 09:11:50

很充实啊。
忍不住罗嗦几句,
2010年的时候看到一本书《自己动手写操作系统》,写的很煽情。于是啃了一半,到CPU的中断门、陷阱门之类内容时感觉头都大了。徘徊了一段时间听说了ARM,RISC指令集的CPU的确比80386容易操作。有一个韩国作者写了一本Linux驱动开发详解,但他的第一个例子用并口实验。我的电脑没有并口,又搜索了一通,决定买块开发板。最终选了OK6410,苦也,感觉按照它的实验手册学不到什么东西,于是想移植UBOOT,但2011年的时候关于S3C6410操作4K/page Nand的资料并不像现在这么丰富。看了它的芯片手册,明确说了最大支持2K/Page,而我的Nand Flash的确是4K/Page,这对一个数学系的人来说实在很无助。后来荒废了好长一段时间,开发板搁置了两年。再后来对自己很气愤,于是大体上读了Uboot1.1.6的源码,用半本挂历作笔记。
    APUE是本好书,最新版依然延续了史帝文的风格,只是看了三四章就没再看。有些浮躁,好书太多了,不知道看哪本好。有些书明知道自己不会看(或看不懂),还是会去买。

    最终得出结论,嵌入式这玩意,“独学而无友,则耗时又费力”。
 &nb

2568932014-01-09 13:15:18

Ubuntu_LW:坚持下去吧~加油!

谢谢!

回复 | 举报