μClinux嵌入系統(tǒng)中外部硬件設(shè)備的快速調(diào)試方法
發(fā)布時(shí)間:2007/8/28 0:00:00 訪問(wèn)次數(shù):497
在傳感器網(wǎng)絡(luò)節(jié)點(diǎn)中,采用了基于Linux的嵌入式操作系統(tǒng)。開(kāi)發(fā)基于Linux操作系統(tǒng)的嵌入式微處理器應(yīng)用系統(tǒng),關(guān)鍵是Linux能夠訪問(wèn)嵌入式處理器上擴(kuò)展連接的外部設(shè)備。一旦能夠訪問(wèn)連接的外部芯片設(shè)備,就可以靈活地在Linux上運(yùn)行對(duì)嵌入式系統(tǒng)外部設(shè)備的有關(guān)訪問(wèn)控制應(yīng)用。
Linux在個(gè)人PC機(jī)上的設(shè)備驅(qū)動(dòng)框架作了介紹。介紹了μClinux中訪問(wèn)嵌入式系統(tǒng)外部設(shè)備的設(shè)備驅(qū)動(dòng)方式的框架。不過(guò)對(duì)于設(shè)備驅(qū)動(dòng)程序的操作函數(shù)的實(shí)現(xiàn)由于與具體的外設(shè)備硬件有關(guān),沒(méi)有實(shí)現(xiàn)的具體統(tǒng)一方案。設(shè)備驅(qū)動(dòng)方式采用通用的文件訪問(wèn)方式操作設(shè)備,這給對(duì)硬件底層不了解的高層用戶的程序設(shè)計(jì)帶來(lái)了方便。但對(duì)于硬件的設(shè)計(jì)和調(diào)試人員來(lái)說(shuō),不了解底層硬件的操作就無(wú)法實(shí)現(xiàn)設(shè)備的訪問(wèn)。硬件設(shè)計(jì)人員必須實(shí)現(xiàn)訪問(wèn)函數(shù)的具體操作過(guò)程,以達(dá)到對(duì)外部擴(kuò)展設(shè)備的訪問(wèn)測(cè)試和靈活控制。也就是說(shuō),先要完成設(shè)備驅(qū)動(dòng)程序,然后才能進(jìn)行下一步的硬件設(shè)備調(diào)試。
編寫(xiě)和實(shí)現(xiàn)設(shè)備驅(qū)動(dòng)程序必須先了解和實(shí)現(xiàn)對(duì)設(shè)備底層的訪問(wèn),這是個(gè)復(fù)雜的過(guò)程。先要掌握處理器如何尋址外部設(shè)備、如何配置外部設(shè)備;再實(shí)現(xiàn)底層的地址訪問(wèn)函數(shù);然后再編寫(xiě)設(shè)備驅(qū)動(dòng)程序的實(shí)現(xiàn)函數(shù),進(jìn)而編寫(xiě)設(shè)備驅(qū)動(dòng)程序;將驅(qū)動(dòng)程序編譯進(jìn)Linux操作系統(tǒng)內(nèi)核;最后在Linux系統(tǒng)中通過(guò)標(biāo)準(zhǔn)的設(shè)備訪問(wèn)方式訪問(wèn)外部設(shè)備。
采用設(shè)備驅(qū)動(dòng)方式需要很多時(shí)間,以至于耽誤硬件設(shè)計(jì)調(diào)試的進(jìn)程。另一方面,由于應(yīng)用于嵌入式的Linux不支持動(dòng)態(tài)的加載設(shè)備驅(qū)動(dòng)模塊,只能將設(shè)備的模塊編譯進(jìn)Linux內(nèi)部,也就是要將設(shè)備驅(qū)動(dòng)程序重新編譯進(jìn)用于嵌入式的Linux內(nèi)核中,為此采用驅(qū)動(dòng)方式又增加了內(nèi)核的代碼。
在μClinux操作系統(tǒng)中,可以采用直接物理地址訪問(wèn)外部擴(kuò)展設(shè)備,針對(duì)設(shè)備寄存器的地址單元進(jìn)行讀寫(xiě)操作,直接與硬件接觸,而且便于從最底層了解設(shè)備的操作,直接與硬件接觸,而且便于從最底層了解設(shè)備的工作方式,加快開(kāi)發(fā)調(diào)試產(chǎn)品的速度。該方法僅僅修改少量的代碼,采用直接地址的訪問(wèn)方式能夠快速完成對(duì)外設(shè)備的訪問(wèn)測(cè)試。與設(shè)備驅(qū)動(dòng)方式相比,重新編譯后使內(nèi)核代碼增加較少。而在μClinux中要采用直接物理地址的外部設(shè)備訪問(wèn),需要修改啟動(dòng)代碼,建立設(shè)備訪問(wèn)函數(shù),需要一定技巧。本文以Motorola的ColdFire MCF5272嵌入式微處理器平臺(tái)為例,介紹了μClinux對(duì)外部設(shè)備的快速訪問(wèn)方法。
1 存儲(chǔ)空間編址
對(duì)于μClinux來(lái)說(shuō),其設(shè)計(jì)是針對(duì)沒(méi)有MMU(Memory Manage Unit)的處理器,即μClinux不能使用處理器的虛擬內(nèi)存管理技術(shù),μClinux采用存儲(chǔ)器的分頁(yè)管理,系統(tǒng)在啟動(dòng)時(shí)把實(shí)際存儲(chǔ)器進(jìn)行分頁(yè)。在加載應(yīng)用程序時(shí)程序分頁(yè)加載。但由于沒(méi)有MMU管理,實(shí)際上μClinux采用實(shí)存儲(chǔ)器管理策略。
ΜClinux系統(tǒng)對(duì)于內(nèi)存的訪問(wèn)是直接的,它對(duì)地址的訪問(wèn)不需要經(jīng)過(guò)MMU,而是直接送到地址線上輸出,所有程序中訪問(wèn)的地址都是實(shí)際的物理地址。操作系統(tǒng)對(duì)內(nèi)存空間沒(méi)有保護(hù),各個(gè)進(jìn)程實(shí)際上共享一個(gè)運(yùn)行空間。
ΜClinux采用了實(shí)內(nèi)存模式,各個(gè)內(nèi)部段在物理內(nèi)存(沒(méi)有虛存)層面都是連續(xù)的,其內(nèi)存空間的地址映像如圖1。
根據(jù)內(nèi)存空間是否獨(dú)立,可以將I/O空間的配置分為兩種:一種是I/O空間與內(nèi)存空間相互獨(dú)立,這樣I/O空間的訪問(wèn)需要使用專(zhuān)門(mén)的I/O函數(shù)如inb和outb等。Intel CPU就使用這種方法。另一種是將I/O寄存器作為內(nèi)存的一部分,即I/O寄存器與內(nèi)存統(tǒng)一編址,這樣使用普通的內(nèi)存訪問(wèn)語(yǔ)句即可讀寫(xiě)I/O寄存器。Motorola 68K處理器就采用這種體系結(jié)構(gòu),處理器MCF5272也統(tǒng)一編址。即其RAM、FLASH和外設(shè)I/O均統(tǒng)一編址,沒(méi)有地址變換和內(nèi)存保護(hù)。
2 快速設(shè)備訪問(wèn)
在C語(yǔ)言中,用指針可以對(duì)內(nèi)存地址單元進(jìn)行直接訪問(wèn),因此在設(shè)計(jì)中可以采用指針對(duì)外部設(shè)備進(jìn)行快速操作。
2.1 地址映像
為了訪問(wèn)外部設(shè)備,首先應(yīng)將外設(shè)的寄存器映像到MCF5272的內(nèi)存,與內(nèi)存統(tǒng)一編址。為此,需要修改相應(yīng)代碼。
用于COLDFIRE MCF5272的嵌入式μClinux啟動(dòng)代碼由兩部分組成:
μClinux/linux/arch/m68knommu/platform/5272/MOTOROLA/crt0_rom.S
μClinux/linux/arch/m68knommu/platform/5272/sysinit.c
其中crt0_rom.S由匯編寫(xiě)成,完成CPU的初始化設(shè)置,這是整個(gè)軟件體系的最開(kāi)始執(zhí)行的代碼入口,CPU一加電就跳到這里執(zhí)行;sysinit.c為C語(yǔ)言代碼,完成MCF5272的集成模塊SIM(如串口、時(shí)鐘、通用I/O等)、SDRAM、FLASH和其它外設(shè)接口、片選等的初始化設(shè)置。
MCF5272的片選CS0~CS7的寄存器CSBR0~CSBR7和CSOR0~CSOR7可將外設(shè)備寄存器的地址映像到內(nèi)存儲(chǔ)空間,這樣可以采用對(duì)內(nèi)存空間的訪問(wèn)來(lái)達(dá)到訪問(wèn)外部設(shè)備。其中寄存器CSBR指明了映像的內(nèi)存起始地址、映像的內(nèi)存容量、總線寬度等;寄存器CSOR用于配置訪問(wèn)控制。片選CS0用于啟動(dòng)存儲(chǔ)器ROM(FLASH)。
在C語(yǔ)言文件sysinit.c中修改代碼以實(shí)現(xiàn)外設(shè)的寄存器映像功能。應(yīng)用片選CS2實(shí)現(xiàn)的代碼如下:
MCF5272_WR_CS_CSBR2(imm,0xffa00001);//寄
在傳感器網(wǎng)絡(luò)節(jié)點(diǎn)中,采用了基于Linux的嵌入式操作系統(tǒng)。開(kāi)發(fā)基于Linux操作系統(tǒng)的嵌入式微處理器應(yīng)用系統(tǒng),關(guān)鍵是Linux能夠訪問(wèn)嵌入式處理器上擴(kuò)展連接的外部設(shè)備。一旦能夠訪問(wèn)連接的外部芯片設(shè)備,就可以靈活地在Linux上運(yùn)行對(duì)嵌入式系統(tǒng)外部設(shè)備的有關(guān)訪問(wèn)控制應(yīng)用。
Linux在個(gè)人PC機(jī)上的設(shè)備驅(qū)動(dòng)框架作了介紹。介紹了μClinux中訪問(wèn)嵌入式系統(tǒng)外部設(shè)備的設(shè)備驅(qū)動(dòng)方式的框架。不過(guò)對(duì)于設(shè)備驅(qū)動(dòng)程序的操作函數(shù)的實(shí)現(xiàn)由于與具體的外設(shè)備硬件有關(guān),沒(méi)有實(shí)現(xiàn)的具體統(tǒng)一方案。設(shè)備驅(qū)動(dòng)方式采用通用的文件訪問(wèn)方式操作設(shè)備,這給對(duì)硬件底層不了解的高層用戶的程序設(shè)計(jì)帶來(lái)了方便。但對(duì)于硬件的設(shè)計(jì)和調(diào)試人員來(lái)說(shuō),不了解底層硬件的操作就無(wú)法實(shí)現(xiàn)設(shè)備的訪問(wèn)。硬件設(shè)計(jì)人員必須實(shí)現(xiàn)訪問(wèn)函數(shù)的具體操作過(guò)程,以達(dá)到對(duì)外部擴(kuò)展設(shè)備的訪問(wèn)測(cè)試和靈活控制。也就是說(shuō),先要完成設(shè)備驅(qū)動(dòng)程序,然后才能進(jìn)行下一步的硬件設(shè)備調(diào)試。
編寫(xiě)和實(shí)現(xiàn)設(shè)備驅(qū)動(dòng)程序必須先了解和實(shí)現(xiàn)對(duì)設(shè)備底層的訪問(wèn),這是個(gè)復(fù)雜的過(guò)程。先要掌握處理器如何尋址外部設(shè)備、如何配置外部設(shè)備;再實(shí)現(xiàn)底層的地址訪問(wèn)函數(shù);然后再編寫(xiě)設(shè)備驅(qū)動(dòng)程序的實(shí)現(xiàn)函數(shù),進(jìn)而編寫(xiě)設(shè)備驅(qū)動(dòng)程序;將驅(qū)動(dòng)程序編譯進(jìn)Linux操作系統(tǒng)內(nèi)核;最后在Linux系統(tǒng)中通過(guò)標(biāo)準(zhǔn)的設(shè)備訪問(wèn)方式訪問(wèn)外部設(shè)備。
采用設(shè)備驅(qū)動(dòng)方式需要很多時(shí)間,以至于耽誤硬件設(shè)計(jì)調(diào)試的進(jìn)程。另一方面,由于應(yīng)用于嵌入式的Linux不支持動(dòng)態(tài)的加載設(shè)備驅(qū)動(dòng)模塊,只能將設(shè)備的模塊編譯進(jìn)Linux內(nèi)部,也就是要將設(shè)備驅(qū)動(dòng)程序重新編譯進(jìn)用于嵌入式的Linux內(nèi)核中,為此采用驅(qū)動(dòng)方式又增加了內(nèi)核的代碼。
在μClinux操作系統(tǒng)中,可以采用直接物理地址訪問(wèn)外部擴(kuò)展設(shè)備,針對(duì)設(shè)備寄存器的地址單元進(jìn)行讀寫(xiě)操作,直接與硬件接觸,而且便于從最底層了解設(shè)備的操作,直接與硬件接觸,而且便于從最底層了解設(shè)備的工作方式,加快開(kāi)發(fā)調(diào)試產(chǎn)品的速度。該方法僅僅修改少量的代碼,采用直接地址的訪問(wèn)方式能夠快速完成對(duì)外設(shè)備的訪問(wèn)測(cè)試。與設(shè)備驅(qū)動(dòng)方式相比,重新編譯后使內(nèi)核代碼增加較少。而在μClinux中要采用直接物理地址的外部設(shè)備訪問(wèn),需要修改啟動(dòng)代碼,建立設(shè)備訪問(wèn)函數(shù),需要一定技巧。本文以Motorola的ColdFire MCF5272嵌入式微處理器平臺(tái)為例,介紹了μClinux對(duì)外部設(shè)備的快速訪問(wèn)方法。
1 存儲(chǔ)空間編址
對(duì)于μClinux來(lái)說(shuō),其設(shè)計(jì)是針對(duì)沒(méi)有MMU(Memory Manage Unit)的處理器,即μClinux不能使用處理器的虛擬內(nèi)存管理技術(shù),μClinux采用存儲(chǔ)器的分頁(yè)管理,系統(tǒng)在啟動(dòng)時(shí)把實(shí)際存儲(chǔ)器進(jìn)行分頁(yè)。在加載應(yīng)用程序時(shí)程序分頁(yè)加載。但由于沒(méi)有MMU管理,實(shí)際上μClinux采用實(shí)存儲(chǔ)器管理策略。
ΜClinux系統(tǒng)對(duì)于內(nèi)存的訪問(wèn)是直接的,它對(duì)地址的訪問(wèn)不需要經(jīng)過(guò)MMU,而是直接送到地址線上輸出,所有程序中訪問(wèn)的地址都是實(shí)際的物理地址。操作系統(tǒng)對(duì)內(nèi)存空間沒(méi)有保護(hù),各個(gè)進(jìn)程實(shí)際上共享一個(gè)運(yùn)行空間。
ΜClinux采用了實(shí)內(nèi)存模式,各個(gè)內(nèi)部段在物理內(nèi)存(沒(méi)有虛存)層面都是連續(xù)的,其內(nèi)存空間的地址映像如圖1。
根據(jù)內(nèi)存空間是否獨(dú)立,可以將I/O空間的配置分為兩種:一種是I/O空間與內(nèi)存空間相互獨(dú)立,這樣I/O空間的訪問(wèn)需要使用專(zhuān)門(mén)的I/O函數(shù)如inb和outb等。Intel CPU就使用這種方法。另一種是將I/O寄存器作為內(nèi)存的一部分,即I/O寄存器與內(nèi)存統(tǒng)一編址,這樣使用普通的內(nèi)存訪問(wèn)語(yǔ)句即可讀寫(xiě)I/O寄存器。Motorola 68K處理器就采用這種體系結(jié)構(gòu),處理器MCF5272也統(tǒng)一編址。即其RAM、FLASH和外設(shè)I/O均統(tǒng)一編址,沒(méi)有地址變換和內(nèi)存保護(hù)。
2 快速設(shè)備訪問(wèn)
在C語(yǔ)言中,用指針可以對(duì)內(nèi)存地址單元進(jìn)行直接訪問(wèn),因此在設(shè)計(jì)中可以采用指針對(duì)外部設(shè)備進(jìn)行快速操作。
2.1 地址映像
為了訪問(wèn)外部設(shè)備,首先應(yīng)將外設(shè)的寄存器映像到MCF5272的內(nèi)存,與內(nèi)存統(tǒng)一編址。為此,需要修改相應(yīng)代碼。
用于COLDFIRE MCF5272的嵌入式μClinux啟動(dòng)代碼由兩部分組成:
μClinux/linux/arch/m68knommu/platform/5272/MOTOROLA/crt0_rom.S
μClinux/linux/arch/m68knommu/platform/5272/sysinit.c
其中crt0_rom.S由匯編寫(xiě)成,完成CPU的初始化設(shè)置,這是整個(gè)軟件體系的最開(kāi)始執(zhí)行的代碼入口,CPU一加電就跳到這里執(zhí)行;sysinit.c為C語(yǔ)言代碼,完成MCF5272的集成模塊SIM(如串口、時(shí)鐘、通用I/O等)、SDRAM、FLASH和其它外設(shè)接口、片選等的初始化設(shè)置。
MCF5272的片選CS0~CS7的寄存器CSBR0~CSBR7和CSOR0~CSOR7可將外設(shè)備寄存器的地址映像到內(nèi)存儲(chǔ)空間,這樣可以采用對(duì)內(nèi)存空間的訪問(wèn)來(lái)達(dá)到訪問(wèn)外部設(shè)備。其中寄存器CSBR指明了映像的內(nèi)存起始地址、映像的內(nèi)存容量、總線寬度等;寄存器CSOR用于配置訪問(wèn)控制。片選CS0用于啟動(dòng)存儲(chǔ)器ROM(FLASH)。
在C語(yǔ)言文件sysinit.c中修改代碼以實(shí)現(xiàn)外設(shè)的寄存器映像功能。應(yīng)用片選CS2實(shí)現(xiàn)的代碼如下:
MCF5272_WR_CS_CSBR2(imm,0xffa00001);//寄
熱門(mén)點(diǎn)擊
- ARMv7架構(gòu)技術(shù)細(xì)節(jié)披露,三大系列面向不同
- 十速科技以高效率和低成本打造完整的產(chǎn)品線
- 基于FPGA的以太網(wǎng)控制器設(shè)計(jì)
- 通用電機(jī)速度控制器TDA1085C原理及應(yīng)用
- EEMBC進(jìn)行OAmark測(cè)試,可配置處理器
- 嵌入式Linux在工業(yè)控制領(lǐng)域中的應(yīng)用
- 高壓變電站10kV母線保護(hù)的分析和研究
- STATCOM的電流間接控制方法設(shè)計(jì)與實(shí)現(xiàn)
- 熱釋電紅外傳感器的報(bào)警系統(tǒng)方案
- UCX637系列PWM型直流電機(jī)驅(qū)動(dòng)電路
推薦技術(shù)資料
- 自制經(jīng)典的1875功放
- 平時(shí)我也經(jīng)常逛一些音響DIY論壇,發(fā)現(xiàn)有很多人喜歡LM... [詳細(xì)]
- 1200 V CoolSiC MOSFET
- 高帶寬內(nèi)存(HBM)和芯片間互連(ICI)應(yīng)
- 第七代TPU—Ironwood
- Neuralink新款“心靈感
- IR最新功率MOSFET的30
- 全新第4代SiC MOSFET
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動(dòng)IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計(jì)
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究