第一篇:001 嵌入式PPPD脚本学习分享
嵌入式PPPD脚本学习分享
ppp拨号脚本相关介绍与配置 1.CHAT脚本
一个简单的chat脚本有下面的结构: “" AT OK ATDT dialnumber CONNECT ”“ 一个chat脚本都是由字符串对来组成的。前面的字符串都是期望获取的串,紧跟的是发送的字符串。这个脚本每一项的具体含义是这样的:
1)MODEM期望空字符串。这句话的意思直接理解就是MODEM不管收到什么字符串,先发出字符串AT; 2)期望收到“OK”字符串,然后发送字符串“ATDT dialnumber” 3)如果收到“CONNECT”,就不再发送,认为数据链路已建立连接。这样的chat脚本是最简单的,如果需要进行超时控制,就可以加入如下字段: TIMEOUT 10 如果要增加对特殊情况的处理,就加入下面字段: ABORT BUSY ABORT NO ANSWER ABORT RINGING 这三行语句的意思是:如果收到字符串“BUSY”、“NO ANSWER”、“RINGING”就退出执行。所以在考虑到各种特殊情况下,配置一个PPP连接的CHAT脚本就可以像下面这样: TIMEOUT 30 ABORT BUSY ABORT NO ANSWER ABORT RINGING ”“ AT OK ATDT dialnumber CONNECT ”“
2.OPTIONS脚本
OPTIONS脚本的内容,为PPP连接指定了连接使用的设备、使用的控制字符传输速率、指定了硬件加速、溢出控制等。
例如下面的options脚本:
ttyS0----指定连接使用的设备,例如:ttyS0、ttyS1等
57600----设置连接使用的控制字符传输速率,可以设置为57600、115200等 debug----如果需要加入调试信息,就加入参数debug logfile /var/ ppplog----将连接过程中的信息输入到某个文件中 mtu 1500-detach noipdefault----不使用默认IP就可以加入参数noipdefault defaultroute usepeerdns----使用服务器端协商的DNS就可以设置参数usepeerdns lcp-echo-failure 4----当连续4次没有收到发出的LCP回声请求时,就认为服务器端已不再响应,就退出执行。这里的失败次数可以灵活来决定。-ccp----不使用压缩控制协议-vj----关掉式IP头压缩-chap----不使用chap鉴权
-mschap-v2----不使用mschap鉴权 user hide-password connect ”/usr/bin/chat-v-t6-f /var/ chat“----制定了要使用的chat脚本的位置。加上参数-v 告诉 chat命令将其所有的输出/入拷贝到系统记录里(通常是 /var/log/messages)。-t 6 指定了执行chat该命令的时间为6s。chat脚本的位置可以位于/etc/目录下,也可以位于/var下,这个可以更加需要灵活设置。persist---永久链接(自动重拨)
crtscts---告诉ppp使用modem的硬件流量控制
modem---使ppp使用DCD信号来判断连接是否正常,有无掉线现象 deflate---使pppd使用defalte压缩方式
idle---设置了一个时间限制,当在300秒的时间内没有数据传送,就断开连接
lock---则创建一个锁定文件,其他程序在发现存在这个文件后,就能得知相应的串口已经被使用。demond---参数告诉pppd停留在后台,监视网络数据,一旦有要求就立即进行连网,超时后就断开连接,但pppd仍然停留在后台等待下次数据传送
其他的参数具体含义可以参照参考PPPD2.4.4 中options.c中注释:
int debug = 0;int kdebugflag = 0;int default_device = 1;char devnam[MAXPATHLEN];bool nodetach = 0;bool updetach = 0;int maxconnect = 0;char user[MAXNAMELEN];char passwd[MAXSECRETLEN];bool persist = 0;char our_name[MAXNAMELEN];bool demand = 0;char *ipparam = NULL;int idle_time_limit = 0;int holdoff = 30;bool holdoff_specified;int log_to_fd = 1;bool log_default = 1;int maxfail = 10;char linkname[MAXPATHLEN];bool tune_kernel;int connect_delay = 1000;int req_unit =-1;bool multilink = 0;char *bundle_name = NULL;bool dump_options;bool dryrun;char *domain;int child_wait = 5;
3.鉴权脚本
一般情况下,PPP连接是需要进行身份认证的。签权方式有两种,一种是PAP鉴权,另一种是CHAP鉴权。鉴权需要的用户名和密码是存放在PAP-secrets和chap-secrets脚本中,以如下方式存放: Username * password 需要进行鉴权时,通过在options脚本中指定鉴权方式为PAP或CHAP,PPP模块就会从PAP-secrets和chap-secrets脚本中读出用户名和密码,附加到PPP的鉴权包中,发送到服务器端进行身份认证。
4.PPP拨号过程与脚本之间的关系
脚本设置成功以后,怎么和pppd2.4.4一起工作呢?这个需要从pppd程序的主函数入手。这个过程是这样的:
Pppd程序启动以后,就会按照pathname.h中所指定的文家位置去寻找options脚本文件。这个可以按照需要指定文件的位置,确保pppd能够准确找到该文件。
Pppd找到options文件后,按顺序读入参数行。在这里,就可以获取系统要使用的是哪个设备来进行联网、设备的速率是多少。
Pppd 将配置的参数解析为程序当中的全局变量标识符,进行pppd连接控制。
三.实践情况
试验环境:Linux LT5211 3.2.0 #1559 Mon Jun 19 15:59:25 CST 2017 armv7l GNU/Linux
通讯模块,加载成ttyUSB*设备;
目标:使用通讯模块进行3G4G拨号连接互联网 方法:使用pppd和ppp程序,进行拨号连接 前提:安装了ppp、pppd两个程序
步骤:
1、创建ppp程序的拨号脚本,内容如下:(有两个,一个是针对移动、联通和电信4G的,一个是只针对电信3G的)# 针对移动、联通和电信4G的,文件名chat-script #!/bin/sh exec chat-v TIMEOUT 5 ABORT ”BUSY“ ABORT ”ERROR“ ABORT ”NO CARRIER“ '' rAT OK 'AT+CGDCONT=1,”IP“,”CMNET“' OK 'ATDT*99#' CONNECT ''-----------------不同脚本分割,请存在不通文件中----------# 针对电信3G的,文件名chat-script-ct3g #!/bin/sh exec chat-v TIMEOUT 5 ABORT ”BUSY“ ABORT ”ERROR“ ABORT ”NO CARRIER“ '' rAT OK 'AT+CGDCONT=1,”IP“,”CMNET“' OK 'ATDT#777' CONNECT ''
2、创建两个拨号脚本,ppp-on用于拨号连接 ppp-off用户断开连接 # 文件 ppp-on #!/bin/sh # $1 串口号 $2波特率 $3chat脚本
pppd modem-d-detach lock $1 $2 kdebug 4 file /etc/ppp/options crtscts noipdefault netmask 255.255.255.0 defaultroute connect $3-----------------------# 文件 ppp-off #!/bin/sh
# # Determine the device to be terminated.# if [ ”$1“ = ”“ ];then DEVICE=ppp0 else DEVICE=$1 fi
# # If the ppp0 pid file is present then the program is running.Stop it.if [-r /var/run/$DEVICE.pid ];then kill-INT `cat /var/run/$DEVICE.pid` # # If the kill did not work then there is no process running for this # pid.It may also mean that the lock file will be left.You may wish # to delete the lock file at the same time.if [!”$?“ = ”0“ ];then rm-f /var/run/$DEVICE.pid echo ”ERROR: Removed stale pid file“ exit 1 fi # # Success.Let pppd clean up its own junk.echo ”PPP link to $DEVICE terminated.“ exit 0 fi # # The ppp process is not running for ppp0 echo ”ERROR: PPP link is not active on $DEVICE“ exit 1
3、使用方法
将以上的四个脚本文件赋予执行权限,并使用root权限执行./ppp-of /dev/ttyUSB1 115200 chat-script(具体路径)使用ifconfig查看拨号的结果
4、附上一个自己写的脚本,其中调用的以上的拨号脚本 #!/bin/sh WR=”/home/marsboard/pppd-net“ # $1 串口号 $2波特率 $3chat脚本 $4 ppp-on日志 ${WR}/ppp-on $1 $2 ${WR}/$3 > ${WR}/$4 & sleep 8 # 从ppp-on日志中获取拨号信息 INTERFACENAME=”Using interface“ ADDRESSIPNAME=”local IP address“ GATEWAYNAME=”remote IP address “ INTERFACE=`grep ”$INTERFACENAME“ ${WR}/$4|awk '{print $3}'` ADDRESSIP=`grep ”$ADDRESSIPNAME“ ${WR}/$4|awk '{print $4}'` GATEWAYIP=`grep ”$GATEWAYNAME“ ${WR}/$4|awk '{print $4}'` # 判断拨号是否成功 for n in `seq 3` do ping-c 1 ${ADDRESSIP}-I ${INTERFACE} >/dev/null 2>&1 if [ $?-eq 0 ] then echo ”ppp Successed!“ echo ”${INTERFACE}, ${ADDRESSIP}, ${GATEWAYIP}“ return fi done echo ”ppp Failed!"
第二篇:嵌入式学习路线
语言基础 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和协议软件自己写。当然不可能做全,做个子集就可以了。如果能到这个地步,打住吧,该改行去做市场了。做个一、二年市场,你不自己去创个业就太浪费了
第四篇:嵌入式学习总结
嵌入式学习总结
一.基本信息...................................................................................................................1 二.嵌入式系统的组成..................................................................................................1 三.嵌入式的操作系统特点..............................................................................................1 四.嵌入式系统的文件系统..........................................................................................2 五.嵌入式文件系统的特点...........................................................................................2
一.基本信息
嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是是由单个程序实现整个控制逻辑。
二.嵌入式系统的组成
一个嵌入式系统装置一般都由嵌入式计算机系统和执行装置组成,嵌入式计算机系统是整个嵌入式系统的核心,由硬件层、中间层、系统软件层和应用软件层组成。执行装置也称为被控对象,它可以接受嵌入式计算机系统发出的控制命令,执行所规定的操作或任务。执行装置可以很简单,如手机上的一个微小型的电机,当手机处于震动接收状态时打开;也可以很复杂,如SONY 智能机器狗,上面集成了多个微小型控制电机和多种传感器,从而可以执行各种复杂的动作和感受各种状态信息。
三.嵌入式的操作系统特点
(1)可裁剪性。支持开放性和可伸缩性的体系结构。
(2)强实时性。EOS实时性一般较强,可用于各种设备控制中。(3)统一的接口。提供设备统一的驱动接口。
(4)操作方便、简单、提供友好的图形GUI和图形界面,追求易学易用。
(5)强稳定性,弱交互性。嵌入式系统一旦开始运行就不需要用户过多的干预、这就要负责系统管理的EOS具有较强的稳定性。嵌入式操作系统的用户接口一般不提供操作命令,它通过系统的调用命令向用户程序提供服务。
(6)固化代码。在嵌入式系统中,嵌入式操作系统和应用软件被固化在嵌入式系统计算机的ROM中。(7)更好的硬件适应性,也就是良好的移植性
四.嵌入式系统的文件系统
通用操作系统的文件系统通常具有以下功能:
提供用户对文件操作的命令。
提供用户共享文件的机制。
管理文件的存储介质。
提供文件的存取控制机制,保障文件及文件系统的安全性。
提供文件及文件系统的备份和恢复功能。
提供对文件的加密和解密功能。
五.嵌入式文件系统的特点
1兼容性。嵌入式文件系统通常支持几种标准的文件系统,如FAT32、○JFFS2、YAFFS等。
2实时文件系统。除支持标准的文件系统外,为提高实时性,有些嵌入 ○式文件系统还支持自定义的实时文件系统,这些文件系统一般采用连续的方式存储文件。
3可裁剪、可配置。根据嵌入式系统的要求选择所需的文件系统,选择 ○所需的存储介质,配置可同时打开的最大文件数等。
4支持多种存储设备。嵌入式系统的外存形式多样了,嵌入式文件系统 ○需方便的挂接不同存储设备的驱动程序,具有灵活的设备管理能力。同时根据不同外部存储器的特点,嵌入式文件系统还需要考虑其性能、寿命等因素,发挥不同外存的优势,提高存储设备的可靠性和使用寿命。
总结:嵌入式是一门以应用为中心,以计算机为基础,软件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。
第五篇:学习嵌入式心得
嵌入式心得体会
本人大学学的是电子信息科学与技术专业,其实这个专业和嵌入式没有多大的关系,要说有关系就是简单的讲了下C语言语法,学完之后还不知道什么是C语言,只记住了,char,int,string等占几个字节,if, for, while循环什么的,感觉也就能算一些小学就会的题目,全国计算机等级二级也就糊涂的过了。我这个专业没学过C++,一开始不知道什么是向对象,什么叫面向过程,这可能让大家笑话了。不过这说的是实话,大学的时候比较喜欢动手,喜欢硬件方面的东西,也喜欢看书。在大一的时候就听学长说,单片机很难学,在没事的时候就从图书管借了本关于51的书,一开始还真是不怎么懂,然后硬着头皮去看,当我把51的结构看完了,就不像一开始那样一头雾水了,自己在纸上把51的结构图默画一遍,然后再把各个寄存器功能写一下,各个功能口的结构也画一遍,然后就不觉得51有什么难了。其实有些时候不是这个东西你不会,而是在不会的时候自己先告诉自己这个太难了,自己先放弃了。我们学习51芯片,是为了以后的打基础,知道是怎么通过配置寄存器来实现功能。
大二下学期的时候,我们开了51的课,这个课几乎就没怎么去,因为我认为没有必要去听自己会的东西了。后来听别人说avr的资源会比51的丰富的很多,所以就想试试,看看有什么难的,就从网上买了本马潮老师《AVR单片机嵌入式系统原理与应用实践》,一边看书,一边想自己画一个板了,一开始想实现一个点阵屏,实现滚动效果,后来想想做个板也花不少钱呢,为什么不多加一些功能呢,还能多学到些知识,所以就加了温感,红外,铁电存储器等并把所有的扩展口都扩展了出来,备以后用,那时还挺自豪的呢,同学们都很羡慕,不过现在想想其实也没什么了。
大学也听说过嵌入式这个词,不过不太明白是什么意思,09年的时候从网上找到中嵌视频,有四张DVD(大约13G),下载下来后,从头到尾的看了一遍,没什么印象,只记得讲一些不知所云的函数,然后莫名其妙的讲怎么使用那个44b0的开发板,不过听完了,还是有很大收获的,就有一种想装一个linux的冲动,我是大二下学期才有的自己电脑,不过电脑的配置比较低,1g内存,跑虚拟机就像个蜗牛,所以就想着怎么才能装个linux,自己用XP习惯了,如果全换了又舍不得,那时从书上知道linux的文件系统和windows不一样,只有一个根分区,所以也害怕一装linux全盘就被格式化了,不过最后还是欲望战胜了担心,买了张redhat 9的光盘,小心的装这个系统,里边的英文也不是太难,还是知道大概意思的,所以一步步的装,最后装到我的硬盘的最后空间,重新启动,竟可以选择进入哪一个系统了,从这之后,自己就不害怕怎么装系统了,应了那句言,纸上得来终觉浅,绝知此事要躬行。所以我认为,买一个开发板是完全有必要的,拿到实物操作一下就不会感觉太抽象了。
后来也想学学arm,但不知道arm是什么东西,所以就买了本《从51到arm》,讲的是关于arm的大体结构,看完后感觉,原来arm就是一个速度更快,接口更丰富的单片机啊。如果想做linux设备驱动的同学应该对arm硬件有一些了解。如果对驱动不感兴趣,完全没有必要去看。交叉编译器会帮我们做好这些事情,他比我们更了解arm结构。
大三下学期开始准备考研了,所以自己这些兴趣就先放下了,报的北邮的信通学院通信专业,当时就是想一定要上个好学校好专业,也没想太多,结果考了的成绩差了点,没有被录取,也不想调剂一个二流的学校,然后就参加工作了,工作中每天都用的到开发板,当我看到一个小板上还可以跑系统的时候感觉很不可思议,以为要很大工程。后来边工作边学习,每天都要看电脑看到眼发疼,晚上也都差不多十二点时才睡觉。感觉到累,不过也感觉到自己在进步。
闲话有点多了,说了很多都是自己大学那点破事。
听很多的初学者说不知道从哪里开始,学习嵌入都要学哪些东西,从网上搜了一下,一大堆的东西要学,一下就推荐十几本书,说看完这本书怎么怎么样,看完那本书怎么怎么样,一下子就给初学者给吓住了,其实完全没必要把网上的那些东西全部看一遍,那样又费时,又感觉工程太大,让初学者没有信心去把每一种都看完。网上说的些方面都要知道,不一定全部都掌握,我们可以退成求其次,每一个都知道一些,当然会的越多越好。今天学点这个明天学点那,换着样来也不会觉得烦。而且还能感觉到每天都有收获。
下面给嵌入式初学者一些自己的我个人建议。1嵌入式涉及到很多的基础知识:
c语言,关于C语言要知道基本的语法,什么是结构体,什么是共用体,有什么区别,不用强记一些二级考的东西,因在实际中用的很少。
c++要知道什么是类,怎么定义,继承,接口,要深刻理解,当然基本语法也是必不可少的。
操作系统原理也应该知道基本的原理的,我记得我大学没这个课还是去电信学院蹭别的专业的课呢,后来学习发现很多的东西都是在这个课上学到的。什么时间片啊,任务调度啊,都是在那里知道的。
Linux基本命令的使用(vi编辑器必须会用,因为在终端改文件的时候只能用这个),我们现在很多的人都习惯用鼠标了,很少用到命令,我们学习嵌入linux可要改改这个习惯了,linux用命令操作一是效率高,二是功能非常强大,远非图形界面能比的了的,其实我们用图形界面的操作都要转化为命令传给硬件的。
Linux文件系统的管理要清楚,哪个目录存放是什么东西,有什么用,文件权限管理等 Shell编程也要了解一些,在这给大家推荐一个教程,周朝剑的 shell编程,也就七八讲吧,讲的很全面。初学者看前4讲就可以了。
Linux设备驱动的架构要了解,初学者可以以飞凌的OK6410开发板上的led驱动分析一下,结合原理图和linux设备驱动相关书籍把每一行代码都分析明白。关于驱动给大家推荐一本书《LINUX社备驱动程序》中国电力出版社出版的,很经典的,初学者看可能看不太明白,不过要坚持看,最次也得把前6章看完了。看书不要希望一次就会,一次就明白是什么意思,也不要死记硬背,看不明白也没关系,以后遇到了知道去哪里去找就可以了,以后遇到的多了,也就记住了,遇到的少的,忘记也就忘记了。还有,不要直接阅读linux内核源代码,看一些自己把头撞破也想不明白的事,会打击初学者的积极性,要循序渐进,今天学个做个led,明天做个串口,后天说不定就做硬件编解码了。
3、你可以不接受培训,但是不能不买开发板。如果你想学习嵌入式一定要买块学习板,现在的开发板很便宜了,给我们初学者减轻了很多经济负担。看再多的视频,看再多的书,也不如自己动手试一下,看着很简单的东西,做起来就可能遇到很多的问题,遇到问题找到原因,解决问题,只有这样才能学到东西,记得我第一次写led的驱动,想自己试一下,网上也有人写过相关的代码,可是自己一试,就出了好多的问题,那个led弄了我一天才把led灯点亮。所以不要眼高手低。
还有关于培训,现在的培训机构很多,讲的也不错,老师也很好,但是有一个问题,太集中了,而且学生动手的机会也不太多,记得我们公司还招了一个在北京某个培训机构培训半年的员工呢,花了一万多,来了之后也没感觉有多高,问他都学了什么,也就是我前边说的那些基础知识,很多的东西还是不知道的,照着书弄个helloworld模块驱动两天没搞定。不是培训不好,但我个人见解效果并不是很好。记住:只有自己动手做过的东西才是自己的。
现在买一块开发板很便宜,飞凌的OK6410的开发板就不错,源码完全开放,而且资料也很丰富,完全能满足初学者学习用,有人说友善的板子也不错,我个人觉得友善的板子不
错,但是不适合初学者,因为他的很多的东西是不给代码的,用过友善的板子的同学经常有这样的痛苦,想学一个东西,去找他的代码的时候,却找不到,很多友善提供的代码中很多的都是封装好的,只提供给客户一个库,初学者想要找代码的时候就不知道怎么办了。不要好高骛远,要脚踏实地
对于初学者,还有一点小建议,我们拿到一个开发板,很兴奋也很激动,想法自然也很多,想用开发板实现自己的这个想法,实现那个想法,然后又不知道从何下手,然后就去论坛中发一个贴,“那个什么什么怎么实现啊,哪位大侠能详细说一下啊,跪求!”然后等着别人去回复。见没人回复就抱怨。有想法是好的,我们要实现自己的想法也是有前提的,首先,我们对这部分知识了解吗?如果不了解就去google一下(最好别用百度,不太好用),了解了一些,也就大概知道要怎么做了。如果再遇到问题,再去发贴问,这样也显得咱们有水平。比如自己连串口是什么都不太清楚呢,就问串口通信怎么做啊,就是人家把代码给咱,咱也不明白是怎么回事啊。多看代码,多写代码
见多识广,熟能生巧。多看代码,要从代码中读出代码的意思来。自己平时也要多写代码,多练习(这一点我做的不好,写的少)。
写完已经晚上两点了,思路有些乱,有些也是个人的见解,在有些人看来可能是错误的,每个人有每个人的学习方法,但是我们的目的只有一个——希望我们学到更多的知识。