linux是从unix系统之上发展过来的,经历了多年许多技术大牛的维护才成就了现在的广泛普及。Linux服务器、路由器、android、物联网、工业控制等方面都有广泛的应用。
我对linux的了解还是在上大学的时候翻了操作系统,买了一个ARM11的开发板才算有所了解,我对linux有浓厚的兴趣,希望对于它的驱动和原理有进一步的了解,但是无赖的是工作了两年一直没有机会做Linux相关的开发,所有水平也就停滞不前了,我写这个想要总结一下我对Linux认识,可能只是比较浅显的认识,一直没有写总结的习惯,以后要多做总结了。
学习Linux就必须了解Linux的命令以及一些基本工具的使用,比如vim cp mv等,还有就是Makefile以及shell。Makefile在编译程序的时时候,确定了各个参与编译文件的依赖关系。shell较本可以编写一些自动执行的命令,比如程序的安装过程,Linux启动的时候执行的一些脚本。还有就是LInux下的一些共享软件比如samba、ftp等在进行开发的时候可以方便的在虚拟机和windox下共享软件,当然还有编译环境gcc 调试环境gdb 等。这里面的每一个部分都需要长时间的学习和实际的练习才能掌握,奈何我一直都是门外汉。
Linux和大多数的操作系统一样有任务调度 内存管理 设备管理 文件系统等基本功能,LInux遵循的是一切皆文件的额规则,把对硬件设备的操作都抽象成文件,提供硬件操作的一致性屏蔽,很多硬件繁琐的特性,形成的设备节点可以在/dev目录下查看。如果要在程序中操作硬件就要从这里开始了,dev目录下的每个文件都代表了一个设备,它们分为字符设备、块设备,每一个设备又有主设备号和子设备号,挂载模块的驱动时可以使用mknod,它确定了一个设备的设备号。
我之前做过一年时间的Qt开发,我使用的是ARM9,发现程序运行在上面还是比较卡的,虽然我做了一些优化。说起Qt程序我觉得Qt的样式表还是挺好的,但是它又不如xalm那么的灵活,没用做到界面和逻辑的隔离。Qt程序编写起来还是比较容易的,主要的性质就是信号和槽、界面的布局、以及一些小部件,这个信号和槽不得不说弱化了c++很多特性,使Qt程序变的简单容易上手,没有MFC程序那么的复杂。Qt的界面就是美化就是贴贴png图片了,当然这只是对于初学者这么说的,Qt的xml也是很有意思,不过我没有具体的学习研究。
说一下程序的编译过程,程序的编译有预处理 词法分析 语法分析 语义分析 汇编 链接 可执行文件,着几步的过程就需要学习编译原理才能明白。预处理只是做了头文件的展开,和一些头文件中的计算,这个是由预处理器完成的。词法分析把输入的每一个单词符号进行分离和识别形成词素,这个一般是基于正则表达式来做,也有专门的工具lex。语法分析把词素生成语法书,这里说的树实际上并没有完全的生成,这个有分为自上而下和子下而上,中间还包括文法等等,这一步可以使用YACC来完成。语义分析主要是对上下文有关的性质进行审查。Linux下的可执行文件ELF格式的它分为有初值的数据段 代码段 无初值的数据段,这个可以使用size main,o 这样的命令来查看。
基本上没有什么干货,以后写的时候就上干货了,好的开始是成功的额一半。