基于S3C2410的Linux内核移植笔记
硬件平台:S3C2410
内核版本:3.10.1
1.首先修改顶级Makefile 找到ARCH和CROSS_COMPILE选项 ARCH ?= arm CROSS_COMPILE ?= arm-linux- 2.创建默认配置 #make s3c2410_defconfig 说明:在arch/arm/configs中可找到默认配置 3.配置内核 #make menuconfig 取消其他芯片,只选中SMKD2410, 4.编译 #make
**修改flash分区** 修改arch/arm/mach-s3c24xx/common-smdk.c文件: static struct mtd_partition smdk_default_nand_part[] = { [0] = { .name = "u-boot", .size = SZ_1M, .offset = 0, }, [1] = { .name = "kernel", .offset = SZ_1M, .size = SZ_1M*3, }, [2] = { .name = "rootfs", .offset = SZ_4M, .size = SZ_1M*60, }, };
**板级资源定义:** arch/arm/mach-s3c24xx/common-smdk.c NAND Flash及4个LED灯的资源定义(对应开发板); > arch/arm/mach-s3c24xx/mach-smdk2410.c 串口,网卡,LCD,声卡资源定义,并导入其他资源(重要); > arch/arm/plat-s3c24xx/devs.c &s3c_device_xxx 一般定义在devs.c中(通用板级定义) &smdk_xxx 一般定义在common-smdk.c中(通用板级定义) &smdk2410_xxx 一般定义在mach-smdk2410.c文件中(用户板级定义)
**网卡驱动:** 添加cs89x0网卡支持,删除其他网卡的支持 make menuconfig Device Drivers ---> [*] Network device support ---> [*] Ethernet driver support ---> [*] Cirrus devices <*> CS89x0 support [*] CS890 platform driver support 修改arch/arm/mach-s3c24xx/mach-smdk2410.c文件添加对cs89x0的板级支持 /* CS8900 */ static struct resource smdk2410_cs89x0_resources[] = { [0] = DEFINE_RES_MEM(0x19000300, 17), [1] = DEFINE_RES_IRQ(IRQ_EINT9), }; static struct platform_device smdk2410_cs89x0 = { .name = "cs89x0", .num_resources = ARRAY_SIZE(smdk2410_cs89x0_resources), .resource = smdk2410_cs89x0_resources, }; 注意事项: 这里添加的板级资源要与开发板上实际情况相符; 在smdk2410_devices中加入 static struct platform_device *smdk2410_devices[] __initdata = { &smdk2410_cs89x0, };
**声卡驱动** 1.修改代码:arch/arm/mach-s3c24xx/mach-smdk2410.c 添加以下代码: #include
**RTC驱动程序** 1.修改代码:arch/arm/mach-s3c24xx/mach-smdk2410.c 在smdk2410_devices中加入s3c_device_rtc资源 static struct platform_device *smdk2410_devices[] __initdata = { &s3c_device_rtc, }; 2.配置: <*> Real Time Clock ---> <*> Samsung S3C series SoC RTC 3.测试: (1) 设置时间为 2007-04-29 16:35 # date -s 042916352007 (2) 把刚刚设置的时间存入内部的RTC # hwclock -w (3)开机时恢复linux 系统时钟为RTC, 一般把该语句放入/etc/init.d/rcS 文件自动执行。 # hwclock -s
**添加SD卡支持:** 1.修改arch/arm/mach-s3c24xx/mach-smdk2410.c,添加SDI设备 static struct platform_device *smdk2410_devices[] __initdata = { &s3c_device_sdi, }; 其中s3c_device_sdi定义在arch/arm/plat-s3c24xx/devs.c中. 2.修改配置,添加SD支持 Device Drivers ---> <*> MMC/SD/SDIO card support ---> <*> Samsung S3C SD/MMC Card Interface support [*] Hardware support for SDIO IRQ 3.应用 当系统检测至SD卡时,会产生设备文件,/dev/mmcblk0p1,直接挂载至某个目录下即可进行读写 4.添加热插拔支持 修改arch/arm/mach-s3c24xx/mach-smdk2410.c,添加下面的代码 #include
**添加U盘支持** Device Drivers ---> [*] USB support ---> <*> Support for Host-side USB <*> USB Mass Storage support <*> OHCI HCD support 注意事项: 1.一定要使能OHCI支持以及添加s3c_device_ohci资源(否则不能发现磁盘); Open Host Controller Interface(开放式主机控制接口协议) 2.需要添加SCSI Disk支持 (貌似移植SD卡已经添加进去了,保证有就行了); Device Drivers ---> SCSI device support ---> <*> SCSI disk support