主题 : 移植2.6.31到mini2440成功! 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 1330
精华: 0
发帖: 39
金钱: 390 两
威望: 139 点
贡献值: 0 点
综合积分: 78 分
注册时间: 2008-08-18
最后登录: 2011-02-07
楼主  发表于: 2009-10-03 12:17

 移植2.6.31到mini2440成功!

遇到的问题如下:

  1. USB设备未编译,导致编译内核失败。

  2. 设备初始化代码段不对,导致指针错误。

  3. LED背光设备、NAND等结构体缺失元素(不影响启动)

  4. 背光灯先亮后灭;


解决的方法如下:

  1. 设备未编译,导致编译内核失败,添加编译规则即可,打开linux2.6.31/arch/arm/mach-s3c2440/Kconfig;在92行后添加如下内容:
    复制代码
    1.     select S3C_DEV_USB_HOST


  2. 初始化代码不对,这个我也不是很清楚原因,待知道的兄弟解释一下,我是从http://code.google.com/p/mini2440的代码库里得到的解决方法。解决办法就是打开linux2.6.31/arch/arm/mach-s3c2440/mach-mini2440.c,将除了下面这一句之外的所有的 __init去掉即可
    复制代码
    1. static char mini2440_features_str[12] __initdata = "0tb";

    另外提一下,上面这一句是设置mini2440初始化参数的。

  3. 结构体缺失的问题,应该不影响启动,但是为了代码规范还是注意点比较好。解决方法,同样是打开linux2.6.31/arch/arm/mach-s3c2440/mach-mini2440.c,将
    复制代码
    1. static struct s3c2410_platform_nand mini2440_nand_info __initdata = {
    2.      .tacls        = 0,
    3.      .twrph0        = 25,
    4.      .twrph1        = 15,
    5.      .nr_sets    = ARRAY_SIZE(mini2440_nand_sets),
    6.      .sets        = mini2440_nand_sets,
    7.      .ignore_unset_ecc = 1,
    8. };

    修改为:
    复制代码
    1. static struct s3c2410_platform_nand mini2440_nand_info __initdata = {
    2.      .tacls        = 0,
    3.      .twrph0        = 25,
    4.      .twrph1        = 15,
    5.      .nr_sets    = ARRAY_SIZE(mini2440_nand_sets),
    6.      .sets        = mini2440_nand_sets,
    7.      .ignore_unset_ecc = 1,
    8.     .select_chip    = NULL
    9. };

    再将
    复制代码
    1. static struct s3c24xx_led_platdata mini2440_led_backlight_pdata __initdata = {
    2.      .name        = "backlight",
    3.      .gpio        = S3C2410_GPG(4),
    4.      .def_trigger    = "backlight",
    5. };

    修改为:
    复制代码
    1. static struct s3c24xx_led_platdata mini2440_led_backlight_pdata __initdata = {
    2.      .name        = "backlight",
    3.      .gpio        = S3C2410_GPG(4),
    4.     .flags        = S3C24XX_LEDF_STARTON,
    5.      .def_trigger    = "backlight",
    6. };

    即加上
    复制代码
    1.     .flags        = S3C24XX_LEDF_STARTON,
    这一行。并且打开arch/arm/mach-s3c2410/include/mach/leds-gpio.h,在18行后添加下面一行:
    复制代码
    1. #define S3C24XX_LEDF_STARTON    (1<<2)        /* Initialise 'on' */

    以定义从开机一直保持液晶常亮的宏参数。


  4. 背光灯的问题,有两种解决方法,一是在启动参数中加上
    复制代码
    1. mini2440=0t
    参数;而是修改上面的
    复制代码
    1. static char mini2440_features_str[12] __initdata = "0tb";


    复制代码
    1. static char mini2440_features_str[12] __initdata = "0t";

    即可,这里实际上是mini2440移植的时候作的一个参数化的处理。具体可以参考linux2.6.31/arch/arm/mach-s3c2440/mach-mini2440.c的584行到625行这一段。



相关的补丁如下:
mini2440-stuff.patch.tar.bz2 (3 K) 下载次数:94
[ 此帖被athurg在2009-10-03 13:59重新编辑 ]
级别: 新手上路
UID: 8849
精华: 0
发帖: 9
金钱: 100 两
威望: 50 点
贡献值: 0 点
综合积分: 18 分
注册时间: 2009-09-08
最后登录: 2010-12-18
1楼  发表于: 2009-10-03 14:14
呵呵,我触屏都成功了。