關於我自己

2015年2月24日 星期二

Taiwan Trivia EP1 “How Yellow is Your Urine?”

看到這短片... 突然想到自己已經黃尿 2個月..

2015年2月15日 星期日

GCC -S ==> assemble code

gcc -S  myTest.c


會輸出 assemble code
will out assemble code    myTest.S


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:
//
//-------------------------------------------//
// 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.


//
//-------------------------------------------//
// 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位元而以!