【发布时间】:2014-03-14 09:15:21
【问题描述】:
我正在使用自己的内核和软件构建自己的基于 Debian 的 Linux。 make-process 的最后一个步骤必须在 chrooted 环境中完成:
- 使用 dpkg 安装自定义内核
- 创建指向内核和 initrd.img 的符号链接
- 执行 ldconfig
- 使用 plymouth 为初始屏幕设置我的自定义主题
- 更新 initrd.img
虽然内核安装成功并且符号链接被正确创建,但所有其他命令似乎都不起作用。如果我启动到系统,启动画面设置为默认值,并且 initrd.img 找不到 HDD 或内核。因此,在 dpkg 安装过程中更新 initrd.img 似乎以某种方式失败。设置主题的普利茅斯脚本也不起作用。
为了解决这个问题,我手动 chroot 进入系统并执行以下操作:
- 使用 plymouth 为启动画面设置我的自定义主题
- 执行 ldconfig
- 更新 initrd.img
这工作得很好。下次我启动系统时,会显示我的初始屏幕,并且一切正常启动。
这是我在 Makefile 中完成此操作的方法:
cp $(INTEGRATION_KERNEL_IMAGE) $(ROOTFS)/tmp/kernel.deb
cd $(ROOTFS); /usr/bin/sudo /bin/mount -t proc proc proc/; /usr/bin/sudo /bin/mount -t sysfs sys sys/; /usr/bin/sudo /bin/mount -o bind /dev dev/
/usr/sbin/chroot --userspec=0:0 $(ROOTFS) /usr/bin/env -i PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin HOME=/root bash -c "/usr/bin/dpkg --force-not-root -i /tmp/kernel.deb"
/usr/sbin/chroot --userspec=0:0 $(ROOTFS) /usr/bin/env -i PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin HOME=/root bash -c "/bin/ln -nsf vmlinuz-3.2.54-rt75custom /boot/vmlinuz"
/usr/sbin/chroot --userspec=0:0 $(ROOTFS) /usr/bin/env -i PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin HOME=/root bash -c "/bin/ln -nsf initrd.img-3.2.54-rt75custom /boot/initrd.img"
/usr/sbin/chroot --userspec=0:0 $(ROOTFS) /usr/bin/env -i PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin HOME=/root bash -c "/sbin/ldconfig"
/usr/sbin/chroot --userspec=0:0 $(ROOTFS) /usr/bin/env -i PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin HOME=/root bash -c "/bin/bash /usr/sbin/plymouth-set-default-theme my_theme"
/usr/sbin/chroot --userspec=0:0 $(ROOTFS) /usr/bin/env -i PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin HOME=/root bash -c "/bin/bash /usr/sbin/update-initramfs -u"
/usr/bin/sudo /bin/umount $(ROOTFS)/proc; /usr/bin/sudo /bin/umount $(ROOTFS)/sys; /usr/bin/sudo /bin/umount $(ROOTFS)/dev
make 的输出没有提供关于此主题的任何错误。好吧,它可能无法做到这一点,因为 make 不知道 chrooted 环境中发生了什么。但是我怎样才能找出问题所在呢?
一种可能的解决方法是将我上面提到的所有内容都放在一个 shell 脚本中,然后在 chrooted 环境中执行。但我更愿意在 Makefile 中做所有事情,我不知道解决方法是否真的有效。我还没有验证这一点。
【问题讨论】:
标签: linux makefile debian splash-screen chroot