Linux内核在运行时的一些问题

1. 问题一
  下载内核到flash中,运行到如下即停止没有下文:
Uncompressing Linux……………………done,booting the kernel
卡在这里不动了
原因分析:
可能是内核的启动参数传递时没有填写正确
也可能是在linux内核中没对flash分区
还有另一可能原因是在内核编译配置时没将串口驱动勾选
解决办法:
如果是命令参数问题,则作如下修改:注释掉arch/arm/kernel/setup.c文件中的parse_tag_cmdline()函数中的 strlcpy()函数,这样就可以使用默认的CONFIG_CMDLINE了,在.config文件中它被定义为"root=/dev /mtdblock2 ro init=/linuxrc console=ttySAC0,115200"(视具体情况而定),在内核配置文件的Boot options中填入也可。
如果是内核NAND flash分区的问题,则作如下修改:
1. 1 修改文件arch/arm/mach-s3c2410/devs.c,添加如下信息:
#include <linux/mtd/partitions.h>
#include <asm/arch/nand.h>
#include <linux/mtd/nand.h>
static struct mtd_partition partition_info[]=
{
{
name:"bootloader",
size:0x00040000,
offset:0,
},
{
name:"kernel",
size:0x001c0000,
offset:0x00040000,
},
{
name:"rootfs",
size: 0x01e00000,
offset:0x00200000,
},
{
name:"ext-fs1",
size: 0x01000000,
offset:0x02000000,
},
{
name:"ext-fs2",
size: 0x01000000,
offset:0x03000000,
},
};
//以上分区和NAND flash物理分区一样,分区不一样没试过,根据自己板子情况而定
struct s3c2410_nand_set nandset=
{
nr_partitions:5,
partitions:partition_info,
};
struct s3c2410_platform_nand s3c_nand_info=
{
tacls:0,
twrph0:30,
twrph1:0,
sets:&nandset,
nr_sets:1,
};
以上分区和NAND flash物理分区一样,分区不一样没试过,根据自己板子情况而定
struct s3c2410_nand_set nandset=
{
nr_partitions:5,
partitions:partition_info,
};
struct s3c2410_platform_nand s3c_nand_info=
{
tacls:0,
twrph0:30,
twrph1:0,
sets:&nandset,
nr_sets:1,
};
struct platform_device s3c_device_nand={
.name="s3c2410-nand",
.id = -1,
.num_resources = ARRAY_SIZE(s3c_nand_resources),
.resource = s3c_nand_resource, /*黑体为新加内容*/
.dev = {
.platform_data=&s3c_nand_info
}
};
1.2 在arch/arm/mach-s3c2410/mach-smdk2410.c文件中添加&s3c_device_nand,如下所示:
static struct platform_device * smdk2410_device[] _initdata=
{
&s3c_device_usb,
&s3c_device_lcd,
&s3c_device_wdt,
&s3c_device_i2c,
&s3c_device_iis,
&s3c_device_nand,
};
配置好以上内容后重新编译内核即可。
如果是串口驱动没有勾选,则一定记住将勾上如下选项:
Character devices
-> Serial Drivers下的项全勾上.

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/25650.html