DM6446 開(kāi)發(fā)闆領航 loadmodules.sh 文件歌資詳解 針對(duì) ARM+DSP 這(zhè)種(zhǒng)架們科構的 CPU , DM6446 是很經(jīng)典校讀的一款。有些朋友覺得把 DSP 和 ARM 通信已經南資(jīng)搞懂了,可是程序運行的時(shí)候,有時(shí)候能(néng數兵)成(chéng)功,有時(shí)請黑候會(huì)
針對(duì)ARM+DSP這(zhè)種(zhǒng)架構的CPU,DM6446是很經(jīng)典的一款。有些內空朋友覺得把DSP和ARM通信已經(jīng)搞懂了,可是程序運行的時(shí)候,有時(shí)候喝懂能(néng)成(chéng)功,有時(問得shí)候會(huì)死機。有的算法可以運行,有的算法卻制如又不能(néng)運行。排除我們算法在語言及其邏輯報道的錯誤後(hòu),我們就(jiù)應當仔細分析算法在内存妹討方面(miàn)的處理,系統内存的分配與使用情況。其中,在我們應用程序啓動前知服,一般需要加載兩(liǎng)個.ko文件,也就(jiù)是dsplinkk.ko和cmemk.ko兩(liǎng)個文件。這(zhè)請你兩(liǎng)個文件是由loadmodules.sh這(zhè)個shell文件來加載的,這(zhè)個文件一個作用是加載兩(liǎng)個驅動文件,另好術一個重要的作用是對(duì)共享煙章内存的分配,這(zhè)點很多人沒(m頻錢éi)有理解或注意到。
下面(miàn)是TI提供的一個loadmodules.sh文件,我來做詳細的解說(shuō)。
# insert cmemk, tell it to occupy林亮 physical118MB-128MB.
insmod cmemk.ko p件時hys_start=0x87600000phys_end=0x88000答裡000 pools=1x36000房區00,5x829440,2x1244160,1x40960,2離開x8192
# insert dsplinkk文腦
insmod dsplinkk.k懂得o
# make /dev/dsplink
rm -f /dev/dsplink
mknod /dev/dsplink c `awk&q廠用uot;\\$2==\"dsplink\小窗" {print \\$1大現}" /proc/devic哥雜es` 0
loadmodules.sh文件的寫法,根據DVSDK版本的不同,會(huì)不同。這(zhè)個是DM6446使用的DVSDK2.0版本的。
# insert cmemk, tell it to occupy phy議理sical118MB-128MB.
insmod cmemk.ko劇會 phys_start=0x87600000phys_end=車電0x88000000
第一行是注釋。start=0x87600000phys_en草農d=0x88000000指定了ARM與DSP的共享内存的起(qǐ)始和終止位置,這(zhè)點購我一定要與自己的系統一緻。在DM6446中,内存分爲三塊,一塊給ARM使用,也就(jiù)是linux使用,第二塊爲共享内存,ARM和DSP都(dōu)可以訪問,使用;第三塊給DSP使用,DSP一般用來實現算法。DSP和ARM之間的通信通過(guò)共享内存來實現。
pools=1x3600000,5x8從少29440,2x1244160,1x40960,2x8192
這(zhè)個很多人不理解,往往自己的程序運行正确了,但是對(duì)鐵中這(zhè)個并不理解。
共享内存被(bèi)劃分了多個内存池,你完全應該根據你算法的情況,來劃分内存池秒月。
1x3600000:代表劃分了1個3600000字節大小的内存池
5x829440:代表劃分了5個829440字節大小内存池
……
說(shuō)到這(zhè)裡(lǐ),我們應該很容易就(jiù窗內)理解到,這(zhè)個共享内存池的劃分是:
1個3600000字節大小的buffer
5個829440字節大小的buffer
2個1244160字節大小的buffer
1個40960字節大小的buffer
2個8192字節大小的buffer
當你的算法使用共享内存時(shí數紙),系統會(huì)到你使用的内存放在大小最合适的内存池中。所謂最适合,就音市(jiù)是能(néng)放下你的buffer,多餘的空間又最小。
# insert dsplin玩看kk
insmod dsplinkk.ko
這(zhè)個是加載驅動
# make /dev/dsplink
rm -f /dev/dspli自身nk
mknod /dev/dsplink c `awk"\\$這動2==\"dsplink\" {pri志生nt \\$1}" /proc/device對民s` 0
删除節點和增加節點。
這(zhè)些都(dōu)是普通的linux指令,我想大家都(dōu)會(huì)很容易理解。如果大家有器書疑問或文章有不當之處,歡迎指定。謝謝。