第一篇: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一下(最好別用百度,不太好用),了解了一些,也就大概知道要怎么做了。如果再遇到問題,再去發貼問,這樣也顯得咱們有水平。比如自己連串口是什么都不太清楚呢,就問串口通信怎么做啊,就是人家把代碼給咱,咱也不明白是怎么回事啊。多看代碼,多寫代碼
見多識廣,熟能生巧。多看代碼,要從代碼中讀出代碼的意思來。自己平時也要多寫代碼,多練習(這一點我做的不好,寫的少)。
寫完已經晚上兩點了,思路有些亂,有些也是個人的見解,在有些人看來可能是錯誤的,每個人有每個人的學習方法,但是我們的目的只有一個——希望我們學到更多的知識。