主题 : Linux2.6.32.2移植指南中的问题 复制链接 | 浏览器收藏 | 打印
走自己的路,让别人去说!
级别: 侠客
UID: 11808
精华: 0
发帖: 86
金钱: 450 两
威望: 90 点
综合积分: 172 分
注册时间: 2009-12-21
最后登录: 2014-04-10
楼主  发表于: 2010-07-08 11:21

 Linux2.6.32.2移植指南中的问题

在下参照linux移植指南,进行了2.6.32.2内核的移植,主机环境:Fedora 9
编译器 : gcc-4.3.2
Linux版本: linux-2.6.32.2
在其中过程中发现了两个问题,问题以及个人意见如下:
1. 最新版supervivi-128M的分区信息为vivi(mtdbloack0),param(mtdbloack1),kernel(mtdbloack2),root(mtdbloack3)四个分区
如果nand flash驱动中的分区和其一一对应的话,启动时param_cmd_line 中root部分应该修改为 root=/dev/mtdblock3,而不再是root=/dev/mtdblock2,否则无法挂载文件系统。道理不言而喻。当然,这个也可以在bios下利用set parameters自己修改,因此,希望在移植指南中说明这个问题,以免让大家走弯路。
2.kernel 分区太小
   内核启动起来后,在逐渐移植更多的驱动时,内核超过2M后,超过了内核大小上限,导致无法下载。因此建议修改supervivi中的内核分区大小,以便有足够的空间,可能有人说吧nand flash分区增大,很对,移植指南上的所说的nand flash分区可以分得足够大,为5M,但是这样的话同样需要修改supervivi的分区信息。只有保持一致才能启动。(可能大家有更好的办法)。
3. 根文件系统的制作部分,按照步骤制作后无法挂载,目前我还没有找出原因。制作成功的的可以交流下。
以上是我个人意见,如有不对之处,请指正。
对知识的追求永无止境
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
1楼  发表于: 2010-07-08 11:34
1)和2)都是正确的看法,希望友善之臂能完善这个指南。但我个人一向认为解决问题唯一正确的办法是去了解它,真正找到问题发生的根源,而不是迷信什么宝典或者手册。
(就像我一直声明的,本人与友善之臂没有任何关系,以上论点也与与友善之臂无关)
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
走自己的路,让别人去说!
级别: 侠客
UID: 11808
精华: 0
发帖: 86
金钱: 450 两
威望: 90 点
综合积分: 172 分
注册时间: 2009-12-21
最后登录: 2014-04-10
2楼  发表于: 2010-07-08 11:45

 回 1楼(kasim) 的帖子

谢谢版主指教,我赞同版主看法。可能像我这样的莱鸟,开始只能参照别人的东东,才能找到一点门路。发现问题,然后尝试着去解决。
对知识的追求永无止境
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
3楼  发表于: 2010-07-08 11:58

 回 2楼(381762390) 的帖子

你只要记得”参考资料,仅供参考“就可以了:)
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
走自己的路,让别人去说!
级别: 侠客
UID: 11808
精华: 0
发帖: 86
金钱: 450 两
威望: 90 点
综合积分: 172 分
注册时间: 2009-12-21
最后登录: 2014-04-10
4楼  发表于: 2010-07-08 12:05

 回 3楼(kasim) 的帖子

恩,多谢赐教
对知识的追求永无止境
级别: 新手上路
UID: 33519
精华: 0
发帖: 1
金钱: 5 两
威望: 1 点
综合积分: 2 分
注册时间: 2010-12-02
最后登录: 2010-12-02
5楼  发表于: 2010-12-02 10:22
万分感谢啊
级别: 新手上路
UID: 33551
精华: 0
发帖: 7
金钱: 35 两
威望: 7 点
综合积分: 14 分
注册时间: 2010-12-02
最后登录: 2012-06-17
6楼  发表于: 2010-12-09 12:12
我昨天花了一天的时间照着手册配置内核 和文件系统 一个都没成功,其中有几个问题是编译时的问题,我都解决了,内核和文件系统都编译出来了 但烧到板子上没一个成功的 唉 有点灰心了都
级别: 新手上路
UID: 41548
精华: 0
发帖: 6
金钱: 30 两
威望: 6 点
综合积分: 12 分
注册时间: 2011-03-30
最后登录: 2014-05-05
7楼  发表于: 2011-08-08 22:06
我也按照移植资料(mini2440 linux移植开发实战指南)
3.7.2(修改分区表信息)移植2.6.32.2,却没有成功过
修改arch/arm/mach-s3c2440/mini2440.c增加如下:

static struct mtd_partition mini2440_default_nand_part[] = {
        [0] = {
                .name   = "supervivi",
                .size   = 0x00040000,
                .offset = 0,
        },
        [1] = {
                .name   = "param",
                .offset = 0x00040000,
                .size   = 0x00020000,
        },
        [2] = {
                .name   = "Kernel",
                .offset = 0x00060000,
                .size   = 0x00500000,
        },
        [3] = {
                .name   = "root",
                .offset = 0x00560000,
                .size   = 1024*1024*1024,
        },
    [4] = {
                .name   = "nand",
                .offset = 0x00000000,
                .size   = 1024*1024*1024,
        },
}
static struct s3c2410_nand_set mini2440_nand_sets[] = {
        [0] = {
                .name           = "NAND",
                .nr_chips       = 1,
                .nr_partitions  = ARRAY_SIZE(mini2440_default_nand_part),
                .partitions     = mini2440_default_nand_part,
        },
};
/* choose a set of timings which should suit most 512Mbit
*  * chips and beyond.
*  */
static struct s3c2410_platform_nand mini2440_nand_info = {
        .tacls          = 20,
        .twrph0         = 60,
        .twrph1         = 20,
        .nr_sets        = ARRAY_SIZE(mini2440_nand_sets),
        .sets           = mini2440_nand_sets,
        .ignore_unset_ecc=1,
};

/* devices we initialise */

static struct platform_device __initdata *mini2440_devices[] = {
        &s3c_device_usb,
        &s3c_device_lcd,
        &s3c_device_wdt,,
        &s3c_device_i2c0,
        &s3c_device_iis,
        &s3c_device_nand,
};
编译以后总是出现下面错误,请各位看看是怎么回事,谢谢了

[root@sky linux-2.6.32.2]# make mini2440_defconfig
#
# configuration written to .config
#
[root@sky linux-2.6.32.2]# make zImage
scripts/kconfig/conf -s arch/arm/Kconfig
  CHK     include/linux/version.h
make[1]: `include/asm-arm/mach-types.h' is up to date.
  CHK     include/linux/utsrelease.h
  SYMLINK include/asm -> include/asm-arm
  CALL    scripts/checksyscalls.sh
  CHK     include/linux/compile.h
  CC      arch/arm/mach-s3c2440/mach-mini2440.o
arch/arm/mach-s3c2440/mach-mini2440.c:187: error: array type has incomplete element type
arch/arm/mach-s3c2440/mach-mini2440.c:188: error: array index in non-array initializer
arch/arm/mach-s3c2440/mach-mini2440.c:188: error: (near initialization for 'mini2440_default_nand_part')
arch/arm/mach-s3c2440/mach-mini2440.c:189: error: field name not in record or union initializer
arch/arm/mach-s3c2440/mach-mini2440.c:189: error: (near initialization for 'mini2440_default_nand_part')
arch/arm/mach-s3c2440/mach-mini2440.c:190: error: field name not in record or union initializer
arch/arm/mach-s3c2440/mach-mini2440.c:190: error: (near initialization for 'mini2440_default_nand_part')
arch/arm/mach-s3c2440/mach-mini2440.c:191: error: field name not in record or union initializer
arch/arm/mach-s3c2440/mach-mini2440.c:191: error: (near initialization for 'mini2440_default_nand_part')
arch/arm/mach-s3c2440/mach-mini2440.c:193: error: array index in non-array initializer
arch/arm/mach-s3c2440/mach-mini2440.c:193: error: (near initialization for 'mini2440_default_nand_part')
arch/arm/mach-s3c2440/mach-mini2440.c:194: error: field name not in record or union initializer
arch/arm/mach-s3c2440/mach-mini2440.c:194: error: (near initialization for 'mini2440_default_nand_part')
arch/arm/mach-s3c2440/mach-mini2440.c:195: error: field name not in record or union initializer
arch/arm/mach-s3c2440/mach-mini2440.c:195: error: (near initialization for 'mini2440_default_nand_part')
arch/arm/mach-s3c2440/mach-mini2440.c:196: error: field name not in record or union initializer
arch/arm/mach-s3c2440/mach-mini2440.c:196: error: (near initialization for 'mini2440_default_nand_part')
arch/arm/mach-s3c2440/mach-mini2440.c:198: error: array index in non-array initializer
arch/arm/mach-s3c2440/mach-mini2440.c:198: error: (near initialization for 'mini2440_default_nand_part')
arch/arm/mach-s3c2440/mach-mini2440.c:199: error: field name not in record or union initializer
arch/arm/mach-s3c2440/mach-mini2440.c:199: error: (near initialization for 'mini2440_default_nand_part')
arch/arm/mach-s3c2440/mach-mini2440.c:200: error: field name not in record or union initializer
arch/arm/mach-s3c2440/mach-mini2440.c:200: error: (near initialization for 'mini2440_default_nand_part')
arch/arm/mach-s3c2440/mach-mini2440.c:201: error: field name not in record or union initializer
arch/arm/mach-s3c2440/mach-mini2440.c:201: error: (near initialization for 'mini2440_default_nand_part')
arch/arm/mach-s3c2440/mach-mini2440.c:203: error: array index in non-array initializer
arch/arm/mach-s3c2440/mach-mini2440.c:203: error: (near initialization for 'mini2440_default_nand_part')
arch/arm/mach-s3c2440/mach-mini2440.c:204: error: field name not in record or union initializer
arch/arm/mach-s3c2440/mach-mini2440.c:204: error: (near initialization for 'mini2440_default_nand_part')
arch/arm/mach-s3c2440/mach-mini2440.c:205: error: field name not in record or union initializer
arch/arm/mach-s3c2440/mach-mini2440.c:205: error: (near initialization for 'mini2440_default_nand_part')
arch/arm/mach-s3c2440/mach-mini2440.c:206: error: field name not in record or union initializer
arch/arm/mach-s3c2440/mach-mini2440.c:206: error: (near initialization for 'mini2440_default_nand_part')
arch/arm/mach-s3c2440/mach-mini2440.c:208: error: array index in non-array initializer
arch/arm/mach-s3c2440/mach-mini2440.c:208: error: (near initialization for 'mini2440_default_nand_part')
arch/arm/mach-s3c2440/mach-mini2440.c:209: error: field name not in record or union initializer
arch/arm/mach-s3c2440/mach-mini2440.c:209: error: (near initialization for 'mini2440_default_nand_part')
arch/arm/mach-s3c2440/mach-mini2440.c:210: error: field name not in record or union initializer
arch/arm/mach-s3c2440/mach-mini2440.c:210: error: (near initialization for 'mini2440_default_nand_part')
arch/arm/mach-s3c2440/mach-mini2440.c:211: error: field name not in record or union initializer
arch/arm/mach-s3c2440/mach-mini2440.c:211: error: (near initialization for 'mini2440_default_nand_part')
arch/arm/mach-s3c2440/mach-mini2440.c:214: error: expected ',' or ';' before 'static'
arch/arm/mach-s3c2440/mach-mini2440.c:226: error: variable 'mini2440_nand_info' has initializer but incomplete type
arch/arm/mach-s3c2440/mach-mini2440.c:227: error: unknown field 'tacls' specified in initializer
arch/arm/mach-s3c2440/mach-mini2440.c:227: warning: excess elements in struct initializer
arch/arm/mach-s3c2440/mach-mini2440.c:227: warning: (near initialization for 'mini2440_nand_info')
arch/arm/mach-s3c2440/mach-mini2440.c:228: error: unknown field 'twrph0' specified in initializer
arch/arm/mach-s3c2440/mach-mini2440.c:228: warning: excess elements in struct initializer
arch/arm/mach-s3c2440/mach-mini2440.c:228: warning: (near initialization for 'mini2440_nand_info')
arch/arm/mach-s3c2440/mach-mini2440.c:229: error: unknown field 'twrph1' specified in initializer
arch/arm/mach-s3c2440/mach-mini2440.c:229: warning: excess elements in struct initializer
arch/arm/mach-s3c2440/mach-mini2440.c:229: warning: (near initialization for 'mini2440_nand_info')
arch/arm/mach-s3c2440/mach-mini2440.c:230: error: unknown field 'nr_sets' specified in initializer
arch/arm/mach-s3c2440/mach-mini2440.c:230: error: 'mini2440_nand_sets' undeclared here (not in a function)
arch/arm/mach-s3c2440/mach-mini2440.c:230: warning: type defaults to 'int' in declaration of 'type name'
arch/arm/mach-s3c2440/mach-mini2440.c:230: warning: type defaults to 'int' in declaration of 'type name'
arch/arm/mach-s3c2440/mach-mini2440.c:230: error: negative width in bit-field '<anonymous>'
arch/arm/mach-s3c2440/mach-mini2440.c:230: warning: excess elements in struct initializer
arch/arm/mach-s3c2440/mach-mini2440.c:230: warning: (near initialization for 'mini2440_nand_info')
arch/arm/mach-s3c2440/mach-mini2440.c:231: error: unknown field 'sets' specified in initializer
arch/arm/mach-s3c2440/mach-mini2440.c:231: warning: excess elements in struct initializer
arch/arm/mach-s3c2440/mach-mini2440.c:231: warning: (near initialization for 'mini2440_nand_info')
arch/arm/mach-s3c2440/mach-mini2440.c:232: error: unknown field 'ignore_unset_ecc' specified in initializer
arch/arm/mach-s3c2440/mach-mini2440.c:232: warning: excess elements in struct initializer
arch/arm/mach-s3c2440/mach-mini2440.c:232: warning: (near initialization for 'mini2440_nand_info')
arch/arm/mach-s3c2440/mach-mini2440.c:237: error: redefinition of 'mini2440_devices'
arch/arm/mach-s3c2440/mach-mini2440.c:152: note: previous definition of 'mini2440_devices' was here
arch/arm/mach-s3c2440/mach-mini2440.c:240: error: expected expression before ',' token
make[1]: *** [arch/arm/mach-s3c2440/mach-mini2440.o] Error 1
make: *** [arch/arm/mach-s3c2440] Error 2
[root@sky linux-2.6.32.2]#
级别: 新手上路
UID: 41548
精华: 0
发帖: 6
金钱: 30 两
威望: 6 点
综合积分: 12 分
注册时间: 2011-03-30
最后登录: 2014-05-05
8楼  发表于: 2011-08-09 23:46
找到了,是没有头文件!
有人说过了!在arch/arm/mach-s3c2440/mach-mini2440.c中添加如下头文件:
#include <linux/mtd/mtd.h>
#include <linux/mtd/nand.h>
#include <linux/mtd/nand_ecc.h>
#include <linux/mtd/partitions.h>
#include <plat/nand.h>
编译是oK了,打了yaffs2的补丁,可是却还是不成成功!
级别: 新手上路
UID: 52685
精华: 0
发帖: 5
金钱: 25 两
威望: 5 点
综合积分: 10 分
注册时间: 2011-07-23
最后登录: 2017-07-08
9楼  发表于: 2011-09-26 14:05
内核源码也可以进行源码调试了。我用的是TKStuido4.0调试内核和内核模块,很爽。我的板子是2440.