版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
精品文檔-下載后可編輯關(guān)于應(yīng)用程序與內(nèi)核模塊之間共享存儲(chǔ)器介紹共享存儲(chǔ)器
linux并不是嚴(yán)格意義上的實(shí)時(shí)操作系統(tǒng),為了實(shí)際需要,工程師們必須想盡辦法來禰補(bǔ)這一不足,于是出現(xiàn)了rtlinux和rtai等并不強(qiáng)調(diào)商業(yè)性的軟件。rtlinux是Linux中的一種實(shí)時(shí)操作系統(tǒng)。它由新墨西哥礦業(yè)及科技學(xué)院的V.Yodaiken開發(fā)。目前,RTLinux有一個(gè)由社區(qū)支持的版本,稱為RTLinuxFree,以及一個(gè)來自FSMLabs的商業(yè)版本,稱作RTLinuxPro。的rtlinux顯然龐大而并不兼容大部分的嵌入式平臺,版本的rtlinux也只能支持I386和PPC而已。Rtai是不錯(cuò)的選擇,但要把它移植到你的平臺上去,為了適應(yīng)你的linux版本,你的CPU,你必須的花費(fèi)許多的工作,比如說近比較流行的AT91RM9200DK,光修改linux版本補(bǔ)丁就要花費(fèi)許多的功夫。Rtlinux和rtai為了增強(qiáng)linux操作系統(tǒng)的實(shí)時(shí)性,主要是通過開辟內(nèi)核模塊與應(yīng)用程序之間可以共享的內(nèi)存快來實(shí)現(xiàn)的。它們在內(nèi)核空間控制硬實(shí)時(shí)任務(wù)的運(yùn)行,并通過一個(gè)名為FIFO的共享內(nèi)存塊來與應(yīng)用程序進(jìn)行通信。他們是很不錯(cuò)的軟件,我想用不了多久他們就會(huì)具備更強(qiáng)大的可移植性。
共享存儲(chǔ)器的工作原理
眾所周知,內(nèi)核空間和用戶空間只能通過系統(tǒng)調(diào)用來共享數(shù)據(jù),如果進(jìn)程要等待一個(gè)中斷的發(fā)生,它所能做的就是把自己掛在等待隊(duì)列里,直到中斷服務(wù)程序來喚醒它。然后,進(jìn)程才把內(nèi)核空間的的數(shù)據(jù)通過特定的系統(tǒng)調(diào)用寫到用戶空間里。大部分程序員為了避免這樣造成的不可忍耐的延時(shí),都會(huì)把對數(shù)據(jù)的操作都放在內(nèi)核空間里運(yùn)行,也就是擴(kuò)大中斷服務(wù)程序的功能。
操作方法和步驟
AT91RM9200DK的SDRAM的大小為31Mbyte(SDRAM,即SynchrONousDRAM同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器),正常情況下,SystemRAM的大小也是31Mbyte(RAM,即RAM-randomaccessmemory隨機(jī)存儲(chǔ)器),我們要把31Mbyte的高端地址空出2M來作為我們的共享內(nèi)存塊,這個(gè)內(nèi)存塊是獨(dú)立的,不能為linux操作系統(tǒng)的內(nèi)存管理所用了。首先必須通知內(nèi)核它的內(nèi)存只有30Mbyte了,我的方法是在u-boot的環(huán)境變量里設(shè)置mem=29M。然后在include/asm-arm/目錄下建立頭文件:new_fifo.h
代碼如下:
#ifndefNEW_FIFO
#defineNEW_FIFO
#endif
#ifdefNEW_FIFO
#defineAT91_NEW_FIFO_BASE0x21d00000
#definenum_base(a)(0x21d00000(0x1000*a))
#defineSPI_NUM_FIFO2
#defineMAX_NUM_FIFO256
#defineREADONLY0
#defineREADEN0x1
#defineWRITONLY0x2
#defineWRITEN0x4
typedefstructnew_fifo{
intcode,key;
intstart,size;
intflags;
chardata[4000];
intendflag;
}*at91_fifo;
staticchar*new_fifo_fun(intnum,intflags,intcode,intsize)
{
at91_fifofifo_p;
intnum_addr;
char*data;
if(numMAX_NUM_FIFO)
return-1;
num_addr=num_base(num);
/printk("thenum_addris%p\n",num_addr);
fifo_p=(at91_fifo)ioremap(num_addr,(1024*4));
/printk("thefifo_pis%p\n",fifo_p);
fifo_p-code=code;
/printk("thecodeaddris%p\n",(fifo_p-code));
fifo_p-flags=flags;
fifo_p-size=size;
data=(fifo_p-data[0]);
/printk("thedataaddris%p\n",data);
returndata;
}
#endif
在設(shè)備驅(qū)動(dòng)程序中,首先在注冊中斷服務(wù)程序之前,要調(diào)用new_fifo_fun函數(shù),得到數(shù)據(jù)區(qū)首地址的指針。這個(gè)指針在這個(gè)設(shè)備驅(qū)動(dòng)程序中可被設(shè)置成全程變量。然后在中斷服務(wù)程序中直接對數(shù)據(jù)進(jìn)行讀寫。
比如說,在文件頭部寫:
staticchar*data;
然后在初始化文件中,注冊中斷之前加入:
data=new_fifo_fun(SPI_NUM_FIFO,WRITEN,0,100);
在中斷服務(wù)程序中加入:
for(i=0;i100;i)
*(data)=i;
接下來,本文設(shè)計(jì)了一個(gè)簡單的進(jìn)程,就是讀取SPI的FIFO空間的數(shù)據(jù),通過/dev/mem來讀取SDRAM高地址的數(shù)值,使用的是mmap函數(shù)。
全文如下:
#includesys/types.h
#includestdio.h
#includesys/stat.h
#includeunistd.h
#includesys/mman.h
#includesys/fcntl.h
#includedirent.h
#includestdlib.h
#includeerrno.h
#includestring.h
#includeassert.h
#includegetopt.h
main()
{
int*mmaddr;
inti,fd;
fd=open("/dev/mem",O_RDWR);
mmaddr=(int*)mmap(0,1024,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0x21d02000);
for(i=0;i10;i)
{printf("themmaddrdatais%p\n",*(mmaddr));
printf("%d\n",i);
}
}
結(jié)果是:themmaddrdatais(nil)themmaddrdatais0xd24e92c2themmaddrdatais0xf01ab26dthemmaddrdatais0x64themmaddrdatais0x4themmaddrdatais0x3020220themmaddrdatais0x7060504themmaddrdatais0xb0a0908the
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 養(yǎng)老院入住老人滿意度調(diào)查與反饋制度
- 企業(yè)員工招聘與離職制度
- 老年終末期患者營養(yǎng)不良篩查的標(biāo)準(zhǔn)化方案-1
- 老年糖尿病患者足部自我護(hù)理要點(diǎn)解析
- 口述影像講述員安全知識競賽知識考核試卷含答案
- 制材工崗前安全文化考核試卷含答案
- 聚甲醛裝置操作工安全專項(xiàng)測試考核試卷含答案
- 假肢裝配工安全宣教評優(yōu)考核試卷含答案
- 我國上市公司定向增發(fā)折扣率影響因素的深度剖析
- 提硝工達(dá)標(biāo)水平考核試卷含答案
- 高校區(qū)域技術(shù)轉(zhuǎn)移轉(zhuǎn)化中心(福建)光電顯示、海洋氫能分中心主任招聘2人備考題庫及答案詳解(考點(diǎn)梳理)
- 航空安保審計(jì)培訓(xùn)課件
- 2026四川成都錦江投資發(fā)展集團(tuán)有限責(zé)任公司招聘18人備考題庫有答案詳解
- 高層建筑滅火器配置專項(xiàng)施工方案
- 2023-2024學(xué)年廣東深圳紅嶺中學(xué)高二(上)學(xué)段一數(shù)學(xué)試題含答案
- 2025年全國職業(yè)院校技能大賽中職組(母嬰照護(hù)賽項(xiàng))考試題庫(含答案)
- 2026江蘇鹽城市阜寧縣科技成果轉(zhuǎn)化服務(wù)中心選調(diào)10人考試參考題庫及答案解析
- 托管機(jī)構(gòu)客戶投訴處理流程規(guī)范
- 2026年及未來5年中國建筑用腳手架行業(yè)發(fā)展?jié)摿Ψ治黾巴顿Y方向研究報(bào)告
- 銀行客戶信息安全課件
- (2025)70周歲以上老年人換長久駕照三力測試題庫(附答案)
評論
0/150
提交評論