移植Linux-2.6.36内核到s3c2440开发板
移植Linux-2.6.36内核到s3c2440开发板
网上关于最新内核移植相关的文章几乎找不到。最新的似乎只有“友善之臂”针对mini2440移植2.6.32.2文档,不能照搬在俺的杂牌板上。特意下载了最新的稳定版本的内核linux-2.6.36,在俺的s3c2440开发板上试试。其中用到了”友善之臂“提供的编译器:ARM-Linux GCC 4.3.2和根文件系统:Rootfs-Qtopia-Qt4。下面是过程的大概。1.解压进入原码顶层目录linux-2.6.36,修改Makefile文件
2. 将原有的arch/arm/mach-s3c2440/mach-mini2440.c删除,将arch/arm/mach-s3c2440/mach- smdk2440.c复制一份,命名为mach-mini2440.c,放在相同的目录下。修改三处mach-mini2440.c的内容先:
1>MACHINE_START(S3C2440, "SMDK2440") ==> MACHINE_START(MINI2440, "MINI2440")
2>s3c24xx_init_clocks(16934400) ==> s3c24xx_init_clocks(12000000)
3>将"smdk_machine_init();"注释掉,否则链接会报错.
3.修改机器码:将”arch/arm/tools/mach-types“文件中的mini2440相关的机器码改成自己的开发板的机器码,俺的改成:“mini2440
4make mini2440_defconfig;make;ok可以启动试一下了。由于不同于mini2440开发板,硬件配置不同,启动后错误很多。搭建开发环境,先不理它。
开发环境必须的网卡驱动。”友善之臂“的mini2440开发板用的是DM9000的网卡,俺的开发板用的是cs8900的网卡。只能“google+自力更生”了。
5.将准备好的cs8900.c/cs8900.h两个文件复制到drivers/net/arm目录下
6.在include/net/目录下创建文件smdk2410.h,并添加如下代码:
#define pSMDK2410_ETH_IO
#define vSMDK2410_ETH_IO
#define SMDK2410_EHT_IRQ
7.在arch/arm/mach-s3c2440/mach-mini2440.c中加入"include <net/smdk2410.h>"
在struct map_desc smdk2440_iodesc[]中添加cs8900相应的io空间映射:
{vSMDK2410_ETH_IO, pSMDK2410_ETH_IO, SZ_1M, MT_DEVICE}
8.在drivers/net/arm/目录下的Makefile中加入cs8900相关项:
obj-$(CONFIG_ARM_CS8900)
在drivers/net/arm/目录下的Kconfig中加入cs8900相关项:
config ARM_CS8900
8.make menuconfig选中cs8900选项,去掉dm9000选项。
9.make 之后可以启动了。
下面说一下内核中网卡和cs8900驱动相关的话题:
由于内核更新后,struct net_device结构体及相关宏定义有变化,或造成在2.6.16/2.6.22/2.6.24内核工作的cs8900驱动在2.6.36上不能编译通过。主要修改如下:
附件是修改后的cs8900.c和cs8900.h文件。
文件传不上来。贴上吧。
下面是cs8900.c文件:
|