嵌入式linux学习心得
两个月的学习期间,不仅学到了知识,更切身的感受到探索的魅力与发现新大陆的兴奋。第一次感觉操作系统不再那么神秘,第一次能看到操作系统的源码,而且还能随心所欲的对操作系统进行裁减于配置…… 这一切都是以前在windows下无法感受到的。linux是一片敞开的领地,任何人都能去探索。
第一次感觉到自由是使用VI编辑器。刚用的是时候感觉很不适应,这个命令那个操作的,怎么也不如鼠标方便。过了一段时间,感觉到自由与速度了,感觉到鼠标效率太低了,干脆在windows下也装了一个VI编辑器。word那东西,能不用就不用,省得还得腾出手去动鼠标。还有一次装mplayer(自己搞得),第一看到命令行下面的播放器,输个命令就能放歌,太神奇了!随着学习的深入,感觉一切都能够把握,不管是现在还是将来。
进入正题,讲讲自己学到了那些东西,有哪些收获。首先是c语言,原来感觉c语言好简单,大学课程里也学过。来了在发现,正如网上所说:c语言好比少林拳,看似简简单单,但一拳一脚都得有真功夫,才能发挥他威力。经过学习对指针,数组,多维数组等原来模模糊糊的认识,变得清晰明了。而且还学了volatile这一招式,以前可是听都没有听说过。gcc 与 make的强大功能,也是首次感受到。以前那种IDE方式下的编程,让人很难了解幕后的操作。而且还用了objcopy,objdump,nm等分析工具,让我对一个程序有了更深入的了解。也是第一次看到程序的运行居然可以不用操作系统支持。
在操作系统方面,接触到了bootloader的强大功能。还有内核,文件系统是怎么一回事,操作系统是怎么启动的,文件系统是怎么加载上去的——居然还可以换根,更神奇的还有/dev, /proc里面居然放的是设备节点,进城与内核的接口而不是文件——,……这么多有趣的事情。学习过后深切感觉到系统设计的精巧,各个部分,各个模块各有分工,一个不多,也一个不能少。以前跟别人动辄讨论fat,ntfs的优劣,学了操作系统才知道ext2, ext3,现在才知道还有jffs2,yaffs,romfs等其他各式各样的文件系统,每个都发挥着重要作用。以前对进程,线程,信号,信号量,互斥锁,读写锁的理论性的认识,也变得直观清晰起来。听到的最有意思的一件事是:当两个进程用自旋锁共享变量的时候,当一个进程释放锁的时候,操作系统如果发现他时间片用的差不多的了,就将其置为就绪状态,防止其处于加锁,释放锁的循环中而将另一进程饿死。
在系统结构的学习中,体会到了流水线,中断响应过程,模式切换,在程序中的体现。little_endian, big_endian这在课本角落里的东西居然如此重要。寄存器与内存统一编址也是头一次在实际中见到。更叹服arm设计中影子寄存器,连接寄存器的巧妙。还有指令中用20bit表示32bit立即数的“玄机”。其分页机制中,采用段,大页,小页,细页,巧妙的处理了分页机制的页内空洞问题。差点忘了,那个机器指令的条件执行,用空操作代替指令的执行,一定程度上解决了指令流水断流的问题。这一点上MIPS的延迟槽技术,解决得更为巧妙。arm的指令可选择影响或不影响cpsr,选择不影响cprs大大加快了指令指向速度(真不知道这帮家伙们怎么想出来的).
在驱动和移植班中,对linux的整个架构,有了概念性的认识。知道了原来驱动是这么一回事。就是根据一定的规则对特定硬件寄存器读写,而特定的寄存器就是映射的特定的内存地址。将我们的程序编译成内核模块,加载道内存并与一个特定的设备号相连,Linux就可以调用我们写的驱动程序了!在移植班的实验中,见到了一块电路板上可以运行一个完整的操作系统,而不仅仅是一个小程序。当时感觉太不可思议了!计算机原来可以使这个样子,而不是我们PC中这个卡那个卡的插在一起,还得用一个大铁箱子固定好!而且我们还可以根据硬件自己对内核进行裁减配置,可以为自己的硬件,量身定做最合适的操作系统。还第一次用到了skyeye这个传说中的指令仿真工具,说实话以前也是只在课本里听说过。这个玩艺儿,可以在我们没money买开发板的情况下,模拟出硬件环境,真是不错!
在这里,得到的不仅是知识,还有探索的精神。深切体会到各位老师的尽职尽责与激情。尤其是汪中子老师,感觉他太瘦了,有时候真为他健康担心。希望他多吃点,保护好身体,为了教出更多好学生。也感谢AKA的所有老师及工作人员,祝他们永远健康!还有一点想说的是教材比较全面,知识比较丰富,但逻辑性,系统性不强。感觉学了好多个点,但形成一个面一个知识网络比较困难。
王旭光
|