linux应用开发详解
A. 在linux下做开发 要学习Linux哪些东西
嵌入式Linux要学哪些?一些人总在寻思,怕走了弯路,又怕学的东西离企业需求远。那么今天就请华清远见高级讲师曹大神告诉你,9点浅析嵌入式学习步骤。下面是他本人亲笔。
1、要学习Linux,首先要会用,如果不会用怎么知道怎么知道怎么去做,所以需要学习Linux系统的安装及使用。
2、学会用Linux了,那么我们就要做一些Linux下的开发了,开发什么呢?看到网上有很多很强大很有趣的程序,我们都可以尝试去做,可是如何去做呢,程序是什么呢,怎么写呢?这时我们需要学习一些语言,比如比较基础的c语言,比如面向对象的C++,Java等。
3、写完程序了发现不就是一个很普通的文件吗,怎么能像别人写的程序一样运行起来呢? 这时我们需要知道如何编译一个程序,需要知道编译器及一些其他工具的使用,比如GCC,在开发的过程中我们为了提供工作效率还会用到Make,Shell等,为了能够很好的管理我们代码的不同版本,我们还需要知道什么是SVC,CVS,subversion,Git等。
4、当我们开始写一些比较大的程序,不再是以往的hello world级别的了,这时我们发现我们考虑的更多了,我们考虑到了程序的效率,我们发现需要读写文件了,我们发现需要和另外一台电脑通信了,于是我们有需要学习一些更高级点的东西了,比如数据结构,比如文件IO,比如多进程多线程编程,比如网络通信,这时我们会接触很多新的名词,什么是树,图...,什么是文件io什么是标准IO,什么是进程线程,什么是TCP/IP...。
5、当我们再进一步的话,我们会发现我们什么有很多的东西都运行的是Linux系统,可是他们和我的PC运行的Linux有什么区别呢,为什么我电脑要用风扇而手机不用风扇呢,我们打开网页查找手机的详细参数的时候,会看到Cortex-A15 、四核 、ARM等等字眼,什么是ARM,什么是Cortex-A15,我们需要进一步的了解。
6、了解完ARM之后,很多人就回去购买一些开发板,去学习它,这时操作系统的移植又成了一个比较重要的内容了,什么是bootloader,什么是kernel,什么是rootfs等等,我们怎么做呢。
7、花了很长时间系统做好了,发现板子上很多的什么不能用,怎么办呢? 这时我们需要写一些驱动来驱动这些设备,这时我们需要知道,什么是字符设备驱动、块设备驱动、网络设备驱动,为了更好的写驱动我们需要了解更多的硬件相关的东西,我们需要看懂芯片手册,我们需要看懂原理图,只有我们懂我们的设备,才能更好的驱动它。
8、等等,这里就列举更多的内容了,因为还有很多。
9、这些都有了我们就可以自行开发我们自己的产品了。
嵌入式Linux要学哪些?上述9点基本很明了了。这也算是嵌入式学习的一个基本步骤。本人认为到第九点你已经是一个高级的嵌入式Linux人物了,工资待遇我已经不用说,咋说也得15K往上了,如果做管理30K也是有的。这些东西要靠自学,说实话不太现实,嵌入式入门门槛相对高,要有心里准备,参加培训班是有必要的,除非你有亲戚朋友手把手教你。引用一句老话:“师傅领进门,修行是靠个人!”自己必须得喜欢钻研与学习,只有付出才会有收获!
最后说一点,Android系统也是在linux系统基础上开发的,所以学嵌入式linux的朋友,将来不仅可以从事嵌入式开发的工作(嵌入式的应用领域非常广泛,永不过时!)还可以从事android开发方向的工作(轻松迈入),从职业发展来说,嵌入式linux也是程序员最具发展前景的技术首选。
顶
23
踩
B. linux平台下的应用程序开发
Linux是一种自由和开放源代码的类UNIX操作系统。该操作系统的内核由林纳斯·托瓦兹在1991年10月5日首次发布。,在加上用户空间的应用程序之后,成为Linux操作系统。Linux也是自由软件和开放源代码软件发展中最着名的例子。只要遵循GNU通用公共许可证,任何个人和机构都可以自由地使用Linux的所有底层源代码,也可以自由地修改和再发布。大多数Linux系统还包括像提供GUI界面的X Window之类的程序。除了一部分专家之外,大多数人都是直接使用Linux发布版,而不是自己选择每一样组件或自行设置。
严格来讲,术语Linux只表示操作系统内核本身,但通常采用Linux内核来表达该意思。Linux则常用来指基于Linux内核的完整操作系统,包括GUI组件和许多其他实用工具。由于这些支持用户空间的系统工具和库主要由理乍得·斯托曼于1983年发起的GNU计划提供,自由软件基金会提议将该组合系统命名为GNU/Linux,但Linux不属于GNU计划。
Linux最初是作为支持英特尔x86架构的个人电脑的一个自由操作系统。目前Linux已经被移植到更多的计算机硬件平台,远远超出其他任何操作系统。Linux可以运行在服务器和其他大型平台之上,如大型主机和超级计算机。世界上500个最快的超级计算机90%以上运行Linux发行版或变种,包括最快的前10名超级电脑运行的都是基于Linux内核的操作系统。Linux也广泛应用在嵌入式系统上,如手机(Mobile Phone)、平板电脑Tablet、路由器Router、电视TV和电子游戏机等。在移动设备上广泛使用的Android操作系统就是创建在Linux内核之上。
C. Linux软件开发,这个说法具体是什么意思
你好!
就是基于linux操作系统开发软件,比如linux驱动开发,diagnostic以及linux系统工具开发等等
如果对你有帮助,望采纳。
D. linux开发要学什么
第一条:运维应用-->系统架构-->运维开发-->系统开发
第二条:运维应用-->应用dba-->架构dba-->开发DBA
下面详细每个阶段的职位说明:
01.运维应用级别:
这个阶段就是玩别人的软件,例如:linux,nginx,mysql,php,nagios 大多数的linux运维工程师,网络工程师,系统工程师都是这个阶段。 这个阶段属于金字塔的底端,工资是相对比较低的。
02.系统架构级别:
这个阶段就是用已知软件架构大规模集群方案以及实现各种技术方案,属于运维应用上层,需要靠技术,沟通,思想三条线通力配合才能达到这个水平。
03.运维开发级别:
这个阶段就是利用已知语言,开发基本的应用层工具,例如:web管理系统,如果具备前两个运维应用和系统架构的积淀,这个是很轻松可以实现的。
04.系统开发级别:
这个阶段就是修改开源的软件,或者开发新的服务软件(例如:也开发一个web软件,存储软件)与底层软件(例如:OS),是更高一层的开发人员。
05.数据库管理和架构:
这个阶段就是也主要是玩别人的软件,但是数据相对更重要,要求有一定的运维应用的能力。
以上是常规的Linux发展路线,对于想学Linux运维,或正处于Linux运维相关工作的人员,可以根据自身的情况进行定位,选择适合自己的发展路线,往往可以在职场上更加得心应手!
E. Linux主要应用在哪些方面
主要用于企业服务器端,下面详细介绍Linux有哪些岗位、主要的工作内容及职业发展,希望对你有所帮助。
1) Linux运维岗位及工作内容
互联网Linux运维工程师是一个融合多学科(网络、系统、开发、数据库、安全、存储等)的综合性技术岗位,甚至还需要沟通、为人处世、培训、销售、管理等非技术能力,这给运维工程师提供了一个广阔的发展空间。
2) Linux运维工程师岗位职责
一般从企业入门到中级Linux运维工程师的工作大致有:挑选IDC机房及带宽、购买物理服务器或云服务、购买及使用CDN服务、搭建部署程序开发及用户的访问系统环境(例如:网站运行环境)、对数据进行备份及恢复、处理网站运行中的各种故障(例如:硬件故障、软件故障、服务故障、数据损坏及丢失等)、对网站的故障进行监控、解决网站运行的潜在安全问题、开发自动化脚本程序提高工作效率、规划网站架构、程序发布流程和规范,制定运维工作制度和规范、配合开发人员部署及调试产品研发需要的测试环境、代码发布等工作需求,公司如果较小可能还会兼职网管、网络工程师、数据库管理员、安全工程师、技术支持等职责。
涉及到的Linux平台上的运维工具有:Linux系统,Linux基础命令,Nginx,Apache,MySQL,PHP,Tomcat,Lvs,Keepalived,SSH,Ansible,Rsync,NFS,Inotify,Sersync,Drbd,PPTP,OpenVPN,NTP,Kickstart/Cobbler,KVM,OpenStack,Docker,,K8S,Mongodb,Redis,Memcached,Iptables,SVN,GIT,Jenkins,网络基础,Shell/Python开发基础等,除此之外还可能涉及到交换机、路由器、存储、安全、开发等知识。
运维工程师还包括一些低端的岗位,例:网络管理员、监控运维、IDC运维,值班运维
职业发展方向:Linux运维工程师、系统架构师、数据库工程师、运维开发工程师、系统网络安全工程师、运维经理、运维总监
3) Linux中级运维工程师应用软件阶段。
Linux系统,Linux基础命令,Nginx,Apache,MySQL,PHP,Tomcat,Lvs,Keepalived,SSH,Ansible,Rsync,NFS,Inotify,Sersync,Drbd,PPTP,OpenVPN,NTP,Kickstart/Cobbler,KVM,OpenStack,Docker,Mongodb,Redis,Memcached,Iptables,SVN,GIT,Jenkins,网络基础,Shell/Python开发基础
4)Linux运维架构师岗位职责
运维架构师是运维工程师的高级阶段,并没有明确的岗位界限区分,运维架构师一般来说是除了对运维工程师应用的开源工具熟练掌握之外,更多的是用思想来运维了,即DevOps的落地,各种企业运行过程中的解决方案提出和执行,例如:根据公司的现状可以设计各类运维解决方案的能力:
1、自动化代码上线(SVN/GIT+Jenkins+MVN)解决方案;
2、云计算部署架构及Docker微服务架构方案;
3、服务自动化扩容方案(KVM/OpenStack/Docker+Ansible+Zabbix);
4、10万并发的网站架构、秒杀系统的架构及解决发你个案;
5、多IDC机房互联方案、全网数据备份解决方案、账号统一认证方案;
6、数据库、存储及各重要服务节点的集群和高可用方案。
7、各网络服务的极端优化方案、服务解耦/拆分。
8、运维流程、制度、规范等的建设和推行。
9、沟通能力、培训能力、项目管理、业务需求分析及落地执行力等。
这里仅举几个例子,实际工作中会有更多,运维架构师的工作,其实就是解决企业中的用户访问量不断增大带来的痛点,最终达到高效、优质的为客户提供网站及业务服务。
总的来说:Linux运维架构师更多的是根据企业日益增长的访问量需求,利用若干运维工具组合加上经验思想,形成解决业务需求方案的阶段,当然也不排除对运维工具进行二次开发以及可视化展示运维数据的阶段(开发软件平台),这个阶段涉及的工具会非常多,几乎市面好用的开源工具都在备选之列,在一线城市互联网公司的薪资范围15000-50000/月。
职业方向:高级数据库工程师、运维开发工程师、运维经理、运维总监、技术总监
运维架构师:将多个工具组合,加上思想经验,形成方案,用思想和经验赚钱的阶段。
技术的提升仅是量的积累,思想的提升才是质的飞跃!——老男孩
5)数据库运维工程师
众所周知,数据几乎是所有企业的生命线,所以数据库工程师的地位和薪水一般会比普通运维工程师高一些,主要工作内容就是保证数据库数据的安全以及高效地为用户提供各种服务。工作内容主要有:数据库环境搭建、数据库优化、数据库
F. linux软件开发如何入门
要想在linux下面编程,首先得熟习linux的使用才行,学习的大体过程我描迅在下面,希望对你有帮助:1.鸟哥的私房菜基础篇。这是学习linux系统的使用。2.....................服务器篇。可以看些简单的服务器构建:tftp,ftp,nfs,dhcp.以后用的到。3.shell编程及高级编程。这里可以了解,不一定深入。有个概念就好了。4.c语言编程(c program plus 第五版,C与指针,C专家编程,C陷阱,这几本书是经典之作)5.gcc ,make ,ctags,dbg的使用以及makefile的编写(这一步与4同步进行)6.unix 高级环境编程 (这是书名,也是你要学的)7.QT的编写,或则GTK 的编写(这是图形界面的开始)至此软件工程师结束(下面是开发工程师要继续的)8.gun arm的使用,交叉编译环境的搭建9.arm 下面的编程与qtopia的搭建。包括qt/em....led(记不下来,你自己搜下)交叉编译环境的搭建(完成arm上面的图形化)10.对arm 开发板的熟悉。11.gun arm汇编的编写与内嵌汇编的编写12.u-boot下面驱动的编写(根据芯片手册来编写)13.u-boot的移植,这里也可以用vivi14.kernel的裁减与移植15.文件系统的构建与移植16.系统级别的驱动编写//到此 开发工程师初步形成。然后就是不停的练就慢慢成为高级了。
G. Linux开发需要什么呢需要具备什么基础呢
一、linux和os:
1、命令:netstat tcpmp ipcs ipcrm 这四个命令的熟练掌握程度基本上能体现实际开发和调试程序的经验
2、cpu 内存 硬盘 等等与系统性能调试相关的命令必须熟练掌握,设置修改权限 tcp网络状态查看 各进程状态 抓包相关等相关命令 必须熟练掌握
3、awk sed需掌握
4、共享内存的使用实现原理、然后共享内存段被映射进进程空间之后,存在于进程空间的什么位置?共享内存段最大限制是多少?
5、c++进程内存空间分布(注意各部分的内存地址谁高谁低,注意栈从高道低分配,堆从低到高分配)
6、ELF是什么?其大小与程序中全局变量的是否初始化有什么关系(注意.bss段)
7、使用过哪些进程间通讯机制,并详细说明
8、makefile编写,虽然比较基础,但是会被问到
9、gdb调试相关的经验,会被问到
10、如何定位内存泄露?
11、动态链接和静态链接的区别
12、32位系统一个进程最多多少堆内存
13、多线程和多进程的区别(重点 必须从cpu调度,上下文切换,数据共享,多核cup利用率,资源占用,等等各方面回答,然后有一个问题必须会被问到:哪些东西是一个线程私有的?答案中必须包含寄存器,否则悲催)
14、写一个c程序辨别系统是64位 or 32位
15、写一个c程序辨别系统是大端or小端字节序
16、信号:列出常见的信号,信号怎么处理?
17、i++是否原子操作?并解释为什么???????
18、说出你所知道的各类linux系统的各类同步机制(重点),什么是死锁?如何避免死锁(每个技术面试官必问)
19、列举说明linux系统的各类异步机制
20、exit() _exit()的区别?
21、如何实现守护进程?
22、linux的内存管理机制是什么?
23、linux的任务调度机制是什么?
24、标准库函数和系统调用的区别?
25、补充一个问题:系统如何将一个信号通知到进程?
二、c语言:
1、宏定义和展开(必须精通)
2、位操作(必须精通)
3、指针操作和计算(必须精通)
4、内存分配(必须精通)
5、各类库函数必须非常熟练的实现
6、哪些库函数属于高危函数,为什么?(strcpy等等)
三、c++:
1、一个String类的完整实现必须很快速写出来(注意:赋值构造,operator=是关键)
2、虚函数的作用和实现原理(必问必考,实现原理必须很熟)
3、sizeof一个类求大小(注意成员变量,函数,虚函数,继承等等对大小的影响)
4、指针和引用的区别(一般都会问到)
5、多重类构造和析构的顺序
6、stl各容器的实现原理(必考)
7、extern c 是干啥的,(必须将编译器的函数名修饰的机制解答的很透彻)
8、volatile是干啥用的,(必须将cpu的寄存器缓存机制回答的很透彻)
9、static const等等的用法,(能说出越多越好)
四、数据结构或者算法:
1、《离散数学》范围内的一切问题皆由可能被深入问到(最重要,最体现功底,最能加分,特别是各类树结构的实现和应用)
2、各类排序:大根堆的实现,快排(如何避免最糟糕的状态?),bitmap的运用等等
3、hash, 任何一个技术面试官必问(例如为什么一般hashtable的桶数会取一个素数?如何有效避免hash结果值的碰撞)
五、网络编程:
1、tcp与udp的区别(必问)
2、udp调用connect有什么作用?
3、tcp连接中时序图,状态图,必须非常非常熟练
4、socket服务端的实现,select和epoll的区别(必问)
5、epoll哪些触发模式,有啥区别?(必须非常详尽的解释水平触发和边缘触发的区别,以及边缘触发在编程中要做哪些更多的确认)
6、大规模连接上来,并发模型怎么设计
7、tcp结束连接怎么握手,time_wait状态是什么,为什么会有time_wait状态?哪一方会有time_wait状态,如何避免time_wait状态占用资源(必须回答的详细)
8、tcp头多少字节?哪些字段?(必问)
9、什么是滑动窗口(必问)
10、connect会阻塞,怎么解决?(必考必问,提示:设置非阻塞,返回之后用select检测状态)
11、如果select返回可读,结果只读到0字节,什么情况?
12、keepalive 是什么东东?如何使用?
13、列举你所知道的tcp选项,并说明其作用。
14、socket什么情况下可读?
六、db:
1、mysql,会考sql语言,服务器数据库大规模数据怎么设计,db各种性能指标
H. LINUX培训的课程详解
Linux 基础
安装Linux操作系统 ; Linux文件系统 ; Linux常用命令 ; Linux启动过程详解 ; 熟悉Linux服务能够独立安装Linux操作系统 ; 能够熟练使用Linux系统的基本命令 ; 认识Linux系统的常用服务安装;Linux操作系统; Linux基本命令实践 ; 设置Linux环境变量; 定制Linux的服务 ; Shell 编程基础使用vi编辑文件 ; 使用Emacs编辑文件; 使用其他编辑器,经典教程如鸟哥私房菜、马哥Linux等。
Shell 编基础
Shell简介 ; 认识后台程序Bash编程熟悉Linux系统下的编辑环境 ; 熟悉Linux下的各种Shell 熟练进行shell编程熟悉vi基本操作 ; 熟悉Emacs的基本操作 ; 比较不同shell的区别 ; 编写一个测试服务器是否连通的shell脚本程序 ; 编写一个查看进程是否存在的shell脚本程序 ; 编写一个带有循环语句的shell脚本程序。
Linux 下的 C
linux C语言环境概述 ; Gcc使用方法 ;Gdb调试技术; Autoconf Automake Makefile 代码优化; 熟悉Linux系统下的开发环境; 熟悉Gcc编译器 ;熟悉Makefile规则编写Hello,World程序; 使用 make命令编译程序; 编写带有一个循环的程序; 调试一个有问题的程序。
嵌入式开发
嵌入式系统概述 ;交叉编译 配置TFTP服务; 配置NFS服务 ;下载Bootloader和内核; 嵌入式Linux应用软件开发流程熟悉嵌入式系统概念以及开发流程; 建立嵌入式系统开发环境制作cross_gcc工具链 ;编译并下载U-boot 编译并下载Linux内核 ;
I. 学习嵌入式Linux怎么应用开发
提供一下几种方案
一、还按照《嵌入死linux应用开发完全手册》(韦东山)的内容来,但是嵌入式linux的开发环境自己搭建。当时我是按照《鸟哥的私房菜-基础篇》和《鸟哥的私房菜-服务器篇》两篇,整出一套开发平台,CentOS5.3 + samba/vsftpd + gcc / linux-gcc 。 window平台上的工具sourceinsight、secureCRT。 注意:我使用了四个月学会linux操作。不知道你是否会先学这两本书,再学习韦东山老师的嵌入式呢。学完之后看似学习了很多,出来外面之后,我又去在windows平台开发,而且现在用C#。囧。现在看什么嵌入式系统都非常快,很容易理解架构,如何实现。可惜自己太年轻,没有资本和人脉,不然可以实现很多有意思的东西。现在正在尝试创业。
二、寻找开发板,而不是书籍作为实验的途径。书籍只是辅助,辅助你实现某种功能。可以集中linux书籍、嵌入式开发书籍、单片机开发、编程语言。宋宝华的嵌入式书籍。开发板当时用的是飞凌的,由国嵌负责技术讲解和培训。讲了不少有用的东西。现在网上的开发板多,可以淘,但是不用太贵,作用不大。找前卫的技术开发,中国看似不行。前卫老师都没搞出什么东西,我们在基本是0基础的前提下,很难实现比较前卫的技术。打好基础,看似是唯一的选择。
三、单独找台PC机,直接安装ubuntu11,买本ubuntu相关的书,他会交你怎样安装使用工具的。其实和第一种解决方式是一样的,书是别人在五(六)年前写的,不符合摩尔定理。所以没办法,我们在嵌入式方面的教育还是欠缺啊,出的书都少,记那么基本,还全是个人。没有什么教育机构。
希望以上对你有用。