看到這短片... 突然想到自己已經黃尿 2個月..
2015年2月24日 星期二
2015年2月15日 星期日
Driver Debug : sparse
apt-get install sparse
以此範例來說如果直接make是看不出記指標任何錯誤 ex: http://kingofsdtw.blogspot.tw/2015/02/blog-post.html#links
\> make
if do make ,can't find any pointer error
安裝 sparse,並用 __iomem 監視你要的pointer
after install sparse and use __iomem monitor your pointer
( __iomem only useful when install sparse )
\> make C=2
他會幫助你發現錯誤
It will help you find some error
BUG:
Fix:
以此範例來說如果直接make是看不出記指標任何錯誤 ex: http://kingofsdtw.blogspot.tw/2015/02/blog-post.html#links
\> make
if do make ,can't find any pointer error
安裝 sparse,並用 __iomem 監視你要的pointer
after install sparse and use __iomem monitor your pointer
( __iomem only useful when install sparse )
\> make C=2
他會幫助你發現錯誤
It will help you find some error
BUG:
////-------------------------------------------// // FUNCTION : MMIO_TEST // INPUT : // OUTPUT : // DESCRIPTION: // // #include // size : byte // ioremap(unsigned long phy_addr , unsigned int size) // ioremap_nocache(unsigned long phy_addr , unsigned int size) // iounmap() // release_mem_regin( start , size); //-------------------------------------------// // void MMIO_TEST(void){ char __iomem *reg; reg = ioremap_nocache(0xFEC00000 , 4 ); if(reg != NULL) { printk("Get mmio ,data = 0x%x\n",*reg); //free iounmap(reg); } }
Fix:
////-------------------------------------------// // FUNCTION : MMIO_TEST // INPUT : // OUTPUT : // DESCRIPTION: // // #include // size : byte // ioremap(unsigned long phy_addr , unsigned int size) // ioremap_nocache(unsigned long phy_addr , unsigned int size) // iounmap() // release_mem_regin( start , size); //-------------------------------------------// // void MMIO_TEST(void){ char __iomem *reg; reg = ioremap_nocache(0xFEC00000 , 4 ); if(reg != NULL) { printk("Get mmio ,data = 0x%x\n",ioread8(reg)); //free iounmap(reg); } }
實體記憶體映射
如果想要使用實體記憶體上的某個區塊
If wanted using a physical memory block
(此區塊本loser稱為 MMIO memory mapping I/O block)
This Block is call MMIO
只要請系統將此"實體位置區塊"映射至你準備好的buffer區塊即可
You only make a request to system , mapping this adders to your buffer.
(就像建立一個Link ,Link指向data )
Just like a file link , a pointer to your data.
當然使用完後記得把Link 釋放和刪除。
Don't forget free them after using.
If wanted using a physical memory block
(此區塊本loser稱為 MMIO memory mapping I/O block)
This Block is call MMIO
只要請系統將此"實體位置區塊"映射至你準備好的buffer區塊即可
You only make a request to system , mapping this adders to your buffer.
(就像建立一個Link ,Link指向data )
Just like a file link , a pointer to your data.
當然使用完後記得把Link 釋放和刪除。
Don't forget free them after using.
////-------------------------------------------// // FUNCTION : MMIO_TEST // INPUT : // OUTPUT : // DESCRIPTION: // // #include // size : byte // ioremap(unsigned long phy_addr , unsigned int size) // ioremap_nocache(unsigned long phy_addr , unsigned int size) // iounmap() // release_mem_regin( start , size); //-------------------------------------------// // void MMIO_TEST(){ char *reg; reg = ioremap_nocache(0xFEC00000 , 4 ); if(reg != NULL) { printk("Get mmio ,data = 0x%x\n",*reg); //free iounmap(reg); } }
2015年2月14日 星期六
和碩題目: 定址線 and 資料線
http://www.pcdvd.com.tw/printthread.php?t=480727
電腦內部有分成,資料線跟定址線二種,
其中定址線是指,能存取多大的記憶體空間,
定址線如果是 32條,那麼算法如下
32條定址線,相當於 2的三十二次方,也就是 4GB
資料線是指一次能存取多少位元資料
那麼以 80486 來說,他是算 32bit,所以呢,他算32位元電腦
1 word = 8 bit,那麼 80486 就是一次能存取四個word
在樓主提供的intel資料中,4gb是對的,沒有人去限制啊.
在 Pentium 中加入了超純量概念,多管線,非循序執行預測
分歧預測點緩衝架構,等一些來增加執行效率
Pentium是64bit CPU(資料線上來看),位址線仍只有32條了喔?
基本上,只對一半,在電腦中,有二種匯流排,一種是cpu內部匯流排,一種是cpu與外部的
匯流排,所以intel提供的,內部匯流排,會寫64Bit,然而外部匯流排卻只有32位元而以!
電腦內部有分成,資料線跟定址線二種,
其中定址線是指,能存取多大的記憶體空間,
定址線如果是 32條,那麼算法如下
32條定址線,相當於 2的三十二次方,也就是 4GB
資料線是指一次能存取多少位元資料
那麼以 80486 來說,他是算 32bit,所以呢,他算32位元電腦
1 word = 8 bit,那麼 80486 就是一次能存取四個word
在樓主提供的intel資料中,4gb是對的,沒有人去限制啊.
在 Pentium 中加入了超純量概念,多管線,非循序執行預測
分歧預測點緩衝架構,等一些來增加執行效率
Pentium是64bit CPU(資料線上來看),位址線仍只有32條了喔?
基本上,只對一半,在電腦中,有二種匯流排,一種是cpu內部匯流排,一種是cpu與外部的
匯流排,所以intel提供的,內部匯流排,會寫64Bit,然而外部匯流排卻只有32位元而以!
訂閱:
文章 (Atom)