linux3.4.2内核编译、加载、yaffs2挂载问题汇总

来源:互联网 发布:centos 用户管理 编辑:程序博客网 时间:2024/06/05 18:07

1 移植linux3.4.2内核,编译出现错误:

cc1: error: invalid option 'abi=aapcs-linux' 

出现错误原因:编译器的
解决:

(1)换编译器,如arm-linux-gcc-4.3.2,包含arm-none -linux-gnueabi-gcc

(2)make menuconfig  去掉Kernel Features->Use the ARM EABIto compile the kernel

建议换编译器,第二种方法虽然能解决,再编译还会遇到第2个问题

2 编译内核是出现:arch/arm/mm/tlb-v4wbi.S:64:error: too many positional arguments 

原因不明,解决:

用4.3.2内核make distclean 后重新make uImage

3 加载内核出现错误Error: Can't get kernel image

原因:

内核超过2m,uboot中参数

mtdparts=mtdparts=nandflash0:256k@0(bootloader),128k(params),2m(kernel),-(root)

bootcmd=nand read.jffs2 0x30007FC0 kernel; bootm 0x30007FC0

或者

bootcmd=nand read 30007fc0 60000 200000;bootm 30007fc0

在用tftp下载uImage之后,也只烧写了2m,如下

nand erase 60000 200000

tftp 30000000 uImage

nand write 30000000 60000 200000

所以内核在根据uImage的头部检查的时候,发现文件大小不对,出错

解决:

根据uImage大小,调整内核空间大小,比如烧写到60000-360000空间

nand write 30000000 60000 300000 $filesize

uboot的启动内核参数相应修改为:

set bootcmd 'nand read 30007fc0 60000 300000;bootm 30007fc0'

save

4 加载文件系统出错

drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
yaffs: dev is 32505859 name is "mtdblock3" rw
yaffs: passed flags ""
VFS: Mounted root (yaffs filesystem) on device 31:3.
Freeing init memory: 136K
Kernel panic - not syncing: No init found.  Try passing init= option to kernel. See Linux 
Documentation/init.txt for guidance.

uboot传递给内核参数:

bootargs=console=ttySAC0,115200 root=/dev/mtdblock3

由于内核空间调整,文件系统位置也要调整

原来内核启动:
Creating 4 MTD partitions on "NAND":
0x000000000000-0x000000040000 : "bootloader"
0x000000040000-0x000000060000 : "params"
0x000000060000-0x000000260000 : "kernel"
0x000000260000-0x000020000000 : "rootfs"

修改arch/arm/mach-s3c24xx/common-smdk.c中的nand mtd分区信息,使内核大小由

SZ_2M修改为SZ_4M。

内核输出变为

Creating 4 MTD partitions on "NAND":
0x000000000000-0x000000040000 : "bootloader"
0x000000040000-0x000000060000 : "params"
0x000000060000-0x000000460000 : "kernel"
0x000000460000-0x000020000000 : "rootfs"

擦除0x60000-0x20000000

重新烧写内核,然后烧写文件系统到0x460000

tftp 30000000 fs.yaffs2

nand write.yaffs 30000000 460000 $filesize

重新启动,挂载成功。

文件系统其实可以烧写到/dev/mtdblock3的任意位置,也就只要是0x460000之后的任意位置。

如0x500000 ,0x900000都可以。

0 0
原创粉丝点击