嵌入式arm實(shí)習報告
嵌入式系統開(kāi)發(fā)與應用概述
在今日,嵌入式ARM 技術(shù)已經(jīng)成為了一門(mén)比較熱門(mén)的學(xué)科,無(wú)論是在電子類(lèi)的什么領(lǐng)域,你都可以看到嵌入式ARM 的影子。如果你還停留在單片機級別的學(xué)習,那么實(shí)際上你已經(jīng)落下時(shí)代腳步了,ARM 嵌入式技術(shù)正以幾何的倍數高速發(fā)展,它幾乎滲透到了幾乎你所想到的領(lǐng)域。由于嵌入式系統具有體積小、性能強、功耗低、可靠性高以及面向行業(yè)具體應用等突出特征, 目前已經(jīng)廣泛地應用于軍事國防、消費電子、信息家電、網(wǎng)絡(luò )通信、工業(yè)控制等各個(gè)領(lǐng)域。嵌入式的廣泛應用可以說(shuō)是無(wú)所不在。
linux系統
linux系統主要是由用戶(hù)空間和內核空間再加上外部的硬件平臺構成,用戶(hù)空間就是用戶(hù)應用程序的運行空間,主要包括兩方面的內容:用戶(hù)應用程序和GNU C Library(glibc)。而內核空間有三方面的內容,一是系統調用接口,它作為用戶(hù)空間和內核空間相互轉移的一種方式,二是內核空間,三是體系相關(guān)內核代碼,在linux內核代碼中,可以看到arch目錄下有許多子目錄,其中每一個(gè)子目錄代表一種硬件平臺。
而為什么要把linux系統劃分為用戶(hù)空間和內核空間呢?主要是一旦用戶(hù)空間和內核空間沒(méi)有分開(kāi),那用戶(hù)將擁有很大的權限去操控內核或用戶(hù)應用程序的崩潰將會(huì )造成系統的崩潰,而linux系統是利用cpu的模式分級來(lái)分別運行用戶(hù)空間和內核空間,這樣就可以使操作系統得到充分的保護。而現代的cpu通常實(shí)現了不同的工作模式,以ARM處理器為例實(shí)現了7種運行模式,分別為:
1)用戶(hù)模式(usr):ARM微處理器正常程序執行模式
2)系統模式(sys):運行具有特權的操作系統任務(wù)
3)中斷模式(irq):用于通用的中斷處理
4)外部中斷模式(fiq):用于高速數據傳輸或通道處理
5)數據訪(fǎng)問(wèn)終止模式(abt):當數據或指令預取終止時(shí)進(jìn)入該模式,可用于虛擬存儲及存儲保護
6)管理模式(svc):操作系統使用的保護模式
7)未定義指令中止模式(und):當未定義的指令執行時(shí)進(jìn)入該模式,可用于支持硬件協(xié)處理器的軟件仿真ARM微處理器的運行模式可以通過(guò)軟件改變,也可以通過(guò)外部中斷或異常處理改變,除用戶(hù)模式外,其他模式都是非用戶(hù)模式或特權模式,除用戶(hù)模式和系統模式外,其他模式都是異常模式,常用于處理異常或中斷,以及需要訪(fǎng)問(wèn)受保護的系統資源等情況。
同時(shí)用戶(hù)空間和內核空間是程序執行的兩種不同狀態(tài),通過(guò)系統調用和硬件中斷去實(shí)現用戶(hù)空間到內核空間的轉移,系統調用是主動(dòng)的,硬件中斷是被動(dòng)的,比如鍵盤(pán)按下或者串口中斷。
接下來(lái)說(shuō)說(shuō)linux的內核架構,它主要是包含7大組成部分
1.內存管理 內存管理的主要作用是使多個(gè)進(jìn)程能安全高效的共享內存區域,通常使用以下兩個(gè)手段:
①內存映射:將物理內存映射到虛擬內存中,變有限為無(wú)限
②有效管理:使用各種內存管理算法(如伙伴算法),減少內存浪費
2.虛擬文件系統 vfs隱藏了各種文件系統的具體細節,為文件操作提供統一的接口
3.網(wǎng)絡(luò )協(xié)議棧 它為linux提供了完善豐富的網(wǎng)絡(luò )協(xié)議實(shí)現
4.進(jìn)程管理 進(jìn)程管理的重點(diǎn)是創(chuàng )建進(jìn)程、停止進(jìn)程,并控制它們之間的通信。進(jìn)程管理還包括控制活動(dòng)進(jìn)程如何共享cpu,即進(jìn)程調度。
5.設備驅動(dòng) 設備驅動(dòng)也是內核的一部分,它不同于內核的其他部件,并且獨立于內核的其他部件,同時(shí)它是與設備交互的唯一模塊,通常由第三方廠(chǎng)商開(kāi)發(fā),一個(gè)驅動(dòng)程序不與其他驅動(dòng)程序交互;內核與驅動(dòng)程序之間也僅通過(guò)一個(gè)嚴格定義的接口-交互。
6.系統調用接口 SCI層為用戶(hù)空間提供了一套標準的系統調用函數來(lái)訪(fǎng)問(wèn)Linux內核,搭起了用戶(hù)空間到內核空間的橋梁。
7.體系相關(guān)部分
Linux內核源代碼采用樹(shù)形結構進(jìn)行組織,非常合理地把功能相關(guān)的文件都放在同一個(gè)子目錄下,使得程序更具可讀性。
下面介紹下這些目錄的組成
arch目錄
arch是architecture的縮寫(xiě)。內核所支持的每種CPU體系,在該目錄下都有對應的子目錄。每個(gè)CPU的子目錄,又進(jìn)一步分解為boot,mm,kernel等子目錄,分別包含控制系統引導,內存管理,系統調用等。其下子目錄有
| --x86 /*英特爾cpu及與之相兼容體系結構的子目錄*/
| |--boot /*引導程序*/
| | |--compressed /*內核解壓縮*/
| |--tools /*生成壓縮內核映像的程序*/
| |--kernel /*相關(guān)內核特性實(shí)現方式,如信號處理、時(shí)鐘處理*/ | |--lib /*硬件相關(guān)工具函數*/
block目錄
部分塊設備驅動(dòng)程序
crypto目錄
加密、壓縮、CRC校驗算法
documentation
內核的文檔
drivers目錄(重點(diǎn))
設備驅動(dòng)程序
fs目錄
存放各種文件系統的實(shí)現代碼。每個(gè)子目錄對應一種文件系統的實(shí)現,公用的源程序用于實(shí)現虛擬文件系統vfs。
| |--devpts /* /dev/pts虛擬文件系統*/
| |--ext2 /*第二擴展文件系統*/
| |--fat /*MS的fat32文件系統*/
| |--isofs /*ISO9660光盤(pán)cd-rom上的文件系統*/
include目錄
內核所需要的頭文件。與平臺無(wú)關(guān)的頭文件在include/linux 子目錄下,與平臺相關(guān)的頭文件則放在相應的子目錄中。
init目錄
內核初始化代碼
ipc目錄
進(jìn)程間通信的實(shí)現代碼
kernel目錄
Linux大多數關(guān)鍵的核心功能都是在這個(gè)目錄實(shí)現。(調度程序,進(jìn)程控制,模塊化)
lib目錄
庫文件代碼
mm目錄
mm目錄中的文件用于實(shí)現內存管理中與體系結構無(wú)關(guān)的部分(與體系結構相關(guān)的部分在哪里實(shí)現?arch)
net目錄
網(wǎng)絡(luò )協(xié)議的實(shí)現代碼
| |--802 /*802無(wú)線(xiàn)通訊協(xié)議核心支持代碼*/
| |--appletalk /*與蘋(píng)果系統連網(wǎng)的協(xié)議*/
| |--ax25 /*AX25無(wú)線(xiàn)INTERNET協(xié)議*/
| |--bridge /*橋接設備*/
| |--ipv4 /*IP協(xié)議族V4版32位尋址模式*/
| |--ipv6 /*IP協(xié)議族V6版*/
samples
一些內核編程的范例
scripts
配置內核的腳本
security
SElinux的模塊
sound
音頻設備的驅動(dòng)程序
usr
cpio命令實(shí)現
virt
內核虛擬機
Linux內核的配置與編譯
Linux內核具有可定制的優(yōu)點(diǎn),配置內核的目的是裁剪掉不必要的文件和目錄,獲得一個(gè)最簡(jiǎn)單的又能滿(mǎn)足用戶(hù)開(kāi)發(fā)的操作系統,以解除嵌入式開(kāi)發(fā)過(guò)程中所遇到的存儲空間有限的困擾。內核配置與編譯的具體步驟如下:
1.清除臨時(shí)文件、中間文件和配置文件
1)make clean
Remove most generated files but keep the config即清除大部分生成的文件但保留配置文件
2)make mrproper
Remove all generated files + config files即清除所有生成的文件還有配置文件
3)make distclean
Mrproper + remove editor backup and patch files即實(shí)現
make mrproper命令的同時(shí)刪除編輯器備份文件和補丁文件
2.確定目標系統的軟硬件配置情況,比如cpu類(lèi)型,網(wǎng)卡型號,所需支持的網(wǎng)絡(luò )協(xié)議等。
3.使用如下命令之一配置內核:
1) make config:基于文本模式的交互式配置
2)make menuconfig:基于文本模式的菜單型配置
3)make oldconfig:使用已有的配置文件(.config),但是會(huì )詢(xún)問(wèn)新增的配置選項
4)make xconfig:圖形化的配置(需安裝圖形化系統)
Make menuconfig是最為常用的內核配置方式 如果一個(gè).config文件已經(jīng)存在,它將使用該文件設置那些默認的值
4.編譯內核
編譯內核通常也需要幾個(gè)步驟,一是清除以前編譯通過(guò)的殘留文件;二是編譯內核image文件和可加載模塊;三是安裝模塊。
下面是編譯內核的具體步驟。
①make dep 命令用在內核2.4或之前,用于建立源文件之間的依賴(lài)關(guān)系,在執行內核配置命令之后使用,不過(guò)在2.6內核中已經(jīng)取消該命令,該功能由內核配置命令實(shí)現。
②make clean 命令用于刪除前面留下來(lái)的中間文件,該命令不會(huì )刪除.config等配置文件。這個(gè)步驟是可選的,它的目的是清除原先編譯過(guò)而殘留的和.o(obj文件)。如果是剛下載的源代碼,那么這一步就可以省略了,但是如果已經(jīng)編譯多次內核,這一步是必要的,不然后面可能會(huì )出現很多莫名其妙的小問(wèn)題。
③make zImage命令用于編譯生成壓縮形式的內核鏡像,當編譯成功后,就會(huì )在arch\arm\boot\目錄下生成zImage文件,大小一般為幾百KB。對于嵌入式Linux內核而言,直接將生成的zImage下載到嵌入式目標板的flash中即可。對于較大的內核,如果用make zImage編譯,系統會(huì )提示使用make bzImage命令來(lái)編譯,bzImage是big zImage的縮寫(xiě),可用于生成較大的壓縮內核,比如桌面Linux系統內核。
④在配置菜單的過(guò)程中,有些選項被選擇為模塊的,即選項前為[M],并且在回答Enable loadable module support(CONFIG_MODULES)時(shí)選了Yes的,則接下來(lái)就還要用命令make modules 來(lái)編譯這些可加載模塊,并用
make modules_install將make modules生成的模塊文件復制到相應目錄,桌面Linux內核一般是在/lib/modules目錄下。
⑤制作init ramdisk
mkinitrd initrd-$version $version
例:
mkinitrd initrd-2.6.29 2.6.29
$version 可以通過(guò)查詢(xún)/lib/modules下的目錄得到Ramdisk是將一部分固定大小的內存當做分區來(lái)使用。它并非一個(gè)實(shí)際的文件系統,二是一種將實(shí)際的文件系統裝入內存的機制,并且可以作為根文件系統。將一些經(jīng)常被訪(fǎng)問(wèn)而又不會(huì )更改的文件(如只讀的根文件系統)通過(guò)ramdisk放在內存中,可以明顯的提高系統的性能。在linux的啟動(dòng)階段,initrd提供了一套機制,可以將內核映像和根文件系統一起載入內存。
⑥cp arch/x86/boot/bzImage
/boot/vmlinuz-$version
$version 為所編譯的內核版本號
(拷貝initrd-2.6.29到/boot下,將arch/x86/boot/bzImage更名為vmlinuz-2.6.29移動(dòng)到/boot下)
⑦修改/etc/.oh100nf 或者/etc/.oh100nf
(GNU GRUB(簡(jiǎn)稱(chēng) GRUB )是一個(gè)來(lái)自GNU項目的多操作系統啟動(dòng)程序。GRUB是多啟動(dòng)規范的實(shí)現,它允許用戶(hù)可以在計算機內同時(shí)擁有多個(gè)操作系統,并在計算機啟動(dòng)時(shí)選擇希望運行的操作系統。GRUB可用于選擇操作系統分區上的不同內核,也可用于向這些內核傳遞啟動(dòng)參數。)
這時(shí)重啟Linux操作系統,在進(jìn)入內核時(shí)按下回車(chē)鍵進(jìn)入內核選擇界面,選擇自己編譯的內核,即可進(jìn)入自己編譯的內核的操作系統,用uname -r 可以查看當前內核版本。
嵌入式linux文件系統的制作與移植
文件系統包含兩個(gè)層次的含義:
1.按照固定格式組織的目錄與文件
2.在特定的存儲介質(zhì)上管理這些目錄和文件需要的數據
當我們在linux下輸入ls / 的時(shí)候,見(jiàn)到的目錄結構以及這些目錄下的內容都大同小異,這是因為所有的linux發(fā)行版在對根文件系統的布局上都遵循FHS(Filesystem Hierarchy Standard)標準的建議規定。
各個(gè)目錄名稱(chēng)及其存放的內容:
/bin 必備的用戶(hù)命令,例如ls、cp等
/sbin 必備的系統管理員命令,例如ifconfig、reboot等
/dev 設備文件,例如mtdblock0、tty1等
/etc 系統配置文件,包括啟動(dòng)文件,例如inittab等
/lib 必要的`鏈接庫,例如C鏈接庫、內核模塊
/home 普通用戶(hù)主目錄
/root root用戶(hù)主目錄
/usr/bin 非必備的用戶(hù)程序,例如find、du等
/usr/sbin 非必備的管理員程序,例如chroot、inetd等
/usr/lib 庫文件
/var 守護程序和工具程序所存放的可變,例如日志文件
/proc 用來(lái)提供內核與進(jìn)程信息的虛擬文件系統,由內核自動(dòng)生成目錄下的內容
/sys 用來(lái)提供內核與設備信息的虛擬文件系統,由內核自動(dòng)生成目錄下的內容
/mnt 文件系統掛接點(diǎn),用于臨時(shí)安裝文件系統
/tmp 臨時(shí)性的文件,重啟后將自動(dòng)清除
根文件系統是Linux啟動(dòng)時(shí)使用的第一個(gè)文件系統。沒(méi)有根文件系統,Linux將無(wú)法正常啟動(dòng)。根文件系統由一系列目錄組成,目錄中包含了應用程序、C庫、以及相關(guān)的配置文件。
那如何制作一個(gè)根文件系統呢?主要包括以下步驟:
1、創(chuàng )建根文件系統的目錄
如:mkdir bin sbin lib etc dev proc sys usr mnt tmp var
2、創(chuàng )建設備文件
cd dev
mknod -m 666 console c 5 1
mknod -m 666 null c 1 3
cd ..
3、安裝/etc
tar -xzvf etc.tar.gz /xx-x/rootfs/etc
4、配置busybox
進(jìn)入busybox目錄執行
make menuconfig
進(jìn)入 Busybox Settings
build Options->
選中 “Build busybox as a static binary”, 靜態(tài)鏈接
Cross Compiler prefix (arm-linux-)
Installation Options->
選中 “Don‘t use /usr”, 選中該項可以避免busybox被安裝到
宿主系統的/usr目錄下,破壞宿主系統
Busybox Installation Prefix (/nfsroot/rootfs)該選項表明編
譯后的busybox的安裝位置
7、編譯、安裝busybox
make ARCH=arm CROSS_COMPILE=arm-linux-
make install
前提是系統中安裝好了交叉編譯工具arm-linux-gcc
至此一個(gè)粗略的根文件系統制作完成,下面就需要移植到開(kāi)發(fā)板中。 我們知道ARM嵌入式系統的組成為:
1)bootloader 引導加載器
2)kernel 操作系統內核
3)rootfs 根文件系統 (帶GUI,QTopia)
在系統加載完內核后就會(huì )去啟動(dòng)根文件系統,而啟動(dòng)根文件系統這個(gè)過(guò)程被bootargs這個(gè)參數控制,所以我們需要修改這個(gè)參數以使系統運行我們的根文件系統,但這之前我們需要在宿主機上將根文件系統共享出來(lái)。我們先在linux系統中配置好nfs服務(wù)器,并且在設置配置文件exports將根文件系統所在路徑共享出來(lái),接下來(lái)在A(yíng)RM開(kāi)發(fā)板啟動(dòng)時(shí)控制超級終端進(jìn)入shell界面,在這里輸入命令print會(huì )顯示開(kāi)發(fā)板啟動(dòng)的配置信息,通過(guò)set命令我們可以設置bootargs 參數為:
console=ttySAC0
root=/dev/nfs
nfsroot=192.168.0.113:/mynfs/rootfs ip=.oh100:eth0:off
設置完成后用save命令保存設置,輸入reset復位命令,ARM系統重啟,重啟完成后我們看到ARM系統的根文件系統就是我們自己制作的根文件系統。
實(shí)習體會(huì )
在嵌入式系統中,除了課本上的基礎知識外,還學(xué)會(huì )了軟件編程的基本思路,掌握了液晶屏的使用及其電路設計方法;掌握有關(guān)音頻處理的基礎知識;掌握液晶顯示文本及圖形的方法與程序設計。
通過(guò)這次設計,掌握了液晶顯示實(shí)驗、μC/OS-II移植、μC/OS-IILCD顯示的工作原理及串口通信實(shí)驗的工作過(guò)程,學(xué)會(huì )了使用仿真軟件Embest EduKit-IV實(shí)驗平臺及ULINK2仿真器套件,并學(xué)會(huì )通過(guò)應用軟件仿真來(lái)實(shí)現各種通信系統的設計,對以后的學(xué)習和工作都起到了一定的作用,加強了動(dòng)手能力和學(xué)業(yè)技能。雖然花了很長(cháng)時(shí)間編寫(xiě)軟件程序設計,但這一切還是理論上的。希望學(xué)校能提供機會(huì )和條件,讓我們能夠去真正地將理論和實(shí)踐相結合。通過(guò)這次程序,感覺(jué)自己所掌握的知識是那么的有限,還有許多需要改進(jìn)和不足的地方,同時(shí)也幫助了我怎樣學(xué)好這門(mén)課程,增加了我對這門(mén)學(xué)科的興趣。總體來(lái)說(shuō),這次實(shí)習我受益匪淺。在摸索該如何設計電路使之實(shí)現所需功能的過(guò)程中特別有趣,培養了我的設計思維,增加了實(shí)際操作能力。在讓我體會(huì )到了設計電路的艱辛的同時(shí),更讓我體會(huì )到成功的喜悅和快樂(lè )。通過(guò)這次實(shí)習通信系統的設計,使我更加清楚以后的發(fā)展及學(xué)習的方向。
arm嵌入式學(xué)習心得
嵌入式ARM學(xué)習心得【1】
本人大學(xué)學(xué)的是電子信息科學(xué)與技術(shù)專(zhuān)業(yè),其實(shí)這個(gè)專(zhuān)業(yè)和嵌入式?jīng)]有多大的關(guān)系,要說(shuō)有關(guān)系就是簡(jiǎn)單的講了下C語(yǔ)言語(yǔ)法,學(xué)完之后還不知道什么是C語(yǔ)言,只記住了,char,int,string等占幾個(gè)字節,if,for,while循環(huán)什么的,感覺(jué)也就能算一些小學(xué)就會(huì )的題目,全國計算機等級二級也就糊涂的過(guò)了。
我這個(gè)專(zhuān)業(yè)沒(méi)學(xué)過(guò)C++,一開(kāi)始不知道什么是向對象,什么叫面向過(guò)程,這可能讓大家笑話(huà)了。不過(guò)這說(shuō)的是實(shí)話(huà),大學(xué)的時(shí)候比較喜歡動(dòng)手,喜歡硬件方面的東西,也喜歡看書(shū)。在大一的時(shí)候就聽(tīng)學(xué)長(cháng)說(shuō),單片機很難學(xué),在沒(méi)事的時(shí)候就從圖書(shū)管借了本關(guān)于51的書(shū),一開(kāi)始還真是不怎么懂,然后硬著(zhù)頭皮去看,當我把51的結構看完了,就不像一開(kāi)始那樣一頭霧水了,自己在紙上把51的結構圖默畫(huà)一遍,然后再把各個(gè)寄存器功能寫(xiě)一下,各個(gè)功能口的結構也畫(huà)一遍,然后就不覺(jué)得51有什么難了。其實(shí)有些時(shí)候不是這個(gè)東西你不會(huì ),而是在不會(huì )的時(shí)候自己先告訴自己這個(gè)太難了,自己先放棄了。我們學(xué)習51芯片,是為了以后的打基礎,知道是怎么通過(guò)配置寄存器來(lái)實(shí)現功能。
大二下學(xué)期的時(shí)候,我們開(kāi)了51的課,這個(gè)課幾乎就沒(méi)怎么去,因為我認為沒(méi)有必要去聽(tīng)自己會(huì )的東西了。后來(lái)聽(tīng)別人說(shuō)avr的資源會(huì )比51的豐富的很多,所以就想試試,看看有什么難的,就從網(wǎng)上買(mǎi)了本馬潮老師《AVR單片機嵌入式系統原理與應用實(shí)踐》,一邊看書(shū),一邊想自己畫(huà)一個(gè)板了,一開(kāi)始想實(shí)現一個(gè)點(diǎn)陣屏,實(shí)現滾動(dòng)效果,后來(lái)想想做個(gè)板也花不少錢(qián)呢,為什么不多加一些功能呢,還能多學(xué)到些知識,所以就加了溫感,紅外,鐵電存儲器等并把所有的擴展口都擴展了出來(lái),備以后用,那時(shí)還挺自豪的呢,同學(xué)們都很羨慕,不過(guò)現在想想其實(shí)也沒(méi)什么了。
大學(xué)也聽(tīng)說(shuō)過(guò)嵌入式這個(gè)詞,不過(guò)不太明白是什么意思,09年的時(shí)候從網(wǎng)上找到中嵌視頻,有四張DVD(大約13G),下載下來(lái)后,從頭到尾的看了一遍,沒(méi)什么印象,只記得講一些不知所云的函數,然后莫名其妙的講怎么使用那個(gè)44b0的開(kāi)發(fā)板,不過(guò)聽(tīng)完了,還是有很大收獲的,就有一種想裝一個(gè)linux的沖動(dòng),我是大二下學(xué)期才有的自己電腦,不過(guò)電腦的配置比較低,1g內存,跑虛擬機就像個(gè)蝸牛,所以就想著(zhù)怎么才能裝個(gè)linux,自己用XP習慣了,如果全換了又舍不得,那時(shí)從書(shū)上知道linux的文件系統和windows不一樣,只有一個(gè)根分區,所以也害怕一裝linux全盤(pán)就被格式化了,不過(guò)最后還是欲望戰勝了擔心,買(mǎi)了張redhat9的光盤(pán),小心的裝這個(gè)系統,里邊的英文也不是太難,還是知道大概意思的,所以一步步的裝,最后裝到我的硬盤(pán)的最后空間,重新啟動(dòng),竟可以選擇進(jìn)入哪一個(gè)系統了,從這之后,自己就不害怕怎么裝系統了,應了那句言,紙上得來(lái)終覺(jué)淺,絕知此事要躬行。所以我認為,買(mǎi)一個(gè)開(kāi)發(fā)板是完全有必要的,拿到實(shí)物操作一下就不會(huì )感覺(jué)太抽象了。
后來(lái)也想學(xué)學(xué)arm,但不知道arm是什么東西,所以就買(mǎi)了本《從51到arm》,講的是關(guān)于arm的大體結構,看完后感覺(jué),原來(lái)arm就是一個(gè)速度更快,接口更豐富的單片機啊。
如果想做linux設備驅動(dòng)的同學(xué)應該對arm硬件有一些了解。如果對驅動(dòng)不感興趣,完全沒(méi)有必要去看。交叉編譯器會(huì )幫我們做好這些事情,他比我們更了解arm結構。
大三下學(xué)期開(kāi)始準備考研了,所以自己這些興趣就先放下了,報的北郵的信通學(xué)院通信專(zhuān)業(yè),當時(shí)就是想一定要上個(gè)好學(xué)校好專(zhuān)業(yè),也沒(méi)想太多,結果考了的成績(jì)差了點(diǎn),沒(méi)有被錄取,也不想調劑一個(gè)二流的學(xué)校,然后就參加工作了,工作中每天都用的到開(kāi)發(fā)板,當我看到一個(gè)小板上還可以跑系統的時(shí)候感覺(jué)很不可思議,以為要很大工程。后來(lái)邊工作邊學(xué)習,每天都要看電腦看到眼發(fā)疼,晚上也都差不多十二點(diǎn)時(shí)才睡覺(jué)。感覺(jué)到累,不過(guò)也感覺(jué)到自己在進(jìn)步。
閑話(huà)有點(diǎn)多了,說(shuō)了很多都是自己大學(xué)那點(diǎn)破事。
聽(tīng)很多的初學(xué)者說(shuō)不知道從哪里開(kāi)始,學(xué)習嵌入都要學(xué)哪些東西,從網(wǎng)上搜了一下,一大堆的東西要學(xué),一下就推薦十幾本書(shū),說(shuō)看完這本書(shū)怎么怎么樣,看完那本書(shū)怎么怎么樣,一下子就給初學(xué)者給嚇住了,其實(shí)完全沒(méi)必要把網(wǎng)上的那些東西全部看一遍,那樣又費時(shí),又感覺(jué)工程太大,讓初學(xué)者沒(méi)有信心去把每一種都看完。網(wǎng)上說(shuō)的些方面都要知道,不一定全部都掌握,我們可以退成求其次,每一個(gè)都知道一些,當然會(huì )的越多越好。今天學(xué)點(diǎn)這個(gè)明天學(xué)點(diǎn)那,換著(zhù)樣來(lái)也不會(huì )覺(jué)得煩。而且還能感覺(jué)到每天都有收獲。
下面給嵌入式初學(xué)者一些自己的我個(gè)人建議。
1、嵌入式涉及到很多的基礎知識
c語(yǔ)言,關(guān)于C語(yǔ)言要知道基本的語(yǔ)法,什么是結構體,什么是共用體,有什么區別,不用強記一些二級考的東西,因在實(shí)際中用的很少。
c++要知道什么是類(lèi),怎么定義,繼承,接口,要深刻理解,當然基本語(yǔ)法也是必不可少的。
操作系統原理也應該知道基本的原理的,我記得我大學(xué)沒(méi)這個(gè)課還是去電信學(xué)院蹭別的專(zhuān)業(yè)的課呢,后來(lái)學(xué)習發(fā)現很多的東西都是在這個(gè)課上學(xué)到的。什么時(shí)間片啊,任務(wù)調度啊,都是在那里知道的。
Linux基本命令的使用(vi編輯器必須會(huì )用,因為在終端改文件的時(shí)候只能用這個(gè)),我們現在很多的人都習慣用鼠標了,很少用到命令,我們學(xué)習嵌入linux可要改改這個(gè)習慣了,linux用命令操作一是效率高,二是功能非常強大,遠非圖形界面能比的了的,其實(shí)我們用圖形界面的操作都要轉化為命令傳給硬件的。
Linux文件系統的管理要清楚,哪個(gè)目錄存放是什么東西,有什么用,文件權限管理等
Shell編程也要了解一些,在這給大家推薦一個(gè)教程,周朝劍的 shell編程,也就七八講吧,講的很全面。初學(xué)者看前4講就可以了。
Linux設備驅動(dòng)的架構要了解,初學(xué)者可以以米爾的MYD-AM335X開(kāi)發(fā)板上的led驅動(dòng)分析一下,結合原理圖和linux設備驅動(dòng)相關(guān)書(shū)籍把每一行代碼都分析明白。關(guān)于驅動(dòng)給大家推薦一本書(shū)《LINUX設備驅動(dòng)程序》中國電力出版社出版的,很經(jīng)典的,初學(xué)者看可能看不太明白,不過(guò)要堅持看,最次也得把前6章看完了。
2、看書(shū)不要希望一次就會(huì )
一次就明白是什么意思,也不要死記硬背,看不明白也沒(méi)關(guān)系,以后遇到了知道去哪里去找就可以了,以后遇到的多了,也就記住了,遇到的少的,忘記也就忘記了。還有,不要直接閱讀linux內核源代碼,看一些自己把頭撞破也想不明白的事,會(huì )打擊初學(xué)者的積極性,要循序漸進(jìn),今天學(xué)個(gè)做個(gè)led,明天做個(gè)串口,后天說(shuō)不定就做硬件編解碼了。
3、你可以不接受培訓,但是不能不買(mǎi)開(kāi)發(fā)板
如果你想學(xué)習嵌入式一定要買(mǎi)塊學(xué)習板,現在的開(kāi)發(fā)板很便宜了,給我們初學(xué)者減輕了很多經(jīng)濟負擔。看再多的視頻,看再多的書(shū),也不如自己動(dòng)手試一下,看著(zhù)很簡(jiǎn)單的東西,做起來(lái)就可能遇到很多的問(wèn)題,遇到問(wèn)題找到原因,解決問(wèn)題,只有這樣才能學(xué)到東西,記得我第一次寫(xiě)led的驅動(dòng),想自己試一下,網(wǎng)上也有人寫(xiě)過(guò)相關(guān)的代碼,可是自己一試,就出了好多的問(wèn)題,那個(gè)led弄了我一天才把led燈點(diǎn)亮。所以不要眼高手低。
還有關(guān)于培訓,現在的培訓機構很多,講的也不錯,老師也很好,但是有一個(gè)問(wèn)題,太集中了,而且學(xué)生動(dòng)手的機會(huì )也不太多,記得我們公司還招了一個(gè)在北京某個(gè)培訓機構培訓半年的員工呢,花了一萬(wàn)多,來(lái)了之后也沒(méi)感覺(jué)有多高,問(wèn)他都學(xué)了什么,也就是我前邊說(shuō)的那些基礎知識,很多的東西還是不知道的,照著(zhù)書(shū)弄個(gè)helloworld模塊驅動(dòng)兩天沒(méi)搞定。不是培訓不好,但我個(gè)人見(jiàn)解效果并不是很好。記住:只有自己動(dòng)手做過(guò)的東西才是自己的。
現在買(mǎi)一塊開(kāi)發(fā)板很便宜,飛凌的OK6410的開(kāi)發(fā)板就不錯,源碼完全開(kāi)放,而且資料也很豐富,完全能滿(mǎn)足初學(xué)者學(xué)習用,有人說(shuō)友善的'板子也不錯,我個(gè)人覺(jué)得友善的板子不錯,但是不適合初學(xué)者,因為他的很多的東西是不給代碼的,用過(guò)友善的板子的同學(xué)經(jīng)常有這樣的痛苦,想學(xué)一個(gè)東西,去找他的代碼的時(shí)候,卻找不到,很多友善提供的代碼中很多的都是封裝好的,只提供給客戶(hù)一個(gè)庫,初學(xué)者想要找代碼的時(shí)候就不知道怎么辦了。
4、不要好高騖遠,要腳踏實(shí)地
對于初學(xué)者,還有一點(diǎn)小建議,我們拿到一個(gè)開(kāi)發(fā)板,很興奮也很激動(dòng),想法自然也很多,想用開(kāi)發(fā)板實(shí)現自己的這個(gè)想法,實(shí)現那個(gè)想法,然后又不知道從何下手,然后就去論壇中發(fā)一個(gè)貼,“那個(gè)什么什么怎么實(shí)現啊,哪位大俠能詳細說(shuō)一下啊,跪求!!”然后等著(zhù)別人去回復。見(jiàn)沒(méi)人回復就抱怨。有想法是好的,我們要實(shí)現自己的想法也是有前提的,首先,我們對這部分知識了解嗎?如果不了解就去google一下(最好別用百度,不太好用),了解了一些,也就大概知道要怎么做了。如果再遇到問(wèn)題,再去發(fā)貼問(wèn),這樣也顯得咱們有水平。比如自己連串口是什么都不太清楚呢,就問(wèn)串口通信怎么做啊,就是人家把代碼給咱,咱也不明白是怎么回事啊。
5、多看代碼,多寫(xiě)代碼
見(jiàn)多識廣,熟能生巧。多看代碼,要從代碼中讀出代碼的意思來(lái)。自己平時(shí)也要多寫(xiě)代碼,多練習(這一點(diǎn)我做的不好,寫(xiě)的少)。
寫(xiě)完已經(jīng)晚上兩點(diǎn)了,思路有些亂,有些也是個(gè)人的見(jiàn)解,在有些人看來(lái)可能是錯誤的,每個(gè)人有每個(gè)人的學(xué)習方法,但是我們的目的只有一個(gè)——希望我們學(xué)到更多的知識。
嵌入式學(xué)習心得【2】
還記得老師第一次將一塊天祥的2440開(kāi)發(fā)板放到我面前時(shí),我心里覺(jué)得這太神奇了,好漂亮的板子,怎么弄呢?老師大體給我講了一下,但是以前連51單片機操作都不熟的我如何記得住老師說(shuō)的呢?板子拿到手里,左手拿不知到怎么開(kāi)始,右手拿也不知道如何入手啊。
然后我決定上網(wǎng)查一查這個(gè)東西如何轉起來(lái)呢?搜到了天祥的視頻教程,但其是加密的,唉……我大概就在網(wǎng)上搜了將近一周的時(shí)間,后來(lái)老師過(guò)來(lái)詢(xún)問(wèn)我的板子玩的如何了,我連工作環(huán)境都沒(méi)有搭建起來(lái),
老師說(shuō)我那里有視頻,我覺(jué)得老師啊,你不早說(shuō)啊。
也許老師是故意的,因為將近一周的時(shí)間我了解了三星公司的芯片S3C2440A,知道了天祥開(kāi)發(fā)板的原理,包括的外設,有了整體的認識。
我拿到視頻后跟著(zhù)視頻一步一步地開(kāi)始了我的嵌入式之旅...
學(xué)習?shū)B(niǎo)網(wǎng)站是免費的綜合學(xué)習網(wǎng)站,提供各行各業(yè)學(xué)習資料、學(xué)習資訊供大家學(xué)習參考,如學(xué)習資料/生活百科/各行業(yè)論文/中小學(xué)作文/實(shí)用范文實(shí)用文檔等等!
寫(xiě)作基礎 | 作文指導 |
寫(xiě)作經(jīng)驗 | 寫(xiě)作方法 |
文學(xué)常識 |
聲明:本網(wǎng)站尊重并保護知識產(chǎn)權,根據《信息網(wǎng)絡(luò )傳播權保護條例》,如果我們轉載的作品侵犯了您的權利,請在一個(gè)月內通知我們,我們會(huì )及時(shí)刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學(xué)習?shū)B(niǎo). 頁(yè)面生成時(shí)間:0.157秒