ARM嵌入式Linux高級(jí)驅(qū)動(dòng)研修班課程介紹
課程背景
嵌入式軟件開(kāi)發(fā)無(wú)疑是當(dāng)今最熱門的行業(yè),嵌入式軟件工程師的薪資比普通的軟件工程師的薪資平均高50%以上。隨著智能電網(wǎng)、物聯(lián)網(wǎng)的建設(shè),社會(huì)對(duì)嵌入式人才的需求越來(lái)越多。
很多同學(xué)或在職人員已經(jīng)意識(shí)到了嵌入式開(kāi)發(fā)的重要性,已經(jīng)開(kāi)始自學(xué)嵌入式開(kāi)發(fā)技術(shù),但是因?yàn)榍度胧介_(kāi)發(fā)不同于普通的純軟件開(kāi)發(fā),它是綜合了計(jì)算機(jī)軟、硬件的一門綜合*,涉及模擬電路,數(shù)字電路,C語(yǔ)言、計(jì)算機(jī)組成原理,微機(jī)控制技術(shù),網(wǎng)絡(luò)技術(shù),數(shù)據(jù)結(jié)構(gòu)等課程,很多同學(xué)面對(duì)嵌入式涉及的這么多課程和知識(shí)點(diǎn),往往不知道從何處下手開(kāi)始學(xué)習(xí)嵌入式。
嵌入式Linux開(kāi)發(fā)主要分為2大部分,即嵌入式Linux應(yīng)用程序開(kāi)發(fā)和嵌入式Linux底層驅(qū)動(dòng)程序開(kāi)發(fā)。嵌入式Linux應(yīng)用程序開(kāi)發(fā)是指在現(xiàn)有的嵌入式Linux平臺(tái)上進(jìn)行應(yīng)用層程序開(kāi)發(fā),應(yīng)用程序開(kāi)發(fā)人員不用關(guān)心底層的硬件平臺(tái)和設(shè)備驅(qū)動(dòng)程序,只是在應(yīng)用層實(shí)現(xiàn)相關(guān)的業(yè)務(wù)流程和邏輯即可,從這個(gè)角度看,嵌入式Linux應(yīng)用程序開(kāi)發(fā)和普通的基于桌面版Linux和服務(wù)器Linux的應(yīng)用程序開(kāi)發(fā)基本類似。 相比嵌入式Linux應(yīng)用程序開(kāi)發(fā),嵌入式Linux驅(qū)動(dòng)開(kāi)發(fā)無(wú)論是從技術(shù)的難度,還是對(duì)開(kāi)發(fā)人員的要求都要高一個(gè)層次,嵌入式驅(qū)動(dòng)開(kāi)發(fā)人員主要為具體硬件設(shè)備開(kāi)發(fā)相應(yīng)的設(shè)備驅(qū)動(dòng)程序,構(gòu)建嵌入式底層開(kāi)發(fā)平臺(tái),這就要求嵌入式驅(qū)動(dòng)開(kāi)發(fā)人員不但要懂應(yīng)用的開(kāi)發(fā),還需要非常理解具體硬件設(shè)備的工作原理以及l(fā)inux系統(tǒng)內(nèi)核的原理,這樣才能開(kāi)發(fā)出高效,穩(wěn)定的設(shè)備驅(qū)動(dòng)程序。因此,一個(gè)優(yōu)秀的嵌入式系統(tǒng)驅(qū)動(dòng)工程師非常難找,年薪一般可達(dá)15萬(wàn) ~ 30萬(wàn)以上。
本課程即是英貝得嵌入式針對(duì)有興趣學(xué)習(xí)嵌入式Linux系統(tǒng)驅(qū)動(dòng)開(kāi)發(fā)又不知道從何處著實(shí)開(kāi)始學(xué)習(xí)嵌入式Linux開(kāi)發(fā)的在校學(xué)生以及社會(huì)在職人員而開(kāi)設(shè)的。
課程目標(biāo)
本課程采用理論教學(xué)與實(shí)驗(yàn)相結(jié)合的方式,系統(tǒng)地介紹嵌入式Linux系統(tǒng)開(kāi)發(fā)的流程,嵌入式Linux系統(tǒng)移植的方法,Bootloader的原理,嵌入式Linux下設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)過(guò)程。通過(guò)本課程的學(xué)習(xí),學(xué)員可以掌握嵌入式Linux下字符設(shè)備、塊設(shè)備、網(wǎng)絡(luò)設(shè)備、LCD顯示屏、觸摸屏,USB設(shè)備等嵌入式硬件的設(shè)備的驅(qū)動(dòng)開(kāi)發(fā),同時(shí)掌握嵌入式Linux的系統(tǒng)驅(qū)動(dòng)開(kāi)發(fā)和分析的一般方法,達(dá)到舉一反三,靈活運(yùn)用的效果。
培養(yǎng)對(duì)象
◆ARM嵌入式Linux初學(xué)者
◆ARM嵌入式Linux愛(ài)好者
◆有志于從事ARM嵌入式Linux系統(tǒng)驅(qū)動(dòng)程序開(kāi)發(fā)的工程師
入學(xué)要求
學(xué)員學(xué)習(xí)本課程應(yīng)具備下列基礎(chǔ)知識(shí):
◆具備嵌入式linux應(yīng)用程序開(kāi)發(fā)基礎(chǔ)
◆電子類、計(jì)算機(jī)類、通信類、自動(dòng)化類高年級(jí)本科生或研究生
培訓(xùn)教材
◆《ARM嵌入式Linux系統(tǒng)驅(qū)動(dòng)研發(fā)工程師培訓(xùn)講義》
◆《ARM嵌入式Linux系統(tǒng)驅(qū)動(dòng)研發(fā)工程師培訓(xùn)實(shí)驗(yàn)教程》
學(xué)習(xí)周期
二個(gè)半月,160課時(shí)
實(shí)驗(yàn)環(huán)境
為了保證培訓(xùn)效果,增加互動(dòng)環(huán)節(jié),我們堅(jiān)持小班授課,每期報(bào)名人數(shù)限15人,多余人員安排到下一期進(jìn)行。每個(gè)學(xué)員配備一套嵌入式飛凌ARM9學(xué)習(xí)開(kāi)發(fā)板。
課程大綱(2011-02-12更新)
歡迎進(jìn)入嵌入式Linux高級(jí)驅(qū)動(dòng)討論區(qū),請(qǐng)登錄
時(shí)間
課程大綱
*部分 ARM嵌入式Linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā)基礎(chǔ)
第 一 天
上午
嵌入式系統(tǒng)的開(kāi)發(fā)模型
ARM體系架構(gòu)及編程基礎(chǔ)
ADS開(kāi)發(fā)工具的使用
S3C2440微處理器介紹及接口設(shè)計(jì)
S3C2440的地址空間、時(shí)鐘系統(tǒng)、中斷系統(tǒng)及GPIO編程
FL2440開(kāi)發(fā)板電路原理圖介紹
下午
實(shí)驗(yàn)?zāi)康模?
練習(xí)裸機(jī)環(huán)境下ARM9的中斷及GPIO編程
任務(wù)描述:
當(dāng)用戶按下某一個(gè)按鍵時(shí),對(duì)應(yīng)的LED燈亮,再次按下該按鍵時(shí),對(duì)應(yīng)的LED燈滅。要求不使用操作系統(tǒng),按鍵采用中斷機(jī)制實(shí)現(xiàn)。
第 二 天
上午
Bootloader的概念及功能
UBOOT的結(jié)構(gòu)及源碼組織
UBOOT的配置、編譯及連接過(guò)程
UBOOT加載內(nèi)核過(guò)程源碼分析
UBOOT的常用命令
UBOOT的移植
下午
實(shí)驗(yàn)?zāi)康模?
練習(xí)UBOOT的使用及移植
任務(wù)描述:
移植UBOOT的FL2440開(kāi)發(fā)板上,F(xiàn)L2440開(kāi)發(fā)板上電后,UBOOT能正常運(yùn)行并能正常引導(dǎo)啟動(dòng)linux內(nèi)核。
第 三 天
上午
Linux2.6內(nèi)核的內(nèi)存管理機(jī)制
Linux系統(tǒng)的內(nèi)核空間和用戶空間
Linux內(nèi)核的虛擬地址和物理地址
Linux虛擬內(nèi)存到物理內(nèi)存的映射機(jī)制
ARM存儲(chǔ)管理單元MMU,頁(yè)表介紹,段頁(yè)式存儲(chǔ)管理
Linux內(nèi)核編程常用存儲(chǔ)管理函數(shù)介紹
下午
實(shí)驗(yàn)?zāi)康模?
練習(xí)如何建立頁(yè)表,深入理解MMU,,頁(yè)表是如何完成虛擬地址到物理地址的映射過(guò)程。
任務(wù)描述:
在裸機(jī)環(huán)境下建立一個(gè)頁(yè)表,啟用MMU,將不同的虛擬地址空間映射到同一個(gè)物理地址空間(LED的物理地址),映射完成后,在應(yīng)用程序中操作2個(gè)虛擬地址,都可以來(lái)操作該LED.。
第 四 天
上午
Linux內(nèi)核中斷管理系統(tǒng)
Linux內(nèi)核中斷響應(yīng)流程分析
Linux內(nèi)核中斷管理相關(guān)函數(shù)解析
Linux中斷處理的上半部分和下半部分
Linux定時(shí)器管理
Linux硬件定時(shí)器及軟件定時(shí)器的使用
下午
實(shí)驗(yàn)?zāi)康模?
練習(xí)linux系統(tǒng)下的中斷編程及硬件定時(shí)器編程
任務(wù)描述:
編寫(xiě)一個(gè)硬件定時(shí)器驅(qū)動(dòng)程序,在其中一個(gè)PIN腳上周期性輸出PWM波形,應(yīng)用程序可以啟動(dòng),停止PWM波形的輸出,同時(shí)可以改變PWM波的頻率和占空比。
第 五 天
上午
Linux2.6 設(shè)備驅(qū)動(dòng)模型
Linux2.6 總線、設(shè)備及設(shè)備驅(qū)動(dòng)的概念及關(guān)系
Linux2.6 sysfs文件系統(tǒng)
Linux2.6 設(shè)備及設(shè)備驅(qū)動(dòng)程序架構(gòu)
下午
實(shí)驗(yàn)?zāi)康模?
練習(xí)基于Linux2.6 的設(shè)備驅(qū)動(dòng)模型開(kāi)發(fā)設(shè)備驅(qū)動(dòng);
任務(wù)描述:
基于Linux2.6的platform設(shè)備驅(qū)動(dòng)模型重寫(xiě)LED字符設(shè)備驅(qū)動(dòng)。
第 六 天
上午
Linux設(shè)備驅(qū)動(dòng)程序中的并發(fā)控制、信號(hào)量;
Linux設(shè)備驅(qū)動(dòng)程序中的阻塞與非阻塞IO
Linux設(shè)備驅(qū)動(dòng)程序中的輪詢操作
Linux設(shè)備驅(qū)動(dòng)程序中的異步通知和異步IO;
下午
實(shí)驗(yàn)?zāi)康模?
練習(xí)在Linux設(shè)備驅(qū)動(dòng)程序中使用并發(fā)控制、阻塞和非阻塞、輪詢和異步通知
任務(wù)描述:
在Linux LED驅(qū)動(dòng)中增加并發(fā)控制
在Linux globlemem驅(qū)動(dòng)中增加阻塞和非阻塞,并支持輪詢操作;
在Linux 按鍵驅(qū)動(dòng)中增加異步通知
第二部分 ARM嵌入式Linux設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)
第 七 天
上午
LCD屏設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)
TFT LCD屏硬件工作原理分析
S3C2440 LCD接口控制信號(hào)及相關(guān)寄存器分析
TFT LCD控制信號(hào)時(shí)序分析
下午
實(shí)驗(yàn)?zāi)康模?
練習(xí)S3C2440 LCD接口的硬件編程
任務(wù)描述:
裸機(jī)環(huán)境下編寫(xiě)LCD驅(qū)動(dòng)程序,在LCD屏上顯示一幅給定的圖片
第 八 天
上午
嵌入式Linux下LCD屏驅(qū)動(dòng)程序框架
嵌入式Linux下LCD屏驅(qū)動(dòng)源碼分析
嵌入式Linux下LCD屏驅(qū)動(dòng)的移植
下午
實(shí)驗(yàn)?zāi)康模?
深入理解嵌入式Linux LCD屏設(shè)備驅(qū)動(dòng),練習(xí)嵌入式Linux LCD屏設(shè)備驅(qū)動(dòng)的移植與開(kāi)發(fā);
任務(wù)描述:
在移植的Linux內(nèi)核上增加對(duì)LCD屏驅(qū)動(dòng)的支持.
讀Linux內(nèi)核LCD屏驅(qū)動(dòng)源碼,完成LCD屏驅(qū)動(dòng)源碼分析筆記
第 九 天
上午
嵌入式Linux網(wǎng)卡驅(qū)動(dòng)程序設(shè)計(jì)
S3C2440與網(wǎng)絡(luò)芯片DM9000的接口電路分析
網(wǎng)絡(luò)芯片DM9000的硬件工作原理
下午
實(shí)驗(yàn)?zāi)康模?
深入理解S3C2440與DM9000的接口電路及DM9000的硬件工作原理,練習(xí)DM9000的硬件編程。
任務(wù)描述:
裸機(jī)環(huán)境下完成DM9000驅(qū)動(dòng)程序,完成ARP報(bào)文的收發(fā)。
第 十 天
上午
嵌入式Linux下網(wǎng)卡驅(qū)動(dòng)程序框架
Linux下網(wǎng)絡(luò)協(xié)議棧分析
嵌入式Linux網(wǎng)絡(luò)驅(qū)動(dòng)源碼分析
嵌入式Linux網(wǎng)卡驅(qū)動(dòng)移植
下午
實(shí)驗(yàn)?zāi)康模?
深入理解嵌入式Linux網(wǎng)卡驅(qū)動(dòng)框架,練習(xí)嵌入式linux環(huán)境下網(wǎng)卡驅(qū)動(dòng)的移植
任務(wù)描述:
在移植的Linux內(nèi)核上增加對(duì)DM9000網(wǎng)卡驅(qū)動(dòng)的支持。
讀linux DM9000網(wǎng)卡驅(qū)動(dòng)源碼,完成源碼分析理解筆記;
第十一天
上午
嵌入式Linux Nor Flash驅(qū)動(dòng)程序設(shè)計(jì)
嵌入式Linux Nor Flash硬件工作原理及電路原理圖分析
嵌入式Linux MTD子系統(tǒng)框架及源碼分析
嵌入式Linux Nor Flash驅(qū)動(dòng)程序源碼分析
下午
實(shí)驗(yàn)?zāi)康模?
深入理解嵌入式Linux環(huán)境下MTD子系統(tǒng)的工作原理,練習(xí)嵌入式Linux環(huán)境下NorFlash驅(qū)動(dòng)編程。
任務(wù)描述:
在移植的Linux內(nèi)核上增加對(duì)NOR FLASH驅(qū)動(dòng)的支持;
讀Linux NorFlash驅(qū)動(dòng)源碼,完成源碼分析理解筆記
第十二天
上午
嵌入式Linux NAND FLASH驅(qū)動(dòng)程序設(shè)計(jì)
NAND FLASH硬件工作原理及NAND FLASH操作流程
S3C2440 NAND FLASH控制器接口及電路原理圖分析
NAND FLASH讀寫(xiě)時(shí)序分析
下午
實(shí)驗(yàn)?zāi)康模?
深入理解NAND FLASH的操作流程,練習(xí)NAND FLASH硬件編程
任務(wù)描述:
裸機(jī)環(huán)境下完成FL2440上NAND FLASH驅(qū)動(dòng)程序,實(shí)現(xiàn)對(duì)NAND FLASH的讀、寫(xiě)、擦除操作。
第十三天
上午
嵌入式Linux NAND FLASH驅(qū)動(dòng)程序框架
嵌入式Linux NAND FLASH驅(qū)動(dòng)程序源碼組織
嵌入式Linux NAND FLASH驅(qū)動(dòng)程序源碼分析
嵌入式Linux NAND FLASH 函數(shù)調(diào)用流程
下午
實(shí)驗(yàn)?zāi)康模?
深入理解嵌入式Linux NAND FLASH驅(qū)動(dòng)框架,練習(xí)嵌入式Linux下NAND FLASH驅(qū)動(dòng)程序開(kāi)發(fā)
任務(wù)描述:
在移植的Linux內(nèi)核上增加對(duì)NAND FLASH的支持;
讀Linux nand flash驅(qū)動(dòng)源碼,完成源碼分析理解筆記
第十四天
上午
嵌入式Linux 觸摸屏驅(qū)動(dòng)程序設(shè)計(jì)
電阻式觸摸屏硬件工作原理
S3C2440觸摸屏接口電路原理圖分析
嵌入式Linux觸摸屏驅(qū)動(dòng)程序框架
下午
實(shí)驗(yàn)?zāi)康模?
深入理解觸摸屏硬件工作流程,練習(xí)S3C2440下觸摸屏硬件工作編程
任務(wù)描述:
裸機(jī)環(huán)境下完成基于S3C2440的觸摸屏驅(qū)動(dòng)程序,實(shí)現(xiàn)對(duì)觸摸上位置坐標(biāo)的測(cè)量
第十五天
上午
嵌入式Linux觸摸屏驅(qū)動(dòng)程序源碼分析
嵌入式Linux輸入子系統(tǒng)框架
嵌入式Linux輸入子系統(tǒng)工作原理
嵌入式Linux輸入子系統(tǒng)源碼分析
下午
實(shí)驗(yàn)?zāi)康模?
深入理解嵌入式Linux觸摸屏、輸入子系統(tǒng)程序框架,練習(xí)嵌入式Linux下觸摸屏及其他輸入設(shè)備的驅(qū)動(dòng)程序開(kāi)發(fā)。
任務(wù)描述:
在移植的Linux內(nèi)核上增加對(duì)觸摸屏驅(qū)動(dòng)的支持
讀Linux觸摸屏驅(qū)動(dòng)源碼,完成源碼分析筆記
第十六天
上午
嵌入式Linux I2C總線驅(qū)動(dòng)程序設(shè)計(jì)
I2C總線硬件工作原理及電路原理圖分析
I2C總線時(shí)序分析
S3C2440 I2C總線控制器工作原理
下午
實(shí)驗(yàn)?zāi)康模?
深入理解I2C總線硬件工作原理,練習(xí)I2C總線硬件編程
任務(wù)描述:
裸機(jī)環(huán)境下完成S3C2440 I2C總線硬件編程,通過(guò)I2C總線驅(qū)動(dòng)讀寫(xiě)EEPROM AT24C02
第十七天
上午
嵌入式Linux I2C總線驅(qū)動(dòng)程序框架及源碼組織
嵌入式Linux I2C 控制器驅(qū)動(dòng)
嵌入式Linux I2C 核心
嵌入式 Linux I2C 設(shè)備驅(qū)動(dòng)程序源碼分析
下午
實(shí)驗(yàn)?zāi)康模?
深入理解嵌入式Linux I2C總線驅(qū)動(dòng)程序框架,練習(xí)嵌入式Linux下I2C設(shè)備驅(qū)動(dòng)程序的開(kāi)發(fā)
任務(wù)描述:
在移植的linux內(nèi)核上增加對(duì)I2C設(shè)備AT24C02的驅(qū)動(dòng)支持
讀I2C總線驅(qū)動(dòng)源碼,完成I2C總線設(shè)備驅(qū)動(dòng)源碼分析筆記
第十八天
上午
USB設(shè)備基本概念,USB設(shè)備,接口,端口,傳輸模式
USB主控制器,USB設(shè)備,
S3C2440 USB主控制器介紹及USB主控制器接口
USB總線控制器驅(qū)動(dòng)框架
下午
USB主控制器源碼分析
第十九天
上午
USB設(shè)備驅(qū)動(dòng)程序框架及源碼組織
USB核心子系統(tǒng)
USB設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)一般方法
USB請(qǐng)求塊
下午
EZ-USB Cy7c68013a-56 USB2.0 開(kāi)發(fā)板介紹及原理
EZ-USB Cy7c68013a-56 USB2.0 開(kāi)發(fā)板的使用
第二十天
實(shí)驗(yàn)?zāi)康模?
深入理解linux下USB設(shè)備驅(qū)動(dòng)框架,練習(xí)嵌入式Linux下USB設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)。
任務(wù)描述:
開(kāi)發(fā)EZ-USB Cy7c68013a-56 USB2.0 開(kāi)發(fā)板的嵌入式Linux設(shè)備驅(qū)動(dòng)程序,在FL2440開(kāi)發(fā)板上通過(guò)USB接口控制EZ-USB Cy7c68013a-56 USB2.0 開(kāi)發(fā)板的LED燈。
讀Linux USB設(shè)備驅(qū)動(dòng)源碼,完成源碼分析筆記