前天做了个从ramdisk根文件系统启动Linux的实验,写了个帖子。经总版主kasim大侠的提携,得知现在基于Linux的发行版通常采用initramfs代替initrd,架构更简单,应用也更灵活一些。正好今天晚上没事,就做了一下使用initramfs启动Linux,写个帖子总结一下。
这个帖子不会详述具体的每一个步骤,仅仅说明它和使用ramdisk启动系统时所需要做的步骤的区别。事实上我也是在前天配置编译内核使用ramdisk启动系统的步骤的基础上改的。这里只总结使用initramfs和使用ramdisk各自配置内核选项的主要区别和遇到的一些问题。

参照我的另一个帖子合二为一的镜像就不再需要单独烧写根文件系统镜像了,相应的,启动内核时的参数就不需要添加initrd=……来指定initramfs的位置了。当然如果你不想将initramfs合并到内核中,直接用配置ramdisk的内核来启动系统即可,不过这时你就必须使用initrd=……来指定 initramfs的位置了,并且第二个参数initramfs根文件系统映像的大小必须指定为实际大小,否则提示映像校验错误,无法启动系统。

其它的就没有区别了。

-------------------------------------------------------------------
一切工作做好了,uImage和initramfs_data.cpio.gz都已经编译出来了。
用u-boot下载内核镜像和initramfs根文件系统镜像,此时启动系统,最终内核恐慌kernel panic启动失败。
在超级终端的最后一行显示错误如下:
Unpacking initramfs...<0>Kernel panic - not syncing: bad gzip magic numbers

上网查阅了相关的错误,解决方案如下:
“这个问题已经解决;


是因为,我在u-boot传递给内核的initrd=bufptr,size;
size这个参数中,大小比实际的initramfs的大小还大;
导致unpack_to_rootfs在调用gunzip进行initramfs压缩包进行解压时,gunzip无法判断到initramfs压缩包的结束地址;进行重复的解 压导致的;(gunzip这个东东真不智能啊,呵呵)

将size设置和initramfs压缩包的大小一致就OK了;”

如法炮制,系统启动成功。

相关文章:

  • 2022-12-23
  • 2021-09-08
  • 2022-12-23
  • 2022-12-23
  • 2021-06-16
  • 2021-05-11
  • 2022-12-23
  • 2021-11-29
猜你喜欢
  • 2022-12-23
  • 2021-05-14
  • 2021-09-23
  • 2022-02-10
  • 2021-10-28
  • 2021-07-13
  • 2022-01-17
相关资源
相似解决方案