函数调用注释掉,因为我们后面会编写自己的初始化函数,不需要调用smdk2440 原来的,同时修改时钟频率,修改如下:
static void __init eilian240_machine_init(void)
{
s3c24xx_fb_set_platdata(&eilian240_fb_info);
s3c_i2c0_set_platdata(NULL);
s3c_nand_set_platdata(&eilian240_nand_info);
platform_add_devices(eilian240_devices, ARRAY_SIZE(eilian240_devices));
// smdk_machine_init();
}
修改时钟频率
static void __init eilian240_map_io(void)
{
s3c24xx_init_io(eilian240_iodesc, ARRAY_SIZE(eilian240_iodesc));
s3c24xx_init_clocks(12000000);
s3c24xx_init_uarts(eilian240_uartcfgs, ARRAY_SIZE(eilian240_uartcfgs));
}
e)关于机器码
首先,很关键的一点,内核在启动时,是通过bootloader 传入的机器码(MACH_TYPE)确定应启动哪种目标平台的。
打开/arch/arm/tools/mach-types 定位到最后一行添加机器码(深蓝色部分):
ctbu_gen2 MACH_CTBU_GEN2 CTBU_GEN2 3410
kmp_am17_01 MACH_KMP_AM17_01 KMP_AM17_01 3411
wtplug MACH_WTPLUG WTPLUG 3412
mx27su2 MACH_MX27SU2 MX27SU2 3413
nb31 MACH_NB31 NB31 3414
hjsdu MACH_HJSDU HJSDU 3415
td3_rev1 MACH_TD3_REV1 TD3_REV1 3416
eag_ci4000 MACH_EAG_CI4000 EAG_CI4000 3417
net5big_nand_v2 MACH_NET5BIG_NAND_V2 NET5BIG_NAND_V2 3418
cpx2 MACH_CPX2 CPX2 3419
net2big_nand_v2 MACH_NET2BIG_NAND_V2 NET2BIG_NAND_V2 3420
ecuv5 MACH_ECUV5 ECUV5 3421
hsgx6d MACH_HSGX6D HSGX6D 3422
dawad7 MACH_DAWAD7 DAWAD7 3423
sam9repeater MACH_SAM9REPEATER SAM9REPEATER 3424
eilian240 MACH_EILIAN240 EILIAN240 8000
在u-boot-2010.06/arch/arm/include/asm/mach-types.h 中定义相对应的机器码,这里注意这个机器码是我自己移植UBOOT的时候定义的
#define MACH_TYPE_CAYENNE 2874
#define MACH_TYPE_FUJI 2875
#define MACH_TYPE_SYNOLOGY_6282 2876
#define MACH_TYPE_EM1SY 2877
#define MACH_TYPE_M502 2878
#define MACH_TYPE_MATRIX518 2879
#define MACH_TYPE_TINY_GURNARD 2880
#define MACH_TYPE_SPEAR1310 2881
#define MACH_TYPE_EILIAN240 8000
这需要两者相匹配,如果内核的机器码和bootloader 传入的不匹配,就会经常出现下面的错误:
Uncompressing Linux................................................................................................................................. done, booting
the kernel. 不动了
接着修改linux-2.6.39/arch/arm/mach-s3c2440/eilian240.c定位到文件末尾处
notes:开发板运行后,在命令行终端输入:cat /proc/cpuinfo 可以看到我们添加的开发板信息,当然这个信息可以定制成我们需要的信息。
f)内核配置菜单中的MINI2440 选项和实际代码是如何关联的
在开始移植其他驱动之前,了解一些看起来比较“神秘”的常识,那就是运行make menuconfig 时,内核配置菜单中的MINI2440 选项是如何出现的。
加载缺省文件因为在x86平台下下执行此操作,系统默认的是x86平台,操作如下:
root@bootloader:/home/eilian/development/Linux/linux-2.6.39#cp arch/arm/configs/mini2440_defconfig .config
root@bootloader:/home/eilian/development/Linux/linux-2.6.39#make menuconfig
出现下图所示内核配置根菜单

按上下箭头键移动到 System Type,按回车进入该子菜单,如图
再找到S3C2440 Machines,按回车进入该子菜单,如图
这样明白上面修改Linux-2.6.39/arch/arm/mach-s3c2440/目录下的Makefile和Kconfig为什么那样修改了吧。。
再打开 Linux-2.6.39/arch/arm/mach-s3c2440/Kconfig 看看
现在明白了吧“eilian240 development board”正是在这个Kconfig 文件中定义说明的,当然你可以根据自己的喜好改为其他显示信息。这里的显示信息只是在内核配置菜单中出现的,记住“要让选择的配置实际起效,还需要根据此配置在Makefile 中添加