第一篇:嵌入式linux学习经验谈
打印版本,(转载)前面废话省略,进入正题:
一、废话(已删)。
二、起步:你应该为自己创造一个学习linux的环境--在电脑上装一个linux或unix
如何选择版本:北美用redhat,欧洲用SuSE,桌面mandrake较多,而debian是技术最先进的linux开发人员中用debian的最多,其次是redhat,从全球linux各应用领域市场份额来看无疑redhat是最多的,此外还有很多出名的发行版本,不再列举。
对于初学linux的人来说,我建议是使用redhat,原因如下:
1)现在很多书都是以redhat为例讲的,为了与书本协调一致
2)周围的人都用redhat,交流比较方便
3)redhat应用范围广,有典型性和代表性
4)它易于使用和安装,我们没有必要把时间浪费在“装系统”上而应集中精力学习最有用的东西。
【注】现在觉得RH很死板,AS,ES等用在服务器上或许不错,Personal desktop用mandrake,debian,suse都不错,笔者现在用Mandrake,因为她长得漂亮:)
如果你并不打算深入学习linux,而是有诸如适应北京市政府办公平台迁移到linux上这种需要,那么中软,红旗等中文linux是不错的选择
我强烈建议:自己亲自动手把linux装到你的硬盘上,你必须学会独立安装linux系统的技能,对于现在的版本来说,其实跟装WinXP一样简单
从此现在开始,请不要以windows的工作方式来考虑问题,应该尝试挖掘linux身上的“天才unix”的气质。
三.进阶
掌握至少50个以上的常用命令
理解shell管道“|”,文件流重定向“>”及追加“>>”等
熟悉Gnome/KDE等X-windows桌面环境操作
掌握.tgz.rpm.biz等软件包的常用安装方法
学习添加外设,安装设备驱动程序(比如modem)
熟悉Grub/Lilo引导器及简单的修复操作
熟悉系统固有目录的名称及公用
学会用mount命令访问其他文件系统
了解vi,gcc,gdb等常用编辑器,编译器,调试器
学习linux环境下的简单组网
建议:买一本不需要太厚的linux教材,大致可以满足要求(现在的书越来越多了,还带很多图,我当时可没这么多书)
四.高级应用
澄清一些概念:linux的普通操作与真正的系统管理不能相提并论,后者需要很多知识
1.英语
即使你不学linux,我也强烈建议你学好英文[U.S.english]。因为实质上计算机语言就是英文和字符,所谓的多国语言只是外部包装。你必须能无障碍的阅读大量的英文技术文档在搜索引擎找到的英文网站和网页中熟练的检索最好能有用英文直接交流的能力,摆脱了这个障碍,你的学习和理解速度就能快很多,你就有机会拉开和别人的差距。
2.shell[sed/awk]
shell是命令解释器,是内核与用户界面交流通道,shell写的小脚本有点类似于win下的.bat但shell比.bat强大的多,shell不只是解释命令,更是一种编程语言,有时候几百行的c用shell几十行就能代替完成工作,因为shell的工作方式建立在系统已有的众多应用程序之上
这也是CS中的一个重要思想。此外,shell可以实现工作自动化,这个概念也比较重要sed,awk用来处理文本,历来很常用。
3.Perl/PHP
漂亮的脚本,CGI的首选,比ASP好,应用面很广
4.CC++
C、C++是linux/unix的核心语言,系统代码都是C写的5.ASM
系统底层及内核,硬件,设备驱动程序,嵌入式开发都需要。//走核心路线的话,cc++,asm最重要
6.Java,Python,Tcl,XML
五、系统管理篇
在熟悉linux的基础上还需要掌握至少一种unix。我首推Solaris,其次是FreeBSD比如运营级系统一般是
Solaris+Oracle/DB2之类的学习apache、ssh、sendmail/Qmail、proftp/vsftp、Samba、Squid、MySQL/PostgreSQL/Oracle、Bind等各种应用服务器的构架及电子商务的应用熟悉TCP/IP协议族,学习诸如apache+php+proftp+mysql+quota的实现以及大型局域网,分布式集群等各种企业级应用解决方案熟悉多用户管理,数据库管理,文件系统,逻辑存储管理,日志分析,备份与灾难数据修复系统补丁,内核升级,以及在此基础上的防火墙构架等以保障系统安全在内的各种系统管理技能。我觉得,如果在此基础上再掌握路由/交换设备便是一个不错的系统管理员
各种基于linux的解决方案可参考相关书籍和文献,必要时用google或各大linux站点站内搜索引擎寻找最新文档,以避免错误和漏洞有几本技术大全和技术内幕我认为都是这方面不错的书
六、深入学习linux
我个人理解的读linux内核需要的基础:在此之前,希望先把应用层的东西学一下,那样会比较好理解
1.C
如果学过潭浩强的大学教科书(除了编几个数学模型好像什么也做不了的那种),建议再看一下《The C Programming Language》Second Edition这本圣经(如果想学缓冲区溢出,这点C的功力可能是不够的,还有
2.asm(AT&T语法,保护模式)
保护模式下的比较复杂,基本上每本讲内核的书都会有介绍有80x86 Intel语法的基础就行,有兴趣可以看看Intel的官方网站
3.数据结构(离散数学)
计算机专业的核心课程,重要性我就不说了
4.操作系统原理
看懂这个再去读linux吧
5.微机原理/组成原理(数字电路)
底层直接和硬件打交道,所以这个也要
6.了解linux/unix
我想至少你要会操作吧,了解unix的API
7.软件工程/编译原理
这方面的经典书去可以搜到很多我觉得APUE这种书不适合初学者,还是先看看UPE之类的吧。APUE: 《advanced programming in the unix environment》,中文名《unix环境高级编程》,作者:W.Richard.Stevens(共有6本经典),尊为“圣经”。他的书为全世界黑客所拜读!UPE:《unix programming environment》,中文名《unix编程环境》比较适合初学者的,深入浅出,其中有一些比较重要的思想。
另外,介绍linux下应用层编程的书也有很多,比如
在这里你能明白“黑客”及“haching”一词所代表的真正意义.希望我写的这篇文章能造就更多的黑客,而不是骇客七、一些资源
// 下载软件不错
.cn
学习嵌入式系统的经验【转载】
实践当然是最锻炼人的方式,但是我想在校生很少有这样的机会,别说本科生,硕士生也未必有条件。所以我想学习嵌入式要从个人的知识背景和现实条件出发,订立合适的阶段目标,在允许的条件下多动手多思考。
三、一般情况下硬件设备是比较短缺的,所以可以在软件方面和嵌入式系统开发模式上下功夫。提醒大家一点,嵌入式系统开发设计的内容很多,所以大家不要乱,在了解嵌入式系统开发的体系结构后,一步一步的下手,最容易上手的是Linux
下的C,比如uC/OS II(有开放源代码),虽然可能无法在硬件上仿真,但也不必着急。无论对初学者还是自以为是高手的人来说,编程水平(这可不受硬件条件限制)绝对是没有止境的。而锻炼编程水平需要的条件只是一台PC而已,条件比较容易具备。有了较高的编程水平(嵌入式主要是C,当然OO的几种语言c++,java是发展趋势),等到有机会的时候及时补充硬件知识,会很快成为高手的。
四、还有,一定记住,学习嵌入式,“要想办法,不要找理由”。当年在dos下用tc编程时的条件,现在回想起来简直就是奇迹。
五、我推荐一条发展道路吧,仅供参考,六、1、C开发经验
条件:Linux
方法:随便,主要是掌握ANSI C编程(不包括gtk,qt等图形可视化开发)
七、2、网络、操作系统、体系结构
条件:Linux,各种书,算法、例程。
方法:通过C编程实现简单的网络等知识的算法和过程。
八、3、嵌入式系统概念
条件:各个嵌入式网站,讨论组,书籍
方法:少提问(尤其是等着天上掉馅饼,这主要是防止增长惰性,也解决不了实际问题),多思考。
九、4、嵌入式开发实践
条件:各种嵌入式系统开发工具的demo版,包括编译器,仿真器。可以找高手们要,也可以下载。
方法:这里有两个分支,一个是基于MCU/MDSP的嵌入式系统开发,一个是象Palm OS,WinCE,uC/OS II等RTOS下的应用软件开发。对硬件感兴趣,想成为真正高手的由第一个分支入手,以后进入第二个分支;如果十分厌烦硬件,只想停留在软件开发上的,可以只由第二个分支入手,以后就和pc上的开发没有什么本质上的区别了,找份不错的工作应该没问题,可以不用进行下面的步骤了,感兴趣可以参考第6条。
十、5、硬件开发
条件:各种嵌入式芯片、存储器等电路器件,protel99等电路设计软件,电路板制作。
方法:这时候该有开发条件了,最起码是51系列,这个比较方便。电路的设计内容较多,不过看起来吓人,实际上比软件要简单的多。只要下功夫,实践会告诉你一切。
十一、6、硬件工程/软件工程/项目管理
条件: 各个芯片详细资料和使用经验,软件工程知识,项目管理知识,培训,大型项目
参与经验方法:已经是高手了,但是学无止境,沾沾自喜于已有的知识是致命的。那个下一步。你该是管理者了。
十二、抛砖引玉,以上出自我的经验,欢迎各路高手们补充,初学者提问。
【后记】嵌入式系统,从小的方面来说,大家都做过。一个单片机为核心的小的电子系统,包括了软件和硬件。但是,在很多人的心目中,单片机就是51,软件就是自己从头用汇编写的监控程序,然后实现自己的功能。事实是这样的吗?单片机==51吗?市场上的单片机何止上千种,从4位到8位到16、32、64位,功能差的只有控制功能,功能强的运算能力超过一般台式机,我们所作的,是根据自己的需求,熟练程度,资源以及性价比来选择所需。拿我比较熟悉的ARM来说,移动通讯市场的控制器至少85%采用ARM作为其内核,手持设备以及嵌入式装置的市场份额其至少占60%,但我估计大部分的同学可能还不知道ARM是个什么,更别说去搞基于ARM的开发了。同样从软件的角度来讲,嵌入式系统的规模越来越大,对可靠性和实时性的要求越来越高,再也不是自己从头做一个监控程序,利用键盘驱动的时代了,大多数的嵌入式系统都采用了操作系统。这就对开发人员提出了更高的要求,需要对操作系统的原理比较了解。大家也许学过操作系统,但有几个人去接触过操作系统的源代码呢(当然,也许大家读过Linux的源代码,不过规模较大)。
第二篇:嵌入式linu学习心得
嵌入式Linux学习心得
1、Linux命令
ls:查看目录-l以列表方式查看;ls –l 与ll的功能一样 pwd: 查看当前的目录
cd:改变当前操作目录cd /直接跳到根目录 cd..回到上一级目录 cat: 打印显示当前文件的内容信息
mkdir:创建目录
fdisk: 查看硬盘分区信息,-l以列表方式查看
->代表是链接文件,类似window下的快捷方式。
cp: 复制命令,例子cp 文件名 /home/dir/
mv: 移动或改名,如mv sonf.confsonf.txt(改名)移动:mv sonf.conf / rm:删除命令,如rm –f test.c;如删除目录rm –fr d
man:查看某个命令的帮助,man 命令
2、各系统目录的功能
drw—r—w--:d代表是目录,drw代表当前用户的权限,r代表组用户的权限,w代表其它用户的权限。x代表有执行权限。
/boot/gruff.conf: 启动引导程序
/dev:brw—rw--:b代表是块设备。Linux设备有三种,块设备(b开头)、字符设备(c开头)、网络设备。had代表第一个硬盘,hdb代表第二个硬盘。Hdb2代表第二块硬盘的第二个分区。3,67代表主设备为3,从设备为67./etc:存放的是系统的配置文件。Inittab文件存放不同启动方式下必须启动的进程。Inittab文件中有6个启动level,wait中对应着6个level的目录,respawn代表当一个进程被意外终止了,但会自动启动的进程,如守护进程。rc.d目录中存放了一个rc.sysinit文件,里面存放系统初始化配置信息。/etc还有一个vsftpd里面存放tcp、ftp的配置。
/home : 用户目录,存放用户的文件,/lib:存放库文件,后缀为so的文件代表动态链接库。
/lost+found:系统意外终止,存放一些可以找回的文件。
/mnt:挂载外部设备,如挂载光驱:mount –t /dev/cdrom/mnt/cdrom,如
果在双系统中,要查看windows中D盘的文件,首先应该将D盘的文件映射过来,mount –t /dev/hda2/mnt/windows/d
/opt:用户安装的应用程序
/proc:是系统运行的映射,比较重要。里面的文件数字代表进程号。每个进程号目录下包含进程的基本信息。还有其他信息,如cpuinfo等,内核支持的文件系统filesystem等。系统支持的中断interrupts,iomen代表内存分配情况。ioport存放IO端口号。还有分区信息,modole信息,状态信息,版本信息
对于Linux的设备驱动程序,有两种加载模式,一种是直接加载进linux内核,一种是以模块的方式加载到内核。
/sbin: 系统管理的一些工具。如poweroff关机工具。
/usr: 安装系统时很多文件放在此目录下面,包含一些更新等,include包含的头文件,lib 是Linux的库文件,src包含Linux2.4的内核源码
/var:存放是临时变量
3、
第三篇:嵌入式软件开发学习历程之经验谈
嵌入式软件开发学习历程之经验谈
我是今年5月份到粤嵌教育去学习嵌入式软件开发的,还没开始学习的时候,我看了一些有关嵌入式软件开发的教学视频,当时觉得很难,老是理不清思路,我想我死定了,去粤嵌培训的钱会不会白交了。但到粤嵌学习一个月后,我开始有了清晰的学习开发思路,学习起来十分得心应手。下面我就谈谈在粤嵌的学习经验吧,给想学习嵌入式软件开发(http://www.xiexiebang.com/topics/project/)的各位朋友留下点建议。
嵌入式软件开发并不像想象的那么难,主要是因为有硬件开发板,一般人敬而远之,其实对于高校理工科的毕业生(如自动化、电子、信息等专业),懂一定的C语言知识,是否懂硬件其实关系不大,这样的条件就可以学习嵌入式软件开发了,现在,嵌入式的人才很多都是半路出家,由其他的行业转行过来,由于没有系统掌握嵌入式的相关知识,对于这部分人,企业其实是不满意的,这也是需要到专业的培训机构去培训的原因,并寻找项目实践的机会,增加项目经验,只有这样才能弥补横在企业与求职者间的鸿沟。“开放式实验,企业化运作”这一原则贯穿了整个嵌入式开发(http://www.xiexiebang.com/topics/project/)过程,粤嵌教育给我提供的是真正的项目实战,真正企业所需要的技术能力,深入浅出地把我带入嵌入式的世界,帮助我学到实质的操作技能。
第四篇:嵌入式学习路线
语言基础 1.C 与 C++ A.《c reference》 B.《c++ 编程思想》 C.《effective c++》 D.《more effective c++》 E.《effective c++ stl》 2.软件设计 A.《UML 2.0 Reference》 B.《设计模式-可复用的面向对象软件的基础》 C.《重构》 D.《修改代码的艺术》 E.《面向模式的软件体系结构》卷 1,卷 2,卷 3,卷 4,卷 5 3.Linux 开发基础 A.《鸟哥的 linux 私房菜》 B.《GNU make reference》 C.《Shell 编程》 D.《unix 高级环境编程》 E.《linux kernel development》 F.《深入理解 Linux 内核》 G.《Linux 驱动程序开发》 H.《Unix 网络编程》 I.《Linux 进程间通信》 4.嵌入式开发基础 A.《ARM 体系结构》 B.《ARM 程序分析与设计》 C.《ARM 嵌入式系统基础教材》周立功 D.《嵌入式操作系统μC/OS》 E.《嵌入式 Linux 基础教材》 F.《嵌入式系统设计》 G.《嵌入式硬件设计》 H.《Qt4 图形设计与嵌入式系统开发》 I.《嵌入式系统中的实时概念》 J.《实时设计模式》 5.专业选看 A.FPGA 设计 B.《高性能嵌入式计算》 C.数字图像处理,视频编解码基础 MPEG4,H.264,AVS D.Android,iphone,symbian 开发。
第五篇:嵌入式学习之路
1、必须认真学习一个操作系统
(例如从UC/OSII 到 Linux)
2、必须熟悉TCP/IP网络协议
(现在的嵌入式产品与网络的联系越来越紧密,融入网络是必然趋势)
3、必须认真的学习一款CPU的工作原理
(例如现在地球人都知道的ARM)
4、必须亲自设计一款嵌入式产品
从方案的选择到原理图的绘制,从PCB的绘制到硬件的调试。
学习内容
1.主流嵌入式微处理器的结构与原理 如:ARM PowerPC MIPS Motorola68k 2.
必须掌握一个嵌入式操作系统
如:VxWork uc/os II
uLinux Linux WinCE XPE 3.
必须熟悉嵌入式软件开发流程 4.
至少做过一个嵌入式软件项目
如:数字图象压缩技术----MEPG编解码算法和技术 通信协议及编程技术----TC
TCP/IP和无线通信协议、无线局域网通信协议802.11 移动通信CD 网
网络信息安全技术
书目开列 基础
〈〈LINUX命令行、编辑器与SHELL编程〉〉 《linux命令大全.pdf》
编程
《C语言》第二版 谭浩强
《GNU Make 使用手册(中译版).pdf》 〈〈精通UNIX SHELL 编程〉〉 《LINUX编程24学时教程》 〈〈LINUX应用程序开发〉〉 〈〈LINUX程序设计〉〉 〈〈LINUX C函数库参考手册〉〉 <
原理
《数据结构》 〈〈算法导论〉〉 〈〈计算机组成原理〉〉 〈〈操作系统原理〉〉 〈〈离散数学结构〉〉
系统
《嵌入式实时操作系统uC/OS-!》 《linux内核完全注释》
《understanding the linux kernel 2》 <
<
《Linux设备驱动程序》 〈〈ARM嵌入式LINUX系统构建与驱动开发〉〉
硬件
微机原理、数字电路原理、模拟电路原理、单片微机原理、常见的硬件接口技术 PROTEL,KEIL,AUTOCAD ARM嵌入式系统系列教程—北航 《ARM嵌入式系统基础教程》 《ARM嵌入式实验教程
(一)》 《ARM嵌入式实验教程
(二)》 《ARM嵌入式实验教程
(三)》 《ARM嵌入式系统学习指导》
《ARM嵌入式系统软件开发实例
(一)》 《ARM嵌入式系统软件开发实例
(二)》
网络
〈〈TCP/IP详解〉〉 〈〈UNIX网络编程(第一卷)套接口API〉〉 〈〈UNIX网络编程(第二卷)进程间通信〉〉 ///////////////////////////////////////////////////// 学习阶段
第一阶段
1.精通单片机,包括A51汇编语言与C51语言,常用的外围电路,硬件接口 2.
精通电路分析,模电,数电 3.
精通PROTEL的使用
4.掌握LINUX基础,包括LINUX命令,SHELL编程,C编程,GNU MAKE的使用 5.
分析UC/OS II的源代码
用书
《单片机原理与接口技术》 〈〈MCS-51系列单片机实用接口技术〉〉 〈〈电路分析〉〉 〈〈模电〉〉 〈〈数电〉〉 〈〈信号与系统〉〉 〈〈PROTEL〉〉 〈〈LINUX命令行、编辑器与SHELL编程〉〉 《linux命令大全.pdf》
《GNU Make 使用手册(中译版).pdf》 〈〈精通UNIX SHELL 编程〉〉 《LINUX编程24学时教程》 〈〈LINUX应用程序开发〉〉 〈〈LINUX程序设计〉〉 〈〈LINUX C函数库参考手册〉〉
《嵌入式实时操作系统uC/OS-!》
第二阶段
1.精通原理,包括计算机组成原理,操作系统原理,数据结构与算法
2.精通LINUX编程,包括串口通信编程,多进程程序,多线程,任务管理,步,网络编程,QT GUI编程字符和块设备驱动程序 建立文件系统等等 3.
再次分析UC/OS II的源代码
用书
《数据结构》 〈〈算法导论〉〉 〈〈计算机组成原理〉〉 〈〈操作系统原理〉〉 〈〈离散数学结构〉〉 <
第三阶段
1.再次深入分析操作系统 2.
分析LINUX内核
用书
〈〈operating system concepts>> 《操作系统设计与实现》
<
通信同 《linux内核完全注释》
<
1.熟悉网络 2.
ARM学习
用书
〈〈TCP/IP详解〉〉 〈〈UNIX网络编程(第一卷)套接口API〉〉 〈〈UNIX网络编程(第二卷)进程间通信〉〉 ARM嵌入式系统系列教程—北航
第五阶段
1.驱动开发
《Linux设备驱动程序》〈〈ARM嵌入式LINUX系统构建与驱动开发〉〉
软件
精通51汇编及C51编程,具有独立大型工程项目硬件底层编程经验
熟悉Linux操作系统,能进行相关操作熟练使用Linux下的开发环境(如:vi,emacs,gcc,cvs,gdb,kDevelop等)进行网络,数据库、多媒体等开发精通嵌入式Linux下的C/C++及汇编语言开发,会使用软件版本控制软件,如CVS、VSS等熟悉MicroWindows,QT,MiniGUI等一种Linux图形界面程序编程机制与技巧有Linux设备驱动编程、嵌入式操作系统的移植、Linux应用程序编写
系统
熟悉Linux,Vxworks,WinCE,uCOS等至少一种嵌入式操作系统 熟悉嵌入式开发的基本流程
处理器
熟悉ARM7/ARM9处理器,要求在该处理器上编写过代码 熟悉SAMSUNG、PHILIPS、ATMEL等主流ARM应用设计 精通ARM ADS调试开发环境等工具
网络通信
熟悉红外、无线、以太网、GPRS/CDMA及RS485等多种接口的通讯 了解计算机通讯协议,有TCP/IP等协议编程能力
硬件
熟悉微机原理、数字电路原理、模拟电路原理、单片微机原理 精通常见的硬件接口技术
熟悉Protel,AutoCad等设计工具的使用 补充
要想成为高手中的高手,最好从钻研如下领域修炼: 1,分析一种RTOS的源代码--UCOS最容易;2,分析一种通讯协议栈的实现方式--TCP/IP最实用;3,精通一种DSP的开发集成环境--TI CCS2.1最优秀,精华在其内带的RTOS;4,精通一种单片机的开发集成环境--keil C最经典;5,精通一种MCU的开发集成环境--ADS 1.2最流行;要想成为大师级人物再从如下领域开始修炼: 1,精通一种系统建模语言和工具--Telelogic tau SDL/UML suit最经典;2,精通一种算法仿真工具--Matlab simulink 最便宜;要想检验一下自己是否到达了至尊级人物,可以做如下的事:
动手搭建一套红外或者蓝牙通讯原型系统,模拟前端可以用现成的,基带用DSP,主控用个32BMCU,DSP和协议软件自己写。当然不可能做全,做个子集就可以了。如果能到这个地步,打住吧,该改行去做市场了。做个一、二年市场,你不自己去创个业就太浪费了