Chinaunix首页 | 论坛 | 博客
  • 博客访问: 346887
  • 博文数量: 108
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 65
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-16 11:38
文章分类
文章存档

2016年(2)

2015年(44)

2014年(62)

分类: LINUX

2014-01-20 10:20:58

原文地址:这半年搞了些啥? 作者:256893

   时间过得真快,一晃半年过去了,我的大三第一学期也快结束了。回忆这半年,好像还是看书居多。可我到底学了些什么?自己这么一问,还是回忆一下,记录下来,安慰那颗不安的心。
   自大一开始就开始搞单片机,大一暑假搞完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内核完全剖析不知看不看了,有大神说年代过于久远,了解启动过程就可以,然后写几个驱动,或许能找到相关工作,求大家给些意见吧!小弟不胜感激!
阅读(974) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~