当前位置: 技术问答>linux和unix
内核加载ramdisk失败(在线等,帮顶有分)
来源: 互联网 发布时间:2016-06-29
本文导语: 21.7内核加载ramdisk文件系统失败,以下为详情: 在内核menuconfig时: Initial RAM filesystem and RAM disk 选项为开; Initramfs source file选项为空; default bootloader kernel arguments选项为空 ramdisk制作过程: mkdir initrd ...
21.7内核加载ramdisk文件系统失败,以下为详情:
在内核menuconfig时:
Initial RAM filesystem and RAM disk 选项为开;
Initramfs source file选项为空;
default bootloader kernel arguments选项为空
ramdisk制作过程:
mkdir initrd
dd if=/dev/zero of=initrd.img bs=1k count=40960
mke2fs -F -v -m0 initrd.img
mount -o loop initrd.img initrd
cp -av rootfs/* initrd
sync
umount initrd
sync
gzip -f -9 initrd.img
sync
./mkimage -T ramdisk -C gzip -n 'MPC8572 Ramdisk Image' -d initrd.img.gz your.ramdisk.u-boot
uboot启动脚本为:
proc main
transmit "setenv serverip 192.168.1.102;"
transmit "setenv ipaddr 192.168.1.3;"
transmit "setenv bootargs root=/dev/ram rw console=ttyS0,115200;"
transmit "tftp 800000 mpc8572ds.dtb;"
transmit "tftp 700000 your.ramdisk.u-boot;"
transmit "tftp 500000 uImage;"
transmit "bootm 500000 700000 800000;"
endproc
内核启动后,加打印跟踪,发现:
内核启动至initramfs.c里面的 populate_rootfs 函数, 在该函数的
err = unpack_to_rootfs((char *)initrd_start,
initrd_end - initrd_start, 0);
这一个调用出错;
再跟进去,发现出错的地方在unpack_to_rootfs函数的
if (state != Reset) 这一句。
到此,我已经跟踪的精疲力尽,无法再跟踪下去了。
请问,到底会是哪里出问题,导致rootfs的解压失败?
谢谢!
在内核menuconfig时:
Initial RAM filesystem and RAM disk 选项为开;
Initramfs source file选项为空;
default bootloader kernel arguments选项为空
ramdisk制作过程:
mkdir initrd
dd if=/dev/zero of=initrd.img bs=1k count=40960
mke2fs -F -v -m0 initrd.img
mount -o loop initrd.img initrd
cp -av rootfs/* initrd
sync
umount initrd
sync
gzip -f -9 initrd.img
sync
./mkimage -T ramdisk -C gzip -n 'MPC8572 Ramdisk Image' -d initrd.img.gz your.ramdisk.u-boot
uboot启动脚本为:
proc main
transmit "setenv serverip 192.168.1.102;"
transmit "setenv ipaddr 192.168.1.3;"
transmit "setenv bootargs root=/dev/ram rw console=ttyS0,115200;"
transmit "tftp 800000 mpc8572ds.dtb;"
transmit "tftp 700000 your.ramdisk.u-boot;"
transmit "tftp 500000 uImage;"
transmit "bootm 500000 700000 800000;"
endproc
内核启动后,加打印跟踪,发现:
内核启动至initramfs.c里面的 populate_rootfs 函数, 在该函数的
err = unpack_to_rootfs((char *)initrd_start,
initrd_end - initrd_start, 0);
这一个调用出错;
再跟进去,发现出错的地方在unpack_to_rootfs函数的
if (state != Reset) 这一句。
到此,我已经跟踪的精疲力尽,无法再跟踪下去了。
请问,到底会是哪里出问题,导致rootfs的解压失败?
谢谢!
|
看看配置的RAMDISK大小。
如果内核太大,而ramdisk太小的话,可能无法顺利执行
如果内核太大,而ramdisk太小的话,可能无法顺利执行
|
bs=1k count=40960 这里block_size要和内核里面的设置一致,count也要和内核一致。
也可以在grub.conf里加上
kernel.......... ramdisk_size=40960
也可以在grub.conf里加上
kernel.......... ramdisk_size=40960
|
基本上kernel的代码出错的可能性很小,还是参数设置问题。
|
帮顶
|
也想知道,在哪里配置的?
|
UP
想知道
想知道
|
up
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。