如何学习linux和arm
- 格式:doc
- 大小:34.50 KB
- 文档页数:7
ARM是Advanced RISC Machines(高级精简指令系统处理器)的缩写,是ARM公司提供的一种微处理器知识产权(IP)核。
ARM的应用已遍及工业控制、消费类电子产品、通信系统、网络系统、无线系统等各类产品市场。
基于ARM 技术的微处理器应用约占据了32位RISC 微处理器75%以上的市场份额。
揭开你的手机、MP3、PDA,嘿嘿,里面多半藏着一个基于ARM的微处理器!ARM内核的数个系列(ARM7、ARM9、ARM9E、ARM10E、SecurCore、Xscale、StrongARM),各自满足不同应用领域的需求,无孔不入的渗入嵌入式系统各个角落的应用。
这是一个ARM的时代!下面的图片显示了ARM的随处可见:有人的地方就有江湖(《武林外传》),有嵌入式系统的地方就有ARM。
构建一个复杂的嵌入式系统,仅有硬件是不够的,我们还需要进行操作系统的移植。
我们通常在ARM平台上构建Windows CE、Linux、Palm OS等操作系统,其中Linux具有开放源代码的优点。
下图显示了基于ARM嵌入式系统中软件与硬件的关系:日前,笔者作为某嵌入式ARM(硬件)/Linux(软件)系统的项目负责人,带领项目组成员进行了下述工作:(1)基于ARM920T内核S3C2410A CPU的电路板设计;(2)ARM处理下底层软件平台搭建:a.Bootloader的移植;b.嵌入式Linux操作系统内核的移植;c.嵌入式Linux操作系统根文件系统的创建;d.电路板上外设Linux驱动程序的编写。
本文将真实地再现本项目开发过程中作者的心得,以便与广大读者共勉。
第一章将简单地介绍本ARM开发板的硬件设计,第二章分析Bootloader的移植方法,第三章叙述嵌入式mizi Linux的移植及文件系统的构建方法,第四章讲解外设的驱动程序设计,第五章给出一个已构建好的软硬件平台上应用开发的实例。
如果您有嵌入式系统的开发基础,您将非常容易领会本文讲解地内容。
Linux学习总结报告一、嵌入系统应用前景Linux的应用领域不断扩展,从最早的Web、FTP、邮件服务开始,逐步扩张到个人桌面应用、网络安全、电子商务、远程教育、集群计算、网络计算、嵌入式系统等各个领域。
更是吸引了想IBM、SUN、惠普这样的IT巨头积极参与到Linux应用的开发和推广中来。
Linux之前主要应用于服务器及计算集群,未来应该该在个人计算机上有所发展,优化目前的图形化界面,以及加快桌应用的开发,以及在智能终端的应用。
首先,微软不会甘心让出市场让Linux来壮大,所以Linux必须发挥其本身的优势,赢得更多的用户,已达到其能不断的开发和更新。
再者,由于开源软件的商业模式及技术模式没有前例可循,注定了Linux的前路不会是一帆风顺的。
我认为,当前Linux的发展主要面临以下几个问题:一是Linux企业众多但未形成规模,也还没有找到有效的赢利途径,并且版本繁多,互不兼容,削弱了竞争力;二是随着逐渐流行而引发的安全问题;三是人才不足的隐忧。
Linux的最大优势在于它是开源的,也即开放的。
但出于各自的商业利益,各企业分别在其发行的版本上加载各种不同的功能,彼此之间不兼容。
这些不同的版本意味着厂商和用户测试的工作量加大,意味着硬件厂商需要为每一个版本的Linux提供驱动程序……这种情形目前正在削弱整个Linux的市场竞争力。
安全方面,随着Linux越来越受欢迎,越来越多针对Linux的蠕虫、病毒和恶意软件也会层出不穷。
虽然开放源代码社区都在及时响应并修补Linux上存在的漏洞,但Linux的非集中管理本质特性使Linux升级的发布和审查变得非常困难。
一旦Linux 由于安全问题给用户特别是企业用户造成损失,其不良影响及对用户信心的打击是巨大的。
当前制约着Linux发展的还有一个关键因素,那就是人才。
相比前几年,国内懂Linux的技术人员已经多了很多。
但是作为一个快速发展的产业,人才的广度和深度都远远不够。
ARM+Linux学习总结(2)——Makefile1. Makefile 简介Makefile 是和 make 命令⼀起配合使⽤的.很多⼤型项⽬的编译都是通过 Makefile 来组织的, 如果没有 Makefile, 那很多项⽬中各种库和代码之间的依赖关系不知会多复杂. Makefile的组织流程的能⼒如此之强, 不仅可以⽤来编译项⽬, 还可以⽤来组织我们平时的⼀些⽇常操作. 这个需要⼤家发挥⾃⼰的想象⼒.1.1 Makefile 主要的 5个部分 (显⽰规则, 隐晦规则, 变量定义, ⽂件指⽰, 注释)Makefile基本格式如下:target ... : prerequisites ...command......其中,target - ⽬标⽂件, 可以是 Object File, 也可以是可执⾏⽂件prerequisites - ⽣成 target 所需要的⽂件或者⽬标command - make需要执⾏的命令 (任意的shell命令), Makefile中的命令必须以 [tab] 开头1. 显⽰规则 :: 说明如何⽣成⼀个或多个⽬标⽂件(包括⽣成的⽂件, ⽂件的依赖⽂件, ⽣成的命令)2. 隐晦规则 :: make的⾃动推导功能所执⾏的规则3. 变量定义 :: Makefile中定义的变量4. ⽂件指⽰ :: Makefile中引⽤其他Makefile; 指定Makefile中有效部分; 定义⼀个多⾏命令5. 注释 :: Makefile只有⾏注释 "#", 如果要使⽤或者输出"#"字符, 需要进⾏转义, "\#"1.2 GNU make 的⼯作⽅式1. 读⼊主Makefile (主Makefile中可以引⽤其他Makefile)2. 读⼊被include的其他Makefile3. 初始化⽂件中的变量4. 推导隐晦规则, 并分析所有规则5. 为所有的⽬标⽂件创建依赖关系链6. 根据依赖关系, 决定哪些⽬标要重新⽣成7. 执⾏⽣成命令2. Makefile 初级语法2.1 Makefile 规则2.1.1 规则语法规则主要有2部分: 依赖关系和⽣成⽬标的⽅法.语法有以下2种:target ... : prerequisites ...command...或者target ... : prerequisites ; commandcommand...*注* command太长, 可以⽤ "\" 作为换⾏符2.1.2 规则中的通配符* :: 表⽰任意⼀个或多个字符:: 表⽰任意⼀个字符[...] :: ex. [abcd] 表⽰a,b,c,d中任意⼀个字符, [^abcd]表⽰除a,b,c,d以外的字符, [0-9]表⽰ 0~9中任意⼀个数字~ :: 表⽰⽤户的home⽬录2.1.3 路径搜索当⼀个Makefile中涉及到⼤量源⽂件时(这些源⽂件和Makefile极有可能不在同⼀个⽬录中),这时, 最好将源⽂件的路径明确在Makefile中, 便于编译时查找. Makefile中有个特殊的变量 VPATH 就是完成这个功能的.指定了 VPATH 之后, 如果当前⽬录中没有找到相应⽂件或依赖的⽂件, Makefile 回到 VPATH 指定的路径中再去查找..VPATH 使⽤⽅法:vpath <directories> :: 当前⽬录中找不到⽂件时, 就从<directories>中搜索vpath <pattern> <directories> :: 符合<pattern>格式的⽂件, 就从<directories>中搜索vpath <pattern> :: 清除符合<pattern>格式的⽂件搜索路径vpath :: 清除所有已经设置好的⽂件路径# ⽰例1 - 当前⽬录中找不到⽂件时, 按顺序从 src⽬录 ../parent-dir⽬录中查找⽂件VPATH src:../parent-dir# ⽰例2 - .h结尾的⽂件都从 ./header ⽬录中查找VPATH %.h ./header# ⽰例3 - 清除⽰例2中设置的规则VPATH %.h# ⽰例4 - 清除所有VPATH的设置VPATH2.2 Makefile 中的变量2.2.1 变量定义 ( = or := )OBJS = programA.o programB.oOBJS-ADD = $(OBJS) programC.o# 或者OBJS := programA.o programB.oOBJS-ADD := $(OBJS) programC.o其中 = 和 := 的区别在于, := 只能使⽤前⾯定义好的变量, = 可以使⽤后⾯定义的变量测试 =# Makefile内容OBJS2 = $(OBJS1) programC.oOBJS1 = programA.o programB.oall:@echo $(OBJS2)# bash中执⾏ make, 可以看出虽然 OBJS1 是在 OBJS2 之后定义的, 但在 OBJS2中可以提前使⽤$ makeprogramA.o programB.o programC.o测试 :=# Makefile内容OBJS2 := $(OBJS1) programC.oOBJS1 := programA.o programB.oall:@echo $(OBJS2)# bash中执⾏ make, 可以看出 OBJS2 中的 $(OBJS1) 为空$ makeprogramC.o#Makefile内容#变量定义obj-m:=gpio_driver.oPWD:=$(shell pwd)KERNEL_PATH:=/lib/modules/3.11.0-15-generic/buildKDIR:=$(KERNEL_PATH)all:$(MAKE) -C $(KDIR) M=$(PWD)clean:rm -rf *.ko *.order *.symvers *.cmd *.o *.mod.c *.tmp_versions .*.cmd .tmp_versions#all伪指令下的命令含义:当make的⽬标为all时,-C $(KDIR) 指明跳转到内核源码⽬录下读取那⾥的\Makefile;M=$(PWD) 表明然后返回到当前⽬录继续读⼊、执⾏当前的Makefile。
LINUX学习计划和目标LINUX操作系统已经成为IT行业中非常重要的一个技术领域。
它是一个强大的开源系统,被广泛应用于服务器、网络设备、嵌入式系统等领域。
学习和掌握LINUX操作系统对于从事互联网相关的行业非常重要,因此很多人都希望能够系统地学习LINUX操作系统。
在这篇文章中,我们将介绍一份LINUX学习计划和目标,希望能够帮助大家更好地了解LINUX操作系统,并制定一个系统的学习计划。
LINUX学习计划LINUX学习计划应该从基础知识开始学习,逐步深入,建立一个系统的知识结构。
一份合理的LINUX学习计划应该包括以下几个主要的学习阶段:1. 学习LINUX基础知识:包括LINUX操作系统的概念、安装、配置、文件系统、用户管理、权限管理等基本知识。
2. 学习LINUX系统管理:包括LINUX系统的运维管理、服务管理、网络管理、安全管理等知识。
3. 学习LINUX编程:包括shell编程、Python编程等知识。
4. 学习LINUX系统优化:包括系统性能优化、安全加固等知识。
5. 学习LINUX高级应用:包括LINUX集群、虚拟化、容器等高级应用知识。
根据以上几个学习阶段,可以制定一份详细的学习计划。
具体的学习计划可以按照具体的个人情况进行安排,一般来说,初学者可以按照以下的学习路径进行学习:1. 学习LINUX基础知识:首先,我们需要学习LINUX的基础知识。
可以选择一本LINUX的入门书籍,深入了解LINUX操作系统的基本概念、安装、配置等知识。
2. 学习LINUX系统管理:在掌握LINUX的基础知识之后,我们需要学习LINUX系统的管理知识。
可以选择一些系统管理的教程或视频,学习LINUX系统的运维管理、服务管理、网络管理、安全管理等知识。
3. 学习LINUX编程:了解LINUX系统管理的基础之后,我们可以学习一些LINUX编程知识,比如shell编程、Python编程等知识。
这些知识可以帮助我们更好地进行系统管理工作。
linuxarm汇编语言pdfGNUARM汇编入门pdf在编写标题所描述的内容需求文章时,需要注意字数限制,整洁美观的排版,语句通顺,流畅表达,且无影响阅读体验的问题。
文章可适当增加字数限制,并可以分小节论述。
以下是针对题目“linuxarm汇编语言pdfGNUARM汇编入门pdf”准备的一篇文章:Linux ARM汇编语言与GNU ARM汇编入门引言:汇编语言是一种底层的编程语言,用于与计算机硬件进行交互。
在Linux操作系统下,汇编语言的学习对于理解系统底层运行机制以及进行嵌入式系统开发具有重要意义。
本文旨在介绍Linux ARM汇编语言和GNU ARM汇编入门,帮助读者快速入门和掌握相关知识。
一、了解Linux ARM汇编语言1.1 汇编语言简介汇编语言是一种低级的编程语言,使用助记符来代替机器码,更接近计算机的工作方式。
它具有高度的灵活性和效率,但也需要更多的底层知识。
1.2 Linux系统下的ARM汇编语言Linux操作系统广泛应用于嵌入式系统和服务器领域,而ARM处理器则是其中最常见的架构之一。
学习Linux ARM汇编语言可以帮助我们深入了解计算机系统如何运行以及如何编写高效的嵌入式程序。
二、GNU ARM汇编入门2.1 GNU工具链简介GNU工具链是一套针对ARM架构的开源工具,其中包括编译器、汇编器和链接器等。
使用GNU工具链可以方便地进行ARM汇编开发,并实现与其他高级语言的混合编程。
2.2 GNU ARM汇编语言基础学习GNU ARM汇编语言需要了解基本的寄存器、指令集以及内存访问等。
通过准确理解这些概念,我们可以编写出高效、可靠的汇编代码。
三、实践与案例3.1 汇编语言的应用场景汇编语言在系统底层开发、驱动程序编写、嵌入式系统开发等方面有着广泛应用。
通过实践案例,我们可以更好地理解汇编语言的实际应用和开发流程。
3.2 GNU ARM汇编语言案例分析通过对一些实际的GNU ARM汇编语言案例进行分析和学习,我们可以更好地掌握如何使用GNU工具链进行开发,编写高效的汇编代码。
想要成为Linux底层驱动开发高手这些技巧绝对不能错过对于想要成为Linux底层驱动开发高手的人来说,掌握一些关键技巧是非常重要的。
本文将介绍一些不能错过的技巧,帮助读者提升自己在Linux底层驱动开发领域的能力。
1. 深入理解Linux内核:在成为Linux底层驱动开发高手之前,你需要对Linux内核有深入的理解。
了解内核的基本概念、代码结构和内核模块之间的关系是非常重要的。
阅读Linux内核的源代码、参与内核邮件列表的讨论以及阅读相关的文献资料都是提升自己技能的好途径。
2. 熟悉底层硬件知识:作为底层驱动开发者,你需要熟悉底层硬件的工作原理。
这包括了解处理器架构、设备的寄存器操作、中断处理等。
掌握底层硬件知识可以帮助你编写高效、稳定的驱动程序。
3. 学习使用适当的开发工具:在Linux底层驱动开发中,使用适当的开发工具是非常重要的。
例如,使用调试器可以帮助你快速定位驱动程序中的问题。
掌握使用GCC编译器、GNU调试器(GDB)和性能分析工具(如OProfile)等工具可以提高你的开发效率。
4. 阅读相关文档和源代码:Linux底层驱动开发涉及到大量的文档和源代码。
阅读设备供应商提供的文档、Linux内核源代码以及其他相关文献资料可以帮助你更好地了解特定设备的工作原理和使用方法。
5. 编写清晰、高效的代码:编写清晰、高效的代码对于成为Linux底层驱动开发高手是至关重要的。
使用良好的编码风格、注释和命名规范可以提高代码的可读性。
此外,了解Linux内核的设计原则和最佳实践也是编写高质量驱动程序的关键。
6. 多实践、调试和优化:在实际开发过程中,积累经验是非常重要的。
通过多实践、调试和优化不同类型的驱动程序,你可以更好地理解Linux底层驱动开发的技巧和要点。
此外,学会使用内核调试工具和性能分析工具可以帮助你提高驱动程序的质量和性能。
7. 参与开源社区:参与开源社区是成为Linux底层驱动开发高手的好方法。
经过一段时间对ARM的学习,在这里跟大家说一些前期的学习经验,另外仅以一个例子说明一下ADS的开发过程,因为这也是初学,可能有的地方说的不太好,望大家谅解,另外可以找其它参考资料来学习。
第一部分:ARM前期学习经验个人认为,要想学好ARM应该首先对ARM的整体框架(包括ARM体系结构,ARM开发过程,及ARM程序框架及执行过程等)有一个了解。
这里这就不多说了,这些东西我也只是刚刚开始学习,还没有很好的掌握,就只说一些个人想法吧。
呵呵,因为时间比较紧张,本来说是一个星期搞定ARM,至少拿着书本可以一点点的做着,可是经过上一个星期,到最后,哇,真的快疯了。
刚开始拿到实验箱,以为和NIOS一样,多跑一些DEMO应该就差不多会玩了,没想到一开始就碰到一个大问题,ARM实验箱里边带了几本教材和实验指导书,拿着实验指导书做了几个DEMO就做不下去了,因为前两个DEMO还比较简单,就只是用汇编语言写了几条对ARM寄存器操作的语句,学过汇编语言的很快就可以理解了。
可是往后就不一样了,因为刚开始学,不太了解ARM程序的框架,实在是看不懂了,为什么每个全程里边都有用到44b.h ,44blib.h ,44blib.c还有一个44binit.s文件?前边三个还容易理解,玩过单片机的很容易就能看出来44b.h 里边定义了一些在S3C44B0X内部的寄存器,44blib.h和44blib.c定义了一些有关初始化的函数,而44binit.s呢?看不懂,到这里我的ARM程序就没法往下做了,只有在网上再找资料,看这个函数到底是干什么用的,原来这就是以前经常听说的“bootloader”或着说是“启动代码”,或着说是“ARM的引导程序”,就是处理器在启动的时候执行的一段代码,主要任务是初始化处理器模式,设置堆栈,初始化变量等等.由于以上的操作均与处理器体系结构和系统配置密切相关,所以一般由汇编来编写(关于这方面的内容大家可以查看相关资料)。
对于初学者来说,要学的知识点很多,到底从哪里下手,人们常常感到非常迷茫。
大一学生先从C语言开始入门,在大一阶段由于对计算机还非常陌生,因此不可能写出一个具有完整图形界面的软件,重点以“与硬件无关的计算方法、数据结构”为基础学习C语言,至少练习编写一万行C代码,否则不会找到编程的感觉,也体会不到编程乐趣,很多人就是因为缺乏一定量的训练,所以对编程没有兴趣,以至于未到毕业时就全部忘记了,程序设计是一项实践性很强的实践活动,没有大量的实践作为基础是很难入门的,因此我认为编写一万行代码是判定是否入门的依据。
请初学者记住:当你编写了一万行代码时,这是你能够从事专业的开始,否则你不要期望在这个领域混下去。
与此同时,C语言也是学习和使用Verilog的重要基础,所以千万不可小视C语言。
更重要的是,如果你的C语言不好的话,你将来就业选择的路子就会受到很大的限制,要么只能做硬件工程师、销售工程师或者转行,别无选择!有了一万行编程的经验后,大二接着开始学习数字电路和模拟电路了,这是你的机会!将来的开发工作有几种选择,但这两门都很重要,学好了你有可能成为顶尖的高手、专家和系统级水平的人才,即便学得不太好,你也有可能成为一个优秀的工程师。
前一篇博文讲了,如果你精通了C/C++,即便你的硬件水平一般,你也可以成为一个优秀的开发工程师,即由硬件工程师负责逻辑电路和模拟电路的设计,由你来编程——你可以编写基于WinCE、Linux、Vxworks或者Windows等操作系统的程序。
那么怎样才算基本上“精通”呢?至少编写五万行代码,当你已经编写了10万行代码时,可以说你已经完全精通了,这个时候你如果有很大的造化的话,那完全取决于你当初学习的基础是否牢固了。
所以我在前面提到了,精通一门可以成为优秀的开发工程师,但绝对不可能成为系统级的开发工程师,因为你的知识结构不行。
最好在学习数字电路时购买一个99元的EasyFPGA030开发学习板,这个板子是我们开发的,但这个价格是没有利润的,不要认为我是在做推销,我们推出这个产品完全是针对大二学生的,希望有更多的大二学生提早醒悟,能够在学习数字电路时同步学习FPGA和Verilog,强化课程之间的关联。
linux的学习计划一、初学者入门1.了解Linux系统首先,作为一个初学者,我们需要花时间去了解Linux系统的基本知识。
我们可以通过阅读相关的书籍、搜索网络资源,了解Linux的发展历程、特点以及应用领域等。
同时,可以安装一个虚拟机软件,如VirtualBox等,以及一个Linux发行版,如Ubuntu、CentOS 等,进行实际的操作体验。
2.学习基本的Linux命令学习Linux系统的命令是非常重要的,因为掌握了这些基本的命令,我们才能更方便地进行系统的管理和操作。
所以,初学者应该学习一些最基本的Linux命令,如ls、cd、mkdir、rm等,以及一些常用的文件管理命令、文件权限管理命令等。
3.学习Shell脚本编程Shell脚本是Linux系统的重要组成部分,能够帮助我们完成很多日常的任务。
初学者可以通过阅读相关的书籍、教程,学习Shell脚本编程的基础知识,例如变量、条件判断、循环等,然后通过实际的练习来熟悉这些知识。
4.了解Linux系统的网络相关知识在当今的网络时代,掌握Linux系统的网络相关知识也是非常重要的。
初学者可以学习一些基本的网络知识,如TCP/IP协议、网络配置、网络服务等,然后深入了解Linux系统中与网络相关的命令及配置。
5.参加一些培训课程为了更快地学习Linux系统的知识,初学者可以参加一些培训课程,如Linux基础课程、Linux网络课程等,通过专业的培训来系统地学习和掌握Linux系统的相关知识。
二、深入学习1.学习Linux系统的管理和配置深入学习Linux系统需要学习它的管理和配置知识。
这方面包括系统的安装与升级、用户和权限管理、磁盘管理、文件系统管理、系统日志等方面的知识。
通过学习这些知识,我们可以更好地进行系统的管理和维护工作。
2.学习Linux系统的安全性知识学习Linux系统的安全性知识也是非常重要的。
这方面包括防火墙配置、权限设置、密码管理等内容,还有一些常见的安全问题和防范措施。
首要触摸Linux不多,对Linux渠道的开发更是一窍不通。
而如今的趋势越来越标明,作为一个嵌入式的研制人员,Linux与ARM的趋势现已不可避免。
自个菜鸟一枚,从七月放暑假开端学习Linux,先来谈谈学习Linux的准备作业:1.Linux的学习之前的觉悟:Linux入门是很简略的,疑问是你是不是有耐心,是不是爱折腾,是不是不排挤重装一类的大修。
没折腾能够说是学欠好Linux的,鸟哥说过,要真实晓得Linux的分区机制,对LVM运用适当熟练,没有20次以上的Linux装机经历是堆集不起来的,所以必定不要怕折腾。
由于我们之前都运用Windows,所以我也尽能够照看这些“菜鸟”。
我的引荐,假如你首次触摸Linux,那么首要在虚拟机中测验它。
虚拟机挂载Linux 是很方便的,网上教程许多,在这我就不赘述了。
2.Linux准备作业之2 :晓得Linux的发行版别Linux发行版并非Linux,Linux仅是指操作体系的内核,作为科班出世的你不要让我解说,我也没时刻。
我引荐的发行版如下:? UBUNTU合适纯菜鸟,寻求安稳的官方支撑,对体系安稳性需求较弱,喜爱最新运用,相对来说不太喜爱折腾的开发者。
? Debian,相对UBUNTU难许多的发行版,突出特点是安稳与简略运用的包办理体系,缺陷是公司支撑不足,为社区开发驱动。
? Arch,追逐时髦的开发者的首选,长处是包更新适当快,无缝晋级,一次装置根本能够一向运作下去,没有如UBUNTU那样的版别概念,说的专业点叫翻滚晋级,保持你的体系必定是最新的。
缺陷明显易见,不安稳。
一同装置装备相对Debian再费事点。
? Gentoo,相对Arch再难点,考验运用者的归纳*平,从体系装置到微调,内核编译都亲历亲为,是高手及黑客显现自个技能手段,按需装备契合自个需求的体系的首选。
? Slackware与Gentoo相似。
? CentOS,社区保护的RedHat的复刻版别,彻底运用RedHat的源码从头编译生成,与RedHat的兼容性有理论上来说是最佳的。
假如你专心于Linux服务器,如网络办理,架站,那么CentOS是你的挑选。
? LFS,终极黑客显摆东西,彻底从源代码装置,编译体系。
装置前你得到的只要一份文档,你要做的即是照文档你的阐明,一步步,一条条指令,一个个软件包的去构建你的Linux,彻底由你自个操控,想要啥即是啥。
假如你做出了LFS,证实你的Linux功底现已适当不错,假如你能拿LFS文档活学活用,再将Linux从源代码开端移植到嵌入式体系,我敢说我国的公司你能够混的极好。
3.Linux准备作业之三:(以下有些是择选自网上加上自个的总结)(1)Linux根底你得挑一个合适你的体系,然后在虚拟机装置它,开端运用它。
假如你想疾速学会Linux,我有一个主张即是忘记图形界面,不要想图形界面能不能供给你疑问的答案,而是满世界的去找,去问,怎么用指令行处理你的疑问。
在这个过程中,你最佳能将Linux的指令把握的不错,起码常用的指令得晓得,一同建立了自个的常识库,里边是你堆集的各项常识。
(2) Linux渠道的C/C++开发,一同还有Bash脚本编程。
再下个期间,你需求学习的是Linux渠道的C/C++开发,一同还有Bash脚本编程,假如你对Java兴趣很深还有Java。
相同,主张你扔掉掉图形界面的IDE,从VIM开端,为啥是VIM,而不是Emacs,我无意挑起编辑器大战,但我觉得VIM合适初学者,合适手对比笨,脑袋对比慢的开发者。
Emacs的键位太多,太复杂,我很害怕。
然后是GCC,Make,Eclipse(Java,C++或许)。
虽然将C++列在了Eclipse中,但我并不引荐用IDE开发C++,由于这不是Linux的文明,简略让你疏忽一些你大概留意的疑问。
IDE让你变懒,懒得跟猪相同。
假如你对程序调试,测验作业很感兴趣,GDB也得学的极好,假如不是GDB也是必修课。
这是开发的第一步,留意我并没有提过一句Linux体系API的内容,这个期间也不要关怀这个。
你要做的即是堆集经历,在Linux渠道的开发经历。
我引荐的书如下:C言语程序设计,谭浩强的也能够。
C言语,白皮书当然非常好。
C++引荐C++ Primer Plus,Java 我不喜爱,就不引荐了。
东西方面引荐VIM的官方手册,GCC中文文档,GDB中文文档,GNU开源软件开发辅导pdf,汇编言语程序设计(让你对库,连接,内嵌汇编,编译器优化选项有开始晓得,不用深度)。
假如你这个期间过不了就不用往下做了,这是底线,最根底的根底,不然脱离,不要霍霍Linux开发。
不专业的Linux开发者作出的程序是与Linux文明或UNIX文明相背的,程序是走不远的,不能够像Bash,VIM这些神品相同。
所以做欠好爽性脱离。
(3) UNIX环境高档编程接下来进入Linux体系编程,不贰挑选,APUE,UNIX环境高档编程,一遍一遍的看,看10遍都嫌少,假如你能够在大学将这本书翻烂,里边的内容都实习过,有著作,你口头表达能力够强,你能够在面试时压服一切的考官。
(能够有点夸大,但APUE肯定是圣经通常的读物,即使是Windows程序员也从其中罗致营养,Google创始人的案头书本,扎尔伯克的床头读物。
)这本书看完后你会对Linux体系编程有适当的晓得,晓得Linux与Windows渠道间开发的区别在哪?它们的优缺陷在哪?我的总结如下:做Windows渠道开发,很苦,微软的体系API总在扩容,想运用最新潮,最高效的功用,最合适当时流行体系的功用你有必要时刻学习。
Linux不是,Linux体系的核心API就100来个,记忆力好彻底能够背下来。
并且经久不变,为啥不变,由于要同UNIX兼容,契合POSIX规范。
所以Linux渠道的开发大多是专心于底层的或服务器编程。
这是其长处,当然图形是Linux的软肋,但我站在一个开发者的视点,我无所谓,由于指令行我也能够习惯,假如有非常好的图形界面我就当作赏赐吧。
别的,Windows闭源,体系做了啥你更本不晓得,永久被微软牵着鼻子跑,想想假如微软说Win8不支撑QQ,那腾讯不得哭死。
而Linux彻底开源,你不喜爱,能够自个改,只要你技能够。
别的,Windows虽然运用的人多,但运用场合单一,专心与桌面。
而Linux在各个方面都有开展,尤其在云核算,服务器软件,嵌入式范畴,公司级运用上有广阔远景,并且兼容性一流,由于支撑POSIX能够无缝的运转在UNIX体系之上,不管是苹果的Mac 仍是IBM的AS400系列,都是彻底支撑的。
别的,Linux的开发环境支撑也肯定是一流的,不管是C/C++,Java,Bash,Python,PHP,Javascript,。
就连C#也支撑。
而微软除Visual Stdio套件以外,都不怎么友爱,不是吗?假如你看完APUE的感触有许多,期望验证你的某些主意或经历,引荐UNIX程序设计艺术,世界尖端黑客将同你共享他的观点。
(4)挑选方向:网络,图形,嵌入式,设备驱动网络方向:服务器软件编写及高性能的并发程序编写如今是时分做分流了。
大体上我分为四个方向:网络,图形,嵌入式,设备驱动。
假如挑选网络,再细分,我对其他的不是他熟悉,只压服务器软件编写及高性能的并发程序编写吧。
相对来说这是网络编程中技能含量最高的,也是底层的。
需求许多的经历,看许多的书,做许多的项目。
我的观点是以下面的次序来看书:1. APUE再深读–尤其是进程,线程,IPC,套接字2. 多核程序设计- Pthread必定得吃透了,你很NB3. UNIX网络编程–卷一,卷二4. TCP/IP网络详解–卷一再看上面两本书时就该看了5. 5.TCP/IP 网络详解–卷二我觉得看到卷二就差不多了,当然卷三看了非常好,努力,争夺看了6. 6.Lighttpd源代码- 这个服务器也很有名了7. 7.Nginx源代码–相较于Apache,Nginx的源码较少,假如能看个大致,很NB。
看源代码主要是要学习里边的套接字编程及并发操控,想想都激动。
假如你有这些本事,能够试着往暴雪投简历,为他们写服务器后台,想一想全球的魔兽都运转在你的服务器软件上。
8. Linux内核TCP/IP协议栈–深入晓得TCP/IP的完成假如你还喜爱驱动程序设计,能够看看更底层的协议,如链路层的,写啥路由器,网卡,网络设备的驱动及嵌入式体系软件大概也不成疑问了。
当然通常的网络公司,就算baidu级别的也该坚决果断的招聘你。
仅仅看后面这些书需求时刻与经历,所以35岁曾经办到吧!换岗到给你将来的当地!图形方向,我觉得图形方向也是很有出路的,以下几个方面。
1. Opengl的工业及游戏开发,国外较老练。
2. 影视动画特效,如皮克斯,也是国外较老练。
3. GPU核算技能,能够运用在浏览器页面渲染上,GPU核算资源利用上,由于开源的缘由,有许多的文档程序能够参考。
假如能进火狐开发,或谷歌做浏览器开发,大概会极好。
嵌入式方向:嵌入式方向没说的,Linux很重要。
把握多个架构,不只X86的,ARM的,单片机啥的也有必要得懂。
硬件不明白我预见你会死在半路上,我也想走嵌入式方向,但我觉得就校园教授嵌入式的办法,我连学电子的那帮学生都竞争不过。
规劝我们,必定得懂硬件再去做,假如走到嵌入式运用开发,只能祝你好运,不要碰上像Nokia,Hp这样的公司,不然你会很惨的。
驱动程序设计:软件开发周期是很长的,硬件不一样,很快。
每个月诞生那么多的新硬件,怎么让他们在Linux上作业起来,这是你的作业。
由于Linux的兼容性极好,假如不是太低层的驱动,根本C言语就能够搞定,体系架构的影响不大,由于有体系支撑,你能够做些许更改就能够在ARM上运用PC的硬件了,所以做硬件驱动开发不像嵌入式,对硬件常识的需求很高。
能够从事的方向也许多,如家电啊,特别是如索尼,日立,希捷,富士康这样的厂子,很稀缺的。
第一天,就简略介绍到这儿。
纵情等待第二天的Linux的装置,敞开Linux的学习之路。
不喜勿喷。
菜鸟记载自个的学习之路。
共求同道中人一同学习辅导。
原帖:。