Linux 编程要怎么学习,需要先学习系统管理吗

为梦想而战
嵌入式开发学习路线图基础学习Ⅰ---Linux入门
目前嵌入式主要开发环境有 Linux、Wince等;Linux因其开源、开发操作便利而被广泛采用。而Linux操作系统也只是一个简单的操作系统,简单的使用对于嵌入式开发人 员来说价值并不很高,真正有价值的是掌握Linux的基本服务和Linux的设计理念、思想,这对于嵌入式开发人员的长期发展是很极其重要的。Linux 系统有很多发行版,RedHat、Ubuntu、Fedora等。作为嵌入式开发人员,我们没有必要把精力放到使用哪个Linux发行版上,而是尽快把 Linux系统尽快安装好。如果打算坚持长期学习,那么建议您把自己的电脑做成双系统,而不要在虚拟机上安装。 Ubuntu系统下载地址:http://www./ 基础学习Ⅱ---C语言
C语言是嵌入式开发必备的基础知识。在Linux下从事C语言的开发,你会觉得更为顺畅、更为自然,因为C语言是因unix的出现而诞生的,Linux内 核几乎完全是由C语言编写完成的。学习C语言,如果不会用指针,那么就称不上会C语言。做嵌入式开发指针更显得尤为重要,所以做嵌入式开发除了掌握位操 作、限定词等,对指针的掌握是不可或缺的。而且要掌握多级指针、函数指针等等。涉及到指针,那么就会讲到内存分配。在大学中,学习C语言一般的学习很少讲 到内存分配,但是如果期望从事嵌入式开发,那么就必须懂得C语言是怎么做内存分配管理的。指针之外,还要学习模块化编译处理、指针与数组、gcc、 Makefile、GDB、递归、结构体、宏定义使用等。C语言是整栋嵌入式大厦的基础,所以在学习嵌入式时,必须把C语言重视起来,多敲代码,多练。一 名优秀的程序员必定是通过“体力劳动”再转向“脑力劳动的”,这也是为什么我们要有“写不出代码=0”思想的原因所在。
如 果说C语言相当于文字,那么数据结构就相当于在造句、写文章。代码质量有一部分取决于对数据结构的掌握程度。在数据结构部分我们要把链表、树、排序作 为学习重点。而且我们也可以查看一些比较常见的函数(如strcopy、strcat、printf等)在内核中是如何实现的,以及编写代码模拟堆栈,这 不仅有利于编写代码质量的提高,而且还可以初步了解Linux内核精髓,为今后工作打下坚实的基础。
C++、QT在嵌入式开发领域,是用来开发图形界面的,希望从事上层应用开发及图形界面,那么在C++、QT方面需要比较深入的学习。 基础进阶---Linux应用程序设计
Linux的思想源于Unix。Linux继承了Unix的优点,但 是没有用UNIX的代码,所有程序都是重新编写的,而且Linux与Unix的源码级兼容。Linux是类Unix操作系统。Linux 不仅符合 POSIX 标准,而且还包括其它 UNIX 标准的多种特性,例如,UNIX 的 System V 接口文档(System V Interface Document,SVID)和伯克利软件发布(Berkeley Software Distribution,BSD)版本。Linux 采用了折衷的策略,包含了 UNIX 几个典型特性当中最实用的一些功能:
Linux 采用了 SVR4 的进程间通信(IPC)机制:共享内存、消息队列、信号。
Linux 支持 BSD Socket 网络编程接口。
许多 Linux 发行版采用 SysV init 机制,支持运行级别。 此阶段的学习是从事嵌入式上层应用开发以及底层开发人员的必修课程。进程、线程、信号、文件锁、socket是这部分内容的重点。要把这些内容学的透彻非 要下些苦功夫不可。而且函数是系统提供给我们的,难免要对计算机系统深入理解一番。TCP/IP协议也是要涉及到的。有问题建议用Google搜索及登陆 chinaunix论坛。通过这个阶段的学习,我们就可以初步实现一些应用程序的开发了,如做自己的shell命令解析器、简单的聊天软件、视频多播等。 嵌入式入门---ARM体系结构
从这部分开始,我们将真正进入嵌入式开发学习阶段。首先我们要知道采用哪种处理器。目前通用嵌入式处理器有ARM、MIPS、PowerPC、X86等。 从市场产品占有率上看,ARM处理器远远领先于同类其它处理器,并逐步掠夺传统51单片机和英特尔市场份额。据招聘网站统计,目前用人单位在技术水平上要 求开发人员掌握ARM9及以上平台的开发技术。ARM公司在发布ARM11产品后,更改以往的数字标记更新方式,转为发布ARM Cortex。但是Cortex并不是更高端,而是全新系列的处理器,比如Cortex M3,它主要应用于机械加工、工控领域,目的是取代以前的ARM7处理器。
在开始学习前,建议有一块自己的开发板,目前ARM9 2440的开发板价格在400-600元之间,ARM11 6410的开发板价格要高一些,最便宜的也要1200元以上。在此,提醒大家尽量不要买mini开发板,虽然mini开发板的价格要便宜些,但是与正常开 发板相比,mini板功能是不完善的。嵌入式汇编有别于X86汇编,所以如果以前没有接触过汇编语言,那么没有必要先去学X86汇编再学嵌入式汇编,可以 直接学习嵌入式汇编。除了汇编我们还要学习ARM指令集。有了开发板,我们要下载相对应处理器的DataSheet及开发板电路原理图。ARM体系结构的 学习我们是不能完全照抄别人代码的,因为我们自己手中的开发板及处理器与别人是不同的,除非所用的代码是根据你手中的开发板来编写的。所以,我们要先去看 书、看视频资料理解原理及工作方式等,然后根据自己开发板的电路原理图和DataSheet来编写代码,达到理解外围设备工作原理和操作硬件的目的。嵌入式提升---Linux内核、驱动
众所周知嵌入式开发包含至少两个级别,一个是嵌入式内核驱动级别,另外一个是嵌入式应用层开发,而薪酬高的、最具价值的无疑是嵌入式内核驱动级别的开发 者。真正的嵌入式高手或者企业中的核心开发人员,一定是嵌入式底层的内核驱动开发工程师,这些工程师成长比较缓慢,造成对内核驱动人才的大量需求,所以这 些人才是真正企业需要的香饽饽。掌握驱动开发会让自己的核心能力有极大的飞跃,真正实现嵌入式最有价值的就业。
由于Linux内核更新速度很快,书籍和视频不可能及时更新,所以我们再看书和视频后,要自己动手下载内核源码包,去看内核中的代码,在这里可以充分检验 C语言、数据结构等基础知识的掌握程度。而驱动的编写还是要借助外设硬件电路原理图和芯片手册。内核和驱动的知识是让我们根据不同的硬件,编写对应的驱 动、合理剪裁内核、制作文件系统,并移植到硬件开发板上。如果手里有ARM11 6410及以上的开发板,可以试试在裸板上编写驱动并移植Android系统到开发板上吧。 详解嵌入式学习路线① Linux操作系统使用全面了解LINUX;详讲Linux下的文件管理、用户管理、网络管理等命令;包括VI编辑器,GCC编译器,GDB调试器和 Make 项目管理工具……教学目标:精通② 嵌入式Linux C语言编程重温C编程!通过编程实例重点讲解C语言的高级编程知识,包括函数与程序结构、指针、数组、常用算法、库函数的使用等知识。教学目标:精通③ 嵌入式Linux C语言数据结构数据结构在linux内核、底层驱动、通信协议及实际开发中应用。包括顺序表、链表、队列、栈、树、图、哈希表、各种查找和排序算法等……教学目标:精通④ Java语言高级编程掌握Java语言基本语法,面向对象编程方法,同时和C语言进行对比理解面向对象的高级用法,理解Java中多线程编程,网络编程及常用Java类……教学目标:熟悉⑤ 嵌入式Linux项目开发流程宏观了解嵌入式开发环境搭建和项目开发流程,让您建立起整体架构的概念,包括产品需求分析和选型、硬件、移植、启动代码、驱动开发……教学目标:熟悉⑥ 嵌入式 Linux应用编程精通嵌入式Linux下的程序设计、嵌入式Linux开发环境,强化对Linux开发的理解和编码调试的能力,系统编程、标准I/O、文件I/O、库的制……教学目标:精通⑦ 嵌入式 Linux并发程序设计并发程序设计重要讲解,包括:多进程编程,进程间通信机制,多线程编程,多线程间的同步和互斥机制等。结合大量的案例来讲解。教学目标:精通⑧ 嵌入式 Linux网络编程主讲网络体系结构,TCP/IP协议,TCP及UDP编程,服务器模型,超时控制,协议分析,抓包等。讲解中结合大量实例并使用工具分析。教学目标:精通⑨ 嵌入式数据库开发熟练使用一种数据库是必须。因此重讲在嵌入式开发中有着广泛应用的SQLITE数据库。如:数据库的设计、SQL语句、用C语言来控制数据库等。教学目标:精通⑩嵌入式 Linux应用综合项目代码量积累,独立完成一个应用层综合项目,涉及应用开发中的关键技术,像内存管理、链表、文件I/O、多进程、多线程、网络编程和数据等教学目标:精通(11) Android应用编程Android应用编程方法,熟悉常用的应用组件的开发和事件处理机制等,并能理解Android应用产品的实现原理,学会Android应用的编写。教学目标:精通(12) ARM处理器编程ARM体系结构、编程环境、指令集、寻址方式、调试、汇编和混合编程等,为后面移植课程打基础。可获得ARM公司全球统一授权培训证书。教学目标:熟练(13) ARM硬件接口开发ARM的常用接口开发及硬件电路设计基础(包括IO、串口、看门狗、PWM定时器、模(ADC)……DMA操作等),物联网基础、传感网zigbee教学目标:熟练(14) 综合案例的实战训练在第二阶段课程中,为了帮助学员充分有效地掌握核心知识点在企业中的具体应用,并开始逐步按照企业需求、流程和规范进行实战训练。教学目标:熟练(15) 嵌入式Linux系统开发往开发板上移植操作系统需要完成大量的工作,包括搭建嵌入式开发环境;移植bootloader;移植内核(bsp开发)和制作根文件系统。教学目标:熟练(16) 嵌入式Linux内核开发深入内核了解Linux相关运行机理,为后面的驱动开发打好理论基础,内容:内核源码结构、内存管理、进程管理、中断管理、系统调用、内核……教学目标:熟练(17) 嵌入式Linux驱动开发基础从最简单的内核模块开始,逐步添加相关代码,实现对设备的各种复杂操作。驱动中的相关机制不需要死记硬背,要理解内核设计思想,此外……教学目标:熟练(18) 嵌入式Linux驱动高级开发本课程将重点讲解嵌入式Linux下常用接口驱动的编写方法; 完成flash驱动、块设备驱动、网卡驱动、液晶驱动、sd卡驱动和usb驱动。教学目标:熟练(19) 综合案例的实战训练通过这种方式带领学员分析企业岗位的真实技术需求,进行案例演练,从而快速掌握相关的技能和开发技巧。教学目标:熟练嵌入式Linux在移动开发的典型应用在3G领域的典型应用Android系统,了解Android系统体系结构、开发特点及关键技术点,重点学习ARM对Android系统的支持现状……学目标:熟悉Android底层系统开发从Ubuntu系统上搭建Android开发环境开始,到最终Android系统硬件抽象层分析,从简单到复杂,从基础深入到架构,以源码分析为主线……教学目标:熟练嵌入式Linux & Android项目实践课程将通过真实完整的项目案例,让学员了解真实项目的开发流程,让学员知道如何将所学知识应用到项目开发中。培养去企业就能干活的能力教学目标:熟练
你还没有登录,请先登录或注册慕课网帐号
12693人关注
Copyright (C)
All Rights Reserved | 京ICP备 号-2为什么要学习操作系统课程? - 文章 - 伯乐在线
& 为什么要学习操作系统课程?
几天前,我和同事在喝咖啡时,提起了我将会在秋季给学生上操作系统课程。他的研究领域是不涉及操作系统的,所以他问我这门课的意义何在?学生们应该从这门课里得到什么?这都是一些常规的问题,我想我可以给出合理的答案。我将会在这里详细的阐述一下;如果我遗漏了任何重要的回答,请告诉我。
我上一次教操作系统是在2012年。当时这门课在犹他洲(Utah)的学校是一门必修课并且大约有80个学生在上这门课。现在它不再是必修的了,它已经被归入到一门基于的课程。即便如此,现在已经50个学生选了秋季学期的操作系统课,这似乎很合理。这个课程分为两部分:本科生课程和研究生课程。这虽然不是我最喜欢的安排,但也没什么大问题。
也许我应该提一下,一门涉及大量文件系统hacking的OS课程是我对计算机科学感兴趣的原因所在。之前我已经尽量尝试了一些CS课程,但是没有找到太多有挑战性的或者有趣的
用一个简单的案例分析我们我可以推断,操作系统的意义不是去教会学生怎样去编写他们自己的操作系统。第一,这里有些学生对操作系统有兴趣并能编写一个操作系统。他们不需要看课堂上的资料就能够很好地编写自己的操作系统。第二,我们也有一些学生没能力实现一个新的的操作系统或者对实现新的操作系统没兴趣的。他们同样不需要课堂上的资料。
那么,意义何在呢?
编写并发代码并不容易,特别是使用线程共享内存和线程锁。然而,现在很多学习计算机科学的学生都会在他们以后的职业生涯的某些时候使用到(并发)。在OS课程以外的课程里学习并发问题已经成为了一种增长的趋势,但即便如此,操作系统是学生首次了解线程,竞争,死锁等等重要概念的传统课程。教材很难(实际上很简单的,但运用起来很难),在毕业前多看几次是很有帮助的。一个可靠的并发编程介绍对学习操作系统课程是有很大好处的。
硬件层次上的资源通常是专用的。操作系统提供了这些资源的种类,它们可以是虚拟的(每个用户都有种错觉,自己拥有资源的一份备份)或者是仲裁的(一次只能有一个用户占有资源,但由操作系统来安排访问顺序)。允许多用户访问专用物理资源是一个很基本的策略并被运用到很多用户级别的程序中。通过详细地学习这些内容,学生学会了能够在许多其他场合重用的模式。
性能分析和冲突解决
正如“为什么#*$是我的机器分页?”。当资源被分享时,冲突通常也会随之而来。冲突问题可以使用多种方式来解决,比如使用队列,合理共享,或者使用优先级。在某些情况下,比如CPU调度,没有单一技术解决方案并且最后的解决方案是一些古怪的混合技术。有时,最令人感兴趣的是找出导致问题出现的主要原因是哪一类冲突。我花费了夏天的一大部分时间去找出所有Windows NT导致MP3跳过的原因。操作系统课是学习这些理论的完美课程,它的适用性比计算机科学更广泛。
隐藏复杂性的接口
一个具有良好设计的接口是一个美妙的东西。它更美妙的地方体现在把一个讨厌的低层次接口(调制解调器或者NE2000卡)转换为一个实用高效的高层次抽象接口(套接字流)。学生应该已经在教材里关于抽象数据类型那部分接触过这些想法了,给定的例子一般都是比较普通的,并且抽象化和隐藏复杂性的作用在那个层次里不够明显。我认为把像套接字(socket),文件系统和地址空间这些集合合到一个单一便利的包里可能是计算机科学10大贡献之一了。这是司空见惯的事,以至于很容易让人忽视它的迷人之处。
没什么神奇的
从用户模式(user mode)看,很容易发现OS是一个神奇的东西–它提供了流畅的多任务处理,高效擦储存管理等。–不好的–它会出现蓝屏,系统颠簸,安全问题和调度异常。对于一般用户来说,这个模式是好的。但在另一方面,如果你想去证明你是一个计算机科学家,你需要知道这些问题的幕后细节。你将会从那里发现什么?很多时候,这看起来都是一些令人忧愁的集合,比如单调的链表,狡猾的启发式资源和维护不当的设备驱动程序。好的OS课程应该教会学生这些:
在内核的代码很优秀,你只需要知道到哪里找到它们。当你第一次看到它们时,你不一定会理解它们。但你理解了它们,你就会学得更多。
通常,内核代码都是很普通的代码。任何人都可以编写它,对比于用户模式代码(user-mode code),内核代码(kernel code)仅需要多一点对细节的关心和注意,因为内核代码中的bug造成的结果更严重。
处理大型软件
这是毫无疑问的,陷入别人的几百万行代码库中去是一个噩梦。错误零散的文档,残旧和广泛的接口,糟糕的交互,和费解的错误信息。不过,欢迎回到现实世界,我们不能因为这些糟糕的问题就经常重新开始。作为一个学生,如果你能够开始制定一个系统的方法去学习你需要用代码修复的大软件的相关部分,那么你以后的生活就会轻松很多。你可以讨厌Linux内核但它比你以后的职业生涯会遇到的软件好多了。
计算机系统设计
设计任何的工程系统,包括软件系统,都是一个权衡的过程。是要侧重于可靠性?性能?消耗还是维护性?因为操作系统是很庞大的,性能至关重要的程序,它一般都要维护几十年,所以它们是学生学习这类权衡的很好的地方。拥有一双发现合适设计点的锐利眼睛的学生在工业上是很需要的。这些人更像一个艺术家而不是一个科学家,你需要看大量的代码,理解这些问题,和学会自己独立考虑这些问题。
我已经尝试去说清楚,一门OS课程不仅仅是关于操作系统和给UNIX/Windows/MacOS的使用者提供知识。优秀的OS课程教会你对广泛使用的操作系统的思考技巧和方式,即使你从没接触过一行的内核代码。实际上,在我的大学里获取学位的CS学生不要求一定要上OS课程,但我觉得,所有真正的计算机科学家要么是已经学这么课,要么已经用其他方式学会了这方面的技巧和直接
关于作者:
可能感兴趣的话题
翻譯不太給力啊……
「Also known as “why the #*$ is my machine paging?”」
「或曰:『為甚麼我的機器又他#*$的在換頁了?』」
實在無意冒犯,但譯成「正如“為什麼#*$是我的機器分頁?”。」感覺根本就是機翻……
翻譯君還請多加努力……
关于伯乐在线博客
在这个信息爆炸的时代,人们已然被大量、快速并且简短的信息所包围。然而,我们相信:过多“快餐”式的阅读只会令人“虚胖”,缺乏实质的内涵。伯乐在线内容团队正试图以我们微薄的力量,把优秀的原创文章和译文分享给读者,为“快餐”添加一些“营养”元素。
新浪微博:
推荐微信号
(加好友请注明来意)
– 好的话题、有启发的回复、值得信赖的圈子
– 分享和发现有价值的内容与观点
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 翻译传播优秀的外文文章
– 国内外的精选文章
– UI,网页,交互和用户体验
– 专注iOS技术分享
– 专注Android技术分享
– JavaScript, HTML5, CSS
– 专注Java技术分享
– 专注Python技术分享
& 2017 伯乐在线搞Linux运维的,需要学习些什么语言?
要评论问题请先或
- What's the fucking is going on?
赞同来自: 、、
要参与问题请先或
- Do all in command line
赞同来自: 、
要参与问题请先或
要参与问题请先或
- IT老兵一枚!
要参与问题请先或
- 图书馆的IT人
要参与问题请先或
- 理工小强
要参与问题请先或
- Where amazing happens!
要参与问题请先或
- Shell 版主
要参与问题请先或
要参与问题请先或
- 80后it男
要参与问题请先或
- 这个代码有点难
要参与问题请先或
- 喜欢产品设计 喜欢捣蛋新技术的程序员
要参与问题请先或
- just do it 屌丝做it
要参与问题请先或
- 视频托管 视频服务
要参与问题请先或
要参与问题请先或
要参与问题请先或
要参与问题请先或
- 无线爱好者
要参与问题请先或
- 风雨无阻,继续前行
要参与问题请先或
要参与问题请先或
- 回避现实的人,未来将更不理想
要参与问题请先或
浏览: 11454
关注: 18 人

我要回帖

 

随机推荐