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