1、arm-eabi-ld:arch/arm/kernel/vmlinux.lds:335: ignoring invalid character `#' in expression
出现这个时一定要去看一下arch/arm/kernel/vmlinux.lds它的335行,因为看后是这样的
*/
//#define PLAT_PHYS_OFFSET UL(0x50000000)
/*
#号前面有个//,这是在头文件中注释了的,而它不被识别,导致编译内核失败,所以注释用"//"可能还是不太安全
2、WARNING: at drivers/gpio/gpiolib.c:101 gpio_ensure_requested+0x50/0x19c()
autorequest GPIO-24
Modules linked in:
[<c003ee00>] (unwind_backtrace+0x0/0xf8) from [<c0054858>] (warn_slowpath_common+0x4c/0x64)
[<c0054858>] (warn_slowpath_common+0x4c/0x64) from [<c0054904>] (warn_slowpath_fmt+0x30/0x40)
[<c0054904>] (warn_slowpath_fmt+0x30/0x40) from [<c022f6ac>] (gpio_ensure_requested+0x50/0x19c)
[<c022f6ac>] (gpio_ensure_requested+0x50/0x19c) from [<c022f99c>] (gpio_direction_output+0xa8/0x22c)
[<c022f99c>] (gpio_direction_output+0xa8/0x22c) from [<c02976fc>] (s3c64xx_spi_setup+0x14c/0x26c)
[<c02976fc>] (s3c64xx_spi_setup+0x14c/0x26c) from [<c0295f5c>] (spi_setup+0x40/0xe8)
[<c0295f5c>] (spi_setup+0x40/0xe8) from [<c0296284>] (spi_add_device+0x90/0x148)
[<c0296284>] (spi_add_device+0x90/0x148) from [<c02963b0>] (spi_new_device+0x74/0xac)
[<c02963b0>] (spi_new_device+0x74/0xac) from [<c0296408>] (spi_match_master_to_boardinfo+0x20/0x40)
[<c0296408>] (spi_match_master_to_boardinfo+0x20/0x40) from [<c029651c>] (spi_register_master+0xf4/0x15c)
[<c029651c>] (spi_register_master+0xf4/0x15c) from [<c001fed8>] (s3c64xx_spi_probe+0x378/0x488)
[<c001fed8>] (s3c64xx_spi_probe+0x378/0x488) from [<c0264670>] (platform_drv_probe+0x18/0x1c)
[<c0264670>] (platform_drv_probe+0x18/0x1c) from [<c02632ec>] (driver_probe_device+0x78/0x198)
[<c02632ec>] (driver_probe_device+0x78/0x198) from [<c0263498>] (__driver_attach+0x8c/0x90)
[<c0263498>] (__driver_attach+0x8c/0x90) from [<c0262b3c>] (bus_for_each_dev+0x60/0x8c)
[<c0262b3c>] (bus_for_each_dev+0x60/0x8c) from [<c0262390>] (bus_add_driver+0xb0/0x254)
[<c0262390>] (bus_add_driver+0xb0/0x254) from [<c0263a5c>] (driver_register+0x6c/0x154)
[<c0263a5c>] (driver_register+0x6c/0x154) from [<c0264a90>] (platform_driver_probe+0x18/0x9c)
[<c0264a90>] (platform_driver_probe+0x18/0x9c) from [<c0033380>] (do_one_initcall+0x34/0x17c)
[<c0033380>] (do_one_initcall+0x34/0x17c) from [<c00083b0>] (kernel_init+0xa0/0x150)
[<c00083b0>] (kernel_init+0xa0/0x150) from [<c0039818>] (kernel_thread_exit+0x0/0x8)
这是因为SPI的片选管脚在使用前没有申请造成的,在 arch/arm/mach-s3c64xx/mach-smdk6410.c 中的 static void __init smdk6410_machine_init(void)中增加以下代码
gpio_request(s3c64xx_spi1_csinfo.line, NULL); //加入此段代码
s3c64xx_spi_set_info(0,0,1);
s3c64xx_spi_set_info(1,0,1);
}
3、List of all partitions:
1f00 1024 mtdblock0 (driver?)
1f01 5120 mtdblock1 (driver?)
1f02 204800 mtdblock2 (driver?)
enter s3c64xx_setup_sdhci1_cfg_gpio
1f03 1886208 mtdblock3 (driver?)
No filesystem could mount root, tried: yaffs2
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,2)
这个问题是由于nand驱动没有移植好。
4、devtmpfs: error mounting -2,Failed to execute /linuxrc. Attempting defaults...
这个问题是由于yaffs2没有移植好,需要用老版的yaffs2才行,移植原开发板的yaffs2到新内核中
移值中的问题:
fs/yaffs2/yaffs_vfs.c:440: warning: initialization from incompatible pointer type
fs/yaffs2/yaffs_vfs.c:441: warning: initialization from incompatible pointer type
fs/yaffs2/yaffs_vfs.c:445: warning: initialization from incompatible pointer type
fs/yaffs2/yaffs_vfs.c:447: warning: initialization from incompatible pointer type
fs/yaffs2/yaffs_vfs.c:480: error: unknown field 'write_super' specified in initializer
fs/yaffs2/yaffs_vfs.c:480: warning: initialization from incompatible pointer type
fs/yaffs2/yaffs_vfs.c: In function 'yaffs_evict_inode':
fs/yaffs2/yaffs_vfs.c:875: error: implicit declaration of function 'end_writeback'
fs/yaffs2/yaffs_vfs.c: In function 'yaffs_do_sync_fs':
fs/yaffs2/yaffs_vfs.c:2205: error: 'struct super_block' has no member named 's_dirt'
fs/yaffs2/yaffs_vfs.c:2216: error: 'struct super_block' has no member named 's_dirt'
fs/yaffs2/yaffs_vfs.c:2218: error: 'struct super_block' has no member named 's_dirt'
fs/yaffs2/yaffs_vfs.c: In function 'yaffs_mtd_put_super':
fs/yaffs2/yaffs_vfs.c:2514: error: 'struct mtd_info' has no member named 'sync'
fs/yaffs2/yaffs_vfs.c:2515: error: 'struct mtd_info' has no member named 'sync'
fs/yaffs2/yaffs_vfs.c: In function 'yaffs_touch_super':
fs/yaffs2/yaffs_vfs.c:2526: error: 'struct super_block' has no member named 's_dirt'
fs/yaffs2/yaffs_vfs.c: In function 'yaffs_internal_read_super':
fs/yaffs2/yaffs_vfs.c:2702: error: 'struct mtd_info' has no member named 'erase'
fs/yaffs2/yaffs_vfs.c:2703: error: 'struct mtd_info' has no member named 'read'
fs/yaffs2/yaffs_vfs.c:2704: error: 'struct mtd_info' has no member named 'write'
fs/yaffs2/yaffs_vfs.c:2705: error: 'struct mtd_info' has no member named 'read_oob'
fs/yaffs2/yaffs_vfs.c:2706: error: 'struct mtd_info' has no member named 'write_oob'
fs/yaffs2/yaffs_vfs.c:2707: error: 'struct mtd_info' has no member named 'block_isbad'
fs/yaffs2/yaffs_vfs.c:2708: error: 'struct mtd_info' has no member named 'block_markbad'
fs/yaffs2/yaffs_vfs.c:2732: error: 'struct mtd_info' has no member named 'erase'
fs/yaffs2/yaffs_vfs.c:2733: error: 'struct mtd_info' has no member named 'block_isbad'
fs/yaffs2/yaffs_vfs.c:2734: error: 'struct mtd_info' has no member named 'block_markbad'
fs/yaffs2/yaffs_vfs.c:2734: error: 'struct mtd_info' has no member named 'read'
fs/yaffs2/yaffs_vfs.c:2734: error: 'struct mtd_info' has no member named 'write'
fs/yaffs2/yaffs_vfs.c:2736: error: 'struct mtd_info' has no member named 'read_oob'
fs/yaffs2/yaffs_vfs.c:2736: error: 'struct mtd_info' has no member named 'write_oob'
fs/yaffs2/yaffs_vfs.c:2757: error: 'struct mtd_info' has no member named 'erase'
fs/yaffs2/yaffs_vfs.c:2757: error: 'struct mtd_info' has no member named 'read'
fs/yaffs2/yaffs_vfs.c:2757: error: 'struct mtd_info' has no member named 'write'
fs/yaffs2/yaffs_vfs.c:2759: error: 'struct mtd_info' has no member named 'read_oob'
fs/yaffs2/yaffs_vfs.c:2759: error: 'struct mtd_info' has no member named 'write_oob'
fs/yaffs2/yaffs_vfs.c:2967: error: implicit declaration of function 'd_alloc_root'
fs/yaffs2/yaffs_vfs.c:2967: warning: assignment makes pointer from integer without a cast
fs/yaffs2/yaffs_vfs.c:2976: error: 'struct super_block' has no member named 's_dirt'
struct mtd_info定义的函数前都加了下划线,如mtd->sync应改为mtd->_sync
if (mtd->_sync)
mtd->_sync(mtd);
yaffs_trace(YAFFS_TRACE_OS, " erase %p", mtd->_erase);
yaffs_trace(YAFFS_TRACE_OS, " read %p", mtd->_read);
yaffs_trace(YAFFS_TRACE_OS, " write %p", mtd->_write);
yaffs_trace(YAFFS_TRACE_OS, " readoob %p", mtd->_read_oob);
yaffs_trace(YAFFS_TRACE_OS, " writeoob %p", mtd->_write_oob);
yaffs_trace(YAFFS_TRACE_OS, " block_isbad %p", mtd->_block_isbad);
yaffs_trace(YAFFS_TRACE_OS, " block_markbad %p", mtd->_block_markbad);
下面的错误
fs/yaffs2/yaffs_vfs.c:480: error: unknown field 'write_super' specified in initializer
fs/yaffs2/yaffs_vfs.c:875: error: implicit declaration of function 'end_writeback'
fs/yaffs2/yaffs_vfs.c:2205: error: 'struct super_block' has no member named 's_dirt'
fs/yaffs2/yaffs_vfs.c:2216: error: 'struct super_block' has no member named 's_dirt'
fs/yaffs2/yaffs_vfs.c:2218: error: 'struct super_block' has no member named 's_dirt'
fs/yaffs2/yaffs_vfs.c:2514: error: 'struct mtd_info' has no member named 'sync'
fs/yaffs2/yaffs_vfs.c:2515: error: 'struct mtd_info' has no member named 'sync'
fs/yaffs2/yaffs_vfs.c:2526: error: 'struct super_block' has no member named 's_dirt'
fs/yaffs2/yaffs_vfs.c:2967: error: implicit declaration of function 'd_alloc_root'
fs/yaffs2/yaffs_vfs.c:2976: error: 'struct super_block' has no member named 's_dirt'
s/yaffs2/yaffs_vfs.c:480: error: unknown field 'write_super'specified in initializer
在include/linux/fs.h中的struct super_operations定义添加void (*write_super) (struct super_block *); struct super_block中添加unsigned char s_dirt;
end_writeback换成clear_inode,d_alloc_root换成d_make_root
yaffs_mtdif1.c: ‘MTD_OOB_AUTO’未声明,换成MTD_OPS_AUTO_OOB
5、VFS: Cannot open root device "mtdblock2" or unknown-block(31,2): error -19
Please append a correct "root=" boot option; here are the available
-19是因为没加yaffs2,在内核中添加yaffs2支持就可以了
待续。。。