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下的项全勾上.
Please append a correct “root=” boot option.
Kernel panic not syncing,VFS Unable to mount root fs on unknown-block(0,0)
原因分析:出现这种情况一般有两种情况:没有文件系统或boot options参数不正确,如我的系统文件系统为cramfs格式,存放文件系统的分区为第三个分区,启动参数为:
“noinitrd root=/dev/mtdblock2 ro init=/linuxrc console=ttySAC0,115200 rootfstype=cramfs mem=64M”
其中文件系统使用busybox-1.10.1制作
重新编译即可。
3. 系统启动后出现如下错误:
Kernel panic -not syncing:VFS:Unable to mount root fs on unknown-block(31,2)
或者类似的错误。
原因分析:我在这里耗了大量的时间,这种情况一般是NAND flash分区未能分正确,或者所在的分区上没有文件系统,当启动中出现类似如下信息时表明分区正确了
Scanning device for bad blocks
Creating 5 MTD partitions on “NAND 64MiB 3,3V 8-bit”:
0x00000000-0x00040000 : “boot”
mtd: Giving out device 0 to boot
0x00040000-0x00200000 : “kernel”
mtd: Giving out device 1 to kernel
0x00200000-0x02000000 : “rootfs”
mtd: Giving out device 2 to rootfs
0x02000000-0x03000000 : “ext-fs1”
mtd: Giving out device 3 to ext-fs1
0x03000000-0x04000000 : “ext-fs2”
mtd: Giving out device 4 to ext-fs2
从上面看出我的文件系统放在第三个分区rootfs上,其设备号为2,启动后文件系统能挂上,如下所示
Reading data from NAND FLASH without ECC is not recommended
the error code is:0,name=/dev/root,fs=cramfs,flags=32769
VFS: Mounted root (cramfs filesystem) readonly.
Freeing init memory: 104K
Reading data from NAND FLASH without ECC is not recommended
init started: BusyBox v1.10.1 (2008-04-23 23:20:41 CST)
starting pid 229, tty ”: ‘/etc/init.d/rcS’
Reading data from NAND FLASH without ECC is not recommended
the error code is:0,name=/dev/root,fs=cramfs,flags=32769
VFS: Mounted root (cramfs filesystem) readonly.
Freeing init memory: 104K
Reading data from NAND FLASH without ECC is not recommended
init started: BusyBox v1.10.1 (2008-04-23 23:20:41 CST)
starting pid 229, tty ”: ‘/etc/init.d/rcS’
Please press Enter to activate this console.
4. 系统启动到到如下语句即停止不前,停在那里:
VFS:Mounted root (cramfs filesystem) readonly.
Freeing init memory:104
卡在这里没有下文
原因分析:系统在启用init函数时有这么一句,粗体所示
static int init(void * unused)
{
if(execute_command)
{
run_init_process(execute_command);
}
………………
}
在这句里面出错就会没有下文
解决办法:在配置内核时少选了几句,将如下选择全选上
Floating Point emulation
->At least one emulation must be selected:
NWFPE math emulation
Support extended precision
FastFPE math emulation(EXPERIMENTAL)
5. 关于文件系统问题:在有些资料上提到在配置内核时选上devfs,如果不存在时则手动在文件里加上。但我在内核里面和busybox-1.10.1中都未加devfs支持,文件系统运行正常。在linux-2.6.14.1及以后版本中已去掉devfs。
6. linux-2.6.15.4这个版本也能成功在s3c2410上运行.