接触ARM这么久其实还没真正的进入linux的学习路程,从今天起就开始全心来学习linux驱动了。大致学习策略如下:主参考资料为《mini2440_linux移植开发实战指南》这个可以从友善的论坛上下载,本手册基本移植大多数linux驱动,而且学有相当的部分是有原理讲解了,包括mtd驱动,网卡驱动,LCD驱动,触摸屏驱动,SD卡驱动,音频驱动,还有一些其它的小驱动。先按照手册的一步一步的去做,看到效果后然后再去找相关资料,分析其驱动框架,把这些驱动源代码看个烂熟。

  今日任务是第三章 移植linux和nand-flash驱动,这里面按照手册来走并不能走通,需要做以下的一些改动,也先回顾一下步骤,需要改动的地方再说。

一:移植步骤

1:第一步 仍然是修改顶层的makefile文件以指定平台的交叉编译工具

ARCH  ?= arm
CROSS_COMPILE ?= arm-linux-

2:make menuconfig ,arch/arm/mach-s3c2440/Kconfig,arch/arm/mach-s3c2440/Makefile,.config,这四者的关系

         Kconfig就是menuconfig中的内容来源,在menuconfig中选中了某项也就会在.config中体现出来,而makefile中则根据选项来决定某项

  如我现在要将arch/arm/mach-s3c2440/mach-mini2440.c编译进内核,首先要做Kconfig中增加其选项

  config MACH_MINI2440

      bool "MINI2440 development board"

      .

      .

更多内容不再列出。然后make menuconfig 在

System Type --->

  S3C2440 Machines --->

    [*] MINI2440 development board

如果选中了此项,在顶层的.config文件中就会有

CONFIG_MACH_MINI2440 = y

再在makefile中添加

obj-$(CONFIG_MACH_MINI2440) += mach-2440.o

这样makefile再读取.config时发现CONFIG_MACH_MINI2440为y就会把mach-2440.c编译进来。

这个过程还算比较清楚,如果你自己在arch/arm/mach-s3c2440/写了一个征对你自己开发板c文件,yourboard.c那可以把该目录下的makefile中的

obj-$(CONFIG_MACH_MINI2440) += mach-2440.o改成

obj-$(CONFIG_MACH_MINI2440) += yourboard.o即可

这里也就是将mach-smdk2440.c复制成gml-2440.c同时将obj-$(CONFIG_MACH_MINI2440) += gml-2440.o

然后修改时钟频率,注释掉smdk_machine_init();

3:修改mtd分区

按照手册上说的再自己的.c文件中添加分区信息根本不行,编译都通不过随后参考了当前目录下的mach-mini2440.c才发现没有包含相关头文件,还有一点手册当中没有说到的是mini2440_nand_info也没有使用,这个也可以参考mach-mini2440.c添加。

4:移植yaffs2

这个按照手册走没有问题,将友善光盘中提供的已经做好的root_qtopia-128M.img,用supervivi的y功能烧写到nand-flash中再启动系统便可进入shell当中。

5:关于分区信息的来源

  我想知道修改mtd分区的依据是什么,难度是supervivi当中固定了一些信息

6:关于机器码

每块开发板在linux当中还需要有机器码,这个机器码由bootloader传入mini2440,mini2440还自己申请了机器码为1999,这些linux系统支持的机器码都在arch/arm/tools/mach-types中定义

mini2440 MACH_MINI2440 MINI2440 1999

这些字段都什么意思不太懂,看其字母就包含mini244,如果你把这里改了把1999改成19999内核就起不来,

在mach-2440.c中有如下字段

MACHINE_START(MINI2440,"GAOMAOLIN2440")

.

.

MACHINE_END

如果你把MINI2440改成其它的就编译不过,这里的MINI2440肯定是要做mach-types中有的。

今天第一项任务差不多是完成了。

第二个任务就是

泛读《linux mtd 源代码分析》和相关源代码,对mtd驱动框架有大致了解

转载:http://www.cnblogs.com/gaomaolin_88/archive/2010/12/25/1916838.html