歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

OK6410、Linux2.6.36內核移植,DM9000 驅動移植

還是先來吐槽:本來我是在上一個星期的周末已經把 Linux2.6.34.11 的驅動已經成功的移植到, OK6410 的開發板上的,並且能夠啟動主機上的NFS 根文件系統, 可是我在周一的時候,開始學習LCD 的驅動程序,  在修改內核文件的時候,有幾處錯誤修改,將原來自己做的2.6.34.11 的內核源碼 搞的亂七八糟的,在這裡還是自己在修改內核的時候沒有提注重注釋, 並且沒有記錄下來自己的操作步驟,以至於我沒辦法,恢復2.6.34 的內核, 所以也就只能重新先開始最基礎的內核移植了。 這次我選擇的是2.6.36.2 的內核, 誰知到一開始移植就出現一大堆問題。在這裡我不得不說,飛凌開發人員對內核修改的代碼,管理真的是太扯了,自己在注銷任何一個設備是沒有一點點注釋,就把這個設備原有的線性地址分配給其它設備了,讓我讓我們這些菜鳥干看著一大堆的報錯信息頂個什麼用, 真的是傷不起。好了不亂扯了,現在開始記錄。

我的開發環境是:

VMware Ubuntu 10.10 。OK6410 A版 256M+2G 的開發板。 主機系統:XP。Uboot:飛凌提供的Uboot。

參考內核 :飛凌提供的 Forlinx   的2.6.36.2 內核

操作步驟  以下./  均代表你的內核 根目錄

1、修改./Makefile191  ARCH          ?=arm                    // 指定cpu類型, arm後面不要有空格,要不然編譯是會提醒ARCH 不能為一個目錄

192  CROSS_COMPILE      ?=/usr/local/arm/4.2.2-eabi/usr/bin/arm-linux-             // 指定交叉編譯器的路徑,按照你自己的進行指定路徑2、修改./arch/arm/mach-s3c64xx/mach-smdk6410.c 1)  nandflash  驅動,修改方法

加載頭文件       

#include <linux/mtd/mtd.h>          

#include <linux/mtd/partitions.h>       

 #include <plat/nand.h>         //這些頭文件放在./arch/arm/plat-samsung/include/     下面

添加nand  結構體   

  1. // add by acanoe first   
  2. extern void s3c64xx_reserve_bootmem(void);  //add by acanoe   
  3.   
  4. struct mtd_partition ok6410_nand_part[] = {  
  5.     {  
  6.         .name       = "Bootloader",  
  7.         .offset     = 0,  
  8.         .size       = (1 * SZ_1M),  
  9.         .mask_flags = MTD_CAP_NANDFLASH,  
  10.     },  
  11.     {  
  12.         .name       = "Kernel",  
  13.         .offset     = (1 * SZ_1M),  
  14.         .size       = (5*SZ_1M) ,  
  15.         .mask_flags = MTD_CAP_NANDFLASH,  
  16.     },  
  17.     {  
  18.         .name       = "User",  
  19.         .offset     = (6 * SZ_1M),  
  20.         .size       = (120*SZ_1M) ,  
  21.     },  
  22.     {  
  23.         .name       = "File System",  
  24.         .offset     = MTDPART_OFS_APPEND,  
  25.         .size       = MTDPART_SIZ_FULL,  
  26.     }  
  27. };  
  28.   
  29. static struct s3c2410_nand_set ok6410_nand_sets[] = {  
  30.     [0] = {  
  31.         .name       = "nand",  
  32.         .nr_chips   = 1,  
  33.         .nr_partitions  = ARRAY_SIZE(ok6410_nand_part),  
  34.         .partitions = ok6410_nand_part,  
  35.     },  
  36. };  
  37.   
  38. static struct s3c2410_platform_nand ok6410_nand_info = {  
  39.     .tacls      = 25,  
  40.     .twrph0     = 55,  
  41.     .twrph1     = 40,  
  42.     .nr_sets    = ARRAY_SIZE(ok6410_nand_sets),  
  43.     .sets       = ok6410_nand_sets,  
  44. };  
  45. //add by acanoe first   
Copyright © Linux教程網 All Rights Reserved