歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> OK6410、Linux2.6.36內核移植,DM9000 驅動移植

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

日期:2017/3/1 10:24:01   编辑:Linux編程

還是先來吐槽:本來我是在上一個星期的周末已經把 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. struct mtd_partition ok6410_nand_part[] = {
  4. {
  5. .name = "Bootloader",
  6. .offset = 0,
  7. .size = (1 * SZ_1M),
  8. .mask_flags = MTD_CAP_NANDFLASH,
  9. },
  10. {
  11. .name = "Kernel",
  12. .offset = (1 * SZ_1M),
  13. .size = (5*SZ_1M) ,
  14. .mask_flags = MTD_CAP_NANDFLASH,
  15. },
  16. {
  17. .name = "User",
  18. .offset = (6 * SZ_1M),
  19. .size = (120*SZ_1M) ,
  20. },
  21. {
  22. .name = "File System",
  23. .offset = MTDPART_OFS_APPEND,
  24. .size = MTDPART_SIZ_FULL,
  25. }
  26. };
  27. static struct s3c2410_nand_set ok6410_nand_sets[] = {
  28. [0] = {
  29. .name = "nand",
  30. .nr_chips = 1,
  31. .nr_partitions = ARRAY_SIZE(ok6410_nand_part),
  32. .partitions = ok6410_nand_part,
  33. },
  34. };
  35. static struct s3c2410_platform_nand ok6410_nand_info = {
  36. .tacls = 25,
  37. .twrph0 = 55,
  38. .twrph1 = 40,
  39. .nr_sets = ARRAY_SIZE(ok6410_nand_sets),
  40. .sets = ok6410_nand_sets,
  41. };
  42. //add by acanoe first
Copyright © Linux教程網 All Rights Reserved